@mcp-use/inspector 0.9.0-canary.2 → 0.9.0-canary.4
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/dist/client/assets/{browser-B7TIAiNJ.js → browser-CwknRi82.js} +7 -7
- package/dist/client/assets/{display-A5IEINAP-CxMIzbGz.js → display-A5IEINAP-DNDlZQ8k.js} +3 -3
- package/dist/client/assets/{embeddings-CF86nH4i.js → embeddings-DSM58WFd.js} +1 -1
- package/dist/client/assets/{index-cuGVED_J.js → index-BWKKRrN4.js} +1 -1
- package/dist/client/assets/{index-BLXuIjh0.js → index-BumNh2YP.js} +2 -2
- package/dist/client/assets/{index-B8yt0GKw.js → index-D-pAR_RA.js} +16808 -16808
- package/dist/client/assets/{index-DoWSnGj3.js → index-DD0wWmuA.js} +4 -4
- package/dist/client/assets/{index-BaR5HKmC.js → index-DEA0KU_h.js} +870 -386
- package/dist/client/assets/{index-RN6yjAFG.js → index-DctLeaKS.js} +2 -2
- package/dist/client/assets/{index-CV9pPOH9.js → index-DgPlosep.js} +3 -3
- package/dist/client/assets/{index-BCYl76Jb.js → index-DiEpOjl1.js} +2 -2
- package/dist/client/assets/{winston-nzaZqgVL.js → winston-B_texDHP.js} +727 -140
- package/dist/client/index.html +2 -2
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/winston-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/winston-B_texDHP.js","assets/util-D59LNlyU.js","assets/__vite-browser-external-CHS79mP1.js","assets/index-DX0TIfSM.js","assets/path-QsnVvLoj.js","assets/index-DD0wWmuA.js","assets/index-D-pAR_RA.js","assets/index-BumNh2YP.js","assets/embeddings-DSM58WFd.js","assets/index-DiEpOjl1.js","assets/index-DgPlosep.js","assets/browser-CwknRi82.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
@@ -186,26 +186,6 @@ var __require = /* @__PURE__ */ ((x2) => typeof require !== "undefined" ? requir
|
|
|
186
186
|
throw Error('Dynamic require of "' + x2 + '" is not supported');
|
|
187
187
|
});
|
|
188
188
|
var define_process_env_default$2 = {};
|
|
189
|
-
var isDeno = typeof globalThis.Deno !== "undefined";
|
|
190
|
-
function getEnv(key) {
|
|
191
|
-
if (isDeno) {
|
|
192
|
-
return globalThis.Deno.env.get(key);
|
|
193
|
-
}
|
|
194
|
-
return define_process_env_default$2[key];
|
|
195
|
-
}
|
|
196
|
-
__name(getEnv, "getEnv");
|
|
197
|
-
function getCwd() {
|
|
198
|
-
if (isDeno) {
|
|
199
|
-
return globalThis.Deno.cwd();
|
|
200
|
-
}
|
|
201
|
-
return process.cwd();
|
|
202
|
-
}
|
|
203
|
-
__name(getCwd, "getCwd");
|
|
204
|
-
function generateUUID() {
|
|
205
|
-
return globalThis.crypto.randomUUID();
|
|
206
|
-
}
|
|
207
|
-
__name(generateUUID, "generateUUID");
|
|
208
|
-
var define_process_env_default$1 = {};
|
|
209
189
|
async function getNodeModules() {
|
|
210
190
|
if (typeof process !== "undefined" && "browser") {
|
|
211
191
|
try {
|
|
@@ -231,7 +211,7 @@ function loadWinstonSync() {
|
|
|
231
211
|
__name(loadWinstonSync, "loadWinstonSync");
|
|
232
212
|
async function getWinston() {
|
|
233
213
|
if (!winston) {
|
|
234
|
-
winston = await __vitePreload(() => import("./winston-
|
|
214
|
+
winston = await __vitePreload(() => import("./winston-B_texDHP.js").then((n2) => n2.w), true ? __vite__mapDeps([0,1,2,3,4]) : void 0);
|
|
235
215
|
}
|
|
236
216
|
return winston;
|
|
237
217
|
}
|
|
@@ -321,7 +301,7 @@ var SimpleConsoleLogger = (_a2 = class {
|
|
|
321
301
|
}
|
|
322
302
|
}, __name(_a2, "SimpleConsoleLogger"), _a2);
|
|
323
303
|
function resolveLevel(env) {
|
|
324
|
-
const envValue = typeof process !== "undefined" && define_process_env_default$
|
|
304
|
+
const envValue = typeof process !== "undefined" && define_process_env_default$2 ? env : void 0;
|
|
325
305
|
switch (envValue?.trim()) {
|
|
326
306
|
case "2":
|
|
327
307
|
return "debug";
|
|
@@ -336,7 +316,7 @@ var Logger = (_b = class {
|
|
|
336
316
|
static get(name = DEFAULT_LOGGER_NAME) {
|
|
337
317
|
if (!isNodeJSEnvironment()) {
|
|
338
318
|
if (!this.simpleInstances[name]) {
|
|
339
|
-
const debugEnv = typeof process !== "undefined" && define_process_env_default$
|
|
319
|
+
const debugEnv = typeof process !== "undefined" && define_process_env_default$2?.DEBUG || void 0;
|
|
340
320
|
this.simpleInstances[name] = new SimpleConsoleLogger(
|
|
341
321
|
name,
|
|
342
322
|
resolveLevel(debugEnv)
|
|
@@ -351,7 +331,7 @@ var Logger = (_b = class {
|
|
|
351
331
|
const { createLogger, format: format2 } = winston;
|
|
352
332
|
const { combine, timestamp, label, colorize, splat } = format2;
|
|
353
333
|
this.instances[name] = createLogger({
|
|
354
|
-
level: resolveLevel(define_process_env_default$
|
|
334
|
+
level: resolveLevel(define_process_env_default$2.DEBUG),
|
|
355
335
|
format: combine(
|
|
356
336
|
colorize(),
|
|
357
337
|
splat(),
|
|
@@ -392,7 +372,7 @@ var Logger = (_b = class {
|
|
|
392
372
|
}
|
|
393
373
|
static async configure(options = {}) {
|
|
394
374
|
const { level, console: console2 = true, file, format: format2 = "minimal" } = options;
|
|
395
|
-
const debugEnv = typeof process !== "undefined" && define_process_env_default$
|
|
375
|
+
const debugEnv = typeof process !== "undefined" && define_process_env_default$2?.DEBUG || void 0;
|
|
396
376
|
const resolvedLevel = level ?? resolveLevel(debugEnv);
|
|
397
377
|
this.currentFormat = format2;
|
|
398
378
|
if (!isNodeJSEnvironment()) {
|
|
@@ -450,8 +430,8 @@ var Logger = (_b = class {
|
|
|
450
430
|
logger2.level = level;
|
|
451
431
|
}
|
|
452
432
|
});
|
|
453
|
-
if (typeof process !== "undefined" && define_process_env_default$
|
|
454
|
-
define_process_env_default$
|
|
433
|
+
if (typeof process !== "undefined" && define_process_env_default$2) {
|
|
434
|
+
define_process_env_default$2.DEBUG = enabled ? enabled === true ? "2" : String(enabled) : "0";
|
|
455
435
|
}
|
|
456
436
|
}
|
|
457
437
|
static setFormat(format2) {
|
|
@@ -1051,7 +1031,7 @@ const _safeParse = (_Err) => (schema2, value, _ctx) => {
|
|
|
1051
1031
|
error: new (_Err ?? $ZodError)(result.issues.map((iss) => finalizeIssue(iss, ctx, config())))
|
|
1052
1032
|
} : { success: true, data: result.value };
|
|
1053
1033
|
};
|
|
1054
|
-
const safeParse$
|
|
1034
|
+
const safeParse$2 = /* @__PURE__ */ _safeParse($ZodRealError);
|
|
1055
1035
|
const _safeParseAsync = (_Err) => async (schema2, value, _ctx) => {
|
|
1056
1036
|
const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
|
|
1057
1037
|
let result = schema2._zod.run({ value, issues: [] }, ctx);
|
|
@@ -1668,7 +1648,7 @@ const $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
|
|
|
1668
1648
|
inst["~standard"] = {
|
|
1669
1649
|
validate: (value) => {
|
|
1670
1650
|
try {
|
|
1671
|
-
const r2 = safeParse$
|
|
1651
|
+
const r2 = safeParse$2(inst, value);
|
|
1672
1652
|
return r2.success ? { value: r2.data } : { issues: r2.error?.issues };
|
|
1673
1653
|
} catch (_2) {
|
|
1674
1654
|
return safeParseAsync$1(inst, value).then((r2) => r2.success ? { value: r2.data } : { issues: r2.error?.issues });
|
|
@@ -1735,10 +1715,10 @@ const $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => {
|
|
|
1735
1715
|
inst._zod.check = (payload) => {
|
|
1736
1716
|
try {
|
|
1737
1717
|
const trimmed = payload.value.trim();
|
|
1738
|
-
const
|
|
1718
|
+
const url2 = new URL(trimmed);
|
|
1739
1719
|
if (def.hostname) {
|
|
1740
1720
|
def.hostname.lastIndex = 0;
|
|
1741
|
-
if (!def.hostname.test(
|
|
1721
|
+
if (!def.hostname.test(url2.hostname)) {
|
|
1742
1722
|
payload.issues.push({
|
|
1743
1723
|
code: "invalid_format",
|
|
1744
1724
|
format: "url",
|
|
@@ -1752,7 +1732,7 @@ const $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => {
|
|
|
1752
1732
|
}
|
|
1753
1733
|
if (def.protocol) {
|
|
1754
1734
|
def.protocol.lastIndex = 0;
|
|
1755
|
-
if (!def.protocol.test(
|
|
1735
|
+
if (!def.protocol.test(url2.protocol.endsWith(":") ? url2.protocol.slice(0, -1) : url2.protocol)) {
|
|
1756
1736
|
payload.issues.push({
|
|
1757
1737
|
code: "invalid_format",
|
|
1758
1738
|
format: "url",
|
|
@@ -1765,7 +1745,7 @@ const $ZodURL = /* @__PURE__ */ $constructor("$ZodURL", (inst, def) => {
|
|
|
1765
1745
|
}
|
|
1766
1746
|
}
|
|
1767
1747
|
if (def.normalize) {
|
|
1768
|
-
payload.value =
|
|
1748
|
+
payload.value = url2.href;
|
|
1769
1749
|
} else {
|
|
1770
1750
|
payload.value = trimmed;
|
|
1771
1751
|
}
|
|
@@ -3479,7 +3459,7 @@ const ZodRealError = /* @__PURE__ */ $constructor("ZodError", initializer, {
|
|
|
3479
3459
|
});
|
|
3480
3460
|
const parse$1 = /* @__PURE__ */ _parse(ZodRealError);
|
|
3481
3461
|
const parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
|
|
3482
|
-
const safeParse = /* @__PURE__ */ _safeParse(ZodRealError);
|
|
3462
|
+
const safeParse$1 = /* @__PURE__ */ _safeParse(ZodRealError);
|
|
3483
3463
|
const safeParseAsync = /* @__PURE__ */ _safeParseAsync(ZodRealError);
|
|
3484
3464
|
const encode$1 = /* @__PURE__ */ _encode(ZodRealError);
|
|
3485
3465
|
const decode$1 = /* @__PURE__ */ _decode(ZodRealError);
|
|
@@ -3509,7 +3489,7 @@ const ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
|
|
|
3509
3489
|
return inst;
|
|
3510
3490
|
});
|
|
3511
3491
|
inst.parse = (data2, params) => parse$1(inst, data2, params, { callee: inst.parse });
|
|
3512
|
-
inst.safeParse = (data2, params) => safeParse(inst, data2, params);
|
|
3492
|
+
inst.safeParse = (data2, params) => safeParse$1(inst, data2, params);
|
|
3513
3493
|
inst.parseAsync = async (data2, params) => parseAsync(inst, data2, params, { callee: inst.parseAsync });
|
|
3514
3494
|
inst.safeParseAsync = async (data2, params) => safeParseAsync(inst, data2, params);
|
|
3515
3495
|
inst.spa = inst.safeParseAsync;
|
|
@@ -3637,6 +3617,9 @@ const ZodURL = /* @__PURE__ */ $constructor("ZodURL", (inst, def) => {
|
|
|
3637
3617
|
$ZodURL.init(inst, def);
|
|
3638
3618
|
ZodStringFormat.init(inst, def);
|
|
3639
3619
|
});
|
|
3620
|
+
function url(params) {
|
|
3621
|
+
return _url$1(ZodURL, params);
|
|
3622
|
+
}
|
|
3640
3623
|
const ZodEmoji = /* @__PURE__ */ $constructor("ZodEmoji", (inst, def) => {
|
|
3641
3624
|
$ZodEmoji.init(inst, def);
|
|
3642
3625
|
ZodStringFormat.init(inst, def);
|
|
@@ -3812,6 +3795,14 @@ function object(shape, params) {
|
|
|
3812
3795
|
};
|
|
3813
3796
|
return new ZodObject(def);
|
|
3814
3797
|
}
|
|
3798
|
+
function looseObject(shape, params) {
|
|
3799
|
+
return new ZodObject({
|
|
3800
|
+
type: "object",
|
|
3801
|
+
shape,
|
|
3802
|
+
catchall: unknown(),
|
|
3803
|
+
...normalizeParams(params)
|
|
3804
|
+
});
|
|
3805
|
+
}
|
|
3815
3806
|
const ZodUnion = /* @__PURE__ */ $constructor("ZodUnion", (inst, def) => {
|
|
3816
3807
|
$ZodUnion.init(inst, def);
|
|
3817
3808
|
ZodType.init(inst, def);
|
|
@@ -4077,6 +4068,9 @@ function refine(fn, _params = {}) {
|
|
|
4077
4068
|
function superRefine(fn) {
|
|
4078
4069
|
return _superRefine(fn);
|
|
4079
4070
|
}
|
|
4071
|
+
function preprocess(fn, schema2) {
|
|
4072
|
+
return pipe$1(transform(fn), schema2);
|
|
4073
|
+
}
|
|
4080
4074
|
const ZodIssueCode = {
|
|
4081
4075
|
custom: "custom"
|
|
4082
4076
|
};
|
|
@@ -4086,13 +4080,13 @@ const JSONRPC_VERSION = "2.0";
|
|
|
4086
4080
|
const AssertObjectSchema = custom((v2) => v2 !== null && (typeof v2 === "object" || typeof v2 === "function"));
|
|
4087
4081
|
const ProgressTokenSchema = union([string(), number$1().int()]);
|
|
4088
4082
|
const CursorSchema = string();
|
|
4089
|
-
const RequestMetaSchema =
|
|
4083
|
+
const RequestMetaSchema = looseObject({
|
|
4090
4084
|
/**
|
|
4091
4085
|
* If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.
|
|
4092
4086
|
*/
|
|
4093
4087
|
progressToken: ProgressTokenSchema.optional()
|
|
4094
|
-
})
|
|
4095
|
-
const BaseRequestParamsSchema =
|
|
4088
|
+
});
|
|
4089
|
+
const BaseRequestParamsSchema = looseObject({
|
|
4096
4090
|
/**
|
|
4097
4091
|
* See [General fields: `_meta`](/specification/draft/basic/index#meta) for notes on `_meta` usage.
|
|
4098
4092
|
*/
|
|
@@ -4100,9 +4094,9 @@ const BaseRequestParamsSchema = object({
|
|
|
4100
4094
|
});
|
|
4101
4095
|
const RequestSchema = object({
|
|
4102
4096
|
method: string(),
|
|
4103
|
-
params: BaseRequestParamsSchema.
|
|
4097
|
+
params: BaseRequestParamsSchema.optional()
|
|
4104
4098
|
});
|
|
4105
|
-
const NotificationsParamsSchema =
|
|
4099
|
+
const NotificationsParamsSchema = looseObject({
|
|
4106
4100
|
/**
|
|
4107
4101
|
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
|
|
4108
4102
|
* for notes on _meta usage.
|
|
@@ -4111,24 +4105,26 @@ const NotificationsParamsSchema = object({
|
|
|
4111
4105
|
});
|
|
4112
4106
|
const NotificationSchema = object({
|
|
4113
4107
|
method: string(),
|
|
4114
|
-
params: NotificationsParamsSchema.
|
|
4108
|
+
params: NotificationsParamsSchema.optional()
|
|
4115
4109
|
});
|
|
4116
|
-
const ResultSchema =
|
|
4110
|
+
const ResultSchema = looseObject({
|
|
4117
4111
|
/**
|
|
4118
4112
|
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
|
|
4119
4113
|
* for notes on _meta usage.
|
|
4120
4114
|
*/
|
|
4121
4115
|
_meta: record(string(), unknown()).optional()
|
|
4122
|
-
})
|
|
4116
|
+
});
|
|
4123
4117
|
const RequestIdSchema = union([string(), number$1().int()]);
|
|
4124
4118
|
const JSONRPCRequestSchema = object({
|
|
4125
4119
|
jsonrpc: literal(JSONRPC_VERSION),
|
|
4126
|
-
id: RequestIdSchema
|
|
4127
|
-
|
|
4120
|
+
id: RequestIdSchema,
|
|
4121
|
+
...RequestSchema.shape
|
|
4122
|
+
}).strict();
|
|
4128
4123
|
const isJSONRPCRequest = (value) => JSONRPCRequestSchema.safeParse(value).success;
|
|
4129
4124
|
const JSONRPCNotificationSchema = object({
|
|
4130
|
-
jsonrpc: literal(JSONRPC_VERSION)
|
|
4131
|
-
|
|
4125
|
+
jsonrpc: literal(JSONRPC_VERSION),
|
|
4126
|
+
...NotificationSchema.shape
|
|
4127
|
+
}).strict();
|
|
4132
4128
|
const isJSONRPCNotification = (value) => JSONRPCNotificationSchema.safeParse(value).success;
|
|
4133
4129
|
const JSONRPCResponseSchema = object({
|
|
4134
4130
|
jsonrpc: literal(JSONRPC_VERSION),
|
|
@@ -4145,6 +4141,7 @@ var ErrorCode;
|
|
|
4145
4141
|
ErrorCode2[ErrorCode2["MethodNotFound"] = -32601] = "MethodNotFound";
|
|
4146
4142
|
ErrorCode2[ErrorCode2["InvalidParams"] = -32602] = "InvalidParams";
|
|
4147
4143
|
ErrorCode2[ErrorCode2["InternalError"] = -32603] = "InternalError";
|
|
4144
|
+
ErrorCode2[ErrorCode2["UrlElicitationRequired"] = -32042] = "UrlElicitationRequired";
|
|
4148
4145
|
})(ErrorCode || (ErrorCode = {}));
|
|
4149
4146
|
const JSONRPCErrorSchema = object({
|
|
4150
4147
|
jsonrpc: literal(JSONRPC_VERSION),
|
|
@@ -4228,12 +4225,28 @@ const BaseMetadataSchema = object({
|
|
|
4228
4225
|
title: string().optional()
|
|
4229
4226
|
});
|
|
4230
4227
|
const ImplementationSchema = BaseMetadataSchema.extend({
|
|
4228
|
+
...BaseMetadataSchema.shape,
|
|
4229
|
+
...IconsSchema.shape,
|
|
4231
4230
|
version: string(),
|
|
4232
4231
|
/**
|
|
4233
4232
|
* An optional URL of the website for this implementation.
|
|
4234
4233
|
*/
|
|
4235
4234
|
websiteUrl: string().optional()
|
|
4236
|
-
})
|
|
4235
|
+
});
|
|
4236
|
+
const FormElicitationCapabilitySchema = intersection(object({
|
|
4237
|
+
applyDefaults: boolean().optional()
|
|
4238
|
+
}), record(string(), unknown()));
|
|
4239
|
+
const ElicitationCapabilitySchema = preprocess((value) => {
|
|
4240
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
4241
|
+
if (Object.keys(value).length === 0) {
|
|
4242
|
+
return { form: {} };
|
|
4243
|
+
}
|
|
4244
|
+
}
|
|
4245
|
+
return value;
|
|
4246
|
+
}, intersection(object({
|
|
4247
|
+
form: FormElicitationCapabilitySchema.optional(),
|
|
4248
|
+
url: AssertObjectSchema.optional()
|
|
4249
|
+
}), record(string(), unknown()).optional()));
|
|
4237
4250
|
const ClientCapabilitiesSchema = object({
|
|
4238
4251
|
/**
|
|
4239
4252
|
* Experimental, non-standard capabilities that the client supports.
|
|
@@ -4242,16 +4255,21 @@ const ClientCapabilitiesSchema = object({
|
|
|
4242
4255
|
/**
|
|
4243
4256
|
* Present if the client supports sampling from an LLM.
|
|
4244
4257
|
*/
|
|
4245
|
-
sampling:
|
|
4258
|
+
sampling: object({
|
|
4259
|
+
/**
|
|
4260
|
+
* Present if the client supports context inclusion via includeContext parameter.
|
|
4261
|
+
* If not declared, servers SHOULD only use `includeContext: "none"` (or omit it).
|
|
4262
|
+
*/
|
|
4263
|
+
context: AssertObjectSchema.optional(),
|
|
4264
|
+
/**
|
|
4265
|
+
* Present if the client supports tool use via tools and toolChoice parameters.
|
|
4266
|
+
*/
|
|
4267
|
+
tools: AssertObjectSchema.optional()
|
|
4268
|
+
}).optional(),
|
|
4246
4269
|
/**
|
|
4247
4270
|
* Present if the client supports eliciting user input.
|
|
4248
4271
|
*/
|
|
4249
|
-
elicitation:
|
|
4250
|
-
/**
|
|
4251
|
-
* Whether the client should apply defaults to the user input.
|
|
4252
|
-
*/
|
|
4253
|
-
applyDefaults: boolean().optional()
|
|
4254
|
-
}).optional(), record(string(), unknown()).optional()),
|
|
4272
|
+
elicitation: ElicitationCapabilitySchema.optional(),
|
|
4255
4273
|
/**
|
|
4256
4274
|
* Present if the client supports listing roots.
|
|
4257
4275
|
*/
|
|
@@ -4354,7 +4372,9 @@ const ProgressSchema = object({
|
|
|
4354
4372
|
*/
|
|
4355
4373
|
message: optional(string())
|
|
4356
4374
|
});
|
|
4357
|
-
const ProgressNotificationParamsSchema =
|
|
4375
|
+
const ProgressNotificationParamsSchema = object({
|
|
4376
|
+
...NotificationsParamsSchema.shape,
|
|
4377
|
+
...ProgressSchema.shape,
|
|
4358
4378
|
/**
|
|
4359
4379
|
* The progress token which was given in the initial request, used to associate this notification with the request that is proceeding.
|
|
4360
4380
|
*/
|
|
@@ -4416,7 +4436,9 @@ const BlobResourceContentsSchema = ResourceContentsSchema.extend({
|
|
|
4416
4436
|
*/
|
|
4417
4437
|
blob: Base64Schema
|
|
4418
4438
|
});
|
|
4419
|
-
const ResourceSchema =
|
|
4439
|
+
const ResourceSchema = object({
|
|
4440
|
+
...BaseMetadataSchema.shape,
|
|
4441
|
+
...IconsSchema.shape,
|
|
4420
4442
|
/**
|
|
4421
4443
|
* The URI of this resource.
|
|
4422
4444
|
*/
|
|
@@ -4435,9 +4457,11 @@ const ResourceSchema = BaseMetadataSchema.extend({
|
|
|
4435
4457
|
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
|
|
4436
4458
|
* for notes on _meta usage.
|
|
4437
4459
|
*/
|
|
4438
|
-
_meta: optional(
|
|
4439
|
-
})
|
|
4440
|
-
const ResourceTemplateSchema =
|
|
4460
|
+
_meta: optional(looseObject({}))
|
|
4461
|
+
});
|
|
4462
|
+
const ResourceTemplateSchema = object({
|
|
4463
|
+
...BaseMetadataSchema.shape,
|
|
4464
|
+
...IconsSchema.shape,
|
|
4441
4465
|
/**
|
|
4442
4466
|
* A URI template (according to RFC 6570) that can be used to construct resource URIs.
|
|
4443
4467
|
*/
|
|
@@ -4456,8 +4480,8 @@ const ResourceTemplateSchema = BaseMetadataSchema.extend({
|
|
|
4456
4480
|
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
|
|
4457
4481
|
* for notes on _meta usage.
|
|
4458
4482
|
*/
|
|
4459
|
-
_meta: optional(
|
|
4460
|
-
})
|
|
4483
|
+
_meta: optional(looseObject({}))
|
|
4484
|
+
});
|
|
4461
4485
|
const ListResourcesRequestSchema = PaginatedRequestSchema.extend({
|
|
4462
4486
|
method: literal("resources/list")
|
|
4463
4487
|
});
|
|
@@ -4523,7 +4547,9 @@ const PromptArgumentSchema = object({
|
|
|
4523
4547
|
*/
|
|
4524
4548
|
required: optional(boolean())
|
|
4525
4549
|
});
|
|
4526
|
-
const PromptSchema =
|
|
4550
|
+
const PromptSchema = object({
|
|
4551
|
+
...BaseMetadataSchema.shape,
|
|
4552
|
+
...IconsSchema.shape,
|
|
4527
4553
|
/**
|
|
4528
4554
|
* An optional description of what this prompt provides
|
|
4529
4555
|
*/
|
|
@@ -4536,8 +4562,8 @@ const PromptSchema = BaseMetadataSchema.extend({
|
|
|
4536
4562
|
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
|
|
4537
4563
|
* for notes on _meta usage.
|
|
4538
4564
|
*/
|
|
4539
|
-
_meta: optional(
|
|
4540
|
-
})
|
|
4565
|
+
_meta: optional(looseObject({}))
|
|
4566
|
+
});
|
|
4541
4567
|
const ListPromptsRequestSchema = PaginatedRequestSchema.extend({
|
|
4542
4568
|
method: literal("prompts/list")
|
|
4543
4569
|
});
|
|
@@ -4602,6 +4628,29 @@ const AudioContentSchema = object({
|
|
|
4602
4628
|
*/
|
|
4603
4629
|
_meta: record(string(), unknown()).optional()
|
|
4604
4630
|
});
|
|
4631
|
+
const ToolUseContentSchema = object({
|
|
4632
|
+
type: literal("tool_use"),
|
|
4633
|
+
/**
|
|
4634
|
+
* The name of the tool to invoke.
|
|
4635
|
+
* Must match a tool name from the request's tools array.
|
|
4636
|
+
*/
|
|
4637
|
+
name: string(),
|
|
4638
|
+
/**
|
|
4639
|
+
* Unique identifier for this tool call.
|
|
4640
|
+
* Used to correlate with ToolResultContent in subsequent messages.
|
|
4641
|
+
*/
|
|
4642
|
+
id: string(),
|
|
4643
|
+
/**
|
|
4644
|
+
* Arguments to pass to the tool.
|
|
4645
|
+
* Must conform to the tool's inputSchema.
|
|
4646
|
+
*/
|
|
4647
|
+
input: object({}).passthrough(),
|
|
4648
|
+
/**
|
|
4649
|
+
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
|
|
4650
|
+
* for notes on _meta usage.
|
|
4651
|
+
*/
|
|
4652
|
+
_meta: optional(object({}).passthrough())
|
|
4653
|
+
}).passthrough();
|
|
4605
4654
|
const EmbeddedResourceSchema = object({
|
|
4606
4655
|
type: literal("resource"),
|
|
4607
4656
|
resource: union([TextResourceContentsSchema, BlobResourceContentsSchema]),
|
|
@@ -4674,32 +4723,32 @@ const ToolAnnotationsSchema = object({
|
|
|
4674
4723
|
*/
|
|
4675
4724
|
openWorldHint: boolean().optional()
|
|
4676
4725
|
});
|
|
4677
|
-
const ToolSchema =
|
|
4726
|
+
const ToolSchema = object({
|
|
4727
|
+
...BaseMetadataSchema.shape,
|
|
4728
|
+
...IconsSchema.shape,
|
|
4678
4729
|
/**
|
|
4679
4730
|
* A human-readable description of the tool.
|
|
4680
4731
|
*/
|
|
4681
4732
|
description: string().optional(),
|
|
4682
4733
|
/**
|
|
4683
|
-
* A JSON Schema object defining the expected parameters for the tool.
|
|
4734
|
+
* A JSON Schema 2020-12 object defining the expected parameters for the tool.
|
|
4735
|
+
* Must have type: 'object' at the root level per MCP spec.
|
|
4684
4736
|
*/
|
|
4685
4737
|
inputSchema: object({
|
|
4686
4738
|
type: literal("object"),
|
|
4687
4739
|
properties: record(string(), AssertObjectSchema).optional(),
|
|
4688
|
-
required:
|
|
4689
|
-
}),
|
|
4740
|
+
required: array(string()).optional()
|
|
4741
|
+
}).catchall(unknown()),
|
|
4690
4742
|
/**
|
|
4691
|
-
* An optional JSON Schema object defining the structure of the tool's output
|
|
4692
|
-
* the structuredContent field of a CallToolResult.
|
|
4743
|
+
* An optional JSON Schema 2020-12 object defining the structure of the tool's output
|
|
4744
|
+
* returned in the structuredContent field of a CallToolResult.
|
|
4745
|
+
* Must have type: 'object' at the root level per MCP spec.
|
|
4693
4746
|
*/
|
|
4694
4747
|
outputSchema: object({
|
|
4695
4748
|
type: literal("object"),
|
|
4696
4749
|
properties: record(string(), AssertObjectSchema).optional(),
|
|
4697
|
-
required:
|
|
4698
|
-
|
|
4699
|
-
* Not in the MCP specification, but added to support the Ajv validator while removing .passthrough() which previously allowed additionalProperties to be passed through.
|
|
4700
|
-
*/
|
|
4701
|
-
additionalProperties: optional(boolean())
|
|
4702
|
-
}).optional(),
|
|
4750
|
+
required: array(string()).optional()
|
|
4751
|
+
}).catchall(unknown()).optional(),
|
|
4703
4752
|
/**
|
|
4704
4753
|
* Optional additional tool information.
|
|
4705
4754
|
*/
|
|
@@ -4709,7 +4758,7 @@ const ToolSchema = BaseMetadataSchema.extend({
|
|
|
4709
4758
|
* for notes on _meta usage.
|
|
4710
4759
|
*/
|
|
4711
4760
|
_meta: record(string(), unknown()).optional()
|
|
4712
|
-
})
|
|
4761
|
+
});
|
|
4713
4762
|
const ListToolsRequestSchema = PaginatedRequestSchema.extend({
|
|
4714
4763
|
method: literal("tools/list")
|
|
4715
4764
|
});
|
|
@@ -4819,10 +4868,43 @@ const ModelPreferencesSchema = object({
|
|
|
4819
4868
|
*/
|
|
4820
4869
|
intelligencePriority: optional(number$1().min(0).max(1))
|
|
4821
4870
|
});
|
|
4871
|
+
const ToolChoiceSchema = object({
|
|
4872
|
+
/**
|
|
4873
|
+
* Controls when tools are used:
|
|
4874
|
+
* - "auto": Model decides whether to use tools (default)
|
|
4875
|
+
* - "required": Model MUST use at least one tool before completing
|
|
4876
|
+
* - "none": Model MUST NOT use any tools
|
|
4877
|
+
*/
|
|
4878
|
+
mode: optional(_enum$1(["auto", "required", "none"]))
|
|
4879
|
+
});
|
|
4880
|
+
const ToolResultContentSchema = object({
|
|
4881
|
+
type: literal("tool_result"),
|
|
4882
|
+
toolUseId: string().describe("The unique identifier for the corresponding tool call."),
|
|
4883
|
+
content: array(ContentBlockSchema).default([]),
|
|
4884
|
+
structuredContent: object({}).passthrough().optional(),
|
|
4885
|
+
isError: optional(boolean()),
|
|
4886
|
+
/**
|
|
4887
|
+
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
|
|
4888
|
+
* for notes on _meta usage.
|
|
4889
|
+
*/
|
|
4890
|
+
_meta: optional(object({}).passthrough())
|
|
4891
|
+
}).passthrough();
|
|
4892
|
+
const SamplingMessageContentBlockSchema = discriminatedUnion("type", [
|
|
4893
|
+
TextContentSchema,
|
|
4894
|
+
ImageContentSchema,
|
|
4895
|
+
AudioContentSchema,
|
|
4896
|
+
ToolUseContentSchema,
|
|
4897
|
+
ToolResultContentSchema
|
|
4898
|
+
]);
|
|
4822
4899
|
const SamplingMessageSchema = object({
|
|
4823
4900
|
role: _enum$1(["user", "assistant"]),
|
|
4824
|
-
content: union([
|
|
4825
|
-
|
|
4901
|
+
content: union([SamplingMessageContentBlockSchema, array(SamplingMessageContentBlockSchema)]),
|
|
4902
|
+
/**
|
|
4903
|
+
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
|
|
4904
|
+
* for notes on _meta usage.
|
|
4905
|
+
*/
|
|
4906
|
+
_meta: optional(object({}).passthrough())
|
|
4907
|
+
}).passthrough();
|
|
4826
4908
|
const CreateMessageRequestParamsSchema = BaseRequestParamsSchema.extend({
|
|
4827
4909
|
messages: array(SamplingMessageSchema),
|
|
4828
4910
|
/**
|
|
@@ -4834,7 +4916,11 @@ const CreateMessageRequestParamsSchema = BaseRequestParamsSchema.extend({
|
|
|
4834
4916
|
*/
|
|
4835
4917
|
systemPrompt: string().optional(),
|
|
4836
4918
|
/**
|
|
4837
|
-
* A request to include context from one or more MCP servers (including the caller), to be attached to the prompt.
|
|
4919
|
+
* A request to include context from one or more MCP servers (including the caller), to be attached to the prompt.
|
|
4920
|
+
* The client MAY ignore this request.
|
|
4921
|
+
*
|
|
4922
|
+
* Default is "none". Values "thisServer" and "allServers" are soft-deprecated. Servers SHOULD only use these values if the client
|
|
4923
|
+
* declares ClientCapabilities.sampling.context. These values may be removed in future spec releases.
|
|
4838
4924
|
*/
|
|
4839
4925
|
includeContext: _enum$1(["none", "thisServer", "allServers"]).optional(),
|
|
4840
4926
|
temperature: number$1().optional(),
|
|
@@ -4848,7 +4934,18 @@ const CreateMessageRequestParamsSchema = BaseRequestParamsSchema.extend({
|
|
|
4848
4934
|
/**
|
|
4849
4935
|
* Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific.
|
|
4850
4936
|
*/
|
|
4851
|
-
metadata: AssertObjectSchema.optional()
|
|
4937
|
+
metadata: AssertObjectSchema.optional(),
|
|
4938
|
+
/**
|
|
4939
|
+
* Tools that the model may use during generation.
|
|
4940
|
+
* The client MUST return an error if this field is provided but ClientCapabilities.sampling.tools is not declared.
|
|
4941
|
+
*/
|
|
4942
|
+
tools: optional(array(ToolSchema)),
|
|
4943
|
+
/**
|
|
4944
|
+
* Controls how the model uses tools.
|
|
4945
|
+
* The client MUST return an error if this field is provided but ClientCapabilities.sampling.tools is not declared.
|
|
4946
|
+
* Default is `{ mode: "auto" }`.
|
|
4947
|
+
*/
|
|
4948
|
+
toolChoice: optional(ToolChoiceSchema)
|
|
4852
4949
|
});
|
|
4853
4950
|
const CreateMessageRequestSchema = RequestSchema.extend({
|
|
4854
4951
|
method: literal("sampling/createMessage"),
|
|
@@ -4860,11 +4957,22 @@ const CreateMessageResultSchema = ResultSchema.extend({
|
|
|
4860
4957
|
*/
|
|
4861
4958
|
model: string(),
|
|
4862
4959
|
/**
|
|
4863
|
-
* The reason why sampling stopped.
|
|
4960
|
+
* The reason why sampling stopped, if known.
|
|
4961
|
+
*
|
|
4962
|
+
* Standard values:
|
|
4963
|
+
* - "endTurn": Natural end of the assistant's turn
|
|
4964
|
+
* - "stopSequence": A stop sequence was encountered
|
|
4965
|
+
* - "maxTokens": Maximum token limit was reached
|
|
4966
|
+
* - "toolUse": The model wants to use one or more tools
|
|
4967
|
+
*
|
|
4968
|
+
* This field is an open string to allow for provider-specific stop reasons.
|
|
4864
4969
|
*/
|
|
4865
|
-
stopReason: optional(_enum$1(["endTurn", "stopSequence", "maxTokens"]).or(string())),
|
|
4970
|
+
stopReason: optional(_enum$1(["endTurn", "stopSequence", "maxTokens", "toolUse"]).or(string())),
|
|
4866
4971
|
role: _enum$1(["user", "assistant"]),
|
|
4867
|
-
|
|
4972
|
+
/**
|
|
4973
|
+
* Response content. May be ToolUseContent if stopReason is "toolUse".
|
|
4974
|
+
*/
|
|
4975
|
+
content: union([SamplingMessageContentBlockSchema, array(SamplingMessageContentBlockSchema)])
|
|
4868
4976
|
});
|
|
4869
4977
|
const BooleanSchemaSchema = object({
|
|
4870
4978
|
type: literal("boolean"),
|
|
@@ -4944,9 +5052,15 @@ const TitledMultiSelectEnumSchemaSchema = object({
|
|
|
4944
5052
|
const MultiSelectEnumSchemaSchema = union([UntitledMultiSelectEnumSchemaSchema, TitledMultiSelectEnumSchemaSchema]);
|
|
4945
5053
|
const EnumSchemaSchema = union([LegacyTitledEnumSchemaSchema, SingleSelectEnumSchemaSchema, MultiSelectEnumSchemaSchema]);
|
|
4946
5054
|
const PrimitiveSchemaDefinitionSchema = union([EnumSchemaSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema]);
|
|
4947
|
-
const
|
|
5055
|
+
const ElicitRequestFormParamsSchema = BaseRequestParamsSchema.extend({
|
|
4948
5056
|
/**
|
|
4949
|
-
* The
|
|
5057
|
+
* The elicitation mode.
|
|
5058
|
+
*
|
|
5059
|
+
* Optional for backward compatibility. Clients MUST treat missing mode as "form".
|
|
5060
|
+
*/
|
|
5061
|
+
mode: literal("form").optional(),
|
|
5062
|
+
/**
|
|
5063
|
+
* The message to present to the user describing what information is being requested.
|
|
4950
5064
|
*/
|
|
4951
5065
|
message: string(),
|
|
4952
5066
|
/**
|
|
@@ -4959,10 +5073,40 @@ const ElicitRequestParamsSchema = BaseRequestParamsSchema.extend({
|
|
|
4959
5073
|
required: array(string()).optional()
|
|
4960
5074
|
})
|
|
4961
5075
|
});
|
|
5076
|
+
const ElicitRequestURLParamsSchema = BaseRequestParamsSchema.extend({
|
|
5077
|
+
/**
|
|
5078
|
+
* The elicitation mode.
|
|
5079
|
+
*/
|
|
5080
|
+
mode: literal("url"),
|
|
5081
|
+
/**
|
|
5082
|
+
* The message to present to the user explaining why the interaction is needed.
|
|
5083
|
+
*/
|
|
5084
|
+
message: string(),
|
|
5085
|
+
/**
|
|
5086
|
+
* The ID of the elicitation, which must be unique within the context of the server.
|
|
5087
|
+
* The client MUST treat this ID as an opaque value.
|
|
5088
|
+
*/
|
|
5089
|
+
elicitationId: string(),
|
|
5090
|
+
/**
|
|
5091
|
+
* The URL that the user should navigate to.
|
|
5092
|
+
*/
|
|
5093
|
+
url: string().url()
|
|
5094
|
+
});
|
|
5095
|
+
const ElicitRequestParamsSchema = union([ElicitRequestFormParamsSchema, ElicitRequestURLParamsSchema]);
|
|
4962
5096
|
const ElicitRequestSchema = RequestSchema.extend({
|
|
4963
5097
|
method: literal("elicitation/create"),
|
|
4964
5098
|
params: ElicitRequestParamsSchema
|
|
4965
5099
|
});
|
|
5100
|
+
const ElicitationCompleteNotificationParamsSchema = NotificationsParamsSchema.extend({
|
|
5101
|
+
/**
|
|
5102
|
+
* The ID of the elicitation that completed.
|
|
5103
|
+
*/
|
|
5104
|
+
elicitationId: string()
|
|
5105
|
+
});
|
|
5106
|
+
const ElicitationCompleteNotificationSchema = NotificationSchema.extend({
|
|
5107
|
+
method: literal("notifications/elicitation/complete"),
|
|
5108
|
+
params: ElicitationCompleteNotificationParamsSchema
|
|
5109
|
+
});
|
|
4966
5110
|
const ElicitResultSchema = ResultSchema.extend({
|
|
4967
5111
|
/**
|
|
4968
5112
|
* The user action in response to the elicitation.
|
|
@@ -4975,7 +5119,7 @@ const ElicitResultSchema = ResultSchema.extend({
|
|
|
4975
5119
|
* The submitted form data, only present when action is "accept".
|
|
4976
5120
|
* Contains values matching the requested schema.
|
|
4977
5121
|
*/
|
|
4978
|
-
content: record(union([string(), number$1(), boolean(), array(string())])).optional()
|
|
5122
|
+
content: record(string(), union([string(), number$1(), boolean(), array(string())])).optional()
|
|
4979
5123
|
});
|
|
4980
5124
|
const ResourceTemplateReferenceSchema = object({
|
|
4981
5125
|
type: literal("ref/resource"),
|
|
@@ -5018,7 +5162,7 @@ const CompleteRequestSchema = RequestSchema.extend({
|
|
|
5018
5162
|
params: CompleteRequestParamsSchema
|
|
5019
5163
|
});
|
|
5020
5164
|
const CompleteResultSchema = ResultSchema.extend({
|
|
5021
|
-
completion:
|
|
5165
|
+
completion: looseObject({
|
|
5022
5166
|
/**
|
|
5023
5167
|
* An array of completion values. Must not exceed 100 items.
|
|
5024
5168
|
*/
|
|
@@ -5031,7 +5175,7 @@ const CompleteResultSchema = ResultSchema.extend({
|
|
|
5031
5175
|
* Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.
|
|
5032
5176
|
*/
|
|
5033
5177
|
hasMore: optional(boolean())
|
|
5034
|
-
})
|
|
5178
|
+
})
|
|
5035
5179
|
});
|
|
5036
5180
|
const RootSchema = object({
|
|
5037
5181
|
/**
|
|
@@ -5087,7 +5231,8 @@ union([
|
|
|
5087
5231
|
ResourceUpdatedNotificationSchema,
|
|
5088
5232
|
ResourceListChangedNotificationSchema,
|
|
5089
5233
|
ToolListChangedNotificationSchema,
|
|
5090
|
-
PromptListChangedNotificationSchema
|
|
5234
|
+
PromptListChangedNotificationSchema,
|
|
5235
|
+
ElicitationCompleteNotificationSchema
|
|
5091
5236
|
]);
|
|
5092
5237
|
union([
|
|
5093
5238
|
EmptyResultSchema,
|
|
@@ -5108,6 +5253,29 @@ class McpError extends Error {
|
|
|
5108
5253
|
this.data = data2;
|
|
5109
5254
|
this.name = "McpError";
|
|
5110
5255
|
}
|
|
5256
|
+
/**
|
|
5257
|
+
* Factory method to create the appropriate error type based on the error code and data
|
|
5258
|
+
*/
|
|
5259
|
+
static fromError(code2, message, data2) {
|
|
5260
|
+
if (code2 === ErrorCode.UrlElicitationRequired && data2) {
|
|
5261
|
+
const errorData = data2;
|
|
5262
|
+
if (errorData.elicitations) {
|
|
5263
|
+
return new UrlElicitationRequiredError(errorData.elicitations, message);
|
|
5264
|
+
}
|
|
5265
|
+
}
|
|
5266
|
+
return new McpError(code2, message, data2);
|
|
5267
|
+
}
|
|
5268
|
+
}
|
|
5269
|
+
class UrlElicitationRequiredError extends McpError {
|
|
5270
|
+
constructor(elicitations, message = `URL elicitation${elicitations.length > 1 ? "s" : ""} required`) {
|
|
5271
|
+
super(ErrorCode.UrlElicitationRequired, message, {
|
|
5272
|
+
elicitations
|
|
5273
|
+
});
|
|
5274
|
+
}
|
|
5275
|
+
get elicitations() {
|
|
5276
|
+
var _a3, _b2;
|
|
5277
|
+
return (_b2 = (_a3 = this.data) === null || _a3 === void 0 ? void 0 : _a3.elicitations) !== null && _b2 !== void 0 ? _b2 : [];
|
|
5278
|
+
}
|
|
5111
5279
|
}
|
|
5112
5280
|
var BaseConnector = (_c = class {
|
|
5113
5281
|
client = null;
|
|
@@ -5503,6 +5671,109 @@ var BaseConnector = (_c = class {
|
|
|
5503
5671
|
}
|
|
5504
5672
|
}
|
|
5505
5673
|
}, __name(_c, "BaseConnector"), _c);
|
|
5674
|
+
var define_process_env_default$1 = {};
|
|
5675
|
+
var isDeno = typeof globalThis.Deno !== "undefined";
|
|
5676
|
+
function getEnv(key) {
|
|
5677
|
+
if (isDeno) {
|
|
5678
|
+
return globalThis.Deno.env.get(key);
|
|
5679
|
+
}
|
|
5680
|
+
return define_process_env_default$1[key];
|
|
5681
|
+
}
|
|
5682
|
+
__name(getEnv, "getEnv");
|
|
5683
|
+
function getCwd() {
|
|
5684
|
+
if (isDeno) {
|
|
5685
|
+
return globalThis.Deno.cwd();
|
|
5686
|
+
}
|
|
5687
|
+
return process.cwd();
|
|
5688
|
+
}
|
|
5689
|
+
__name(getCwd, "getCwd");
|
|
5690
|
+
function generateUUID() {
|
|
5691
|
+
return globalThis.crypto.randomUUID();
|
|
5692
|
+
}
|
|
5693
|
+
__name(generateUUID, "generateUUID");
|
|
5694
|
+
function isZ4Schema(s2) {
|
|
5695
|
+
const schema2 = s2;
|
|
5696
|
+
return !!schema2._zod;
|
|
5697
|
+
}
|
|
5698
|
+
function safeParse(schema2, data2) {
|
|
5699
|
+
if (isZ4Schema(schema2)) {
|
|
5700
|
+
const result2 = safeParse$2(schema2, data2);
|
|
5701
|
+
return result2;
|
|
5702
|
+
}
|
|
5703
|
+
const v3Schema = schema2;
|
|
5704
|
+
const result = v3Schema.safeParse(data2);
|
|
5705
|
+
return result;
|
|
5706
|
+
}
|
|
5707
|
+
function getObjectShape(schema2) {
|
|
5708
|
+
var _a3, _b2;
|
|
5709
|
+
if (!schema2)
|
|
5710
|
+
return void 0;
|
|
5711
|
+
let rawShape;
|
|
5712
|
+
if (isZ4Schema(schema2)) {
|
|
5713
|
+
const v4Schema = schema2;
|
|
5714
|
+
rawShape = (_b2 = (_a3 = v4Schema._zod) === null || _a3 === void 0 ? void 0 : _a3.def) === null || _b2 === void 0 ? void 0 : _b2.shape;
|
|
5715
|
+
} else {
|
|
5716
|
+
const v3Schema = schema2;
|
|
5717
|
+
rawShape = v3Schema.shape;
|
|
5718
|
+
}
|
|
5719
|
+
if (!rawShape)
|
|
5720
|
+
return void 0;
|
|
5721
|
+
if (typeof rawShape === "function") {
|
|
5722
|
+
try {
|
|
5723
|
+
return rawShape();
|
|
5724
|
+
} catch (_c2) {
|
|
5725
|
+
return void 0;
|
|
5726
|
+
}
|
|
5727
|
+
}
|
|
5728
|
+
return rawShape;
|
|
5729
|
+
}
|
|
5730
|
+
function getLiteralValue(schema2) {
|
|
5731
|
+
var _a3;
|
|
5732
|
+
if (isZ4Schema(schema2)) {
|
|
5733
|
+
const v4Schema = schema2;
|
|
5734
|
+
const def2 = (_a3 = v4Schema._zod) === null || _a3 === void 0 ? void 0 : _a3.def;
|
|
5735
|
+
if (def2) {
|
|
5736
|
+
if (def2.value !== void 0)
|
|
5737
|
+
return def2.value;
|
|
5738
|
+
if (Array.isArray(def2.values) && def2.values.length > 0) {
|
|
5739
|
+
return def2.values[0];
|
|
5740
|
+
}
|
|
5741
|
+
}
|
|
5742
|
+
}
|
|
5743
|
+
const v3Schema = schema2;
|
|
5744
|
+
const def = v3Schema._def;
|
|
5745
|
+
if (def) {
|
|
5746
|
+
if (def.value !== void 0)
|
|
5747
|
+
return def.value;
|
|
5748
|
+
if (Array.isArray(def.values) && def.values.length > 0) {
|
|
5749
|
+
return def.values[0];
|
|
5750
|
+
}
|
|
5751
|
+
}
|
|
5752
|
+
const directValue = schema2.value;
|
|
5753
|
+
if (directValue !== void 0)
|
|
5754
|
+
return directValue;
|
|
5755
|
+
return void 0;
|
|
5756
|
+
}
|
|
5757
|
+
new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
|
|
5758
|
+
function getMethodLiteral(schema2) {
|
|
5759
|
+
const shape = getObjectShape(schema2);
|
|
5760
|
+
const methodSchema = shape === null || shape === void 0 ? void 0 : shape.method;
|
|
5761
|
+
if (!methodSchema) {
|
|
5762
|
+
throw new Error("Schema is missing a method literal");
|
|
5763
|
+
}
|
|
5764
|
+
const value = getLiteralValue(methodSchema);
|
|
5765
|
+
if (typeof value !== "string") {
|
|
5766
|
+
throw new Error("Schema method literal must be a string");
|
|
5767
|
+
}
|
|
5768
|
+
return value;
|
|
5769
|
+
}
|
|
5770
|
+
function parseWithCompat(schema2, data2) {
|
|
5771
|
+
const result = safeParse(schema2, data2);
|
|
5772
|
+
if (!result.success) {
|
|
5773
|
+
throw result.error;
|
|
5774
|
+
}
|
|
5775
|
+
return result.data;
|
|
5776
|
+
}
|
|
5506
5777
|
const DEFAULT_REQUEST_TIMEOUT_MSEC = 6e4;
|
|
5507
5778
|
class Protocol {
|
|
5508
5779
|
constructor(_options) {
|
|
@@ -5545,7 +5816,7 @@ class Protocol {
|
|
|
5545
5816
|
const totalElapsed = Date.now() - info2.startTime;
|
|
5546
5817
|
if (info2.maxTotalTimeout && totalElapsed >= info2.maxTotalTimeout) {
|
|
5547
5818
|
this._timeoutInfo.delete(messageId);
|
|
5548
|
-
throw
|
|
5819
|
+
throw McpError.fromError(ErrorCode.RequestTimeout, "Maximum total timeout exceeded", {
|
|
5549
5820
|
maxTotalTimeout: info2.maxTotalTimeout,
|
|
5550
5821
|
totalElapsed
|
|
5551
5822
|
});
|
|
@@ -5602,7 +5873,7 @@ class Protocol {
|
|
|
5602
5873
|
this._pendingDebouncedNotifications.clear();
|
|
5603
5874
|
this._transport = void 0;
|
|
5604
5875
|
(_a3 = this.onclose) === null || _a3 === void 0 ? void 0 : _a3.call(this);
|
|
5605
|
-
const error =
|
|
5876
|
+
const error = McpError.fromError(ErrorCode.ConnectionClosed, "Connection closed");
|
|
5606
5877
|
for (const handler of responseHandlers.values()) {
|
|
5607
5878
|
handler(error);
|
|
5608
5879
|
}
|
|
@@ -5665,7 +5936,8 @@ class Protocol {
|
|
|
5665
5936
|
id: request.id,
|
|
5666
5937
|
error: {
|
|
5667
5938
|
code: Number.isSafeInteger(error["code"]) ? error["code"] : ErrorCode.InternalError,
|
|
5668
|
-
message: (_a4 = error.message) !== null && _a4 !== void 0 ? _a4 : "Internal error"
|
|
5939
|
+
message: (_a4 = error.message) !== null && _a4 !== void 0 ? _a4 : "Internal error",
|
|
5940
|
+
...error["data"] !== void 0 && { data: error["data"] }
|
|
5669
5941
|
}
|
|
5670
5942
|
});
|
|
5671
5943
|
}).catch((error) => this._onerror(new Error(`Failed to send response: ${error}`))).finally(() => {
|
|
@@ -5705,7 +5977,7 @@ class Protocol {
|
|
|
5705
5977
|
if (isJSONRPCResponse(response)) {
|
|
5706
5978
|
handler(response);
|
|
5707
5979
|
} else {
|
|
5708
|
-
const error =
|
|
5980
|
+
const error = McpError.fromError(response.error.code, response.error.message, response.error.data);
|
|
5709
5981
|
handler(error);
|
|
5710
5982
|
}
|
|
5711
5983
|
}
|
|
@@ -5776,8 +6048,12 @@ class Protocol {
|
|
|
5776
6048
|
return reject(response);
|
|
5777
6049
|
}
|
|
5778
6050
|
try {
|
|
5779
|
-
const
|
|
5780
|
-
|
|
6051
|
+
const parseResult = safeParse(resultSchema, response.result);
|
|
6052
|
+
if (!parseResult.success) {
|
|
6053
|
+
reject(parseResult.error);
|
|
6054
|
+
} else {
|
|
6055
|
+
resolve2(parseResult.data);
|
|
6056
|
+
}
|
|
5781
6057
|
} catch (error) {
|
|
5782
6058
|
reject(error);
|
|
5783
6059
|
}
|
|
@@ -5787,7 +6063,7 @@ class Protocol {
|
|
|
5787
6063
|
cancel((_a4 = options === null || options === void 0 ? void 0 : options.signal) === null || _a4 === void 0 ? void 0 : _a4.reason);
|
|
5788
6064
|
});
|
|
5789
6065
|
const timeout = (_e3 = options === null || options === void 0 ? void 0 : options.timeout) !== null && _e3 !== void 0 ? _e3 : DEFAULT_REQUEST_TIMEOUT_MSEC;
|
|
5790
|
-
const timeoutHandler = () => cancel(
|
|
6066
|
+
const timeoutHandler = () => cancel(McpError.fromError(ErrorCode.RequestTimeout, "Request timed out", { timeout }));
|
|
5791
6067
|
this._setupTimeout(messageId, timeout, options === null || options === void 0 ? void 0 : options.maxTotalTimeout, timeoutHandler, (_f2 = options === null || options === void 0 ? void 0 : options.resetTimeoutOnProgress) !== null && _f2 !== void 0 ? _f2 : false);
|
|
5792
6068
|
this._transport.send(jsonrpcRequest, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error) => {
|
|
5793
6069
|
this._cleanupTimeout(messageId);
|
|
@@ -5837,10 +6113,11 @@ class Protocol {
|
|
|
5837
6113
|
* Note that this will replace any previous request handler for the same method.
|
|
5838
6114
|
*/
|
|
5839
6115
|
setRequestHandler(requestSchema, handler) {
|
|
5840
|
-
const method = requestSchema
|
|
6116
|
+
const method = getMethodLiteral(requestSchema);
|
|
5841
6117
|
this.assertRequestHandlerCapability(method);
|
|
5842
6118
|
this._requestHandlers.set(method, (request, extra) => {
|
|
5843
|
-
|
|
6119
|
+
const parsed = parseWithCompat(requestSchema, request);
|
|
6120
|
+
return Promise.resolve(handler(parsed, extra));
|
|
5844
6121
|
});
|
|
5845
6122
|
}
|
|
5846
6123
|
/**
|
|
@@ -5863,7 +6140,11 @@ class Protocol {
|
|
|
5863
6140
|
* Note that this will replace any previous notification handler for the same method.
|
|
5864
6141
|
*/
|
|
5865
6142
|
setNotificationHandler(notificationSchema, handler) {
|
|
5866
|
-
|
|
6143
|
+
const method = getMethodLiteral(notificationSchema);
|
|
6144
|
+
this._notificationHandlers.set(method, (notification) => {
|
|
6145
|
+
const parsed = parseWithCompat(notificationSchema, notification);
|
|
6146
|
+
return Promise.resolve(handler(parsed));
|
|
6147
|
+
});
|
|
5867
6148
|
}
|
|
5868
6149
|
/**
|
|
5869
6150
|
* Removes the notification handler for the given method.
|
|
@@ -12618,6 +12899,16 @@ function applyElicitationDefaults(schema2, data2) {
|
|
|
12618
12899
|
}
|
|
12619
12900
|
}
|
|
12620
12901
|
}
|
|
12902
|
+
function getSupportedElicitationModes(capabilities) {
|
|
12903
|
+
if (!capabilities) {
|
|
12904
|
+
return { supportsFormMode: false, supportsUrlMode: false };
|
|
12905
|
+
}
|
|
12906
|
+
const hasFormCapability = capabilities.form !== void 0;
|
|
12907
|
+
const hasUrlCapability = capabilities.url !== void 0;
|
|
12908
|
+
const supportsFormMode = hasFormCapability || !hasFormCapability && !hasUrlCapability;
|
|
12909
|
+
const supportsUrlMode = hasUrlCapability;
|
|
12910
|
+
return { supportsFormMode, supportsUrlMode };
|
|
12911
|
+
}
|
|
12621
12912
|
class Client extends Protocol {
|
|
12622
12913
|
/**
|
|
12623
12914
|
* Initializes this client with the given name and version information.
|
|
@@ -12645,24 +12936,57 @@ class Client extends Protocol {
|
|
|
12645
12936
|
* Override request handler registration to enforce client-side validation for elicitation.
|
|
12646
12937
|
*/
|
|
12647
12938
|
setRequestHandler(requestSchema, handler) {
|
|
12648
|
-
|
|
12939
|
+
var _a3, _b2, _c2;
|
|
12940
|
+
const shape = getObjectShape(requestSchema);
|
|
12941
|
+
const methodSchema = shape === null || shape === void 0 ? void 0 : shape.method;
|
|
12942
|
+
if (!methodSchema) {
|
|
12943
|
+
throw new Error("Schema is missing a method literal");
|
|
12944
|
+
}
|
|
12945
|
+
let methodValue;
|
|
12946
|
+
if (isZ4Schema(methodSchema)) {
|
|
12947
|
+
const v4Schema = methodSchema;
|
|
12948
|
+
const v4Def = (_a3 = v4Schema._zod) === null || _a3 === void 0 ? void 0 : _a3.def;
|
|
12949
|
+
methodValue = (_b2 = v4Def === null || v4Def === void 0 ? void 0 : v4Def.value) !== null && _b2 !== void 0 ? _b2 : v4Schema.value;
|
|
12950
|
+
} else {
|
|
12951
|
+
const v3Schema = methodSchema;
|
|
12952
|
+
const legacyDef = v3Schema._def;
|
|
12953
|
+
methodValue = (_c2 = legacyDef === null || legacyDef === void 0 ? void 0 : legacyDef.value) !== null && _c2 !== void 0 ? _c2 : v3Schema.value;
|
|
12954
|
+
}
|
|
12955
|
+
if (typeof methodValue !== "string") {
|
|
12956
|
+
throw new Error("Schema method literal must be a string");
|
|
12957
|
+
}
|
|
12958
|
+
const method = methodValue;
|
|
12649
12959
|
if (method === "elicitation/create") {
|
|
12650
12960
|
const wrappedHandler = async (request, extra) => {
|
|
12651
|
-
var
|
|
12652
|
-
const validatedRequest =
|
|
12961
|
+
var _a4, _b3, _c3;
|
|
12962
|
+
const validatedRequest = safeParse(ElicitRequestSchema, request);
|
|
12653
12963
|
if (!validatedRequest.success) {
|
|
12654
|
-
|
|
12964
|
+
const errorMessage = validatedRequest.error instanceof Error ? validatedRequest.error.message : String(validatedRequest.error);
|
|
12965
|
+
throw new McpError(ErrorCode.InvalidParams, `Invalid elicitation request: ${errorMessage}`);
|
|
12966
|
+
}
|
|
12967
|
+
const { params } = validatedRequest.data;
|
|
12968
|
+
const mode = (_a4 = params.mode) !== null && _a4 !== void 0 ? _a4 : "form";
|
|
12969
|
+
const { supportsFormMode, supportsUrlMode } = getSupportedElicitationModes(this._capabilities.elicitation);
|
|
12970
|
+
if (mode === "form" && !supportsFormMode) {
|
|
12971
|
+
throw new McpError(ErrorCode.InvalidParams, "Client does not support form-mode elicitation requests");
|
|
12972
|
+
}
|
|
12973
|
+
if (mode === "url" && !supportsUrlMode) {
|
|
12974
|
+
throw new McpError(ErrorCode.InvalidParams, "Client does not support URL-mode elicitation requests");
|
|
12655
12975
|
}
|
|
12656
12976
|
const result = await Promise.resolve(handler(request, extra));
|
|
12657
|
-
const validationResult =
|
|
12977
|
+
const validationResult = safeParse(ElicitResultSchema, result);
|
|
12658
12978
|
if (!validationResult.success) {
|
|
12659
|
-
|
|
12979
|
+
const errorMessage = validationResult.error instanceof Error ? validationResult.error.message : String(validationResult.error);
|
|
12980
|
+
throw new McpError(ErrorCode.InvalidParams, `Invalid elicitation result: ${errorMessage}`);
|
|
12660
12981
|
}
|
|
12661
12982
|
const validatedResult = validationResult.data;
|
|
12662
|
-
|
|
12663
|
-
|
|
12664
|
-
|
|
12665
|
-
|
|
12983
|
+
const requestedSchema = mode === "form" ? params.requestedSchema : void 0;
|
|
12984
|
+
if (mode === "form" && validatedResult.action === "accept" && validatedResult.content && requestedSchema) {
|
|
12985
|
+
if ((_c3 = (_b3 = this._capabilities.elicitation) === null || _b3 === void 0 ? void 0 : _b3.form) === null || _c3 === void 0 ? void 0 : _c3.applyDefaults) {
|
|
12986
|
+
try {
|
|
12987
|
+
applyElicitationDefaults(requestedSchema, validatedResult.content);
|
|
12988
|
+
} catch (_d2) {
|
|
12989
|
+
}
|
|
12666
12990
|
}
|
|
12667
12991
|
}
|
|
12668
12992
|
return validatedResult;
|
|
@@ -12878,6 +13202,31 @@ class Client extends Protocol {
|
|
|
12878
13202
|
return this.notification({ method: "notifications/roots/list_changed" });
|
|
12879
13203
|
}
|
|
12880
13204
|
}
|
|
13205
|
+
function normalizeHeaders(headers) {
|
|
13206
|
+
if (!headers)
|
|
13207
|
+
return {};
|
|
13208
|
+
if (headers instanceof Headers) {
|
|
13209
|
+
return Object.fromEntries(headers.entries());
|
|
13210
|
+
}
|
|
13211
|
+
if (Array.isArray(headers)) {
|
|
13212
|
+
return Object.fromEntries(headers);
|
|
13213
|
+
}
|
|
13214
|
+
return { ...headers };
|
|
13215
|
+
}
|
|
13216
|
+
function createFetchWithInit(baseFetch = fetch, baseInit) {
|
|
13217
|
+
if (!baseInit) {
|
|
13218
|
+
return baseFetch;
|
|
13219
|
+
}
|
|
13220
|
+
return async (url2, init) => {
|
|
13221
|
+
const mergedInit = {
|
|
13222
|
+
...baseInit,
|
|
13223
|
+
...init,
|
|
13224
|
+
// Headers need special handling - merge instead of replace
|
|
13225
|
+
headers: (init === null || init === void 0 ? void 0 : init.headers) ? { ...normalizeHeaders(baseInit.headers), ...normalizeHeaders(init.headers) } : baseInit.headers
|
|
13226
|
+
};
|
|
13227
|
+
return baseFetch(url2, mergedInit);
|
|
13228
|
+
};
|
|
13229
|
+
}
|
|
12881
13230
|
let crypto$1;
|
|
12882
13231
|
crypto$1 = globalThis.crypto;
|
|
12883
13232
|
async function getRandomValues(size2) {
|
|
@@ -12913,7 +13262,7 @@ async function pkceChallenge(length) {
|
|
|
12913
13262
|
code_challenge: challenge
|
|
12914
13263
|
};
|
|
12915
13264
|
}
|
|
12916
|
-
const SafeUrlSchema =
|
|
13265
|
+
const SafeUrlSchema = url().superRefine((val, ctx) => {
|
|
12917
13266
|
if (!URL.canParse(val)) {
|
|
12918
13267
|
ctx.addIssue({
|
|
12919
13268
|
code: ZodIssueCode.custom,
|
|
@@ -12922,11 +13271,11 @@ const SafeUrlSchema = string().url().superRefine((val, ctx) => {
|
|
|
12922
13271
|
});
|
|
12923
13272
|
return NEVER;
|
|
12924
13273
|
}
|
|
12925
|
-
}).refine((
|
|
12926
|
-
const u2 = new URL(
|
|
13274
|
+
}).refine((url2) => {
|
|
13275
|
+
const u2 = new URL(url2);
|
|
12927
13276
|
return u2.protocol !== "javascript:" && u2.protocol !== "data:" && u2.protocol !== "vbscript:";
|
|
12928
13277
|
}, { message: "URL cannot use javascript:, data:, or vbscript: scheme" });
|
|
12929
|
-
const OAuthProtectedResourceMetadataSchema =
|
|
13278
|
+
const OAuthProtectedResourceMetadataSchema = looseObject({
|
|
12930
13279
|
resource: string().url(),
|
|
12931
13280
|
authorization_servers: array(SafeUrlSchema).optional(),
|
|
12932
13281
|
jwks_uri: string().url().optional(),
|
|
@@ -12941,8 +13290,8 @@ const OAuthProtectedResourceMetadataSchema = object({
|
|
|
12941
13290
|
authorization_details_types_supported: array(string()).optional(),
|
|
12942
13291
|
dpop_signing_alg_values_supported: array(string()).optional(),
|
|
12943
13292
|
dpop_bound_access_tokens_required: boolean().optional()
|
|
12944
|
-
})
|
|
12945
|
-
const OAuthMetadataSchema =
|
|
13293
|
+
});
|
|
13294
|
+
const OAuthMetadataSchema = looseObject({
|
|
12946
13295
|
issuer: string(),
|
|
12947
13296
|
authorization_endpoint: SafeUrlSchema,
|
|
12948
13297
|
token_endpoint: SafeUrlSchema,
|
|
@@ -12960,9 +13309,10 @@ const OAuthMetadataSchema = object({
|
|
|
12960
13309
|
introspection_endpoint: string().optional(),
|
|
12961
13310
|
introspection_endpoint_auth_methods_supported: array(string()).optional(),
|
|
12962
13311
|
introspection_endpoint_auth_signing_alg_values_supported: array(string()).optional(),
|
|
12963
|
-
code_challenge_methods_supported: array(string()).optional()
|
|
12964
|
-
|
|
12965
|
-
|
|
13312
|
+
code_challenge_methods_supported: array(string()).optional(),
|
|
13313
|
+
client_id_metadata_document_supported: boolean().optional()
|
|
13314
|
+
});
|
|
13315
|
+
const OpenIdProviderMetadataSchema = looseObject({
|
|
12966
13316
|
issuer: string(),
|
|
12967
13317
|
authorization_endpoint: SafeUrlSchema,
|
|
12968
13318
|
token_endpoint: SafeUrlSchema,
|
|
@@ -12997,11 +13347,15 @@ const OpenIdProviderMetadataSchema = object({
|
|
|
12997
13347
|
request_uri_parameter_supported: boolean().optional(),
|
|
12998
13348
|
require_request_uri_registration: boolean().optional(),
|
|
12999
13349
|
op_policy_uri: SafeUrlSchema.optional(),
|
|
13000
|
-
op_tos_uri: SafeUrlSchema.optional()
|
|
13001
|
-
|
|
13002
|
-
|
|
13003
|
-
|
|
13004
|
-
|
|
13350
|
+
op_tos_uri: SafeUrlSchema.optional(),
|
|
13351
|
+
client_id_metadata_document_supported: boolean().optional()
|
|
13352
|
+
});
|
|
13353
|
+
const OpenIdProviderDiscoveryMetadataSchema = object({
|
|
13354
|
+
...OpenIdProviderMetadataSchema.shape,
|
|
13355
|
+
...OAuthMetadataSchema.pick({
|
|
13356
|
+
code_challenge_methods_supported: true
|
|
13357
|
+
}).shape
|
|
13358
|
+
});
|
|
13005
13359
|
const OAuthTokensSchema = object({
|
|
13006
13360
|
access_token: string(),
|
|
13007
13361
|
id_token: string().optional(),
|
|
@@ -13050,8 +13404,8 @@ object({
|
|
|
13050
13404
|
token: string(),
|
|
13051
13405
|
token_type_hint: string().optional()
|
|
13052
13406
|
}).strip();
|
|
13053
|
-
function resourceUrlFromServerUrl(
|
|
13054
|
-
const resourceURL = typeof
|
|
13407
|
+
function resourceUrlFromServerUrl(url2) {
|
|
13408
|
+
const resourceURL = typeof url2 === "string" ? new URL(url2) : new URL(url2.href);
|
|
13055
13409
|
resourceURL.hash = "";
|
|
13056
13410
|
return resourceURL;
|
|
13057
13411
|
}
|
|
@@ -13247,6 +13601,7 @@ async function auth(provider, options) {
|
|
|
13247
13601
|
}
|
|
13248
13602
|
}
|
|
13249
13603
|
async function authInternal(provider, { serverUrl, authorizationCode, scope: scope2, resourceMetadataUrl, fetchFn }) {
|
|
13604
|
+
var _a3, _b2;
|
|
13250
13605
|
let resourceMetadata;
|
|
13251
13606
|
let authorizationServerUrl;
|
|
13252
13607
|
try {
|
|
@@ -13254,7 +13609,7 @@ async function authInternal(provider, { serverUrl, authorizationCode, scope: sco
|
|
|
13254
13609
|
if (resourceMetadata.authorization_servers && resourceMetadata.authorization_servers.length > 0) {
|
|
13255
13610
|
authorizationServerUrl = resourceMetadata.authorization_servers[0];
|
|
13256
13611
|
}
|
|
13257
|
-
} catch (
|
|
13612
|
+
} catch (_c2) {
|
|
13258
13613
|
}
|
|
13259
13614
|
if (!authorizationServerUrl) {
|
|
13260
13615
|
authorizationServerUrl = new URL("/", serverUrl);
|
|
@@ -13268,16 +13623,29 @@ async function authInternal(provider, { serverUrl, authorizationCode, scope: sco
|
|
|
13268
13623
|
if (authorizationCode !== void 0) {
|
|
13269
13624
|
throw new Error("Existing OAuth client information is required when exchanging an authorization code");
|
|
13270
13625
|
}
|
|
13271
|
-
|
|
13272
|
-
|
|
13626
|
+
const supportsUrlBasedClientId = (metadata2 === null || metadata2 === void 0 ? void 0 : metadata2.client_id_metadata_document_supported) === true;
|
|
13627
|
+
const clientMetadataUrl = provider.clientMetadataUrl;
|
|
13628
|
+
if (clientMetadataUrl && !isHttpsUrl(clientMetadataUrl)) {
|
|
13629
|
+
throw new InvalidClientMetadataError(`clientMetadataUrl must be a valid HTTPS URL with a non-root pathname, got: ${clientMetadataUrl}`);
|
|
13630
|
+
}
|
|
13631
|
+
const shouldUseUrlBasedClientId = supportsUrlBasedClientId && clientMetadataUrl;
|
|
13632
|
+
if (shouldUseUrlBasedClientId) {
|
|
13633
|
+
clientInformation = {
|
|
13634
|
+
client_id: clientMetadataUrl
|
|
13635
|
+
};
|
|
13636
|
+
await ((_a3 = provider.saveClientInformation) === null || _a3 === void 0 ? void 0 : _a3.call(provider, clientInformation));
|
|
13637
|
+
} else {
|
|
13638
|
+
if (!provider.saveClientInformation) {
|
|
13639
|
+
throw new Error("OAuth client information must be saveable for dynamic registration");
|
|
13640
|
+
}
|
|
13641
|
+
const fullInformation = await registerClient(authorizationServerUrl, {
|
|
13642
|
+
metadata: metadata2,
|
|
13643
|
+
clientMetadata: provider.clientMetadata,
|
|
13644
|
+
fetchFn
|
|
13645
|
+
});
|
|
13646
|
+
await provider.saveClientInformation(fullInformation);
|
|
13647
|
+
clientInformation = fullInformation;
|
|
13273
13648
|
}
|
|
13274
|
-
const fullInformation = await registerClient(authorizationServerUrl, {
|
|
13275
|
-
metadata: metadata2,
|
|
13276
|
-
clientMetadata: provider.clientMetadata,
|
|
13277
|
-
fetchFn
|
|
13278
|
-
});
|
|
13279
|
-
await provider.saveClientInformation(fullInformation);
|
|
13280
|
-
clientInformation = fullInformation;
|
|
13281
13649
|
}
|
|
13282
13650
|
if (authorizationCode !== void 0) {
|
|
13283
13651
|
const codeVerifier2 = await provider.codeVerifier();
|
|
@@ -13320,13 +13688,23 @@ async function authInternal(provider, { serverUrl, authorizationCode, scope: sco
|
|
|
13320
13688
|
clientInformation,
|
|
13321
13689
|
state,
|
|
13322
13690
|
redirectUrl: provider.redirectUrl,
|
|
13323
|
-
scope: scope2 || provider.clientMetadata.scope,
|
|
13691
|
+
scope: scope2 || ((_b2 = resourceMetadata === null || resourceMetadata === void 0 ? void 0 : resourceMetadata.scopes_supported) === null || _b2 === void 0 ? void 0 : _b2.join(" ")) || provider.clientMetadata.scope,
|
|
13324
13692
|
resource
|
|
13325
13693
|
});
|
|
13326
13694
|
await provider.saveCodeVerifier(codeVerifier);
|
|
13327
13695
|
await provider.redirectToAuthorization(authorizationUrl);
|
|
13328
13696
|
return "REDIRECT";
|
|
13329
13697
|
}
|
|
13698
|
+
function isHttpsUrl(value) {
|
|
13699
|
+
if (!value)
|
|
13700
|
+
return false;
|
|
13701
|
+
try {
|
|
13702
|
+
const url2 = new URL(value);
|
|
13703
|
+
return url2.protocol === "https:" && url2.pathname !== "/";
|
|
13704
|
+
} catch (_a3) {
|
|
13705
|
+
return false;
|
|
13706
|
+
}
|
|
13707
|
+
}
|
|
13330
13708
|
async function selectResourceURL(serverUrl, provider, resourceMetadata) {
|
|
13331
13709
|
const defaultResource = resourceUrlFromServerUrl(serverUrl);
|
|
13332
13710
|
if (provider.validateResourceURL) {
|
|
@@ -13349,23 +13727,34 @@ function extractWWWAuthenticateParams(res) {
|
|
|
13349
13727
|
if (type2.toLowerCase() !== "bearer" || !scheme) {
|
|
13350
13728
|
return {};
|
|
13351
13729
|
}
|
|
13352
|
-
const
|
|
13353
|
-
const resourceMetadataMatch = resourceMetadataRegex.exec(authenticateHeader);
|
|
13354
|
-
const scopeRegex = /scope="([^"]*)"/;
|
|
13355
|
-
const scopeMatch = scopeRegex.exec(authenticateHeader);
|
|
13730
|
+
const resourceMetadataMatch = extractFieldFromWwwAuth(res, "resource_metadata") || void 0;
|
|
13356
13731
|
let resourceMetadataUrl;
|
|
13357
13732
|
if (resourceMetadataMatch) {
|
|
13358
13733
|
try {
|
|
13359
|
-
resourceMetadataUrl = new URL(resourceMetadataMatch
|
|
13734
|
+
resourceMetadataUrl = new URL(resourceMetadataMatch);
|
|
13360
13735
|
} catch (_a3) {
|
|
13361
13736
|
}
|
|
13362
13737
|
}
|
|
13363
|
-
const scope2 = (
|
|
13738
|
+
const scope2 = extractFieldFromWwwAuth(res, "scope") || void 0;
|
|
13739
|
+
const error = extractFieldFromWwwAuth(res, "error") || void 0;
|
|
13364
13740
|
return {
|
|
13365
13741
|
resourceMetadataUrl,
|
|
13366
|
-
scope: scope2
|
|
13742
|
+
scope: scope2,
|
|
13743
|
+
error
|
|
13367
13744
|
};
|
|
13368
13745
|
}
|
|
13746
|
+
function extractFieldFromWwwAuth(response, fieldName) {
|
|
13747
|
+
const wwwAuthHeader = response.headers.get("WWW-Authenticate");
|
|
13748
|
+
if (!wwwAuthHeader) {
|
|
13749
|
+
return null;
|
|
13750
|
+
}
|
|
13751
|
+
const pattern2 = new RegExp(`${fieldName}=(?:"([^"]+)"|([^\\s,]+))`);
|
|
13752
|
+
const match = wwwAuthHeader.match(pattern2);
|
|
13753
|
+
if (match) {
|
|
13754
|
+
return match[1] || match[2];
|
|
13755
|
+
}
|
|
13756
|
+
return null;
|
|
13757
|
+
}
|
|
13369
13758
|
async function discoverOAuthProtectedResourceMetadata(serverUrl, opts, fetchFn = fetch) {
|
|
13370
13759
|
const response = await discoverMetadataWithFallback(serverUrl, "oauth-protected-resource", fetchFn, {
|
|
13371
13760
|
protocolVersion: opts === null || opts === void 0 ? void 0 : opts.protocolVersion,
|
|
@@ -13379,13 +13768,13 @@ async function discoverOAuthProtectedResourceMetadata(serverUrl, opts, fetchFn =
|
|
|
13379
13768
|
}
|
|
13380
13769
|
return OAuthProtectedResourceMetadataSchema.parse(await response.json());
|
|
13381
13770
|
}
|
|
13382
|
-
async function fetchWithCorsRetry(
|
|
13771
|
+
async function fetchWithCorsRetry(url2, headers, fetchFn = fetch) {
|
|
13383
13772
|
try {
|
|
13384
|
-
return await fetchFn(
|
|
13773
|
+
return await fetchFn(url2, { headers });
|
|
13385
13774
|
} catch (error) {
|
|
13386
13775
|
if (error instanceof TypeError) {
|
|
13387
13776
|
if (headers) {
|
|
13388
|
-
return fetchWithCorsRetry(
|
|
13777
|
+
return fetchWithCorsRetry(url2, void 0, fetchFn);
|
|
13389
13778
|
} else {
|
|
13390
13779
|
return void 0;
|
|
13391
13780
|
}
|
|
@@ -13399,11 +13788,11 @@ function buildWellKnownPath(wellKnownPrefix, pathname = "", options = {}) {
|
|
|
13399
13788
|
}
|
|
13400
13789
|
return options.prependPathname ? `${pathname}/.well-known/${wellKnownPrefix}` : `/.well-known/${wellKnownPrefix}${pathname}`;
|
|
13401
13790
|
}
|
|
13402
|
-
async function tryMetadataDiscovery(
|
|
13791
|
+
async function tryMetadataDiscovery(url2, protocolVersion, fetchFn = fetch) {
|
|
13403
13792
|
const headers = {
|
|
13404
13793
|
"MCP-Protocol-Version": protocolVersion
|
|
13405
13794
|
};
|
|
13406
|
-
return await fetchWithCorsRetry(
|
|
13795
|
+
return await fetchWithCorsRetry(url2, headers, fetchFn);
|
|
13407
13796
|
}
|
|
13408
13797
|
function shouldAttemptFallback(response, pathname) {
|
|
13409
13798
|
return !response || response.status >= 400 && response.status < 500 && pathname !== "/";
|
|
@@ -13412,15 +13801,15 @@ async function discoverMetadataWithFallback(serverUrl, wellKnownType, fetchFn, o
|
|
|
13412
13801
|
var _a3, _b2;
|
|
13413
13802
|
const issuer = new URL(serverUrl);
|
|
13414
13803
|
const protocolVersion = (_a3 = opts === null || opts === void 0 ? void 0 : opts.protocolVersion) !== null && _a3 !== void 0 ? _a3 : LATEST_PROTOCOL_VERSION;
|
|
13415
|
-
let
|
|
13804
|
+
let url2;
|
|
13416
13805
|
if (opts === null || opts === void 0 ? void 0 : opts.metadataUrl) {
|
|
13417
|
-
|
|
13806
|
+
url2 = new URL(opts.metadataUrl);
|
|
13418
13807
|
} else {
|
|
13419
13808
|
const wellKnownPath = buildWellKnownPath(wellKnownType, issuer.pathname);
|
|
13420
|
-
|
|
13421
|
-
|
|
13809
|
+
url2 = new URL(wellKnownPath, (_b2 = opts === null || opts === void 0 ? void 0 : opts.metadataServerUrl) !== null && _b2 !== void 0 ? _b2 : issuer);
|
|
13810
|
+
url2.search = issuer.search;
|
|
13422
13811
|
}
|
|
13423
|
-
let response = await tryMetadataDiscovery(
|
|
13812
|
+
let response = await tryMetadataDiscovery(url2, protocolVersion, fetchFn);
|
|
13424
13813
|
if (!(opts === null || opts === void 0 ? void 0 : opts.metadataUrl) && shouldAttemptFallback(response, issuer.pathname)) {
|
|
13425
13814
|
const rootUrl = new URL(`/.well-known/${wellKnownType}`, issuer);
|
|
13426
13815
|
response = await tryMetadataDiscovery(rootUrl, protocolVersion, fetchFn);
|
|
@@ -13428,34 +13817,34 @@ async function discoverMetadataWithFallback(serverUrl, wellKnownType, fetchFn, o
|
|
|
13428
13817
|
return response;
|
|
13429
13818
|
}
|
|
13430
13819
|
function buildDiscoveryUrls(authorizationServerUrl) {
|
|
13431
|
-
const
|
|
13432
|
-
const hasPath =
|
|
13820
|
+
const url2 = typeof authorizationServerUrl === "string" ? new URL(authorizationServerUrl) : authorizationServerUrl;
|
|
13821
|
+
const hasPath = url2.pathname !== "/";
|
|
13433
13822
|
const urlsToTry = [];
|
|
13434
13823
|
if (!hasPath) {
|
|
13435
13824
|
urlsToTry.push({
|
|
13436
|
-
url: new URL("/.well-known/oauth-authorization-server",
|
|
13825
|
+
url: new URL("/.well-known/oauth-authorization-server", url2.origin),
|
|
13437
13826
|
type: "oauth"
|
|
13438
13827
|
});
|
|
13439
13828
|
urlsToTry.push({
|
|
13440
|
-
url: new URL(`/.well-known/openid-configuration`,
|
|
13829
|
+
url: new URL(`/.well-known/openid-configuration`, url2.origin),
|
|
13441
13830
|
type: "oidc"
|
|
13442
13831
|
});
|
|
13443
13832
|
return urlsToTry;
|
|
13444
13833
|
}
|
|
13445
|
-
let pathname =
|
|
13834
|
+
let pathname = url2.pathname;
|
|
13446
13835
|
if (pathname.endsWith("/")) {
|
|
13447
13836
|
pathname = pathname.slice(0, -1);
|
|
13448
13837
|
}
|
|
13449
13838
|
urlsToTry.push({
|
|
13450
|
-
url: new URL(`/.well-known/oauth-authorization-server${pathname}`,
|
|
13839
|
+
url: new URL(`/.well-known/oauth-authorization-server${pathname}`, url2.origin),
|
|
13451
13840
|
type: "oauth"
|
|
13452
13841
|
});
|
|
13453
13842
|
urlsToTry.push({
|
|
13454
|
-
url: new URL(`/.well-known/openid-configuration${pathname}`,
|
|
13843
|
+
url: new URL(`/.well-known/openid-configuration${pathname}`, url2.origin),
|
|
13455
13844
|
type: "oidc"
|
|
13456
13845
|
});
|
|
13457
13846
|
urlsToTry.push({
|
|
13458
|
-
url: new URL(`${pathname}/.well-known/openid-configuration`,
|
|
13847
|
+
url: new URL(`${pathname}/.well-known/openid-configuration`, url2.origin),
|
|
13459
13848
|
type: "oidc"
|
|
13460
13849
|
});
|
|
13461
13850
|
return urlsToTry;
|
|
@@ -13627,6 +14016,7 @@ const auth$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProper
|
|
|
13627
14016
|
discoverOAuthProtectedResourceMetadata,
|
|
13628
14017
|
exchangeAuthorization,
|
|
13629
14018
|
extractWWWAuthenticateParams,
|
|
14019
|
+
isHttpsUrl,
|
|
13630
14020
|
parseErrorResponse,
|
|
13631
14021
|
refreshAuthorization,
|
|
13632
14022
|
registerClient,
|
|
@@ -13770,15 +14160,16 @@ class StreamableHTTPError extends Error {
|
|
|
13770
14160
|
}
|
|
13771
14161
|
}
|
|
13772
14162
|
class StreamableHTTPClientTransport {
|
|
13773
|
-
constructor(
|
|
14163
|
+
constructor(url2, opts) {
|
|
13774
14164
|
var _a3;
|
|
13775
14165
|
this._hasCompletedAuthFlow = false;
|
|
13776
|
-
this._url =
|
|
14166
|
+
this._url = url2;
|
|
13777
14167
|
this._resourceMetadataUrl = void 0;
|
|
13778
14168
|
this._scope = void 0;
|
|
13779
14169
|
this._requestInit = opts === null || opts === void 0 ? void 0 : opts.requestInit;
|
|
13780
14170
|
this._authProvider = opts === null || opts === void 0 ? void 0 : opts.authProvider;
|
|
13781
14171
|
this._fetch = opts === null || opts === void 0 ? void 0 : opts.fetch;
|
|
14172
|
+
this._fetchWithInit = createFetchWithInit(opts === null || opts === void 0 ? void 0 : opts.fetch, opts === null || opts === void 0 ? void 0 : opts.requestInit);
|
|
13782
14173
|
this._sessionId = opts === null || opts === void 0 ? void 0 : opts.sessionId;
|
|
13783
14174
|
this._reconnectionOptions = (_a3 = opts === null || opts === void 0 ? void 0 : opts.reconnectionOptions) !== null && _a3 !== void 0 ? _a3 : DEFAULT_STREAMABLE_HTTP_RECONNECTION_OPTIONS;
|
|
13784
14175
|
}
|
|
@@ -13793,7 +14184,7 @@ class StreamableHTTPClientTransport {
|
|
|
13793
14184
|
serverUrl: this._url,
|
|
13794
14185
|
resourceMetadataUrl: this._resourceMetadataUrl,
|
|
13795
14186
|
scope: this._scope,
|
|
13796
|
-
fetchFn: this.
|
|
14187
|
+
fetchFn: this._fetchWithInit
|
|
13797
14188
|
});
|
|
13798
14189
|
} catch (error) {
|
|
13799
14190
|
(_a3 = this.onerror) === null || _a3 === void 0 ? void 0 : _a3.call(this, error);
|
|
@@ -13819,7 +14210,7 @@ class StreamableHTTPClientTransport {
|
|
|
13819
14210
|
if (this._protocolVersion) {
|
|
13820
14211
|
headers["mcp-protocol-version"] = this._protocolVersion;
|
|
13821
14212
|
}
|
|
13822
|
-
const extraHeaders =
|
|
14213
|
+
const extraHeaders = normalizeHeaders((_a3 = this._requestInit) === null || _a3 === void 0 ? void 0 : _a3.headers);
|
|
13823
14214
|
return new Headers({
|
|
13824
14215
|
...headers,
|
|
13825
14216
|
...extraHeaders
|
|
@@ -13861,24 +14252,16 @@ class StreamableHTTPClientTransport {
|
|
|
13861
14252
|
* @returns Time to wait in milliseconds before next reconnection attempt
|
|
13862
14253
|
*/
|
|
13863
14254
|
_getNextReconnectionDelay(attempt) {
|
|
14255
|
+
if (this._serverRetryMs !== void 0) {
|
|
14256
|
+
return this._serverRetryMs;
|
|
14257
|
+
}
|
|
13864
14258
|
const initialDelay = this._reconnectionOptions.initialReconnectionDelay;
|
|
13865
14259
|
const growFactor = this._reconnectionOptions.reconnectionDelayGrowFactor;
|
|
13866
14260
|
const maxDelay = this._reconnectionOptions.maxReconnectionDelay;
|
|
13867
14261
|
return Math.min(initialDelay * Math.pow(growFactor, attempt), maxDelay);
|
|
13868
14262
|
}
|
|
13869
|
-
_normalizeHeaders(headers) {
|
|
13870
|
-
if (!headers)
|
|
13871
|
-
return {};
|
|
13872
|
-
if (headers instanceof Headers) {
|
|
13873
|
-
return Object.fromEntries(headers.entries());
|
|
13874
|
-
}
|
|
13875
|
-
if (Array.isArray(headers)) {
|
|
13876
|
-
return Object.fromEntries(headers);
|
|
13877
|
-
}
|
|
13878
|
-
return { ...headers };
|
|
13879
|
-
}
|
|
13880
14263
|
/**
|
|
13881
|
-
* Schedule a reconnection attempt
|
|
14264
|
+
* Schedule a reconnection attempt using server-provided retry interval or backoff
|
|
13882
14265
|
*
|
|
13883
14266
|
* @param lastEventId The ID of the last received event for resumability
|
|
13884
14267
|
* @param attemptCount Current reconnection attempt count for this specific stream
|
|
@@ -13905,10 +14288,15 @@ class StreamableHTTPClientTransport {
|
|
|
13905
14288
|
}
|
|
13906
14289
|
const { onresumptiontoken, replayMessageId } = options;
|
|
13907
14290
|
let lastEventId;
|
|
14291
|
+
let hasPrimingEvent = false;
|
|
13908
14292
|
const processStream = async () => {
|
|
13909
14293
|
var _a3, _b2, _c2, _d2;
|
|
13910
14294
|
try {
|
|
13911
|
-
const reader = stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream(
|
|
14295
|
+
const reader = stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream({
|
|
14296
|
+
onRetry: (retryMs) => {
|
|
14297
|
+
this._serverRetryMs = retryMs;
|
|
14298
|
+
}
|
|
14299
|
+
})).getReader();
|
|
13912
14300
|
while (true) {
|
|
13913
14301
|
const { value: event, done } = await reader.read();
|
|
13914
14302
|
if (done) {
|
|
@@ -13916,6 +14304,7 @@ class StreamableHTTPClientTransport {
|
|
|
13916
14304
|
}
|
|
13917
14305
|
if (event.id) {
|
|
13918
14306
|
lastEventId = event.id;
|
|
14307
|
+
hasPrimingEvent = true;
|
|
13919
14308
|
onresumptiontoken === null || onresumptiontoken === void 0 ? void 0 : onresumptiontoken(event.id);
|
|
13920
14309
|
}
|
|
13921
14310
|
if (!event.event || event.event === "message") {
|
|
@@ -13930,9 +14319,18 @@ class StreamableHTTPClientTransport {
|
|
|
13930
14319
|
}
|
|
13931
14320
|
}
|
|
13932
14321
|
}
|
|
14322
|
+
const canResume = isReconnectable || hasPrimingEvent;
|
|
14323
|
+
if (canResume && this._abortController && !this._abortController.signal.aborted) {
|
|
14324
|
+
this._scheduleReconnection({
|
|
14325
|
+
resumptionToken: lastEventId,
|
|
14326
|
+
onresumptiontoken,
|
|
14327
|
+
replayMessageId
|
|
14328
|
+
}, 0);
|
|
14329
|
+
}
|
|
13933
14330
|
} catch (error) {
|
|
13934
14331
|
(_c2 = this.onerror) === null || _c2 === void 0 ? void 0 : _c2.call(this, new Error(`SSE stream disconnected: ${error}`));
|
|
13935
|
-
|
|
14332
|
+
const canResume = isReconnectable || hasPrimingEvent;
|
|
14333
|
+
if (canResume && this._abortController && !this._abortController.signal.aborted) {
|
|
13936
14334
|
try {
|
|
13937
14335
|
this._scheduleReconnection({
|
|
13938
14336
|
resumptionToken: lastEventId,
|
|
@@ -13965,7 +14363,7 @@ class StreamableHTTPClientTransport {
|
|
|
13965
14363
|
authorizationCode,
|
|
13966
14364
|
resourceMetadataUrl: this._resourceMetadataUrl,
|
|
13967
14365
|
scope: this._scope,
|
|
13968
|
-
fetchFn: this.
|
|
14366
|
+
fetchFn: this._fetchWithInit
|
|
13969
14367
|
});
|
|
13970
14368
|
if (result !== "AUTHORIZED") {
|
|
13971
14369
|
throw new UnauthorizedError("Failed to authorize");
|
|
@@ -14014,7 +14412,7 @@ class StreamableHTTPClientTransport {
|
|
|
14014
14412
|
serverUrl: this._url,
|
|
14015
14413
|
resourceMetadataUrl: this._resourceMetadataUrl,
|
|
14016
14414
|
scope: this._scope,
|
|
14017
|
-
fetchFn: this.
|
|
14415
|
+
fetchFn: this._fetchWithInit
|
|
14018
14416
|
});
|
|
14019
14417
|
if (result !== "AUTHORIZED") {
|
|
14020
14418
|
throw new UnauthorizedError();
|
|
@@ -14022,10 +14420,37 @@ class StreamableHTTPClientTransport {
|
|
|
14022
14420
|
this._hasCompletedAuthFlow = true;
|
|
14023
14421
|
return this.send(message);
|
|
14024
14422
|
}
|
|
14423
|
+
if (response.status === 403 && this._authProvider) {
|
|
14424
|
+
const { resourceMetadataUrl, scope: scope2, error } = extractWWWAuthenticateParams(response);
|
|
14425
|
+
if (error === "insufficient_scope") {
|
|
14426
|
+
const wwwAuthHeader = response.headers.get("WWW-Authenticate");
|
|
14427
|
+
if (this._lastUpscopingHeader === wwwAuthHeader) {
|
|
14428
|
+
throw new StreamableHTTPError(403, "Server returned 403 after trying upscoping");
|
|
14429
|
+
}
|
|
14430
|
+
if (scope2) {
|
|
14431
|
+
this._scope = scope2;
|
|
14432
|
+
}
|
|
14433
|
+
if (resourceMetadataUrl) {
|
|
14434
|
+
this._resourceMetadataUrl = resourceMetadataUrl;
|
|
14435
|
+
}
|
|
14436
|
+
this._lastUpscopingHeader = wwwAuthHeader !== null && wwwAuthHeader !== void 0 ? wwwAuthHeader : void 0;
|
|
14437
|
+
const result = await auth(this._authProvider, {
|
|
14438
|
+
serverUrl: this._url,
|
|
14439
|
+
resourceMetadataUrl: this._resourceMetadataUrl,
|
|
14440
|
+
scope: this._scope,
|
|
14441
|
+
fetchFn: this._fetch
|
|
14442
|
+
});
|
|
14443
|
+
if (result !== "AUTHORIZED") {
|
|
14444
|
+
throw new UnauthorizedError();
|
|
14445
|
+
}
|
|
14446
|
+
return this.send(message);
|
|
14447
|
+
}
|
|
14448
|
+
}
|
|
14025
14449
|
const text = await response.text().catch(() => null);
|
|
14026
14450
|
throw new Error(`Error POSTing to endpoint (HTTP ${response.status}): ${text}`);
|
|
14027
14451
|
}
|
|
14028
14452
|
this._hasCompletedAuthFlow = false;
|
|
14453
|
+
this._lastUpscopingHeader = void 0;
|
|
14029
14454
|
if (response.status === 202) {
|
|
14030
14455
|
if (isInitializedNotification(message)) {
|
|
14031
14456
|
this._startOrAuthSse({ resumptionToken: void 0 }).catch((err) => {
|
|
@@ -14099,6 +14524,19 @@ class StreamableHTTPClientTransport {
|
|
|
14099
14524
|
get protocolVersion() {
|
|
14100
14525
|
return this._protocolVersion;
|
|
14101
14526
|
}
|
|
14527
|
+
/**
|
|
14528
|
+
* Resume an SSE stream from a previous event ID.
|
|
14529
|
+
* Opens a GET SSE connection with Last-Event-ID header to replay missed events.
|
|
14530
|
+
*
|
|
14531
|
+
* @param lastEventId The event ID to resume from
|
|
14532
|
+
* @param options Optional callback to receive new resumption tokens
|
|
14533
|
+
*/
|
|
14534
|
+
async resumeStream(lastEventId, options) {
|
|
14535
|
+
await this._startOrAuthSse({
|
|
14536
|
+
resumptionToken: lastEventId,
|
|
14537
|
+
onresumptiontoken: options === null || options === void 0 ? void 0 : options.onresumptiontoken
|
|
14538
|
+
});
|
|
14539
|
+
}
|
|
14102
14540
|
}
|
|
14103
14541
|
class ErrorEvent extends Event {
|
|
14104
14542
|
/**
|
|
@@ -14163,7 +14601,7 @@ var __typeError$1 = (msg) => {
|
|
|
14163
14601
|
throw TypeError(msg);
|
|
14164
14602
|
}, __accessCheck$1 = (obj, member, msg) => member.has(obj) || __typeError$1("Cannot " + msg), __privateGet$1 = (obj, member, getter) => (__accessCheck$1(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj)), __privateAdd$1 = (obj, member, value) => member.has(obj) ? __typeError$1("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value), __privateSet = (obj, member, value, setter) => (__accessCheck$1(obj, member, "write to private field"), member.set(obj, value), value), __privateMethod = (obj, member, method) => (__accessCheck$1(obj, member, "access private method"), method), _readyState, _url, _redirectUrl, _withCredentials, _fetch, _reconnectInterval, _reconnectTimer, _lastEventId, _controller, _parser, _onError, _onMessage, _onOpen, _EventSource_instances, connect_fn, _onFetchResponse, _onFetchError, getRequestOptions_fn, _onEvent, _onRetryChange, failConnection_fn, scheduleReconnect_fn, _reconnect;
|
|
14165
14603
|
class EventSource extends EventTarget {
|
|
14166
|
-
constructor(
|
|
14604
|
+
constructor(url2, eventSourceInitDict) {
|
|
14167
14605
|
var _a3, _b2;
|
|
14168
14606
|
super(), __privateAdd$1(this, _EventSource_instances), this.CONNECTING = 0, this.OPEN = 1, this.CLOSED = 2, __privateAdd$1(this, _readyState), __privateAdd$1(this, _url), __privateAdd$1(this, _redirectUrl), __privateAdd$1(this, _withCredentials), __privateAdd$1(this, _fetch), __privateAdd$1(this, _reconnectInterval), __privateAdd$1(this, _reconnectTimer), __privateAdd$1(this, _lastEventId, null), __privateAdd$1(this, _controller), __privateAdd$1(this, _parser), __privateAdd$1(this, _onError, null), __privateAdd$1(this, _onMessage, null), __privateAdd$1(this, _onOpen, null), __privateAdd$1(this, _onFetchResponse, async (response) => {
|
|
14169
14607
|
var _a22;
|
|
@@ -14211,10 +14649,10 @@ class EventSource extends EventTarget {
|
|
|
14211
14649
|
__privateSet(this, _reconnectTimer, void 0), __privateGet$1(this, _readyState) === this.CONNECTING && __privateMethod(this, _EventSource_instances, connect_fn).call(this);
|
|
14212
14650
|
});
|
|
14213
14651
|
try {
|
|
14214
|
-
if (
|
|
14215
|
-
__privateSet(this, _url,
|
|
14216
|
-
else if (typeof
|
|
14217
|
-
__privateSet(this, _url, new URL(
|
|
14652
|
+
if (url2 instanceof URL)
|
|
14653
|
+
__privateSet(this, _url, url2);
|
|
14654
|
+
else if (typeof url2 == "string")
|
|
14655
|
+
__privateSet(this, _url, new URL(url2, getBaseURL()));
|
|
14218
14656
|
else
|
|
14219
14657
|
throw new Error("Invalid URL");
|
|
14220
14658
|
} catch {
|
|
@@ -14375,14 +14813,15 @@ class SseError extends Error {
|
|
|
14375
14813
|
}
|
|
14376
14814
|
}
|
|
14377
14815
|
class SSEClientTransport {
|
|
14378
|
-
constructor(
|
|
14379
|
-
this._url =
|
|
14816
|
+
constructor(url2, opts) {
|
|
14817
|
+
this._url = url2;
|
|
14380
14818
|
this._resourceMetadataUrl = void 0;
|
|
14381
14819
|
this._scope = void 0;
|
|
14382
14820
|
this._eventSourceInit = opts === null || opts === void 0 ? void 0 : opts.eventSourceInit;
|
|
14383
14821
|
this._requestInit = opts === null || opts === void 0 ? void 0 : opts.requestInit;
|
|
14384
14822
|
this._authProvider = opts === null || opts === void 0 ? void 0 : opts.authProvider;
|
|
14385
14823
|
this._fetch = opts === null || opts === void 0 ? void 0 : opts.fetch;
|
|
14824
|
+
this._fetchWithInit = createFetchWithInit(opts === null || opts === void 0 ? void 0 : opts.fetch, opts === null || opts === void 0 ? void 0 : opts.requestInit);
|
|
14386
14825
|
}
|
|
14387
14826
|
async _authThenStart() {
|
|
14388
14827
|
var _a3;
|
|
@@ -14395,7 +14834,7 @@ class SSEClientTransport {
|
|
|
14395
14834
|
serverUrl: this._url,
|
|
14396
14835
|
resourceMetadataUrl: this._resourceMetadataUrl,
|
|
14397
14836
|
scope: this._scope,
|
|
14398
|
-
fetchFn: this.
|
|
14837
|
+
fetchFn: this._fetchWithInit
|
|
14399
14838
|
});
|
|
14400
14839
|
} catch (error) {
|
|
14401
14840
|
(_a3 = this.onerror) === null || _a3 === void 0 ? void 0 : _a3.call(this, error);
|
|
@@ -14426,10 +14865,10 @@ class SSEClientTransport {
|
|
|
14426
14865
|
return new Promise((resolve2, reject) => {
|
|
14427
14866
|
this._eventSource = new EventSource(this._url.href, {
|
|
14428
14867
|
...this._eventSourceInit,
|
|
14429
|
-
fetch: async (
|
|
14868
|
+
fetch: async (url2, init) => {
|
|
14430
14869
|
const headers = await this._commonHeaders();
|
|
14431
14870
|
headers.set("Accept", "text/event-stream");
|
|
14432
|
-
const response = await fetchImpl(
|
|
14871
|
+
const response = await fetchImpl(url2, {
|
|
14433
14872
|
...init,
|
|
14434
14873
|
headers
|
|
14435
14874
|
});
|
|
@@ -14502,7 +14941,7 @@ class SSEClientTransport {
|
|
|
14502
14941
|
authorizationCode,
|
|
14503
14942
|
resourceMetadataUrl: this._resourceMetadataUrl,
|
|
14504
14943
|
scope: this._scope,
|
|
14505
|
-
fetchFn: this.
|
|
14944
|
+
fetchFn: this._fetchWithInit
|
|
14506
14945
|
});
|
|
14507
14946
|
if (result !== "AUTHORIZED") {
|
|
14508
14947
|
throw new UnauthorizedError("Failed to authorize");
|
|
@@ -14539,7 +14978,7 @@ class SSEClientTransport {
|
|
|
14539
14978
|
serverUrl: this._url,
|
|
14540
14979
|
resourceMetadataUrl: this._resourceMetadataUrl,
|
|
14541
14980
|
scope: this._scope,
|
|
14542
|
-
fetchFn: this.
|
|
14981
|
+
fetchFn: this._fetchWithInit
|
|
14543
14982
|
});
|
|
14544
14983
|
if (result !== "AUTHORIZED") {
|
|
14545
14984
|
throw new UnauthorizedError();
|
|
@@ -14762,9 +15201,9 @@ var SseConnectionManager = (_f = class extends ConnectionManager {
|
|
|
14762
15201
|
* @param url The SSE endpoint URL.
|
|
14763
15202
|
* @param opts Optional transport options (auth, headers, etc.).
|
|
14764
15203
|
*/
|
|
14765
|
-
constructor(
|
|
15204
|
+
constructor(url2, opts) {
|
|
14766
15205
|
super();
|
|
14767
|
-
this.url = typeof
|
|
15206
|
+
this.url = typeof url2 === "string" ? new URL(url2) : url2;
|
|
14768
15207
|
this.opts = opts;
|
|
14769
15208
|
}
|
|
14770
15209
|
/**
|
|
@@ -15051,9 +15490,9 @@ var WebSocketConnectionManager = (_h = class extends ConnectionManager {
|
|
|
15051
15490
|
* @param url The WebSocket URL to connect to.
|
|
15052
15491
|
* @param headers Optional headers to include in the connection handshake.
|
|
15053
15492
|
*/
|
|
15054
|
-
constructor(
|
|
15493
|
+
constructor(url2, headers = {}) {
|
|
15055
15494
|
super();
|
|
15056
|
-
this.url =
|
|
15495
|
+
this.url = url2;
|
|
15057
15496
|
this.headers = headers;
|
|
15058
15497
|
}
|
|
15059
15498
|
/** Establish a WebSocket connection and wait until it is open. */
|
|
@@ -15113,9 +15552,9 @@ var WebSocketConnector = (_i = class extends BaseConnector {
|
|
|
15113
15552
|
receiverTask = null;
|
|
15114
15553
|
pending = /* @__PURE__ */ new Map();
|
|
15115
15554
|
toolsCache = null;
|
|
15116
|
-
constructor(
|
|
15555
|
+
constructor(url2, opts = {}) {
|
|
15117
15556
|
super();
|
|
15118
|
-
this.url =
|
|
15557
|
+
this.url = url2;
|
|
15119
15558
|
this.headers = { ...opts.headers ?? {} };
|
|
15120
15559
|
if (opts.authToken) this.headers.Authorization = `Bearer ${opts.authToken}`;
|
|
15121
15560
|
}
|
|
@@ -15428,7 +15867,7 @@ var BrowserMCPClient = (_k = class extends BaseMCPClient {
|
|
|
15428
15867
|
*/
|
|
15429
15868
|
createConnectorFromConfig(serverConfig) {
|
|
15430
15869
|
const {
|
|
15431
|
-
url,
|
|
15870
|
+
url: url2,
|
|
15432
15871
|
transport,
|
|
15433
15872
|
headers,
|
|
15434
15873
|
authToken,
|
|
@@ -15437,7 +15876,7 @@ var BrowserMCPClient = (_k = class extends BaseMCPClient {
|
|
|
15437
15876
|
clientOptions,
|
|
15438
15877
|
samplingCallback
|
|
15439
15878
|
} = serverConfig;
|
|
15440
|
-
if (!
|
|
15879
|
+
if (!url2) {
|
|
15441
15880
|
throw new Error("Server URL is required");
|
|
15442
15881
|
}
|
|
15443
15882
|
const connectorOptions = {
|
|
@@ -15462,12 +15901,12 @@ var BrowserMCPClient = (_k = class extends BaseMCPClient {
|
|
|
15462
15901
|
"[BrowserMCPClient] No clientOptions provided to connector!"
|
|
15463
15902
|
);
|
|
15464
15903
|
}
|
|
15465
|
-
if (transport === "websocket" ||
|
|
15466
|
-
return new WebSocketConnector(
|
|
15467
|
-
} else if (transport === "http" ||
|
|
15468
|
-
return new HttpConnector(
|
|
15904
|
+
if (transport === "websocket" || url2.startsWith("ws://") || url2.startsWith("wss://")) {
|
|
15905
|
+
return new WebSocketConnector(url2, connectorOptions);
|
|
15906
|
+
} else if (transport === "http" || url2.startsWith("http://") || url2.startsWith("https://")) {
|
|
15907
|
+
return new HttpConnector(url2, connectorOptions);
|
|
15469
15908
|
} else {
|
|
15470
|
-
return new HttpConnector(
|
|
15909
|
+
return new HttpConnector(url2, connectorOptions);
|
|
15471
15910
|
}
|
|
15472
15911
|
}
|
|
15473
15912
|
}, __name(_k, "BrowserMCPClient"), _k);
|
|
@@ -15475,20 +15914,20 @@ function sanitizeUrl(raw) {
|
|
|
15475
15914
|
const abort = /* @__PURE__ */ __name(() => {
|
|
15476
15915
|
throw new Error(`Invalid url to pass to open(): ${raw}`);
|
|
15477
15916
|
}, "abort");
|
|
15478
|
-
let
|
|
15917
|
+
let url2;
|
|
15479
15918
|
try {
|
|
15480
|
-
|
|
15919
|
+
url2 = new URL(raw);
|
|
15481
15920
|
} catch (_2) {
|
|
15482
15921
|
abort();
|
|
15483
15922
|
}
|
|
15484
|
-
if (
|
|
15485
|
-
if (
|
|
15486
|
-
if (
|
|
15487
|
-
if (
|
|
15488
|
-
|
|
15489
|
-
|
|
15490
|
-
|
|
15491
|
-
return
|
|
15923
|
+
if (url2.protocol !== "https:" && url2.protocol !== "http:") abort();
|
|
15924
|
+
if (url2.hostname !== encodeURIComponent(url2.hostname)) abort();
|
|
15925
|
+
if (url2.username) url2.username = encodeURIComponent(url2.username);
|
|
15926
|
+
if (url2.password) url2.password = encodeURIComponent(url2.password);
|
|
15927
|
+
url2.pathname = url2.pathname.slice(0, 1) + encodeURIComponent(url2.pathname.slice(1)).replace(/%2f/gi, "/");
|
|
15928
|
+
url2.search = url2.search.slice(0, 1) + Array.from(url2.searchParams.entries()).map(sanitizeParam).join("&");
|
|
15929
|
+
url2.hash = url2.hash.slice(0, 1) + encodeURIComponent(url2.hash.slice(1));
|
|
15930
|
+
return url2.href;
|
|
15492
15931
|
}
|
|
15493
15932
|
__name(sanitizeUrl, "sanitizeUrl");
|
|
15494
15933
|
function sanitizeParam([k2, v2]) {
|
|
@@ -16306,7 +16745,7 @@ var DEFAULT_RECONNECT_DELAY = 3e3;
|
|
|
16306
16745
|
var DEFAULT_RETRY_DELAY = 5e3;
|
|
16307
16746
|
function useMcp(options) {
|
|
16308
16747
|
const {
|
|
16309
|
-
url,
|
|
16748
|
+
url: url2,
|
|
16310
16749
|
enabled = true,
|
|
16311
16750
|
clientName,
|
|
16312
16751
|
clientUri,
|
|
@@ -16417,7 +16856,7 @@ function useMcp(options) {
|
|
|
16417
16856
|
[addLog]
|
|
16418
16857
|
);
|
|
16419
16858
|
const connect = reactExports.useCallback(async () => {
|
|
16420
|
-
if (!enabled || !
|
|
16859
|
+
if (!enabled || !url2) {
|
|
16421
16860
|
addLog(
|
|
16422
16861
|
"debug",
|
|
16423
16862
|
enabled ? "No server URL provided, skipping connection." : "Connection disabled via enabled flag."
|
|
@@ -16440,10 +16879,10 @@ function useMcp(options) {
|
|
|
16440
16879
|
setState("discovering");
|
|
16441
16880
|
addLog(
|
|
16442
16881
|
"info",
|
|
16443
|
-
`Connecting attempt #${connectAttemptRef.current} to ${
|
|
16882
|
+
`Connecting attempt #${connectAttemptRef.current} to ${url2}...`
|
|
16444
16883
|
);
|
|
16445
16884
|
if (!authProviderRef.current) {
|
|
16446
|
-
authProviderRef.current = new BrowserOAuthClientProvider(
|
|
16885
|
+
authProviderRef.current = new BrowserOAuthClientProvider(url2, {
|
|
16447
16886
|
storageKeyPrefix,
|
|
16448
16887
|
clientName,
|
|
16449
16888
|
clientUri,
|
|
@@ -16466,7 +16905,7 @@ function useMcp(options) {
|
|
|
16466
16905
|
try {
|
|
16467
16906
|
const serverName = "inspector-server";
|
|
16468
16907
|
const serverConfig = {
|
|
16469
|
-
url,
|
|
16908
|
+
url: url2,
|
|
16470
16909
|
transport: transportTypeParam === "sse" ? "http" : transportTypeParam
|
|
16471
16910
|
};
|
|
16472
16911
|
if (customHeaders && Object.keys(customHeaders).length > 0) {
|
|
@@ -16494,9 +16933,9 @@ function useMcp(options) {
|
|
|
16494
16933
|
"[useMcp] Applying transport wrapper for server:",
|
|
16495
16934
|
serverName,
|
|
16496
16935
|
"url:",
|
|
16497
|
-
|
|
16936
|
+
url2
|
|
16498
16937
|
);
|
|
16499
|
-
return wrapTransport(transport,
|
|
16938
|
+
return wrapTransport(transport, url2);
|
|
16500
16939
|
} : void 0
|
|
16501
16940
|
});
|
|
16502
16941
|
const session = await clientRef.current.createSession(
|
|
@@ -16550,7 +16989,7 @@ function useMcp(options) {
|
|
|
16550
16989
|
const { auth: auth3 } = await Promise.resolve().then(() => auth$1);
|
|
16551
16990
|
return { auth: auth3 };
|
|
16552
16991
|
}, true ? void 0 : void 0);
|
|
16553
|
-
const baseUrl = new URL(
|
|
16992
|
+
const baseUrl = new URL(url2).origin;
|
|
16554
16993
|
auth2(authProviderRef.current, { serverUrl: baseUrl }).catch(
|
|
16555
16994
|
() => {
|
|
16556
16995
|
}
|
|
@@ -16620,7 +17059,7 @@ function useMcp(options) {
|
|
|
16620
17059
|
addLog,
|
|
16621
17060
|
failConnection,
|
|
16622
17061
|
disconnect,
|
|
16623
|
-
|
|
17062
|
+
url2,
|
|
16624
17063
|
storageKeyPrefix,
|
|
16625
17064
|
clientName,
|
|
16626
17065
|
clientUri,
|
|
@@ -16688,7 +17127,7 @@ function useMcp(options) {
|
|
|
16688
17127
|
authProviderRef.current,
|
|
16689
17128
|
"Auth Provider not available for manual auth"
|
|
16690
17129
|
);
|
|
16691
|
-
assert$1(
|
|
17130
|
+
assert$1(url2, "Server URL is required for authentication");
|
|
16692
17131
|
addLog("info", "Clearing all OAuth state and initiating fresh flow...");
|
|
16693
17132
|
const hashPrefix = `${storageKeyPrefix}:${authProviderRef.current.serverUrlHash}`;
|
|
16694
17133
|
Object.keys(localStorage).forEach((key) => {
|
|
@@ -16702,7 +17141,7 @@ function useMcp(options) {
|
|
|
16702
17141
|
}
|
|
16703
17142
|
});
|
|
16704
17143
|
setState("authenticating");
|
|
16705
|
-
const freshAuthProvider = new BrowserOAuthClientProvider(
|
|
17144
|
+
const freshAuthProvider = new BrowserOAuthClientProvider(url2, {
|
|
16706
17145
|
storageKeyPrefix,
|
|
16707
17146
|
clientName,
|
|
16708
17147
|
clientUri,
|
|
@@ -16718,7 +17157,7 @@ function useMcp(options) {
|
|
|
16718
17157
|
const { auth: auth3 } = await Promise.resolve().then(() => auth$1);
|
|
16719
17158
|
return { auth: auth3 };
|
|
16720
17159
|
}, true ? void 0 : void 0);
|
|
16721
|
-
const baseUrl = new URL(
|
|
17160
|
+
const baseUrl = new URL(url2).origin;
|
|
16722
17161
|
auth2(freshAuthProvider, {
|
|
16723
17162
|
serverUrl: baseUrl
|
|
16724
17163
|
}).catch((err) => {
|
|
@@ -16756,7 +17195,7 @@ function useMcp(options) {
|
|
|
16756
17195
|
addLog,
|
|
16757
17196
|
retry,
|
|
16758
17197
|
authUrl,
|
|
16759
|
-
|
|
17198
|
+
url2,
|
|
16760
17199
|
useRedirectFlow,
|
|
16761
17200
|
onPopupWindow,
|
|
16762
17201
|
storageKeyPrefix,
|
|
@@ -16767,13 +17206,13 @@ function useMcp(options) {
|
|
|
16767
17206
|
const clearStorage = reactExports.useCallback(() => {
|
|
16768
17207
|
if (authProviderRef.current) {
|
|
16769
17208
|
const count2 = authProviderRef.current.clearStorage();
|
|
16770
|
-
addLog("info", `Cleared ${count2} item(s) from localStorage for ${
|
|
17209
|
+
addLog("info", `Cleared ${count2} item(s) from localStorage for ${url2}.`);
|
|
16771
17210
|
setAuthUrl(void 0);
|
|
16772
17211
|
disconnect();
|
|
16773
17212
|
} else {
|
|
16774
17213
|
addLog("warn", "Auth provider not initialized, cannot clear storage.");
|
|
16775
17214
|
}
|
|
16776
|
-
}, [
|
|
17215
|
+
}, [url2, addLog, disconnect]);
|
|
16777
17216
|
const listResources = reactExports.useCallback(async () => {
|
|
16778
17217
|
if (stateRef.current !== "ready" || !clientRef.current) {
|
|
16779
17218
|
throw new Error(
|
|
@@ -16915,7 +17354,7 @@ function useMcp(options) {
|
|
|
16915
17354
|
}, [addLog]);
|
|
16916
17355
|
reactExports.useEffect(() => {
|
|
16917
17356
|
isMountedRef.current = true;
|
|
16918
|
-
if (!enabled || !
|
|
17357
|
+
if (!enabled || !url2) {
|
|
16919
17358
|
addLog(
|
|
16920
17359
|
"debug",
|
|
16921
17360
|
enabled ? "No server URL provided, skipping connection." : "Connection disabled via enabled flag."
|
|
@@ -16927,8 +17366,8 @@ function useMcp(options) {
|
|
|
16927
17366
|
}
|
|
16928
17367
|
addLog("debug", "useMcp mounted, initiating connection.");
|
|
16929
17368
|
connectAttemptRef.current = 0;
|
|
16930
|
-
if (!authProviderRef.current || authProviderRef.current.serverUrl !==
|
|
16931
|
-
authProviderRef.current = new BrowserOAuthClientProvider(
|
|
17369
|
+
if (!authProviderRef.current || authProviderRef.current.serverUrl !== url2) {
|
|
17370
|
+
authProviderRef.current = new BrowserOAuthClientProvider(url2, {
|
|
16932
17371
|
storageKeyPrefix,
|
|
16933
17372
|
clientName,
|
|
16934
17373
|
clientUri,
|
|
@@ -16949,7 +17388,7 @@ function useMcp(options) {
|
|
|
16949
17388
|
disconnect(true);
|
|
16950
17389
|
};
|
|
16951
17390
|
}, [
|
|
16952
|
-
|
|
17391
|
+
url2,
|
|
16953
17392
|
enabled,
|
|
16954
17393
|
storageKeyPrefix,
|
|
16955
17394
|
callbackUrl,
|
|
@@ -17729,18 +18168,6 @@ function WidgetControls({
|
|
|
17729
18168
|
));
|
|
17730
18169
|
}
|
|
17731
18170
|
__name(WidgetControls, "WidgetControls");
|
|
17732
|
-
var BrowserRouter$1 = null;
|
|
17733
|
-
var routerError = null;
|
|
17734
|
-
(async () => {
|
|
17735
|
-
try {
|
|
17736
|
-
const routerModule = await __vitePreload(() => import("./index-RN6yjAFG.js"), true ? [] : void 0);
|
|
17737
|
-
BrowserRouter$1 = routerModule.BrowserRouter;
|
|
17738
|
-
} catch (error) {
|
|
17739
|
-
routerError = new Error(
|
|
17740
|
-
"❌ react-router-dom not installed!\n\nTo use MCP widgets with McpUseProvider, you need to install:\n\n npm install react-router-dom\n # or\n pnpm add react-router-dom\n\nThis dependency is automatically included in projects created with 'create-mcp-use-app'."
|
|
17741
|
-
);
|
|
17742
|
-
}
|
|
17743
|
-
})();
|
|
17744
18171
|
function getBasename() {
|
|
17745
18172
|
if (typeof window === "undefined") return "/";
|
|
17746
18173
|
const path = window.location.pathname;
|
|
@@ -17764,6 +18191,33 @@ function McpUseProvider({
|
|
|
17764
18191
|
const lastHeightRef = reactExports.useRef(0);
|
|
17765
18192
|
const debounceTimeoutRef = reactExports.useRef(null);
|
|
17766
18193
|
const notificationInProgressRef = reactExports.useRef(false);
|
|
18194
|
+
const [BrowserRouter2, setBrowserRouter] = reactExports.useState(null);
|
|
18195
|
+
const [routerError, setRouterError] = reactExports.useState(null);
|
|
18196
|
+
const [isRouterLoading, setIsRouterLoading] = reactExports.useState(true);
|
|
18197
|
+
reactExports.useEffect(() => {
|
|
18198
|
+
let mounted = true;
|
|
18199
|
+
(async () => {
|
|
18200
|
+
try {
|
|
18201
|
+
const routerModule = await __vitePreload(() => import("./index-DctLeaKS.js"), true ? [] : void 0);
|
|
18202
|
+
if (mounted) {
|
|
18203
|
+
setBrowserRouter(() => routerModule.BrowserRouter);
|
|
18204
|
+
setIsRouterLoading(false);
|
|
18205
|
+
}
|
|
18206
|
+
} catch (error) {
|
|
18207
|
+
if (mounted) {
|
|
18208
|
+
setRouterError(
|
|
18209
|
+
new Error(
|
|
18210
|
+
"❌ react-router-dom not installed!\n\nTo use MCP widgets with McpUseProvider, you need to install:\n\n npm install react-router-dom\n # or\n pnpm add react-router-dom\n\nThis dependency is automatically included in projects created with 'create-mcp-use-app'."
|
|
18211
|
+
)
|
|
18212
|
+
);
|
|
18213
|
+
setIsRouterLoading(false);
|
|
18214
|
+
}
|
|
18215
|
+
}
|
|
18216
|
+
})();
|
|
18217
|
+
return () => {
|
|
18218
|
+
mounted = false;
|
|
18219
|
+
};
|
|
18220
|
+
}, []);
|
|
17767
18221
|
const notifyHeight = reactExports.useCallback((height) => {
|
|
17768
18222
|
if (typeof window !== "undefined" && window.openai?.notifyIntrinsicHeight) {
|
|
17769
18223
|
notificationInProgressRef.current = true;
|
|
@@ -17829,18 +18283,20 @@ function McpUseProvider({
|
|
|
17829
18283
|
notificationInProgressRef.current = false;
|
|
17830
18284
|
};
|
|
17831
18285
|
}, [autoSize, debouncedNotifyHeight]);
|
|
18286
|
+
if (isRouterLoading) {
|
|
18287
|
+
return /* @__PURE__ */ re$1.createElement(reactExports.StrictMode, null, /* @__PURE__ */ re$1.createElement(ThemeProvider$1, null, /* @__PURE__ */ re$1.createElement("div", { style: { padding: "20px", textAlign: "center" } }, "Loading...")));
|
|
18288
|
+
}
|
|
18289
|
+
if (routerError) {
|
|
18290
|
+
throw routerError;
|
|
18291
|
+
}
|
|
17832
18292
|
let content = children;
|
|
17833
18293
|
content = /* @__PURE__ */ re$1.createElement(ErrorBoundary, null, content);
|
|
17834
18294
|
if (enableDebugger || viewControls) {
|
|
17835
18295
|
content = /* @__PURE__ */ re$1.createElement(WidgetControls, { debugger: enableDebugger, viewControls }, content);
|
|
17836
18296
|
}
|
|
17837
|
-
if (
|
|
17838
|
-
|
|
17839
|
-
}
|
|
17840
|
-
if (!BrowserRouter$1) {
|
|
17841
|
-
throw new Error("react-router-dom is still loading, please try again.");
|
|
18297
|
+
if (BrowserRouter2) {
|
|
18298
|
+
content = /* @__PURE__ */ re$1.createElement(BrowserRouter2, { basename }, content);
|
|
17842
18299
|
}
|
|
17843
|
-
content = /* @__PURE__ */ re$1.createElement(BrowserRouter$1, { basename }, content);
|
|
17844
18300
|
content = /* @__PURE__ */ re$1.createElement(ThemeProvider$1, null, content);
|
|
17845
18301
|
if (autoSize) {
|
|
17846
18302
|
const containerStyle = {
|
|
@@ -18128,13 +18584,13 @@ function requireReactDom_production() {
|
|
|
18128
18584
|
hasRequiredReactDom_production = 1;
|
|
18129
18585
|
var React2 = requireReact();
|
|
18130
18586
|
function formatProdErrorMessage(code2) {
|
|
18131
|
-
var
|
|
18587
|
+
var url2 = "https://react.dev/errors/" + code2;
|
|
18132
18588
|
if (1 < arguments.length) {
|
|
18133
|
-
|
|
18589
|
+
url2 += "?args[]=" + encodeURIComponent(arguments[1]);
|
|
18134
18590
|
for (var i2 = 2; i2 < arguments.length; i2++)
|
|
18135
|
-
|
|
18591
|
+
url2 += "&args[]=" + encodeURIComponent(arguments[i2]);
|
|
18136
18592
|
}
|
|
18137
|
-
return "Minified React error #" + code2 + "; visit " +
|
|
18593
|
+
return "Minified React error #" + code2 + "; visit " + url2 + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings.";
|
|
18138
18594
|
}
|
|
18139
18595
|
function noop3() {
|
|
18140
18596
|
}
|
|
@@ -18295,13 +18751,13 @@ function requireReactDomClient_production() {
|
|
|
18295
18751
|
hasRequiredReactDomClient_production = 1;
|
|
18296
18752
|
var Scheduler = requireScheduler(), React2 = requireReact(), ReactDOM2 = requireReactDom();
|
|
18297
18753
|
function formatProdErrorMessage(code2) {
|
|
18298
|
-
var
|
|
18754
|
+
var url2 = "https://react.dev/errors/" + code2;
|
|
18299
18755
|
if (1 < arguments.length) {
|
|
18300
|
-
|
|
18756
|
+
url2 += "?args[]=" + encodeURIComponent(arguments[1]);
|
|
18301
18757
|
for (var i2 = 2; i2 < arguments.length; i2++)
|
|
18302
|
-
|
|
18758
|
+
url2 += "&args[]=" + encodeURIComponent(arguments[i2]);
|
|
18303
18759
|
}
|
|
18304
|
-
return "Minified React error #" + code2 + "; visit " +
|
|
18760
|
+
return "Minified React error #" + code2 + "; visit " + url2 + " for the full message or use the non-minified dev environment for full errors and additional helpful warnings.";
|
|
18305
18761
|
}
|
|
18306
18762
|
function isValidContainer(node) {
|
|
18307
18763
|
return !(!node || 1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType);
|
|
@@ -19329,8 +19785,8 @@ function requireReactDomClient_production() {
|
|
|
19329
19785
|
["xmlnsXlink", "xmlns:xlink"],
|
|
19330
19786
|
["xHeight", "x-height"]
|
|
19331
19787
|
]), isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;
|
|
19332
|
-
function sanitizeURL(
|
|
19333
|
-
return isJavaScriptProtocol.test("" +
|
|
19788
|
+
function sanitizeURL(url2) {
|
|
19789
|
+
return isJavaScriptProtocol.test("" + url2) ? "javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')" : url2;
|
|
19334
19790
|
}
|
|
19335
19791
|
function noop$12() {
|
|
19336
19792
|
}
|
|
@@ -29980,9 +30436,9 @@ function createHashHistory(options = {}) {
|
|
|
29980
30436
|
let base = window2.document.querySelector("base");
|
|
29981
30437
|
let href = "";
|
|
29982
30438
|
if (base && base.getAttribute("href")) {
|
|
29983
|
-
let
|
|
29984
|
-
let hashIndex =
|
|
29985
|
-
href = hashIndex === -1 ?
|
|
30439
|
+
let url2 = window2.location.href;
|
|
30440
|
+
let hashIndex = url2.indexOf("#");
|
|
30441
|
+
href = hashIndex === -1 ? url2 : url2.slice(0, hashIndex);
|
|
29986
30442
|
}
|
|
29987
30443
|
return href + "#" + (typeof to === "string" ? to : createPath(to));
|
|
29988
30444
|
}
|
|
@@ -30099,14 +30555,14 @@ function getUrlBasedHistory(getLocation, createHref2, validateLocation, options
|
|
|
30099
30555
|
if (validateLocation) validateLocation(location, to);
|
|
30100
30556
|
index2 = getIndex() + 1;
|
|
30101
30557
|
let historyState = getHistoryState(location, index2);
|
|
30102
|
-
let
|
|
30558
|
+
let url2 = history.createHref(location);
|
|
30103
30559
|
try {
|
|
30104
|
-
globalHistory.pushState(historyState, "",
|
|
30560
|
+
globalHistory.pushState(historyState, "", url2);
|
|
30105
30561
|
} catch (error) {
|
|
30106
30562
|
if (error instanceof DOMException && error.name === "DataCloneError") {
|
|
30107
30563
|
throw error;
|
|
30108
30564
|
}
|
|
30109
|
-
window2.location.assign(
|
|
30565
|
+
window2.location.assign(url2);
|
|
30110
30566
|
}
|
|
30111
30567
|
if (v5Compat && listener) {
|
|
30112
30568
|
listener({ action, location: history.location, delta: 1 });
|
|
@@ -30118,8 +30574,8 @@ function getUrlBasedHistory(getLocation, createHref2, validateLocation, options
|
|
|
30118
30574
|
if (validateLocation) validateLocation(location, to);
|
|
30119
30575
|
index2 = getIndex();
|
|
30120
30576
|
let historyState = getHistoryState(location, index2);
|
|
30121
|
-
let
|
|
30122
|
-
globalHistory.replaceState(historyState, "",
|
|
30577
|
+
let url2 = history.createHref(location);
|
|
30578
|
+
globalHistory.replaceState(historyState, "", url2);
|
|
30123
30579
|
if (v5Compat && listener) {
|
|
30124
30580
|
listener({ action, location: history.location, delta: 0 });
|
|
30125
30581
|
}
|
|
@@ -30150,11 +30606,11 @@ function getUrlBasedHistory(getLocation, createHref2, validateLocation, options
|
|
|
30150
30606
|
},
|
|
30151
30607
|
createURL,
|
|
30152
30608
|
encodeLocation(to) {
|
|
30153
|
-
let
|
|
30609
|
+
let url2 = createURL(to);
|
|
30154
30610
|
return {
|
|
30155
|
-
pathname:
|
|
30156
|
-
search:
|
|
30157
|
-
hash:
|
|
30611
|
+
pathname: url2.pathname,
|
|
30612
|
+
search: url2.search,
|
|
30613
|
+
hash: url2.hash
|
|
30158
30614
|
};
|
|
30159
30615
|
},
|
|
30160
30616
|
push,
|
|
@@ -30728,7 +31184,7 @@ function data(data2, init) {
|
|
|
30728
31184
|
typeof init === "number" ? { status: init } : init
|
|
30729
31185
|
);
|
|
30730
31186
|
}
|
|
30731
|
-
var redirect = (
|
|
31187
|
+
var redirect = (url2, init = 302) => {
|
|
30732
31188
|
let responseInit = init;
|
|
30733
31189
|
if (typeof responseInit === "number") {
|
|
30734
31190
|
responseInit = { status: responseInit };
|
|
@@ -30736,16 +31192,16 @@ var redirect = (url, init = 302) => {
|
|
|
30736
31192
|
responseInit.status = 302;
|
|
30737
31193
|
}
|
|
30738
31194
|
let headers = new Headers(responseInit.headers);
|
|
30739
|
-
headers.set("Location",
|
|
31195
|
+
headers.set("Location", url2);
|
|
30740
31196
|
return new Response(null, { ...responseInit, headers });
|
|
30741
31197
|
};
|
|
30742
|
-
var redirectDocument = (
|
|
30743
|
-
let response = redirect(
|
|
31198
|
+
var redirectDocument = (url2, init) => {
|
|
31199
|
+
let response = redirect(url2, init);
|
|
30744
31200
|
response.headers.set("X-Remix-Reload-Document", "true");
|
|
30745
31201
|
return response;
|
|
30746
31202
|
};
|
|
30747
|
-
var replace = (
|
|
30748
|
-
let response = redirect(
|
|
31203
|
+
var replace = (url2, init) => {
|
|
31204
|
+
let response = redirect(url2, init);
|
|
30749
31205
|
response.headers.set("X-Remix-Replace", "true");
|
|
30750
31206
|
return response;
|
|
30751
31207
|
};
|
|
@@ -31077,7 +31533,7 @@ var IDLE_BLOCKER = {
|
|
|
31077
31533
|
location: void 0
|
|
31078
31534
|
};
|
|
31079
31535
|
var ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
31080
|
-
var isAbsoluteUrl = (
|
|
31536
|
+
var isAbsoluteUrl = (url2) => ABSOLUTE_URL_REGEX.test(url2);
|
|
31081
31537
|
var defaultMapRouteProperties = (route) => ({
|
|
31082
31538
|
hasErrorBoundary: Boolean(route.hasErrorBoundary)
|
|
31083
31539
|
});
|
|
@@ -32384,10 +32840,10 @@ function createRouter(init) {
|
|
|
32384
32840
|
if (redirect2.response.headers.has("X-Remix-Reload-Document")) {
|
|
32385
32841
|
isDocumentReload = true;
|
|
32386
32842
|
} else if (isAbsoluteUrl(location)) {
|
|
32387
|
-
const
|
|
32843
|
+
const url2 = createBrowserURLImpl(location, true);
|
|
32388
32844
|
isDocumentReload = // Hard reload if it's an absolute URL to a new origin
|
|
32389
|
-
|
|
32390
|
-
stripBasename(
|
|
32845
|
+
url2.origin !== routerWindow.location.origin || // Hard reload if it's an absolute URL that does not match our basename
|
|
32846
|
+
stripBasename(url2.pathname, basename) == null;
|
|
32391
32847
|
}
|
|
32392
32848
|
if (isDocumentReload) {
|
|
32393
32849
|
if (replace2) {
|
|
@@ -32899,9 +33355,9 @@ function createStaticHandler(routes, opts) {
|
|
|
32899
33355
|
dataStrategy,
|
|
32900
33356
|
generateMiddlewareResponse
|
|
32901
33357
|
} = {}) {
|
|
32902
|
-
let
|
|
33358
|
+
let url2 = new URL(request.url);
|
|
32903
33359
|
let method = request.method;
|
|
32904
|
-
let location = createLocation("", createPath(
|
|
33360
|
+
let location = createLocation("", createPath(url2), null, "default");
|
|
32905
33361
|
let matches = matchRoutes(dataRoutes, location, basename);
|
|
32906
33362
|
requestContext = requestContext != null ? requestContext : new RouterContextProvider();
|
|
32907
33363
|
if (!isValidMethod(method) && method !== "HEAD") {
|
|
@@ -33072,9 +33528,9 @@ function createStaticHandler(routes, opts) {
|
|
|
33072
33528
|
dataStrategy,
|
|
33073
33529
|
generateMiddlewareResponse
|
|
33074
33530
|
} = {}) {
|
|
33075
|
-
let
|
|
33531
|
+
let url2 = new URL(request.url);
|
|
33076
33532
|
let method = request.method;
|
|
33077
|
-
let location = createLocation("", createPath(
|
|
33533
|
+
let location = createLocation("", createPath(url2), null, "default");
|
|
33078
33534
|
let matches = matchRoutes(dataRoutes, location, basename);
|
|
33079
33535
|
requestContext = requestContext != null ? requestContext : new RouterContextProvider();
|
|
33080
33536
|
if (!isValidMethod(method) && method !== "HEAD" && method !== "OPTIONS") {
|
|
@@ -34456,8 +34912,8 @@ async function callLoaderOrAction({
|
|
|
34456
34912
|
if (handler2) {
|
|
34457
34913
|
[result] = await Promise.all([runHandler(handler2), lazyRoutePromise]);
|
|
34458
34914
|
} else if (type2 === "action") {
|
|
34459
|
-
let
|
|
34460
|
-
let pathname =
|
|
34915
|
+
let url2 = new URL(request.url);
|
|
34916
|
+
let pathname = url2.pathname + url2.search;
|
|
34461
34917
|
throw getInternalRouterError(405, {
|
|
34462
34918
|
method: request.method,
|
|
34463
34919
|
pathname,
|
|
@@ -34468,8 +34924,8 @@ async function callLoaderOrAction({
|
|
|
34468
34924
|
}
|
|
34469
34925
|
}
|
|
34470
34926
|
} else if (!handler) {
|
|
34471
|
-
let
|
|
34472
|
-
let pathname =
|
|
34927
|
+
let url2 = new URL(request.url);
|
|
34928
|
+
let pathname = url2.pathname + url2.search;
|
|
34473
34929
|
throw getInternalRouterError(404, {
|
|
34474
34930
|
pathname
|
|
34475
34931
|
});
|
|
@@ -34577,16 +35033,16 @@ function normalizeRelativeRoutingRedirectResponse(response, request, routeId, ma
|
|
|
34577
35033
|
function normalizeRedirectLocation(location, currentUrl, basename) {
|
|
34578
35034
|
if (isAbsoluteUrl(location)) {
|
|
34579
35035
|
let normalizedLocation = location;
|
|
34580
|
-
let
|
|
34581
|
-
let isSameBasename = stripBasename(
|
|
34582
|
-
if (
|
|
34583
|
-
return
|
|
35036
|
+
let url2 = normalizedLocation.startsWith("//") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);
|
|
35037
|
+
let isSameBasename = stripBasename(url2.pathname, basename) != null;
|
|
35038
|
+
if (url2.origin === currentUrl.origin && isSameBasename) {
|
|
35039
|
+
return url2.pathname + url2.search + url2.hash;
|
|
34584
35040
|
}
|
|
34585
35041
|
}
|
|
34586
35042
|
return location;
|
|
34587
35043
|
}
|
|
34588
35044
|
function createClientSideRequest(history, location, signal, submission) {
|
|
34589
|
-
let
|
|
35045
|
+
let url2 = history.createURL(stripHashFromPath(location)).toString();
|
|
34590
35046
|
let init = { signal };
|
|
34591
35047
|
if (submission && isMutationMethod(submission.formMethod)) {
|
|
34592
35048
|
let { formMethod, formEncType } = submission;
|
|
@@ -34602,7 +35058,7 @@ function createClientSideRequest(history, location, signal, submission) {
|
|
|
34602
35058
|
init.body = submission.formData;
|
|
34603
35059
|
}
|
|
34604
35060
|
}
|
|
34605
|
-
return new Request(
|
|
35061
|
+
return new Request(url2, init);
|
|
34606
35062
|
}
|
|
34607
35063
|
function convertFormDataToSearchParams(formData) {
|
|
34608
35064
|
let searchParams = new URLSearchParams();
|
|
@@ -37496,9 +37952,9 @@ async function singleFetchLoaderFetcherStrategy(args, fetchAndDecode, basename)
|
|
|
37496
37952
|
);
|
|
37497
37953
|
return { [fetcherMatch.route.id]: result };
|
|
37498
37954
|
}
|
|
37499
|
-
function stripIndexParam(
|
|
37500
|
-
let indexValues =
|
|
37501
|
-
|
|
37955
|
+
function stripIndexParam(url2) {
|
|
37956
|
+
let indexValues = url2.searchParams.getAll("index");
|
|
37957
|
+
url2.searchParams.delete("index");
|
|
37502
37958
|
let indexValuesToKeep = [];
|
|
37503
37959
|
for (let indexValue of indexValues) {
|
|
37504
37960
|
if (indexValue) {
|
|
@@ -37506,36 +37962,36 @@ function stripIndexParam(url) {
|
|
|
37506
37962
|
}
|
|
37507
37963
|
}
|
|
37508
37964
|
for (let toKeep of indexValuesToKeep) {
|
|
37509
|
-
|
|
37965
|
+
url2.searchParams.append("index", toKeep);
|
|
37510
37966
|
}
|
|
37511
|
-
return
|
|
37967
|
+
return url2;
|
|
37512
37968
|
}
|
|
37513
37969
|
function singleFetchUrl(reqUrl, basename, extension) {
|
|
37514
|
-
let
|
|
37970
|
+
let url2 = typeof reqUrl === "string" ? new URL(
|
|
37515
37971
|
reqUrl,
|
|
37516
37972
|
// This can be called during the SSR flow via PrefetchPageLinksImpl so
|
|
37517
37973
|
// don't assume window is available
|
|
37518
37974
|
typeof window === "undefined" ? "server://singlefetch/" : window.location.origin
|
|
37519
37975
|
) : reqUrl;
|
|
37520
|
-
if (
|
|
37521
|
-
|
|
37522
|
-
} else if (basename && stripBasename(
|
|
37523
|
-
|
|
37976
|
+
if (url2.pathname === "/") {
|
|
37977
|
+
url2.pathname = `_root.${extension}`;
|
|
37978
|
+
} else if (basename && stripBasename(url2.pathname, basename) === "/") {
|
|
37979
|
+
url2.pathname = `${basename.replace(/\/$/, "")}/_root.${extension}`;
|
|
37524
37980
|
} else {
|
|
37525
|
-
|
|
37981
|
+
url2.pathname = `${url2.pathname.replace(/\/$/, "")}.${extension}`;
|
|
37526
37982
|
}
|
|
37527
|
-
return
|
|
37983
|
+
return url2;
|
|
37528
37984
|
}
|
|
37529
37985
|
async function fetchAndDecodeViaTurboStream(args, basename, targetRoutes) {
|
|
37530
37986
|
let { request } = args;
|
|
37531
|
-
let
|
|
37987
|
+
let url2 = singleFetchUrl(request.url, basename, "data");
|
|
37532
37988
|
if (request.method === "GET") {
|
|
37533
|
-
|
|
37989
|
+
url2 = stripIndexParam(url2);
|
|
37534
37990
|
if (targetRoutes) {
|
|
37535
|
-
|
|
37991
|
+
url2.searchParams.set("_routes", targetRoutes.join(","));
|
|
37536
37992
|
}
|
|
37537
37993
|
}
|
|
37538
|
-
let res = await fetch(
|
|
37994
|
+
let res = await fetch(url2, await createRequestInit(request));
|
|
37539
37995
|
if (res.status >= 400 && !res.headers.has("X-Remix-Response")) {
|
|
37540
37996
|
throw new ErrorResponseImpl(res.status, res.statusText, await res.text());
|
|
37541
37997
|
}
|
|
@@ -38449,18 +38905,18 @@ async function fetchAndApplyManifestPatches(paths, errorReloadPath, manifest, ro
|
|
|
38449
38905
|
const searchParams = new URLSearchParams();
|
|
38450
38906
|
searchParams.set("paths", paths.sort().join(","));
|
|
38451
38907
|
searchParams.set("version", manifest.version);
|
|
38452
|
-
let
|
|
38908
|
+
let url2 = new URL(
|
|
38453
38909
|
getManifestPath(manifestPath, basename),
|
|
38454
38910
|
window.location.origin
|
|
38455
38911
|
);
|
|
38456
|
-
|
|
38457
|
-
if (
|
|
38912
|
+
url2.search = searchParams.toString();
|
|
38913
|
+
if (url2.toString().length > URL_LIMIT) {
|
|
38458
38914
|
nextPaths.clear();
|
|
38459
38915
|
return;
|
|
38460
38916
|
}
|
|
38461
38917
|
let serverPatches;
|
|
38462
38918
|
try {
|
|
38463
|
-
let res = await fetch(
|
|
38919
|
+
let res = await fetch(url2, { signal });
|
|
38464
38920
|
if (!res.ok) {
|
|
38465
38921
|
throw new Error(`${res.status} ${res.statusText}`);
|
|
38466
38922
|
} else if (res.status === 204 && res.headers.has("X-Remix-Reload-Document")) {
|
|
@@ -38743,14 +39199,14 @@ function PrefetchPageLinksImpl({
|
|
|
38743
39199
|
if (routesParams.size === 0) {
|
|
38744
39200
|
return [];
|
|
38745
39201
|
}
|
|
38746
|
-
let
|
|
39202
|
+
let url2 = singleFetchUrl(page, basename, "data");
|
|
38747
39203
|
if (foundOptOutRoute && routesParams.size > 0) {
|
|
38748
|
-
|
|
39204
|
+
url2.searchParams.set(
|
|
38749
39205
|
"_routes",
|
|
38750
39206
|
nextMatches.filter((m2) => routesParams.has(m2.route.id)).map((m2) => m2.route.id).join(",")
|
|
38751
39207
|
);
|
|
38752
39208
|
}
|
|
38753
|
-
return [
|
|
39209
|
+
return [url2.pathname + url2.search];
|
|
38754
39210
|
}, [
|
|
38755
39211
|
basename,
|
|
38756
39212
|
loaderData,
|
|
@@ -49745,7 +50201,7 @@ class MCPToolSavedEvent {
|
|
|
49745
50201
|
function getPackageVersion() {
|
|
49746
50202
|
try {
|
|
49747
50203
|
if (true) {
|
|
49748
|
-
return "0.9.0-canary.
|
|
50204
|
+
return "0.9.0-canary.4";
|
|
49749
50205
|
}
|
|
49750
50206
|
return "0.0.0";
|
|
49751
50207
|
} catch {
|
|
@@ -49987,7 +50443,7 @@ function useMcpContext() {
|
|
|
49987
50443
|
return context;
|
|
49988
50444
|
}
|
|
49989
50445
|
function McpConnectionWrapper({
|
|
49990
|
-
url,
|
|
50446
|
+
url: url2,
|
|
49991
50447
|
name,
|
|
49992
50448
|
proxyConfig,
|
|
49993
50449
|
transportType,
|
|
@@ -49996,13 +50452,13 @@ function McpConnectionWrapper({
|
|
|
49996
50452
|
onRemove: _onRemove
|
|
49997
50453
|
}) {
|
|
49998
50454
|
const callbackUrl = typeof window !== "undefined" ? new URL("/inspector/oauth/callback", window.location.origin).toString() : "/inspector/oauth/callback";
|
|
49999
|
-
let finalUrl =
|
|
50455
|
+
let finalUrl = url2;
|
|
50000
50456
|
let customHeaders = {};
|
|
50001
50457
|
if (proxyConfig?.proxyAddress) {
|
|
50002
50458
|
const proxyUrl = new URL(proxyConfig.proxyAddress);
|
|
50003
|
-
const originalUrl = new URL(
|
|
50459
|
+
const originalUrl = new URL(url2);
|
|
50004
50460
|
finalUrl = `${proxyUrl.origin}${proxyUrl.pathname}${originalUrl.pathname}${originalUrl.search}`;
|
|
50005
|
-
customHeaders["X-Target-URL"] =
|
|
50461
|
+
customHeaders["X-Target-URL"] = url2;
|
|
50006
50462
|
}
|
|
50007
50463
|
if (proxyConfig?.customHeaders) {
|
|
50008
50464
|
customHeaders = { ...customHeaders, ...proxyConfig.customHeaders };
|
|
@@ -50126,7 +50582,7 @@ function McpConnectionWrapper({
|
|
|
50126
50582
|
const unreadCount = notifications.filter((n2) => !n2.read).length;
|
|
50127
50583
|
const connection = {
|
|
50128
50584
|
id: connectionId,
|
|
50129
|
-
url,
|
|
50585
|
+
url: url2,
|
|
50130
50586
|
name: mcpHook.serverInfo?.name || name,
|
|
50131
50587
|
// Use server-provided name if available
|
|
50132
50588
|
state: mcpHook.state,
|
|
@@ -50165,7 +50621,7 @@ function McpConnectionWrapper({
|
|
|
50165
50621
|
const unreadCount = notifications.filter((n2) => !n2.read).length;
|
|
50166
50622
|
const connection = {
|
|
50167
50623
|
id: connectionId,
|
|
50168
|
-
url,
|
|
50624
|
+
url: url2,
|
|
50169
50625
|
name: mcpHook.serverInfo?.name || name,
|
|
50170
50626
|
// Use server-provided name if available
|
|
50171
50627
|
state: mcpHook.state,
|
|
@@ -50201,7 +50657,7 @@ function McpConnectionWrapper({
|
|
|
50201
50657
|
}
|
|
50202
50658
|
}
|
|
50203
50659
|
}, [
|
|
50204
|
-
|
|
50660
|
+
url2,
|
|
50205
50661
|
name,
|
|
50206
50662
|
transportType,
|
|
50207
50663
|
proxyConfig,
|
|
@@ -50311,18 +50767,18 @@ function McpProvider({ children }) {
|
|
|
50311
50767
|
localStorage.setItem("mcp-inspector-auto-connect", String(autoConnect));
|
|
50312
50768
|
}, [autoConnect, configLoaded]);
|
|
50313
50769
|
const addConnection = reactExports.useCallback(
|
|
50314
|
-
(
|
|
50315
|
-
const existingConfig = connectionConfigs.find((c2) => c2.url ===
|
|
50316
|
-
const existingConnection = connections.find((c2) => c2.url ===
|
|
50770
|
+
(url2, name, proxyConfig, transportType) => {
|
|
50771
|
+
const existingConfig = connectionConfigs.find((c2) => c2.url === url2);
|
|
50772
|
+
const existingConnection = connections.find((c2) => c2.url === url2);
|
|
50317
50773
|
if (existingConfig && existingConnection) {
|
|
50318
50774
|
const proxyConfigChanged = JSON.stringify(existingConfig.proxyConfig) !== JSON.stringify(proxyConfig);
|
|
50319
50775
|
if (proxyConfigChanged && proxyConfig) {
|
|
50320
|
-
setConnectionConfigs((prev) => prev.filter((c2) => c2.url !==
|
|
50321
|
-
setConnections((prev) => prev.filter((c2) => c2.url !==
|
|
50776
|
+
setConnectionConfigs((prev) => prev.filter((c2) => c2.url !== url2));
|
|
50777
|
+
setConnections((prev) => prev.filter((c2) => c2.url !== url2));
|
|
50322
50778
|
setTimeout(() => {
|
|
50323
50779
|
const newConfig2 = {
|
|
50324
|
-
id:
|
|
50325
|
-
url,
|
|
50780
|
+
id: url2,
|
|
50781
|
+
url: url2,
|
|
50326
50782
|
name: name || existingConfig.name || "MCP Server",
|
|
50327
50783
|
proxyConfig,
|
|
50328
50784
|
transportType: transportType || existingConfig.transportType
|
|
@@ -50331,8 +50787,8 @@ function McpProvider({ children }) {
|
|
|
50331
50787
|
setConnections((prev) => [
|
|
50332
50788
|
...prev,
|
|
50333
50789
|
{
|
|
50334
|
-
id:
|
|
50335
|
-
url,
|
|
50790
|
+
id: url2,
|
|
50791
|
+
url: url2,
|
|
50336
50792
|
name: name || existingConfig.name || "MCP Server",
|
|
50337
50793
|
state: "connecting",
|
|
50338
50794
|
tools: [],
|
|
@@ -50379,7 +50835,7 @@ function McpProvider({ children }) {
|
|
|
50379
50835
|
if (proxyConfig || transportType) {
|
|
50380
50836
|
setConnectionConfigs(
|
|
50381
50837
|
(prev) => prev.map(
|
|
50382
|
-
(c2) => c2.url ===
|
|
50838
|
+
(c2) => c2.url === url2 ? {
|
|
50383
50839
|
...c2,
|
|
50384
50840
|
proxyConfig: proxyConfig || c2.proxyConfig,
|
|
50385
50841
|
transportType: transportType || c2.transportType,
|
|
@@ -50391,8 +50847,8 @@ function McpProvider({ children }) {
|
|
|
50391
50847
|
setConnections((prev) => [
|
|
50392
50848
|
...prev,
|
|
50393
50849
|
{
|
|
50394
|
-
id: existingConfig.id ||
|
|
50395
|
-
url,
|
|
50850
|
+
id: existingConfig.id || url2,
|
|
50851
|
+
url: url2,
|
|
50396
50852
|
name: name || existingConfig.name || "MCP Server",
|
|
50397
50853
|
state: "connecting",
|
|
50398
50854
|
tools: [],
|
|
@@ -50433,8 +50889,8 @@ function McpProvider({ children }) {
|
|
|
50433
50889
|
return;
|
|
50434
50890
|
}
|
|
50435
50891
|
const newConfig = {
|
|
50436
|
-
id:
|
|
50437
|
-
url,
|
|
50892
|
+
id: url2,
|
|
50893
|
+
url: url2,
|
|
50438
50894
|
name: name || "MCP Server",
|
|
50439
50895
|
proxyConfig,
|
|
50440
50896
|
transportType
|
|
@@ -50443,8 +50899,8 @@ function McpProvider({ children }) {
|
|
|
50443
50899
|
setConnections((prev) => [
|
|
50444
50900
|
...prev,
|
|
50445
50901
|
{
|
|
50446
|
-
id:
|
|
50447
|
-
url,
|
|
50902
|
+
id: url2,
|
|
50903
|
+
url: url2,
|
|
50448
50904
|
name: name || "MCP Server",
|
|
50449
50905
|
state: "connecting",
|
|
50450
50906
|
tools: [],
|
|
@@ -54063,7 +54519,7 @@ function CustomHeadersEditor({
|
|
|
54063
54519
|
function ConnectionSettingsForm({
|
|
54064
54520
|
transportType,
|
|
54065
54521
|
setTransportType,
|
|
54066
|
-
url,
|
|
54522
|
+
url: url2,
|
|
54067
54523
|
setUrl,
|
|
54068
54524
|
connectionType,
|
|
54069
54525
|
setConnectionType,
|
|
@@ -54098,12 +54554,12 @@ function ConnectionSettingsForm({
|
|
|
54098
54554
|
const [authDialogOpen, setAuthDialogOpen] = reactExports.useState(false);
|
|
54099
54555
|
const [configDialogOpen, setConfigDialogOpen] = reactExports.useState(false);
|
|
54100
54556
|
const handleCopyConfig = async () => {
|
|
54101
|
-
if (!
|
|
54557
|
+
if (!url2.trim()) {
|
|
54102
54558
|
toast.error("Please enter a URL first");
|
|
54103
54559
|
return;
|
|
54104
54560
|
}
|
|
54105
54561
|
const config2 = {
|
|
54106
|
-
url,
|
|
54562
|
+
url: url2,
|
|
54107
54563
|
transportType: transportType === "SSE" ? "http" : "sse",
|
|
54108
54564
|
connectionType,
|
|
54109
54565
|
proxyConfig: connectionType === "Via Proxy" && proxyAddress.trim() ? {
|
|
@@ -54202,7 +54658,7 @@ function ConnectionSettingsForm({
|
|
|
54202
54658
|
const target = e.target;
|
|
54203
54659
|
if (target.tagName !== "TEXTAREA") {
|
|
54204
54660
|
e.preventDefault();
|
|
54205
|
-
if (onConnect &&
|
|
54661
|
+
if (onConnect && url2.trim()) {
|
|
54206
54662
|
onConnect();
|
|
54207
54663
|
}
|
|
54208
54664
|
}
|
|
@@ -54241,7 +54697,7 @@ function ConnectionSettingsForm({
|
|
|
54241
54697
|
Input,
|
|
54242
54698
|
{
|
|
54243
54699
|
placeholder: "http://localhost:3001/sse",
|
|
54244
|
-
value:
|
|
54700
|
+
value: url2,
|
|
54245
54701
|
onChange: (e) => setUrl(e.target.value),
|
|
54246
54702
|
onPaste: handlePaste,
|
|
54247
54703
|
className: inputClassName
|
|
@@ -54471,7 +54927,7 @@ function ConnectionSettingsForm({
|
|
|
54471
54927
|
Button,
|
|
54472
54928
|
{
|
|
54473
54929
|
onClick: onConnect,
|
|
54474
|
-
disabled: !
|
|
54930
|
+
disabled: !url2.trim() || isConnecting,
|
|
54475
54931
|
className: cn$1(
|
|
54476
54932
|
"w-full font-semibold",
|
|
54477
54933
|
isStyled ? "bg-white text-black hover:bg-white/90" : ""
|
|
@@ -54532,7 +54988,7 @@ function ServerConnectionModal({
|
|
|
54532
54988
|
onConnect
|
|
54533
54989
|
}) {
|
|
54534
54990
|
const [transportType, setTransportType] = reactExports.useState("SSE");
|
|
54535
|
-
const [
|
|
54991
|
+
const [url2, setUrl] = reactExports.useState("");
|
|
54536
54992
|
const [connectionType, setConnectionType] = reactExports.useState("Direct");
|
|
54537
54993
|
const [customHeaders, setCustomHeaders] = reactExports.useState([]);
|
|
54538
54994
|
const [requestTimeout, setRequestTimeout] = reactExports.useState("10000");
|
|
@@ -54573,7 +55029,20 @@ function ServerConnectionModal({
|
|
|
54573
55029
|
}
|
|
54574
55030
|
}, [connection, open]);
|
|
54575
55031
|
const handleConnect = () => {
|
|
54576
|
-
if (!
|
|
55032
|
+
if (!url2.trim()) return;
|
|
55033
|
+
try {
|
|
55034
|
+
const parsedUrl = new URL(url2.trim());
|
|
55035
|
+
const isValid = parsedUrl.protocol === "http:" || parsedUrl.protocol === "https:" || parsedUrl.protocol === "ws:" || parsedUrl.protocol === "wss:";
|
|
55036
|
+
if (!isValid) {
|
|
55037
|
+
toast.error(
|
|
55038
|
+
"Invalid URL protocol. Please use http://, https://, ws://, or wss://"
|
|
55039
|
+
);
|
|
55040
|
+
return;
|
|
55041
|
+
}
|
|
55042
|
+
} catch (error) {
|
|
55043
|
+
toast.error("Invalid URL format. Please enter a valid URL.");
|
|
55044
|
+
return;
|
|
55045
|
+
}
|
|
54577
55046
|
const proxyConfig = connectionType === "Via Proxy" && proxyAddress.trim() ? {
|
|
54578
55047
|
proxyAddress: proxyAddress.trim(),
|
|
54579
55048
|
customHeaders: customHeaders.reduce(
|
|
@@ -54598,7 +55067,7 @@ function ServerConnectionModal({
|
|
|
54598
55067
|
};
|
|
54599
55068
|
const actualTransportType = transportType === "SSE" ? "http" : "sse";
|
|
54600
55069
|
onConnect({
|
|
54601
|
-
url,
|
|
55070
|
+
url: url2,
|
|
54602
55071
|
name: connection?.name,
|
|
54603
55072
|
transportType: actualTransportType,
|
|
54604
55073
|
proxyConfig
|
|
@@ -54612,7 +55081,7 @@ function ServerConnectionModal({
|
|
|
54612
55081
|
{
|
|
54613
55082
|
transportType,
|
|
54614
55083
|
setTransportType,
|
|
54615
|
-
url,
|
|
55084
|
+
url: url2,
|
|
54616
55085
|
setUrl,
|
|
54617
55086
|
connectionType,
|
|
54618
55087
|
setConnectionType,
|
|
@@ -62145,8 +62614,8 @@ function getCachedFavicon(domain) {
|
|
|
62145
62614
|
}
|
|
62146
62615
|
return null;
|
|
62147
62616
|
}
|
|
62148
|
-
async function fetchAndCacheImage(
|
|
62149
|
-
const response = await fetch(
|
|
62617
|
+
async function fetchAndCacheImage(url2, domain) {
|
|
62618
|
+
const response = await fetch(url2);
|
|
62150
62619
|
const blob = await response.blob();
|
|
62151
62620
|
return new Promise((resolve2, reject) => {
|
|
62152
62621
|
const reader = new FileReader();
|
|
@@ -62404,7 +62873,7 @@ function InspectorDashboard() {
|
|
|
62404
62873
|
});
|
|
62405
62874
|
}, []);
|
|
62406
62875
|
const [transportType, setTransportType] = reactExports.useState("SSE");
|
|
62407
|
-
const [
|
|
62876
|
+
const [url2, setUrl] = reactExports.useState("");
|
|
62408
62877
|
const [connectionType, setConnectionType] = reactExports.useState("Direct");
|
|
62409
62878
|
const [customHeaders, setCustomHeaders] = reactExports.useState([]);
|
|
62410
62879
|
const [requestTimeout, setRequestTimeout] = reactExports.useState("10000");
|
|
@@ -62431,7 +62900,22 @@ function InspectorDashboard() {
|
|
|
62431
62900
|
}, []);
|
|
62432
62901
|
const handleAddConnection = reactExports.useCallback(
|
|
62433
62902
|
(isRetry = false, overrideConnectionType) => {
|
|
62434
|
-
if (!
|
|
62903
|
+
if (!url2.trim()) return;
|
|
62904
|
+
if (!isRetry) {
|
|
62905
|
+
try {
|
|
62906
|
+
const parsedUrl = new URL(url2.trim());
|
|
62907
|
+
const isValid = parsedUrl.protocol === "http:" || parsedUrl.protocol === "https:" || parsedUrl.protocol === "ws:" || parsedUrl.protocol === "wss:";
|
|
62908
|
+
if (!isValid) {
|
|
62909
|
+
toast.error(
|
|
62910
|
+
"Invalid URL protocol. Please use http://, https://, ws://, or wss://"
|
|
62911
|
+
);
|
|
62912
|
+
return;
|
|
62913
|
+
}
|
|
62914
|
+
} catch (error) {
|
|
62915
|
+
toast.error("Invalid URL format. Please enter a valid URL.");
|
|
62916
|
+
return;
|
|
62917
|
+
}
|
|
62918
|
+
}
|
|
62435
62919
|
setIsConnecting(true);
|
|
62436
62920
|
hasShownToastRef.current = false;
|
|
62437
62921
|
if (!isRetry) {
|
|
@@ -62462,13 +62946,13 @@ function InspectorDashboard() {
|
|
|
62462
62946
|
};
|
|
62463
62947
|
const actualTransportType = transportType === "SSE" ? "http" : "sse";
|
|
62464
62948
|
setPendingConnectionConfig({
|
|
62465
|
-
url,
|
|
62466
|
-
name:
|
|
62949
|
+
url: url2,
|
|
62950
|
+
name: url2,
|
|
62467
62951
|
proxyConfig,
|
|
62468
62952
|
transportType: actualTransportType
|
|
62469
62953
|
});
|
|
62470
62954
|
},
|
|
62471
|
-
[
|
|
62955
|
+
[url2, connectionType, proxyAddress, customHeaders, transportType]
|
|
62472
62956
|
);
|
|
62473
62957
|
const handleConnectionSuccess = reactExports.useCallback(() => {
|
|
62474
62958
|
if (!pendingConnectionConfig) return;
|
|
@@ -62946,7 +63430,7 @@ function InspectorDashboard() {
|
|
|
62946
63430
|
{
|
|
62947
63431
|
transportType,
|
|
62948
63432
|
setTransportType,
|
|
62949
|
-
url,
|
|
63433
|
+
url: url2,
|
|
62950
63434
|
setUrl,
|
|
62951
63435
|
connectionType,
|
|
62952
63436
|
setConnectionType,
|
|
@@ -63130,16 +63614,16 @@ function useAutoConnect({
|
|
|
63130
63614
|
}, [autoConnectConfig]);
|
|
63131
63615
|
const attemptConnection = reactExports.useCallback(
|
|
63132
63616
|
(config2) => {
|
|
63133
|
-
const { url, name, transportType, connectionType, customHeaders } = config2;
|
|
63617
|
+
const { url: url2, name, transportType, connectionType, customHeaders } = config2;
|
|
63134
63618
|
const proxyConfig = connectionType === "Via Proxy" ? {
|
|
63135
63619
|
proxyAddress: `${window.location.origin}/inspector/api/proxy/mcp`,
|
|
63136
63620
|
customHeaders: customHeaders || {}
|
|
63137
63621
|
} : customHeaders && Object.keys(customHeaders).length > 0 ? { proxyAddress: void 0, customHeaders } : void 0;
|
|
63138
63622
|
console.warn(
|
|
63139
63623
|
`[useAutoConnect] Attempting connection (${connectionType}):`,
|
|
63140
|
-
{ url, transportType, proxyConfig }
|
|
63624
|
+
{ url: url2, transportType, proxyConfig }
|
|
63141
63625
|
);
|
|
63142
|
-
addConnection(
|
|
63626
|
+
addConnection(url2, name, proxyConfig, transportType);
|
|
63143
63627
|
},
|
|
63144
63628
|
[addConnection]
|
|
63145
63629
|
);
|
|
@@ -91038,14 +91522,14 @@ function downloadJSON(data2, filename) {
|
|
|
91038
91522
|
const blob = new BlobConstructor([jsonString], {
|
|
91039
91523
|
type: "application/json"
|
|
91040
91524
|
});
|
|
91041
|
-
const
|
|
91525
|
+
const url2 = URL.createObjectURL(blob);
|
|
91042
91526
|
const a2 = document.createElement("a");
|
|
91043
|
-
a2.href =
|
|
91527
|
+
a2.href = url2;
|
|
91044
91528
|
a2.download = filename || `data-${Date.now()}.json`;
|
|
91045
91529
|
document.body.appendChild(a2);
|
|
91046
91530
|
a2.click();
|
|
91047
91531
|
document.body.removeChild(a2);
|
|
91048
|
-
URL.revokeObjectURL(
|
|
91532
|
+
URL.revokeObjectURL(url2);
|
|
91049
91533
|
} catch (error) {
|
|
91050
91534
|
console.error("Failed to download JSON:", error);
|
|
91051
91535
|
throw error;
|
|
@@ -96144,7 +96628,7 @@ function useChatMessagesClientSide({
|
|
|
96144
96628
|
let llm;
|
|
96145
96629
|
if (llmConfig.provider === "openai") {
|
|
96146
96630
|
const { ChatOpenAI } = await __vitePreload(async () => {
|
|
96147
|
-
const { ChatOpenAI: ChatOpenAI2 } = await import("./index-
|
|
96631
|
+
const { ChatOpenAI: ChatOpenAI2 } = await import("./index-DD0wWmuA.js");
|
|
96148
96632
|
return { ChatOpenAI: ChatOpenAI2 };
|
|
96149
96633
|
}, true ? __vite__mapDeps([5,6,3,7,8]) : void 0);
|
|
96150
96634
|
llm = new ChatOpenAI({
|
|
@@ -96153,7 +96637,7 @@ function useChatMessagesClientSide({
|
|
|
96153
96637
|
});
|
|
96154
96638
|
} else if (llmConfig.provider === "anthropic") {
|
|
96155
96639
|
const { ChatAnthropic } = await __vitePreload(async () => {
|
|
96156
|
-
const { ChatAnthropic: ChatAnthropic2 } = await import("./index-
|
|
96640
|
+
const { ChatAnthropic: ChatAnthropic2 } = await import("./index-DiEpOjl1.js");
|
|
96157
96641
|
return { ChatAnthropic: ChatAnthropic2 };
|
|
96158
96642
|
}, true ? __vite__mapDeps([9,6,3]) : void 0);
|
|
96159
96643
|
llm = new ChatAnthropic({
|
|
@@ -96162,7 +96646,7 @@ function useChatMessagesClientSide({
|
|
|
96162
96646
|
});
|
|
96163
96647
|
} else if (llmConfig.provider === "google") {
|
|
96164
96648
|
const { ChatGoogleGenerativeAI } = await __vitePreload(async () => {
|
|
96165
|
-
const { ChatGoogleGenerativeAI: ChatGoogleGenerativeAI2 } = await import("./index-
|
|
96649
|
+
const { ChatGoogleGenerativeAI: ChatGoogleGenerativeAI2 } = await import("./index-DgPlosep.js");
|
|
96166
96650
|
return { ChatGoogleGenerativeAI: ChatGoogleGenerativeAI2 };
|
|
96167
96651
|
}, true ? __vite__mapDeps([10,6,3,8]) : void 0);
|
|
96168
96652
|
llm = new ChatGoogleGenerativeAI({
|
|
@@ -96181,7 +96665,7 @@ function useChatMessagesClientSide({
|
|
|
96181
96665
|
}
|
|
96182
96666
|
if (!agentRef.current || agentRef.current.llm !== llmRef.current.instance) {
|
|
96183
96667
|
const { MCPAgent } = await __vitePreload(async () => {
|
|
96184
|
-
const { MCPAgent: MCPAgent2 } = await import("./browser-
|
|
96668
|
+
const { MCPAgent: MCPAgent2 } = await import("./browser-CwknRi82.js");
|
|
96185
96669
|
return { MCPAgent: MCPAgent2 };
|
|
96186
96670
|
}, true ? __vite__mapDeps([11,7,6,3,2,4,8]) : void 0);
|
|
96187
96671
|
agentRef.current = new MCPAgent({
|
|
@@ -99281,14 +99765,14 @@ function NotificationsTab({
|
|
|
99281
99765
|
type: "application/json"
|
|
99282
99766
|
}
|
|
99283
99767
|
);
|
|
99284
|
-
const
|
|
99768
|
+
const url2 = URL.createObjectURL(blob);
|
|
99285
99769
|
const a2 = document.createElement("a");
|
|
99286
|
-
a2.href =
|
|
99770
|
+
a2.href = url2;
|
|
99287
99771
|
a2.download = `notification-${Date.now()}.json`;
|
|
99288
99772
|
document.body.appendChild(a2);
|
|
99289
99773
|
a2.click();
|
|
99290
99774
|
document.body.removeChild(a2);
|
|
99291
|
-
URL.revokeObjectURL(
|
|
99775
|
+
URL.revokeObjectURL(url2);
|
|
99292
99776
|
} catch (error) {
|
|
99293
99777
|
console.error(
|
|
99294
99778
|
"[NotificationsTab] Failed to download notification:",
|
|
@@ -100457,7 +100941,7 @@ function PromptsTab({
|
|
|
100457
100941
|
defaultSize: 0,
|
|
100458
100942
|
collapsible: true,
|
|
100459
100943
|
minSize: 5,
|
|
100460
|
-
collapsedSize:
|
|
100944
|
+
collapsedSize: 5,
|
|
100461
100945
|
onCollapse: () => setRpcPanelCollapsed(true),
|
|
100462
100946
|
onExpand: () => setRpcPanelCollapsed(false),
|
|
100463
100947
|
className: "flex flex-col border-t dark:border-zinc-700",
|
|
@@ -101107,14 +101591,14 @@ function ResourcesTab({
|
|
|
101107
101591
|
type: "application/json"
|
|
101108
101592
|
}
|
|
101109
101593
|
);
|
|
101110
|
-
const
|
|
101594
|
+
const url2 = URL.createObjectURL(blob);
|
|
101111
101595
|
const a2 = document.createElement("a");
|
|
101112
|
-
a2.href =
|
|
101596
|
+
a2.href = url2;
|
|
101113
101597
|
a2.download = `resource-${Date.now()}.json`;
|
|
101114
101598
|
document.body.appendChild(a2);
|
|
101115
101599
|
a2.click();
|
|
101116
101600
|
document.body.removeChild(a2);
|
|
101117
|
-
URL.revokeObjectURL(
|
|
101601
|
+
URL.revokeObjectURL(url2);
|
|
101118
101602
|
} catch (error) {
|
|
101119
101603
|
console.error("[ResourcesTab] Failed to download result:", error);
|
|
101120
101604
|
}
|
|
@@ -101273,7 +101757,7 @@ function ResourcesTab({
|
|
|
101273
101757
|
defaultSize: 0,
|
|
101274
101758
|
collapsible: true,
|
|
101275
101759
|
minSize: 5,
|
|
101276
|
-
collapsedSize:
|
|
101760
|
+
collapsedSize: 5,
|
|
101277
101761
|
onCollapse: () => setRpcPanelCollapsed(true),
|
|
101278
101762
|
onExpand: () => setRpcPanelCollapsed(false),
|
|
101279
101763
|
className: "flex flex-col border-t dark:border-zinc-700",
|
|
@@ -102923,7 +103407,7 @@ function ToolsTab({
|
|
|
102923
103407
|
defaultSize: 0,
|
|
102924
103408
|
collapsible: true,
|
|
102925
103409
|
minSize: 5,
|
|
102926
|
-
collapsedSize:
|
|
103410
|
+
collapsedSize: 5,
|
|
102927
103411
|
onCollapse: () => {
|
|
102928
103412
|
setRpcPanelCollapsed(true);
|
|
102929
103413
|
},
|