@modelcontextprotocol/inspector-client 0.14.3 → 0.15.0

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.
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OAuthCallback-BrCtrNqU.js","assets/oauthUtils-DTcoXpSP.js","assets/OAuthDebugCallback-CnQiL6bh.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/OAuthCallback-CaW3Hcqw.js","assets/oauthUtils-DTcoXpSP.js","assets/OAuthDebugCallback-DiBt_oxh.js"])))=>i.map(i=>d[i]);
2
2
  function _mergeNamespaces(n, m2) {
3
3
  for (var i = 0; i < m2.length; i++) {
4
4
  const e = m2[i];
@@ -15119,9 +15119,10 @@ const enumType = ZodEnum.create;
15119
15119
  ZodPromise.create;
15120
15120
  const optionalType = ZodOptional.create;
15121
15121
  ZodNullable.create;
15122
- const LATEST_PROTOCOL_VERSION = "2025-03-26";
15122
+ const LATEST_PROTOCOL_VERSION = "2025-06-18";
15123
15123
  const SUPPORTED_PROTOCOL_VERSIONS = [
15124
15124
  LATEST_PROTOCOL_VERSION,
15125
+ "2025-03-26",
15125
15126
  "2024-11-05",
15126
15127
  "2024-10-07"
15127
15128
  ];
@@ -15143,7 +15144,8 @@ const RequestSchema = objectType({
15143
15144
  });
15144
15145
  const BaseNotificationParamsSchema = objectType({
15145
15146
  /**
15146
- * This parameter name is reserved by MCP to allow clients and servers to attach additional metadata to their notifications.
15147
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15148
+ * for notes on _meta usage.
15147
15149
  */
15148
15150
  _meta: optionalType(objectType({}).passthrough())
15149
15151
  }).passthrough();
@@ -15153,7 +15155,8 @@ const NotificationSchema = objectType({
15153
15155
  });
15154
15156
  const ResultSchema = objectType({
15155
15157
  /**
15156
- * This result property is reserved by the protocol to allow clients and servers to attach additional metadata to their responses.
15158
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15159
+ * for notes on _meta usage.
15157
15160
  */
15158
15161
  _meta: optionalType(objectType({}).passthrough())
15159
15162
  }).passthrough();
@@ -15224,10 +15227,22 @@ const CancelledNotificationSchema = NotificationSchema.extend({
15224
15227
  reason: stringType().optional()
15225
15228
  })
15226
15229
  });
15227
- const ImplementationSchema = objectType({
15230
+ const BaseMetadataSchema = objectType({
15231
+ /** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
15228
15232
  name: stringType(),
15229
- version: stringType()
15233
+ /**
15234
+ * Intended for UI and end-user contexts — optimized to be human-readable and easily understood,
15235
+ * even by those unfamiliar with domain-specific terminology.
15236
+ *
15237
+ * If not provided, the name should be used for display (except for Tool,
15238
+ * where `annotations.title` should be given precedence over using `name`,
15239
+ * if present).
15240
+ */
15241
+ title: optionalType(stringType())
15230
15242
  }).passthrough();
15243
+ const ImplementationSchema = BaseMetadataSchema.extend({
15244
+ version: stringType()
15245
+ });
15231
15246
  const ClientCapabilitiesSchema = objectType({
15232
15247
  /**
15233
15248
  * Experimental, non-standard capabilities that the client supports.
@@ -15237,6 +15252,10 @@ const ClientCapabilitiesSchema = objectType({
15237
15252
  * Present if the client supports sampling from an LLM.
15238
15253
  */
15239
15254
  sampling: optionalType(objectType({}).passthrough()),
15255
+ /**
15256
+ * Present if the client supports eliciting user input.
15257
+ */
15258
+ elicitation: optionalType(objectType({}).passthrough()),
15240
15259
  /**
15241
15260
  * Present if the client supports listing roots.
15242
15261
  */
@@ -15371,7 +15390,12 @@ const ResourceContentsSchema = objectType({
15371
15390
  /**
15372
15391
  * The MIME type of this resource, if known.
15373
15392
  */
15374
- mimeType: optionalType(stringType())
15393
+ mimeType: optionalType(stringType()),
15394
+ /**
15395
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15396
+ * for notes on _meta usage.
15397
+ */
15398
+ _meta: optionalType(objectType({}).passthrough())
15375
15399
  }).passthrough();
15376
15400
  const TextResourceContentsSchema = ResourceContentsSchema.extend({
15377
15401
  /**
@@ -15385,17 +15409,11 @@ const BlobResourceContentsSchema = ResourceContentsSchema.extend({
15385
15409
  */
15386
15410
  blob: stringType().base64()
15387
15411
  });
15388
- const ResourceSchema = objectType({
15412
+ const ResourceSchema = BaseMetadataSchema.extend({
15389
15413
  /**
15390
15414
  * The URI of this resource.
15391
15415
  */
15392
15416
  uri: stringType(),
15393
- /**
15394
- * A human-readable name for this resource.
15395
- *
15396
- * This can be used by clients to populate UI elements.
15397
- */
15398
- name: stringType(),
15399
15417
  /**
15400
15418
  * A description of what this resource represents.
15401
15419
  *
@@ -15405,19 +15423,18 @@ const ResourceSchema = objectType({
15405
15423
  /**
15406
15424
  * The MIME type of this resource, if known.
15407
15425
  */
15408
- mimeType: optionalType(stringType())
15409
- }).passthrough();
15410
- const ResourceTemplateSchema = objectType({
15426
+ mimeType: optionalType(stringType()),
15411
15427
  /**
15412
- * A URI template (according to RFC 6570) that can be used to construct resource URIs.
15428
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15429
+ * for notes on _meta usage.
15413
15430
  */
15414
- uriTemplate: stringType(),
15431
+ _meta: optionalType(objectType({}).passthrough())
15432
+ });
15433
+ const ResourceTemplateSchema = BaseMetadataSchema.extend({
15415
15434
  /**
15416
- * A human-readable name for the type of resource this template refers to.
15417
- *
15418
- * This can be used by clients to populate UI elements.
15435
+ * A URI template (according to RFC 6570) that can be used to construct resource URIs.
15419
15436
  */
15420
- name: stringType(),
15437
+ uriTemplate: stringType(),
15421
15438
  /**
15422
15439
  * A description of what this template is for.
15423
15440
  *
@@ -15427,8 +15444,13 @@ const ResourceTemplateSchema = objectType({
15427
15444
  /**
15428
15445
  * The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type.
15429
15446
  */
15430
- mimeType: optionalType(stringType())
15431
- }).passthrough();
15447
+ mimeType: optionalType(stringType()),
15448
+ /**
15449
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15450
+ * for notes on _meta usage.
15451
+ */
15452
+ _meta: optionalType(objectType({}).passthrough())
15453
+ });
15432
15454
  const ListResourcesRequestSchema = PaginatedRequestSchema.extend({
15433
15455
  method: literalType("resources/list")
15434
15456
  });
@@ -15497,11 +15519,7 @@ const PromptArgumentSchema = objectType({
15497
15519
  */
15498
15520
  required: optionalType(booleanType())
15499
15521
  }).passthrough();
15500
- const PromptSchema = objectType({
15501
- /**
15502
- * The name of the prompt or prompt template.
15503
- */
15504
- name: stringType(),
15522
+ const PromptSchema = BaseMetadataSchema.extend({
15505
15523
  /**
15506
15524
  * An optional description of what this prompt provides
15507
15525
  */
@@ -15509,8 +15527,13 @@ const PromptSchema = objectType({
15509
15527
  /**
15510
15528
  * A list of arguments to use for templating the prompt.
15511
15529
  */
15512
- arguments: optionalType(arrayType(PromptArgumentSchema))
15513
- }).passthrough();
15530
+ arguments: optionalType(arrayType(PromptArgumentSchema)),
15531
+ /**
15532
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15533
+ * for notes on _meta usage.
15534
+ */
15535
+ _meta: optionalType(objectType({}).passthrough())
15536
+ });
15514
15537
  const ListPromptsRequestSchema = PaginatedRequestSchema.extend({
15515
15538
  method: literalType("prompts/list")
15516
15539
  });
@@ -15535,7 +15558,12 @@ const TextContentSchema = objectType({
15535
15558
  /**
15536
15559
  * The text content of the message.
15537
15560
  */
15538
- text: stringType()
15561
+ text: stringType(),
15562
+ /**
15563
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15564
+ * for notes on _meta usage.
15565
+ */
15566
+ _meta: optionalType(objectType({}).passthrough())
15539
15567
  }).passthrough();
15540
15568
  const ImageContentSchema = objectType({
15541
15569
  type: literalType("image"),
@@ -15546,7 +15574,12 @@ const ImageContentSchema = objectType({
15546
15574
  /**
15547
15575
  * The MIME type of the image. Different providers may support different image types.
15548
15576
  */
15549
- mimeType: stringType()
15577
+ mimeType: stringType(),
15578
+ /**
15579
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15580
+ * for notes on _meta usage.
15581
+ */
15582
+ _meta: optionalType(objectType({}).passthrough())
15550
15583
  }).passthrough();
15551
15584
  const AudioContentSchema = objectType({
15552
15585
  type: literalType("audio"),
@@ -15557,20 +15590,35 @@ const AudioContentSchema = objectType({
15557
15590
  /**
15558
15591
  * The MIME type of the audio. Different providers may support different audio types.
15559
15592
  */
15560
- mimeType: stringType()
15593
+ mimeType: stringType(),
15594
+ /**
15595
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15596
+ * for notes on _meta usage.
15597
+ */
15598
+ _meta: optionalType(objectType({}).passthrough())
15561
15599
  }).passthrough();
15562
15600
  const EmbeddedResourceSchema = objectType({
15563
15601
  type: literalType("resource"),
15564
- resource: unionType([TextResourceContentsSchema, BlobResourceContentsSchema])
15602
+ resource: unionType([TextResourceContentsSchema, BlobResourceContentsSchema]),
15603
+ /**
15604
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15605
+ * for notes on _meta usage.
15606
+ */
15607
+ _meta: optionalType(objectType({}).passthrough())
15565
15608
  }).passthrough();
15609
+ const ResourceLinkSchema = ResourceSchema.extend({
15610
+ type: literalType("resource_link")
15611
+ });
15612
+ const ContentBlockSchema = unionType([
15613
+ TextContentSchema,
15614
+ ImageContentSchema,
15615
+ AudioContentSchema,
15616
+ ResourceLinkSchema,
15617
+ EmbeddedResourceSchema
15618
+ ]);
15566
15619
  const PromptMessageSchema = objectType({
15567
15620
  role: enumType(["user", "assistant"]),
15568
- content: unionType([
15569
- TextContentSchema,
15570
- ImageContentSchema,
15571
- AudioContentSchema,
15572
- EmbeddedResourceSchema
15573
- ])
15621
+ content: ContentBlockSchema
15574
15622
  }).passthrough();
15575
15623
  const GetPromptResultSchema = ResultSchema.extend({
15576
15624
  /**
@@ -15621,11 +15669,7 @@ const ToolAnnotationsSchema = objectType({
15621
15669
  */
15622
15670
  openWorldHint: optionalType(booleanType())
15623
15671
  }).passthrough();
15624
- const ToolSchema = objectType({
15625
- /**
15626
- * The name of the tool.
15627
- */
15628
- name: stringType(),
15672
+ const ToolSchema = BaseMetadataSchema.extend({
15629
15673
  /**
15630
15674
  * A human-readable description of the tool.
15631
15675
  */
@@ -15650,8 +15694,13 @@ const ToolSchema = objectType({
15650
15694
  /**
15651
15695
  * Optional additional tool information.
15652
15696
  */
15653
- annotations: optionalType(ToolAnnotationsSchema)
15654
- }).passthrough();
15697
+ annotations: optionalType(ToolAnnotationsSchema),
15698
+ /**
15699
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15700
+ * for notes on _meta usage.
15701
+ */
15702
+ _meta: optionalType(objectType({}).passthrough())
15703
+ });
15655
15704
  const ListToolsRequestSchema = PaginatedRequestSchema.extend({
15656
15705
  method: literalType("tools/list")
15657
15706
  });
@@ -15665,12 +15714,7 @@ const CallToolResultSchema = ResultSchema.extend({
15665
15714
  * If the Tool does not define an outputSchema, this field MUST be present in the result.
15666
15715
  * For backwards compatibility, this field is always present, but it may be empty.
15667
15716
  */
15668
- content: arrayType(unionType([
15669
- TextContentSchema,
15670
- ImageContentSchema,
15671
- AudioContentSchema,
15672
- EmbeddedResourceSchema
15673
- ])).default([]),
15717
+ content: arrayType(ContentBlockSchema).default([]),
15674
15718
  /**
15675
15719
  * An object containing structured tool output.
15676
15720
  *
@@ -15814,7 +15858,68 @@ const CreateMessageResultSchema = ResultSchema.extend({
15814
15858
  AudioContentSchema
15815
15859
  ])
15816
15860
  });
15817
- const ResourceReferenceSchema = objectType({
15861
+ const BooleanSchemaSchema = objectType({
15862
+ type: literalType("boolean"),
15863
+ title: optionalType(stringType()),
15864
+ description: optionalType(stringType()),
15865
+ default: optionalType(booleanType())
15866
+ }).passthrough();
15867
+ const StringSchemaSchema = objectType({
15868
+ type: literalType("string"),
15869
+ title: optionalType(stringType()),
15870
+ description: optionalType(stringType()),
15871
+ minLength: optionalType(numberType()),
15872
+ maxLength: optionalType(numberType()),
15873
+ format: optionalType(enumType(["email", "uri", "date", "date-time"]))
15874
+ }).passthrough();
15875
+ const NumberSchemaSchema = objectType({
15876
+ type: enumType(["number", "integer"]),
15877
+ title: optionalType(stringType()),
15878
+ description: optionalType(stringType()),
15879
+ minimum: optionalType(numberType()),
15880
+ maximum: optionalType(numberType())
15881
+ }).passthrough();
15882
+ const EnumSchemaSchema = objectType({
15883
+ type: literalType("string"),
15884
+ title: optionalType(stringType()),
15885
+ description: optionalType(stringType()),
15886
+ enum: arrayType(stringType()),
15887
+ enumNames: optionalType(arrayType(stringType()))
15888
+ }).passthrough();
15889
+ const PrimitiveSchemaDefinitionSchema = unionType([
15890
+ BooleanSchemaSchema,
15891
+ StringSchemaSchema,
15892
+ NumberSchemaSchema,
15893
+ EnumSchemaSchema
15894
+ ]);
15895
+ const ElicitRequestSchema = RequestSchema.extend({
15896
+ method: literalType("elicitation/create"),
15897
+ params: BaseRequestParamsSchema.extend({
15898
+ /**
15899
+ * The message to present to the user.
15900
+ */
15901
+ message: stringType(),
15902
+ /**
15903
+ * The schema for the requested user input.
15904
+ */
15905
+ requestedSchema: objectType({
15906
+ type: literalType("object"),
15907
+ properties: recordType(stringType(), PrimitiveSchemaDefinitionSchema),
15908
+ required: optionalType(arrayType(stringType()))
15909
+ }).passthrough()
15910
+ })
15911
+ });
15912
+ const ElicitResultSchema = ResultSchema.extend({
15913
+ /**
15914
+ * The user's response action.
15915
+ */
15916
+ action: enumType(["accept", "reject", "cancel"]),
15917
+ /**
15918
+ * The collected user input content (only present if action is "accept").
15919
+ */
15920
+ content: optionalType(recordType(stringType(), unknownType()))
15921
+ });
15922
+ const ResourceTemplateReferenceSchema = objectType({
15818
15923
  type: literalType("ref/resource"),
15819
15924
  /**
15820
15925
  * The URI or URI template of the resource.
@@ -15831,7 +15936,7 @@ const PromptReferenceSchema = objectType({
15831
15936
  const CompleteRequestSchema = RequestSchema.extend({
15832
15937
  method: literalType("completion/complete"),
15833
15938
  params: BaseRequestParamsSchema.extend({
15834
- ref: unionType([PromptReferenceSchema, ResourceReferenceSchema]),
15939
+ ref: unionType([PromptReferenceSchema, ResourceTemplateReferenceSchema]),
15835
15940
  /**
15836
15941
  * The argument's information
15837
15942
  */
@@ -15844,7 +15949,13 @@ const CompleteRequestSchema = RequestSchema.extend({
15844
15949
  * The value of the argument to use for completion matching.
15845
15950
  */
15846
15951
  value: stringType()
15847
- }).passthrough()
15952
+ }).passthrough(),
15953
+ context: optionalType(objectType({
15954
+ /**
15955
+ * Previously-resolved variables in a URI template or prompt.
15956
+ */
15957
+ arguments: optionalType(recordType(stringType(), stringType()))
15958
+ }))
15848
15959
  })
15849
15960
  });
15850
15961
  const CompleteResultSchema = ResultSchema.extend({
@@ -15871,7 +15982,12 @@ const RootSchema = objectType({
15871
15982
  /**
15872
15983
  * An optional name for the root.
15873
15984
  */
15874
- name: optionalType(stringType())
15985
+ name: optionalType(stringType()),
15986
+ /**
15987
+ * See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
15988
+ * for notes on _meta usage.
15989
+ */
15990
+ _meta: optionalType(objectType({}).passthrough())
15875
15991
  }).passthrough();
15876
15992
  const ListRootsRequestSchema = RequestSchema.extend({
15877
15993
  method: literalType("roots/list")
@@ -15906,11 +16022,13 @@ const ClientNotificationSchema = unionType([
15906
16022
  unionType([
15907
16023
  EmptyResultSchema,
15908
16024
  CreateMessageResultSchema,
16025
+ ElicitResultSchema,
15909
16026
  ListRootsResultSchema
15910
16027
  ]);
15911
16028
  unionType([
15912
16029
  PingRequestSchema,
15913
16030
  CreateMessageRequestSchema,
16031
+ ElicitRequestSchema,
15914
16032
  ListRootsRequestSchema
15915
16033
  ]);
15916
16034
  const ServerNotificationSchema = unionType([
@@ -16005,7 +16123,8 @@ const OAuthClientMetadataSchema = objectType({
16005
16123
  jwks_uri: stringType().optional(),
16006
16124
  jwks: anyType().optional(),
16007
16125
  software_id: stringType().optional(),
16008
- software_version: stringType().optional()
16126
+ software_version: stringType().optional(),
16127
+ software_statement: stringType().optional()
16009
16128
  }).strip();
16010
16129
  const OAuthClientInformationSchema = objectType({
16011
16130
  client_id: stringType(),
@@ -16074,6 +16193,7 @@ const EMPTY_DEBUGGER_STATE = {
16074
16193
  oauthMetadata: null,
16075
16194
  resourceMetadata: null,
16076
16195
  resourceMetadataError: null,
16196
+ resource: null,
16077
16197
  authServerUrl: null,
16078
16198
  oauthClientInfo: null,
16079
16199
  authorizationUrl: null,
@@ -16227,21 +16347,40 @@ async function pkceChallenge(length) {
16227
16347
  code_challenge: challenge
16228
16348
  };
16229
16349
  }
16350
+ function resourceUrlFromServerUrl(url) {
16351
+ const resourceURL = typeof url === "string" ? new URL(url) : new URL(url.href);
16352
+ resourceURL.hash = "";
16353
+ return resourceURL;
16354
+ }
16355
+ function checkResourceAllowed({ requestedResource, configuredResource }) {
16356
+ const requested = typeof requestedResource === "string" ? new URL(requestedResource) : new URL(requestedResource.href);
16357
+ const configured = typeof configuredResource === "string" ? new URL(configuredResource) : new URL(configuredResource.href);
16358
+ if (requested.origin !== configured.origin) {
16359
+ return false;
16360
+ }
16361
+ if (requested.pathname.length < configured.pathname.length) {
16362
+ return false;
16363
+ }
16364
+ const requestedPath = requested.pathname.endsWith("/") ? requested.pathname : requested.pathname + "/";
16365
+ const configuredPath = configured.pathname.endsWith("/") ? configured.pathname : configured.pathname + "/";
16366
+ return requestedPath.startsWith(configuredPath);
16367
+ }
16230
16368
  class UnauthorizedError extends Error {
16231
16369
  constructor(message) {
16232
16370
  super(message !== null && message !== void 0 ? message : "Unauthorized");
16233
16371
  }
16234
16372
  }
16235
16373
  async function auth(provider, { serverUrl, authorizationCode, scope, resourceMetadataUrl }) {
16374
+ let resourceMetadata;
16236
16375
  let authorizationServerUrl = serverUrl;
16237
16376
  try {
16238
- const resourceMetadata = await discoverOAuthProtectedResourceMetadata(resourceMetadataUrl || serverUrl);
16377
+ resourceMetadata = await discoverOAuthProtectedResourceMetadata(serverUrl, { resourceMetadataUrl });
16239
16378
  if (resourceMetadata.authorization_servers && resourceMetadata.authorization_servers.length > 0) {
16240
16379
  authorizationServerUrl = resourceMetadata.authorization_servers[0];
16241
16380
  }
16242
- } catch (error) {
16243
- console.warn("Could not load OAuth Protected Resource metadata, falling back to /.well-known/oauth-authorization-server", error);
16381
+ } catch (_a) {
16244
16382
  }
16383
+ const resource = await selectResourceURL(serverUrl, provider, resourceMetadata);
16245
16384
  const metadata = await discoverOAuthMetadata(authorizationServerUrl);
16246
16385
  let clientInformation = await Promise.resolve(provider.clientInformation());
16247
16386
  if (!clientInformation) {
@@ -16265,7 +16404,8 @@ async function auth(provider, { serverUrl, authorizationCode, scope, resourceMet
16265
16404
  clientInformation,
16266
16405
  authorizationCode,
16267
16406
  codeVerifier: codeVerifier2,
16268
- redirectUri: provider.redirectUrl
16407
+ redirectUri: provider.redirectUrl,
16408
+ resource
16269
16409
  });
16270
16410
  await provider.saveTokens(tokens2);
16271
16411
  return "AUTHORIZED";
@@ -16276,12 +16416,12 @@ async function auth(provider, { serverUrl, authorizationCode, scope, resourceMet
16276
16416
  const newTokens = await refreshAuthorization(authorizationServerUrl, {
16277
16417
  metadata,
16278
16418
  clientInformation,
16279
- refreshToken: tokens.refresh_token
16419
+ refreshToken: tokens.refresh_token,
16420
+ resource
16280
16421
  });
16281
16422
  await provider.saveTokens(newTokens);
16282
16423
  return "AUTHORIZED";
16283
- } catch (error) {
16284
- console.error("Could not refresh OAuth tokens:", error);
16424
+ } catch (_b) {
16285
16425
  }
16286
16426
  }
16287
16427
  const state = provider.state ? await provider.state() : void 0;
@@ -16290,12 +16430,26 @@ async function auth(provider, { serverUrl, authorizationCode, scope, resourceMet
16290
16430
  clientInformation,
16291
16431
  state,
16292
16432
  redirectUrl: provider.redirectUrl,
16293
- scope: scope || provider.clientMetadata.scope
16433
+ scope: scope || provider.clientMetadata.scope,
16434
+ resource
16294
16435
  });
16295
16436
  await provider.saveCodeVerifier(codeVerifier);
16296
16437
  await provider.redirectToAuthorization(authorizationUrl);
16297
16438
  return "REDIRECT";
16298
16439
  }
16440
+ async function selectResourceURL(serverUrl, provider, resourceMetadata) {
16441
+ const defaultResource = resourceUrlFromServerUrl(serverUrl);
16442
+ if (provider.validateResourceURL) {
16443
+ return await provider.validateResourceURL(defaultResource, resourceMetadata === null || resourceMetadata === void 0 ? void 0 : resourceMetadata.resource);
16444
+ }
16445
+ if (!resourceMetadata) {
16446
+ return void 0;
16447
+ }
16448
+ if (!checkResourceAllowed({ requestedResource: defaultResource, configuredResource: resourceMetadata.resource })) {
16449
+ throw new Error(`Protected resource ${resourceMetadata.resource} does not match expected ${defaultResource} (or origin)`);
16450
+ }
16451
+ return new URL(resourceMetadata.resource);
16452
+ }
16299
16453
  function extractResourceMetadataUrl(res) {
16300
16454
  const authenticateHeader = res.headers.get("WWW-Authenticate");
16301
16455
  if (!authenticateHeader) {
@@ -16303,7 +16457,6 @@ function extractResourceMetadataUrl(res) {
16303
16457
  }
16304
16458
  const [type2, scheme] = authenticateHeader.split(" ");
16305
16459
  if (type2.toLowerCase() !== "bearer" || !scheme) {
16306
- console.log("Invalid WWW-Authenticate header format, expected 'Bearer'");
16307
16460
  return void 0;
16308
16461
  }
16309
16462
  const regex = /resource_metadata="([^"]*)"/;
@@ -16314,14 +16467,15 @@ function extractResourceMetadataUrl(res) {
16314
16467
  try {
16315
16468
  return new URL(match[1]);
16316
16469
  } catch (_a) {
16317
- console.log("Invalid resource metadata url: ", match[1]);
16318
16470
  return void 0;
16319
16471
  }
16320
16472
  }
16321
16473
  async function discoverOAuthProtectedResourceMetadata(serverUrl, opts) {
16322
16474
  var _a;
16323
16475
  let url;
16324
- {
16476
+ if (opts === null || opts === void 0 ? void 0 : opts.resourceMetadataUrl) {
16477
+ url = new URL(opts === null || opts === void 0 ? void 0 : opts.resourceMetadataUrl);
16478
+ } else {
16325
16479
  url = new URL("/.well-known/oauth-protected-resource", serverUrl);
16326
16480
  }
16327
16481
  let response;
@@ -16346,24 +16500,50 @@ async function discoverOAuthProtectedResourceMetadata(serverUrl, opts) {
16346
16500
  }
16347
16501
  return OAuthProtectedResourceMetadataSchema.parse(await response.json());
16348
16502
  }
16349
- async function discoverOAuthMetadata(authorizationServerUrl, opts) {
16350
- var _a;
16351
- const url = new URL("/.well-known/oauth-authorization-server", authorizationServerUrl);
16352
- let response;
16503
+ async function fetchWithCorsRetry(url, headers) {
16353
16504
  try {
16354
- response = await fetch(url, {
16355
- headers: {
16356
- "MCP-Protocol-Version": (_a = opts === null || opts === void 0 ? void 0 : opts.protocolVersion) !== null && _a !== void 0 ? _a : LATEST_PROTOCOL_VERSION
16357
- }
16358
- });
16505
+ return await fetch(url, { headers });
16359
16506
  } catch (error) {
16360
16507
  if (error instanceof TypeError) {
16361
- response = await fetch(url);
16362
- } else {
16363
- throw error;
16508
+ return await fetch(url);
16364
16509
  }
16510
+ throw error;
16365
16511
  }
16366
- if (response.status === 404) {
16512
+ }
16513
+ function buildWellKnownPath(pathname) {
16514
+ let wellKnownPath = `/.well-known/oauth-authorization-server${pathname}`;
16515
+ if (pathname.endsWith("/")) {
16516
+ wellKnownPath = wellKnownPath.slice(0, -1);
16517
+ }
16518
+ return wellKnownPath;
16519
+ }
16520
+ async function tryMetadataDiscovery(url, protocolVersion) {
16521
+ const headers = {
16522
+ "MCP-Protocol-Version": protocolVersion
16523
+ };
16524
+ return await fetchWithCorsRetry(url, headers);
16525
+ }
16526
+ function shouldAttemptFallback(response, pathname) {
16527
+ return response.status === 404 && pathname !== "/";
16528
+ }
16529
+ async function discoverOAuthMetadata(authorizationServerUrl, opts) {
16530
+ var _a;
16531
+ const issuer = new URL(authorizationServerUrl);
16532
+ const protocolVersion = (_a = void 0) !== null && _a !== void 0 ? _a : LATEST_PROTOCOL_VERSION;
16533
+ const wellKnownPath = buildWellKnownPath(issuer.pathname);
16534
+ const pathAwareUrl = new URL(wellKnownPath, issuer);
16535
+ let response = await tryMetadataDiscovery(pathAwareUrl, protocolVersion);
16536
+ if (shouldAttemptFallback(response, issuer.pathname)) {
16537
+ try {
16538
+ const rootUrl = new URL("/.well-known/oauth-authorization-server", issuer);
16539
+ response = await tryMetadataDiscovery(rootUrl, protocolVersion);
16540
+ if (response.status === 404) {
16541
+ return void 0;
16542
+ }
16543
+ } catch (_b) {
16544
+ return void 0;
16545
+ }
16546
+ } else if (response.status === 404) {
16367
16547
  return void 0;
16368
16548
  }
16369
16549
  if (!response.ok) {
@@ -16371,7 +16551,7 @@ async function discoverOAuthMetadata(authorizationServerUrl, opts) {
16371
16551
  }
16372
16552
  return OAuthMetadataSchema.parse(await response.json());
16373
16553
  }
16374
- async function startAuthorization(authorizationServerUrl, { metadata, clientInformation, redirectUrl, scope, state }) {
16554
+ async function startAuthorization(authorizationServerUrl, { metadata, clientInformation, redirectUrl, scope, state, resource }) {
16375
16555
  const responseType = "code";
16376
16556
  const codeChallengeMethod = "S256";
16377
16557
  let authorizationUrl;
@@ -16400,9 +16580,12 @@ async function startAuthorization(authorizationServerUrl, { metadata, clientInfo
16400
16580
  if (scope) {
16401
16581
  authorizationUrl.searchParams.set("scope", scope);
16402
16582
  }
16583
+ if (resource) {
16584
+ authorizationUrl.searchParams.set("resource", resource.href);
16585
+ }
16403
16586
  return { authorizationUrl, codeVerifier };
16404
16587
  }
16405
- async function exchangeAuthorization(authorizationServerUrl, { metadata, clientInformation, authorizationCode, codeVerifier, redirectUri }) {
16588
+ async function exchangeAuthorization(authorizationServerUrl, { metadata, clientInformation, authorizationCode, codeVerifier, redirectUri, resource }) {
16406
16589
  const grantType = "authorization_code";
16407
16590
  let tokenUrl;
16408
16591
  if (metadata) {
@@ -16423,6 +16606,9 @@ async function exchangeAuthorization(authorizationServerUrl, { metadata, clientI
16423
16606
  if (clientInformation.client_secret) {
16424
16607
  params.set("client_secret", clientInformation.client_secret);
16425
16608
  }
16609
+ if (resource) {
16610
+ params.set("resource", resource.href);
16611
+ }
16426
16612
  const response = await fetch(tokenUrl, {
16427
16613
  method: "POST",
16428
16614
  headers: {
@@ -16435,7 +16621,7 @@ async function exchangeAuthorization(authorizationServerUrl, { metadata, clientI
16435
16621
  }
16436
16622
  return OAuthTokensSchema.parse(await response.json());
16437
16623
  }
16438
- async function refreshAuthorization(authorizationServerUrl, { metadata, clientInformation, refreshToken }) {
16624
+ async function refreshAuthorization(authorizationServerUrl, { metadata, clientInformation, refreshToken, resource }) {
16439
16625
  const grantType = "refresh_token";
16440
16626
  let tokenUrl;
16441
16627
  if (metadata) {
@@ -16454,6 +16640,9 @@ async function refreshAuthorization(authorizationServerUrl, { metadata, clientIn
16454
16640
  if (clientInformation.client_secret) {
16455
16641
  params.set("client_secret", clientInformation.client_secret);
16456
16642
  }
16643
+ if (resource) {
16644
+ params.set("resource", resource.href);
16645
+ }
16457
16646
  const response = await fetch(tokenUrl, {
16458
16647
  method: "POST",
16459
16648
  headers: {
@@ -16493,14 +16682,14 @@ const oauthTransitions = {
16493
16682
  canTransition: async () => true,
16494
16683
  execute: async (context) => {
16495
16684
  var _a;
16496
- let authServerUrl = new URL(context.serverUrl);
16685
+ let authServerUrl = new URL("/", context.serverUrl);
16497
16686
  let resourceMetadata = null;
16498
16687
  let resourceMetadataError = null;
16499
16688
  try {
16500
16689
  resourceMetadata = await discoverOAuthProtectedResourceMetadata(
16501
16690
  context.serverUrl
16502
16691
  );
16503
- if (resourceMetadata && ((_a = resourceMetadata.authorization_servers) == null ? void 0 : _a.length)) {
16692
+ if ((_a = resourceMetadata == null ? void 0 : resourceMetadata.authorization_servers) == null ? void 0 : _a.length) {
16504
16693
  authServerUrl = new URL(resourceMetadata.authorization_servers[0]);
16505
16694
  }
16506
16695
  } catch (e) {
@@ -16510,6 +16699,12 @@ const oauthTransitions = {
16510
16699
  resourceMetadataError = new Error(String(e));
16511
16700
  }
16512
16701
  }
16702
+ const resource = await selectResourceURL(
16703
+ context.serverUrl,
16704
+ context.provider,
16705
+ // we default to null, so swap it for undefined if not set
16706
+ resourceMetadata ?? void 0
16707
+ );
16513
16708
  const metadata = await discoverOAuthMetadata(authServerUrl);
16514
16709
  if (!metadata) {
16515
16710
  throw new Error("Failed to discover OAuth metadata");
@@ -16518,6 +16713,7 @@ const oauthTransitions = {
16518
16713
  context.provider.saveServerMetadata(parsedMetadata);
16519
16714
  context.updateState({
16520
16715
  resourceMetadata,
16716
+ resource,
16521
16717
  resourceMetadataError,
16522
16718
  authServerUrl,
16523
16719
  oauthMetadata: parsedMetadata,
@@ -16561,7 +16757,8 @@ const oauthTransitions = {
16561
16757
  metadata,
16562
16758
  clientInformation,
16563
16759
  redirectUrl: context.provider.redirectUrl,
16564
- scope
16760
+ scope,
16761
+ resource: context.state.resource ?? void 0
16565
16762
  }
16566
16763
  );
16567
16764
  context.provider.saveCodeVerifier(codeVerifier);
@@ -16599,7 +16796,8 @@ const oauthTransitions = {
16599
16796
  clientInformation,
16600
16797
  authorizationCode: context.state.authorizationCode,
16601
16798
  codeVerifier,
16602
- redirectUri: context.provider.redirectUrl
16799
+ redirectUri: context.provider.redirectUrl,
16800
+ resource: context.state.resource ?? void 0
16603
16801
  });
16604
16802
  context.provider.saveTokens(tokens);
16605
16803
  context.updateState({
@@ -22802,14 +23000,21 @@ class Protocol {
22802
23000
  * The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
22803
23001
  */
22804
23002
  async connect(transport) {
23003
+ var _a, _b, _c;
22805
23004
  this._transport = transport;
23005
+ const _onclose = (_a = this.transport) === null || _a === void 0 ? void 0 : _a.onclose;
22806
23006
  this._transport.onclose = () => {
23007
+ _onclose === null || _onclose === void 0 ? void 0 : _onclose();
22807
23008
  this._onclose();
22808
23009
  };
23010
+ const _onerror = (_b = this.transport) === null || _b === void 0 ? void 0 : _b.onerror;
22809
23011
  this._transport.onerror = (error) => {
23012
+ _onerror === null || _onerror === void 0 ? void 0 : _onerror(error);
22810
23013
  this._onerror(error);
22811
23014
  };
23015
+ const _onmessage = (_c = this._transport) === null || _c === void 0 ? void 0 : _c.onmessage;
22812
23016
  this._transport.onmessage = (message, extra) => {
23017
+ _onmessage === null || _onmessage === void 0 ? void 0 : _onmessage(message, extra);
22813
23018
  if (isJSONRPCResponse(message) || isJSONRPCError(message)) {
22814
23019
  this._onresponse(message);
22815
23020
  } else if (isJSONRPCRequest(message)) {
@@ -22869,7 +23074,8 @@ class Protocol {
22869
23074
  sendNotification: (notification) => this.notification(notification, { relatedRequestId: request.id }),
22870
23075
  sendRequest: (r2, resultSchema, options) => this.request(r2, resultSchema, { ...options, relatedRequestId: request.id }),
22871
23076
  authInfo: extra === null || extra === void 0 ? void 0 : extra.authInfo,
22872
- requestId: request.id
23077
+ requestId: request.id,
23078
+ requestInfo: extra === null || extra === void 0 ? void 0 : extra.requestInfo
22873
23079
  };
22874
23080
  Promise.resolve().then(() => handler(request, fullExtra)).then((result) => {
22875
23081
  var _a2;
@@ -23137,6 +23343,9 @@ class Client extends Protocol {
23137
23343
  }
23138
23344
  this._serverCapabilities = result.capabilities;
23139
23345
  this._serverVersion = result.serverInfo;
23346
+ if (transport.setProtocolVersion) {
23347
+ transport.setProtocolVersion(result.protocolVersion);
23348
+ }
23140
23349
  this._instructions = result.instructions;
23141
23350
  await this.notification({
23142
23351
  method: "notifications/initialized"
@@ -23220,6 +23429,11 @@ class Client extends Protocol {
23220
23429
  throw new Error(`Client does not support sampling capability (required for ${method})`);
23221
23430
  }
23222
23431
  break;
23432
+ case "elicitation/create":
23433
+ if (!this._capabilities.elicitation) {
23434
+ throw new Error(`Client does not support elicitation capability (required for ${method})`);
23435
+ }
23436
+ break;
23223
23437
  case "roots/list":
23224
23438
  if (!this._capabilities.roots) {
23225
23439
  throw new Error(`Client does not support roots capability (required for ${method})`);
@@ -23287,8 +23501,7 @@ class Client extends Protocol {
23287
23501
  try {
23288
23502
  const validator = this._ajv.compile(tool.outputSchema);
23289
23503
  this._cachedToolOutputValidators.set(tool.name, validator);
23290
- } catch (error) {
23291
- console.warn(`Failed to compile output schema for tool ${tool.name}: ${error}`);
23504
+ } catch (_a) {
23292
23505
  }
23293
23506
  }
23294
23507
  }
@@ -23707,26 +23920,40 @@ class SSEClientTransport {
23707
23920
  }
23708
23921
  async _commonHeaders() {
23709
23922
  var _a;
23710
- const headers = { ...(_a = this._requestInit) === null || _a === void 0 ? void 0 : _a.headers };
23923
+ const headers = {
23924
+ ...(_a = this._requestInit) === null || _a === void 0 ? void 0 : _a.headers
23925
+ };
23711
23926
  if (this._authProvider) {
23712
23927
  const tokens = await this._authProvider.tokens();
23713
23928
  if (tokens) {
23714
23929
  headers["Authorization"] = `Bearer ${tokens.access_token}`;
23715
23930
  }
23716
23931
  }
23932
+ if (this._protocolVersion) {
23933
+ headers["mcp-protocol-version"] = this._protocolVersion;
23934
+ }
23717
23935
  return headers;
23718
23936
  }
23719
23937
  _startOrAuth() {
23938
+ var _a;
23939
+ const fetchImpl = ((_a = this === null || this === void 0 ? void 0 : this._eventSourceInit) === null || _a === void 0 ? void 0 : _a.fetch) || fetch;
23720
23940
  return new Promise((resolve, reject) => {
23721
- var _a;
23722
- this._eventSource = new EventSource(this._url.href, (_a = this._eventSourceInit) !== null && _a !== void 0 ? _a : {
23723
- fetch: (url, init) => this._commonHeaders().then((headers) => fetch(url, {
23724
- ...init,
23725
- headers: {
23726
- ...headers,
23727
- Accept: "text/event-stream"
23941
+ this._eventSource = new EventSource(this._url.href, {
23942
+ ...this._eventSourceInit,
23943
+ fetch: async (url, init) => {
23944
+ const headers = await this._commonHeaders();
23945
+ const response = await fetchImpl(url, {
23946
+ ...init,
23947
+ headers: new Headers({
23948
+ ...headers,
23949
+ Accept: "text/event-stream"
23950
+ })
23951
+ });
23952
+ if (response.status === 401 && response.headers.has("www-authenticate")) {
23953
+ this._resourceMetadataUrl = extractResourceMetadataUrl(response);
23728
23954
  }
23729
- }))
23955
+ return response;
23956
+ }
23730
23957
  });
23731
23958
  this._abortController = new AbortController();
23732
23959
  this._eventSource.onerror = (event) => {
@@ -23796,20 +24023,20 @@ class SSEClientTransport {
23796
24023
  (_c = this.onclose) === null || _c === void 0 ? void 0 : _c.call(this);
23797
24024
  }
23798
24025
  async send(message) {
23799
- var _a, _b, _c;
24026
+ var _a, _b;
23800
24027
  if (!this._endpoint) {
23801
24028
  throw new Error("Not connected");
23802
24029
  }
23803
24030
  try {
23804
24031
  const commonHeaders = await this._commonHeaders();
23805
- const headers = new Headers({ ...commonHeaders, ...(_a = this._requestInit) === null || _a === void 0 ? void 0 : _a.headers });
24032
+ const headers = new Headers(commonHeaders);
23806
24033
  headers.set("content-type", "application/json");
23807
24034
  const init = {
23808
24035
  ...this._requestInit,
23809
24036
  method: "POST",
23810
24037
  headers,
23811
24038
  body: JSON.stringify(message),
23812
- signal: (_b = this._abortController) === null || _b === void 0 ? void 0 : _b.signal
24039
+ signal: (_a = this._abortController) === null || _a === void 0 ? void 0 : _a.signal
23813
24040
  };
23814
24041
  const response = await fetch(this._endpoint, init);
23815
24042
  if (!response.ok) {
@@ -23825,10 +24052,13 @@ class SSEClientTransport {
23825
24052
  throw new Error(`Error POSTing to endpoint (HTTP ${response.status}): ${text}`);
23826
24053
  }
23827
24054
  } catch (error) {
23828
- (_c = this.onerror) === null || _c === void 0 ? void 0 : _c.call(this, error);
24055
+ (_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);
23829
24056
  throw error;
23830
24057
  }
23831
24058
  }
24059
+ setProtocolVersion(version2) {
24060
+ this._protocolVersion = version2;
24061
+ }
23832
24062
  }
23833
24063
  class EventSourceParserStream extends TransformStream {
23834
24064
  constructor({ onError, onRetry, onComment } = {}) {
@@ -23903,6 +24133,9 @@ class StreamableHTTPClientTransport {
23903
24133
  if (this._sessionId) {
23904
24134
  headers["mcp-session-id"] = this._sessionId;
23905
24135
  }
24136
+ if (this._protocolVersion) {
24137
+ headers["mcp-protocol-version"] = this._protocolVersion;
24138
+ }
23906
24139
  return new Headers({ ...headers, ...(_a = this._requestInit) === null || _a === void 0 ? void 0 : _a.headers });
23907
24140
  }
23908
24141
  async _startOrAuthSse(options) {
@@ -24146,6 +24379,12 @@ class StreamableHTTPClientTransport {
24146
24379
  throw error;
24147
24380
  }
24148
24381
  }
24382
+ setProtocolVersion(version2) {
24383
+ this._protocolVersion = version2;
24384
+ }
24385
+ get protocolVersion() {
24386
+ return this._protocolVersion;
24387
+ }
24149
24388
  }
24150
24389
  const StdErrNotificationSchema = NotificationSchema.extend({
24151
24390
  method: literalType("notifications/stderr"),
@@ -24156,7 +24395,7 @@ const StdErrNotificationSchema = NotificationSchema.extend({
24156
24395
  ClientNotificationSchema.or(
24157
24396
  StdErrNotificationSchema
24158
24397
  ).or(ServerNotificationSchema).or(NotificationSchema);
24159
- const version$1 = "0.14.3";
24398
+ const version$1 = "0.15.0";
24160
24399
  const packageJson = {
24161
24400
  version: version$1
24162
24401
  };
@@ -25220,17 +25459,32 @@ const Button = reactExports.forwardRef(
25220
25459
  );
25221
25460
  Button.displayName = "Button";
25222
25461
  /**
25223
- * @license lucide-react v0.447.0 - ISC
25462
+ * @license lucide-react v0.523.0 - ISC
25224
25463
  *
25225
25464
  * This source code is licensed under the ISC license.
25226
25465
  * See the LICENSE file in the root directory of this source tree.
25227
25466
  */
25228
25467
  const toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
25468
+ const toCamelCase = (string) => string.replace(
25469
+ /^([A-Z])|[\s-_]+(\w)/g,
25470
+ (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
25471
+ );
25472
+ const toPascalCase = (string) => {
25473
+ const camelCase = toCamelCase(string);
25474
+ return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
25475
+ };
25229
25476
  const mergeClasses = (...classes) => classes.filter((className, index2, array) => {
25230
- return Boolean(className) && array.indexOf(className) === index2;
25231
- }).join(" ");
25477
+ return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index2;
25478
+ }).join(" ").trim();
25479
+ const hasA11yProp = (props) => {
25480
+ for (const prop in props) {
25481
+ if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
25482
+ return true;
25483
+ }
25484
+ }
25485
+ };
25232
25486
  /**
25233
- * @license lucide-react v0.447.0 - ISC
25487
+ * @license lucide-react v0.523.0 - ISC
25234
25488
  *
25235
25489
  * This source code is licensed under the ISC license.
25236
25490
  * See the LICENSE file in the root directory of this source tree.
@@ -25247,7 +25501,7 @@ var defaultAttributes = {
25247
25501
  strokeLinejoin: "round"
25248
25502
  };
25249
25503
  /**
25250
- * @license lucide-react v0.447.0 - ISC
25504
+ * @license lucide-react v0.523.0 - ISC
25251
25505
  *
25252
25506
  * This source code is licensed under the ISC license.
25253
25507
  * See the LICENSE file in the root directory of this source tree.
@@ -25262,28 +25516,27 @@ const Icon$1 = reactExports.forwardRef(
25262
25516
  children,
25263
25517
  iconNode,
25264
25518
  ...rest
25265
- }, ref2) => {
25266
- return reactExports.createElement(
25267
- "svg",
25268
- {
25269
- ref: ref2,
25270
- ...defaultAttributes,
25271
- width: size2,
25272
- height: size2,
25273
- stroke: color,
25274
- strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size2) : strokeWidth,
25275
- className: mergeClasses("lucide", className),
25276
- ...rest
25277
- },
25278
- [
25279
- ...iconNode.map(([tag, attrs]) => reactExports.createElement(tag, attrs)),
25280
- ...Array.isArray(children) ? children : [children]
25281
- ]
25282
- );
25283
- }
25519
+ }, ref2) => reactExports.createElement(
25520
+ "svg",
25521
+ {
25522
+ ref: ref2,
25523
+ ...defaultAttributes,
25524
+ width: size2,
25525
+ height: size2,
25526
+ stroke: color,
25527
+ strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size2) : strokeWidth,
25528
+ className: mergeClasses("lucide", className),
25529
+ ...!children && !hasA11yProp(rest) && { "aria-hidden": "true" },
25530
+ ...rest
25531
+ },
25532
+ [
25533
+ ...iconNode.map(([tag, attrs]) => reactExports.createElement(tag, attrs)),
25534
+ ...Array.isArray(children) ? children : [children]
25535
+ ]
25536
+ )
25284
25537
  );
25285
25538
  /**
25286
- * @license lucide-react v0.447.0 - ISC
25539
+ * @license lucide-react v0.523.0 - ISC
25287
25540
  *
25288
25541
  * This source code is licensed under the ISC license.
25289
25542
  * See the LICENSE file in the root directory of this source tree.
@@ -25293,30 +25546,41 @@ const createLucideIcon = (iconName, iconNode) => {
25293
25546
  ({ className, ...props }, ref2) => reactExports.createElement(Icon$1, {
25294
25547
  ref: ref2,
25295
25548
  iconNode,
25296
- className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),
25549
+ className: mergeClasses(
25550
+ `lucide-${toKebabCase(toPascalCase(iconName))}`,
25551
+ `lucide-${iconName}`,
25552
+ className
25553
+ ),
25297
25554
  ...props
25298
25555
  })
25299
25556
  );
25300
- Component.displayName = `${iconName}`;
25557
+ Component.displayName = toPascalCase(iconName);
25301
25558
  return Component;
25302
25559
  };
25303
25560
  /**
25304
- * @license lucide-react v0.447.0 - ISC
25561
+ * @license lucide-react v0.523.0 - ISC
25305
25562
  *
25306
25563
  * This source code is licensed under the ISC license.
25307
25564
  * See the LICENSE file in the root directory of this source tree.
25308
25565
  */
25309
- const Bell = createLucideIcon("Bell", [
25310
- ["path", { d: "M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9", key: "1qo2s2" }],
25311
- ["path", { d: "M10.3 21a1.94 1.94 0 0 0 3.4 0", key: "qgo35s" }]
25312
- ]);
25566
+ const __iconNode$x = [
25567
+ ["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
25568
+ [
25569
+ "path",
25570
+ {
25571
+ d: "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",
25572
+ key: "11g9vi"
25573
+ }
25574
+ ]
25575
+ ];
25576
+ const Bell = createLucideIcon("bell", __iconNode$x);
25313
25577
  /**
25314
- * @license lucide-react v0.447.0 - ISC
25578
+ * @license lucide-react v0.523.0 - ISC
25315
25579
  *
25316
25580
  * This source code is licensed under the ISC license.
25317
25581
  * See the LICENSE file in the root directory of this source tree.
25318
25582
  */
25319
- const Bug = createLucideIcon("Bug", [
25583
+ const __iconNode$w = [
25320
25584
  ["path", { d: "m8 2 1.88 1.88", key: "fmnt4t" }],
25321
25585
  ["path", { d: "M14.12 3.88 16 2", key: "qol33r" }],
25322
25586
  ["path", { d: "M9 7.13v-1a3.003 3.003 0 1 1 6 0v1", key: "d7y7pr" }],
@@ -25334,128 +25598,135 @@ const Bug = createLucideIcon("Bug", [
25334
25598
  ["path", { d: "M20.97 5c0 2.1-1.6 3.8-3.5 4", key: "18gb23" }],
25335
25599
  ["path", { d: "M22 13h-4", key: "1jl80f" }],
25336
25600
  ["path", { d: "M17.2 17c2.1.1 3.8 1.9 3.8 4", key: "k3fwyw" }]
25337
- ]);
25601
+ ];
25602
+ const Bug = createLucideIcon("bug", __iconNode$w);
25338
25603
  /**
25339
- * @license lucide-react v0.447.0 - ISC
25604
+ * @license lucide-react v0.523.0 - ISC
25340
25605
  *
25341
25606
  * This source code is licensed under the ISC license.
25342
25607
  * See the LICENSE file in the root directory of this source tree.
25343
25608
  */
25344
- const CheckCheck = createLucideIcon("CheckCheck", [
25609
+ const __iconNode$v = [
25345
25610
  ["path", { d: "M18 6 7 17l-5-5", key: "116fxf" }],
25346
25611
  ["path", { d: "m22 10-7.5 7.5L13 16", key: "ke71qq" }]
25347
- ]);
25612
+ ];
25613
+ const CheckCheck = createLucideIcon("check-check", __iconNode$v);
25348
25614
  /**
25349
- * @license lucide-react v0.447.0 - ISC
25615
+ * @license lucide-react v0.523.0 - ISC
25350
25616
  *
25351
25617
  * This source code is licensed under the ISC license.
25352
25618
  * See the LICENSE file in the root directory of this source tree.
25353
25619
  */
25354
- const Check = createLucideIcon("Check", [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]]);
25620
+ const __iconNode$u = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
25621
+ const Check = createLucideIcon("check", __iconNode$u);
25355
25622
  /**
25356
- * @license lucide-react v0.447.0 - ISC
25623
+ * @license lucide-react v0.523.0 - ISC
25357
25624
  *
25358
25625
  * This source code is licensed under the ISC license.
25359
25626
  * See the LICENSE file in the root directory of this source tree.
25360
25627
  */
25361
- const ChevronDown = createLucideIcon("ChevronDown", [
25362
- ["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]
25363
- ]);
25628
+ const __iconNode$t = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
25629
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$t);
25364
25630
  /**
25365
- * @license lucide-react v0.447.0 - ISC
25631
+ * @license lucide-react v0.523.0 - ISC
25366
25632
  *
25367
25633
  * This source code is licensed under the ISC license.
25368
25634
  * See the LICENSE file in the root directory of this source tree.
25369
25635
  */
25370
- const ChevronRight = createLucideIcon("ChevronRight", [
25371
- ["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]
25372
- ]);
25636
+ const __iconNode$s = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
25637
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$s);
25373
25638
  /**
25374
- * @license lucide-react v0.447.0 - ISC
25639
+ * @license lucide-react v0.523.0 - ISC
25375
25640
  *
25376
25641
  * This source code is licensed under the ISC license.
25377
25642
  * See the LICENSE file in the root directory of this source tree.
25378
25643
  */
25379
- const ChevronUp = createLucideIcon("ChevronUp", [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]]);
25644
+ const __iconNode$r = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
25645
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$r);
25380
25646
  /**
25381
- * @license lucide-react v0.447.0 - ISC
25647
+ * @license lucide-react v0.523.0 - ISC
25382
25648
  *
25383
25649
  * This source code is licensed under the ISC license.
25384
25650
  * See the LICENSE file in the root directory of this source tree.
25385
25651
  */
25386
- const ChevronsUpDown = createLucideIcon("ChevronsUpDown", [
25652
+ const __iconNode$q = [
25387
25653
  ["path", { d: "m7 15 5 5 5-5", key: "1hf1tw" }],
25388
25654
  ["path", { d: "m7 9 5-5 5 5", key: "sgt6xg" }]
25389
- ]);
25655
+ ];
25656
+ const ChevronsUpDown = createLucideIcon("chevrons-up-down", __iconNode$q);
25390
25657
  /**
25391
- * @license lucide-react v0.447.0 - ISC
25658
+ * @license lucide-react v0.523.0 - ISC
25392
25659
  *
25393
25660
  * This source code is licensed under the ISC license.
25394
25661
  * See the LICENSE file in the root directory of this source tree.
25395
25662
  */
25396
- const CircleAlert = createLucideIcon("CircleAlert", [
25663
+ const __iconNode$p = [
25397
25664
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
25398
25665
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
25399
25666
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
25400
- ]);
25667
+ ];
25668
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$p);
25401
25669
  /**
25402
- * @license lucide-react v0.447.0 - ISC
25670
+ * @license lucide-react v0.523.0 - ISC
25403
25671
  *
25404
25672
  * This source code is licensed under the ISC license.
25405
25673
  * See the LICENSE file in the root directory of this source tree.
25406
25674
  */
25407
- const CircleCheck = createLucideIcon("CircleCheck", [
25675
+ const __iconNode$o = [
25408
25676
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
25409
25677
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
25410
- ]);
25678
+ ];
25679
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$o);
25411
25680
  /**
25412
- * @license lucide-react v0.447.0 - ISC
25681
+ * @license lucide-react v0.523.0 - ISC
25413
25682
  *
25414
25683
  * This source code is licensed under the ISC license.
25415
25684
  * See the LICENSE file in the root directory of this source tree.
25416
25685
  */
25417
- const CircleHelp = createLucideIcon("CircleHelp", [
25686
+ const __iconNode$n = [
25418
25687
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
25419
25688
  ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
25420
25689
  ["path", { d: "M12 17h.01", key: "p32p05" }]
25421
- ]);
25690
+ ];
25691
+ const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$n);
25422
25692
  /**
25423
- * @license lucide-react v0.447.0 - ISC
25693
+ * @license lucide-react v0.523.0 - ISC
25424
25694
  *
25425
25695
  * This source code is licensed under the ISC license.
25426
25696
  * See the LICENSE file in the root directory of this source tree.
25427
25697
  */
25428
- const Circle = createLucideIcon("Circle", [
25429
- ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
25430
- ]);
25698
+ const __iconNode$m = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
25699
+ const Circle = createLucideIcon("circle", __iconNode$m);
25431
25700
  /**
25432
- * @license lucide-react v0.447.0 - ISC
25701
+ * @license lucide-react v0.523.0 - ISC
25433
25702
  *
25434
25703
  * This source code is licensed under the ISC license.
25435
25704
  * See the LICENSE file in the root directory of this source tree.
25436
25705
  */
25437
- const Copy = createLucideIcon("Copy", [
25706
+ const __iconNode$l = [
25438
25707
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
25439
25708
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
25440
- ]);
25709
+ ];
25710
+ const Copy = createLucideIcon("copy", __iconNode$l);
25441
25711
  /**
25442
- * @license lucide-react v0.447.0 - ISC
25712
+ * @license lucide-react v0.523.0 - ISC
25443
25713
  *
25444
25714
  * This source code is licensed under the ISC license.
25445
25715
  * See the LICENSE file in the root directory of this source tree.
25446
25716
  */
25447
- const ExternalLink = createLucideIcon("ExternalLink", [
25717
+ const __iconNode$k = [
25448
25718
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
25449
25719
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
25450
25720
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
25451
- ]);
25721
+ ];
25722
+ const ExternalLink = createLucideIcon("external-link", __iconNode$k);
25452
25723
  /**
25453
- * @license lucide-react v0.447.0 - ISC
25724
+ * @license lucide-react v0.523.0 - ISC
25454
25725
  *
25455
25726
  * This source code is licensed under the ISC license.
25456
25727
  * See the LICENSE file in the root directory of this source tree.
25457
25728
  */
25458
- const EyeOff = createLucideIcon("EyeOff", [
25729
+ const __iconNode$j = [
25459
25730
  [
25460
25731
  "path",
25461
25732
  {
@@ -25472,14 +25743,15 @@ const EyeOff = createLucideIcon("EyeOff", [
25472
25743
  }
25473
25744
  ],
25474
25745
  ["path", { d: "m2 2 20 20", key: "1ooewy" }]
25475
- ]);
25746
+ ];
25747
+ const EyeOff = createLucideIcon("eye-off", __iconNode$j);
25476
25748
  /**
25477
- * @license lucide-react v0.447.0 - ISC
25749
+ * @license lucide-react v0.523.0 - ISC
25478
25750
  *
25479
25751
  * This source code is licensed under the ISC license.
25480
25752
  * See the LICENSE file in the root directory of this source tree.
25481
25753
  */
25482
- const Eye = createLucideIcon("Eye", [
25754
+ const __iconNode$i = [
25483
25755
  [
25484
25756
  "path",
25485
25757
  {
@@ -25488,38 +25760,41 @@ const Eye = createLucideIcon("Eye", [
25488
25760
  }
25489
25761
  ],
25490
25762
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
25491
- ]);
25763
+ ];
25764
+ const Eye = createLucideIcon("eye", __iconNode$i);
25492
25765
  /**
25493
- * @license lucide-react v0.447.0 - ISC
25766
+ * @license lucide-react v0.523.0 - ISC
25494
25767
  *
25495
25768
  * This source code is licensed under the ISC license.
25496
25769
  * See the LICENSE file in the root directory of this source tree.
25497
25770
  */
25498
- const FileText = createLucideIcon("FileText", [
25771
+ const __iconNode$h = [
25499
25772
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
25500
25773
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
25501
25774
  ["path", { d: "M10 9H8", key: "b1mrlr" }],
25502
25775
  ["path", { d: "M16 13H8", key: "t4e002" }],
25503
25776
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
25504
- ]);
25777
+ ];
25778
+ const FileText = createLucideIcon("file-text", __iconNode$h);
25505
25779
  /**
25506
- * @license lucide-react v0.447.0 - ISC
25780
+ * @license lucide-react v0.523.0 - ISC
25507
25781
  *
25508
25782
  * This source code is licensed under the ISC license.
25509
25783
  * See the LICENSE file in the root directory of this source tree.
25510
25784
  */
25511
- const Files = createLucideIcon("Files", [
25785
+ const __iconNode$g = [
25512
25786
  ["path", { d: "M20 7h-3a2 2 0 0 1-2-2V2", key: "x099mo" }],
25513
25787
  ["path", { d: "M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z", key: "18t6ie" }],
25514
25788
  ["path", { d: "M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8", key: "1nja0z" }]
25515
- ]);
25789
+ ];
25790
+ const Files = createLucideIcon("files", __iconNode$g);
25516
25791
  /**
25517
- * @license lucide-react v0.447.0 - ISC
25792
+ * @license lucide-react v0.523.0 - ISC
25518
25793
  *
25519
25794
  * This source code is licensed under the ISC license.
25520
25795
  * See the LICENSE file in the root directory of this source tree.
25521
25796
  */
25522
- const FolderTree = createLucideIcon("FolderTree", [
25797
+ const __iconNode$f = [
25523
25798
  [
25524
25799
  "path",
25525
25800
  {
@@ -25536,14 +25811,15 @@ const FolderTree = createLucideIcon("FolderTree", [
25536
25811
  ],
25537
25812
  ["path", { d: "M3 5a2 2 0 0 0 2 2h3", key: "f2jnh7" }],
25538
25813
  ["path", { d: "M3 3v13a2 2 0 0 0 2 2h3", key: "k8epm1" }]
25539
- ]);
25814
+ ];
25815
+ const FolderTree = createLucideIcon("folder-tree", __iconNode$f);
25540
25816
  /**
25541
- * @license lucide-react v0.447.0 - ISC
25817
+ * @license lucide-react v0.523.0 - ISC
25542
25818
  *
25543
25819
  * This source code is licensed under the ISC license.
25544
25820
  * See the LICENSE file in the root directory of this source tree.
25545
25821
  */
25546
- const Github = createLucideIcon("Github", [
25822
+ const __iconNode$e = [
25547
25823
  [
25548
25824
  "path",
25549
25825
  {
@@ -25552,14 +25828,15 @@ const Github = createLucideIcon("Github", [
25552
25828
  }
25553
25829
  ],
25554
25830
  ["path", { d: "M9 18c-4.51 2-5-2-7-2", key: "9comsn" }]
25555
- ]);
25831
+ ];
25832
+ const Github = createLucideIcon("github", __iconNode$e);
25556
25833
  /**
25557
- * @license lucide-react v0.447.0 - ISC
25834
+ * @license lucide-react v0.523.0 - ISC
25558
25835
  *
25559
25836
  * This source code is licensed under the ISC license.
25560
25837
  * See the LICENSE file in the root directory of this source tree.
25561
25838
  */
25562
- const Hammer = createLucideIcon("Hammer", [
25839
+ const __iconNode$d = [
25563
25840
  ["path", { d: "m15 12-8.373 8.373a1 1 0 1 1-3-3L12 9", key: "eefl8a" }],
25564
25841
  ["path", { d: "m18 15 4-4", key: "16gjal" }],
25565
25842
  [
@@ -25569,81 +25846,85 @@ const Hammer = createLucideIcon("Hammer", [
25569
25846
  key: "b7pghm"
25570
25847
  }
25571
25848
  ]
25572
- ]);
25849
+ ];
25850
+ const Hammer = createLucideIcon("hammer", __iconNode$d);
25573
25851
  /**
25574
- * @license lucide-react v0.447.0 - ISC
25852
+ * @license lucide-react v0.523.0 - ISC
25575
25853
  *
25576
25854
  * This source code is licensed under the ISC license.
25577
25855
  * See the LICENSE file in the root directory of this source tree.
25578
25856
  */
25579
- const Hash = createLucideIcon("Hash", [
25857
+ const __iconNode$c = [
25580
25858
  ["line", { x1: "4", x2: "20", y1: "9", y2: "9", key: "4lhtct" }],
25581
25859
  ["line", { x1: "4", x2: "20", y1: "15", y2: "15", key: "vyu0kd" }],
25582
25860
  ["line", { x1: "10", x2: "8", y1: "3", y2: "21", key: "1ggp8o" }],
25583
25861
  ["line", { x1: "16", x2: "14", y1: "3", y2: "21", key: "weycgp" }]
25584
- ]);
25862
+ ];
25863
+ const Hash = createLucideIcon("hash", __iconNode$c);
25585
25864
  /**
25586
- * @license lucide-react v0.447.0 - ISC
25865
+ * @license lucide-react v0.523.0 - ISC
25587
25866
  *
25588
25867
  * This source code is licensed under the ISC license.
25589
25868
  * See the LICENSE file in the root directory of this source tree.
25590
25869
  */
25591
- const Key = createLucideIcon("Key", [
25870
+ const __iconNode$b = [
25592
25871
  ["path", { d: "m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4", key: "g0fldk" }],
25593
25872
  ["path", { d: "m21 2-9.6 9.6", key: "1j0ho8" }],
25594
25873
  ["circle", { cx: "7.5", cy: "15.5", r: "5.5", key: "yqb3hr" }]
25595
- ]);
25874
+ ];
25875
+ const Key = createLucideIcon("key", __iconNode$b);
25596
25876
  /**
25597
- * @license lucide-react v0.447.0 - ISC
25877
+ * @license lucide-react v0.523.0 - ISC
25598
25878
  *
25599
25879
  * This source code is licensed under the ISC license.
25600
25880
  * See the LICENSE file in the root directory of this source tree.
25601
25881
  */
25602
- const LoaderCircle = createLucideIcon("LoaderCircle", [
25603
- ["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]
25604
- ]);
25882
+ const __iconNode$a = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
25883
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$a);
25605
25884
  /**
25606
- * @license lucide-react v0.447.0 - ISC
25885
+ * @license lucide-react v0.523.0 - ISC
25607
25886
  *
25608
25887
  * This source code is licensed under the ISC license.
25609
25888
  * See the LICENSE file in the root directory of this source tree.
25610
25889
  */
25611
- const MessageSquare = createLucideIcon("MessageSquare", [
25890
+ const __iconNode$9 = [
25612
25891
  ["path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z", key: "1lielz" }]
25613
- ]);
25892
+ ];
25893
+ const MessageSquare = createLucideIcon("message-square", __iconNode$9);
25614
25894
  /**
25615
- * @license lucide-react v0.447.0 - ISC
25895
+ * @license lucide-react v0.523.0 - ISC
25616
25896
  *
25617
25897
  * This source code is licensed under the ISC license.
25618
25898
  * See the LICENSE file in the root directory of this source tree.
25619
25899
  */
25620
- const Minus = createLucideIcon("Minus", [["path", { d: "M5 12h14", key: "1ays0h" }]]);
25900
+ const __iconNode$8 = [["path", { d: "M5 12h14", key: "1ays0h" }]];
25901
+ const Minus = createLucideIcon("minus", __iconNode$8);
25621
25902
  /**
25622
- * @license lucide-react v0.447.0 - ISC
25903
+ * @license lucide-react v0.523.0 - ISC
25623
25904
  *
25624
25905
  * This source code is licensed under the ISC license.
25625
25906
  * See the LICENSE file in the root directory of this source tree.
25626
25907
  */
25627
- const Play = createLucideIcon("Play", [
25628
- ["polygon", { points: "6 3 20 12 6 21 6 3", key: "1oa8hb" }]
25629
- ]);
25908
+ const __iconNode$7 = [["polygon", { points: "6 3 20 12 6 21 6 3", key: "1oa8hb" }]];
25909
+ const Play = createLucideIcon("play", __iconNode$7);
25630
25910
  /**
25631
- * @license lucide-react v0.447.0 - ISC
25911
+ * @license lucide-react v0.523.0 - ISC
25632
25912
  *
25633
25913
  * This source code is licensed under the ISC license.
25634
25914
  * See the LICENSE file in the root directory of this source tree.
25635
25915
  */
25636
- const Plus = createLucideIcon("Plus", [
25916
+ const __iconNode$6 = [
25637
25917
  ["path", { d: "M5 12h14", key: "1ays0h" }],
25638
25918
  ["path", { d: "M12 5v14", key: "s699le" }]
25639
- ]);
25919
+ ];
25920
+ const Plus = createLucideIcon("plus", __iconNode$6);
25640
25921
  /**
25641
- * @license lucide-react v0.447.0 - ISC
25922
+ * @license lucide-react v0.523.0 - ISC
25642
25923
  *
25643
25924
  * This source code is licensed under the ISC license.
25644
25925
  * See the LICENSE file in the root directory of this source tree.
25645
25926
  */
25646
- const RefreshCwOff = createLucideIcon("RefreshCwOff", [
25927
+ const __iconNode$5 = [
25647
25928
  ["path", { d: "M21 8L18.74 5.74A9.75 9.75 0 0 0 12 3C11 3 10.03 3.16 9.13 3.47", key: "1krf6h" }],
25648
25929
  ["path", { d: "M8 16H3v5", key: "1cv678" }],
25649
25930
  ["path", { d: "M3 12C3 9.51 4 7.26 5.64 5.64", key: "ruvoct" }],
@@ -25651,36 +25932,39 @@ const RefreshCwOff = createLucideIcon("RefreshCwOff", [
25651
25932
  ["path", { d: "M21 12c0 1-.16 1.97-.47 2.87", key: "4w8emr" }],
25652
25933
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
25653
25934
  ["path", { d: "M22 22 2 2", key: "1r8tn9" }]
25654
- ]);
25935
+ ];
25936
+ const RefreshCwOff = createLucideIcon("refresh-cw-off", __iconNode$5);
25655
25937
  /**
25656
- * @license lucide-react v0.447.0 - ISC
25938
+ * @license lucide-react v0.523.0 - ISC
25657
25939
  *
25658
25940
  * This source code is licensed under the ISC license.
25659
25941
  * See the LICENSE file in the root directory of this source tree.
25660
25942
  */
25661
- const RefreshCw = createLucideIcon("RefreshCw", [
25943
+ const __iconNode$4 = [
25662
25944
  ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
25663
25945
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
25664
25946
  ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
25665
25947
  ["path", { d: "M8 16H3v5", key: "1cv678" }]
25666
- ]);
25948
+ ];
25949
+ const RefreshCw = createLucideIcon("refresh-cw", __iconNode$4);
25667
25950
  /**
25668
- * @license lucide-react v0.447.0 - ISC
25951
+ * @license lucide-react v0.523.0 - ISC
25669
25952
  *
25670
25953
  * This source code is licensed under the ISC license.
25671
25954
  * See the LICENSE file in the root directory of this source tree.
25672
25955
  */
25673
- const RotateCcw = createLucideIcon("RotateCcw", [
25956
+ const __iconNode$3 = [
25674
25957
  ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
25675
25958
  ["path", { d: "M3 3v5h5", key: "1xhq8a" }]
25676
- ]);
25959
+ ];
25960
+ const RotateCcw = createLucideIcon("rotate-ccw", __iconNode$3);
25677
25961
  /**
25678
- * @license lucide-react v0.447.0 - ISC
25962
+ * @license lucide-react v0.523.0 - ISC
25679
25963
  *
25680
25964
  * This source code is licensed under the ISC license.
25681
25965
  * See the LICENSE file in the root directory of this source tree.
25682
25966
  */
25683
- const Save = createLucideIcon("Save", [
25967
+ const __iconNode$2 = [
25684
25968
  [
25685
25969
  "path",
25686
25970
  {
@@ -25690,14 +25974,15 @@ const Save = createLucideIcon("Save", [
25690
25974
  ],
25691
25975
  ["path", { d: "M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7", key: "1ydtos" }],
25692
25976
  ["path", { d: "M7 3v4a1 1 0 0 0 1 1h7", key: "t51u73" }]
25693
- ]);
25977
+ ];
25978
+ const Save = createLucideIcon("save", __iconNode$2);
25694
25979
  /**
25695
- * @license lucide-react v0.447.0 - ISC
25980
+ * @license lucide-react v0.523.0 - ISC
25696
25981
  *
25697
25982
  * This source code is licensed under the ISC license.
25698
25983
  * See the LICENSE file in the root directory of this source tree.
25699
25984
  */
25700
- const Send = createLucideIcon("Send", [
25985
+ const __iconNode$1 = [
25701
25986
  [
25702
25987
  "path",
25703
25988
  {
@@ -25706,14 +25991,15 @@ const Send = createLucideIcon("Send", [
25706
25991
  }
25707
25992
  ],
25708
25993
  ["path", { d: "m21.854 2.147-10.94 10.939", key: "12cjpa" }]
25709
- ]);
25994
+ ];
25995
+ const Send = createLucideIcon("send", __iconNode$1);
25710
25996
  /**
25711
- * @license lucide-react v0.447.0 - ISC
25997
+ * @license lucide-react v0.523.0 - ISC
25712
25998
  *
25713
25999
  * This source code is licensed under the ISC license.
25714
26000
  * See the LICENSE file in the root directory of this source tree.
25715
26001
  */
25716
- const Settings = createLucideIcon("Settings", [
26002
+ const __iconNode = [
25717
26003
  [
25718
26004
  "path",
25719
26005
  {
@@ -25722,7 +26008,8 @@ const Settings = createLucideIcon("Settings", [
25722
26008
  }
25723
26009
  ],
25724
26010
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
25725
- ]);
26011
+ ];
26012
+ const Settings = createLucideIcon("settings", __iconNode);
25726
26013
  const OAuthStepDetails = ({
25727
26014
  label,
25728
26015
  isComplete,
@@ -25828,7 +26115,7 @@ const OAuthFlowProgress = ({
25828
26115
  ] }),
25829
26116
  authState.resourceMetadataError && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-2 p-3 border border-blue-300 bg-blue-50 rounded-md", children: [
25830
26117
  /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm font-medium text-blue-700", children: [
25831
- "ℹ️ No resource metadata available from",
26118
+ "ℹ️ Problem with resource metadata from",
25832
26119
  " ",
25833
26120
  /* @__PURE__ */ jsxRuntimeExports.jsx(
25834
26121
  "a",
@@ -28439,8 +28726,9 @@ function getOppositeAxis(axis) {
28439
28726
  function getAxisLength(axis) {
28440
28727
  return axis === "y" ? "height" : "width";
28441
28728
  }
28729
+ const yAxisSides = /* @__PURE__ */ new Set(["top", "bottom"]);
28442
28730
  function getSideAxis(placement) {
28443
- return ["top", "bottom"].includes(getSide(placement)) ? "y" : "x";
28731
+ return yAxisSides.has(getSide(placement)) ? "y" : "x";
28444
28732
  }
28445
28733
  function getAlignmentAxis(placement) {
28446
28734
  return getOppositeAxis(getSideAxis(placement));
@@ -28465,19 +28753,19 @@ function getExpandedPlacements(placement) {
28465
28753
  function getOppositeAlignmentPlacement(placement) {
28466
28754
  return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]);
28467
28755
  }
28756
+ const lrPlacement = ["left", "right"];
28757
+ const rlPlacement = ["right", "left"];
28758
+ const tbPlacement = ["top", "bottom"];
28759
+ const btPlacement = ["bottom", "top"];
28468
28760
  function getSideList(side, isStart, rtl) {
28469
- const lr = ["left", "right"];
28470
- const rl = ["right", "left"];
28471
- const tb = ["top", "bottom"];
28472
- const bt = ["bottom", "top"];
28473
28761
  switch (side) {
28474
28762
  case "top":
28475
28763
  case "bottom":
28476
- if (rtl) return isStart ? rl : lr;
28477
- return isStart ? lr : rl;
28764
+ if (rtl) return isStart ? rlPlacement : lrPlacement;
28765
+ return isStart ? lrPlacement : rlPlacement;
28478
28766
  case "left":
28479
28767
  case "right":
28480
- return isStart ? tb : bt;
28768
+ return isStart ? tbPlacement : btPlacement;
28481
28769
  default:
28482
28770
  return [];
28483
28771
  }
@@ -28956,6 +29244,7 @@ const hide$2 = function(options) {
28956
29244
  }
28957
29245
  };
28958
29246
  };
29247
+ const originSides = /* @__PURE__ */ new Set(["left", "top"]);
28959
29248
  async function convertValueToCoords(state, options) {
28960
29249
  const {
28961
29250
  placement,
@@ -28966,7 +29255,7 @@ async function convertValueToCoords(state, options) {
28966
29255
  const side = getSide(placement);
28967
29256
  const alignment = getAlignment(placement);
28968
29257
  const isVertical = getSideAxis(placement) === "y";
28969
- const mainAxisMulti = ["left", "top"].includes(side) ? -1 : 1;
29258
+ const mainAxisMulti = originSides.has(side) ? -1 : 1;
28970
29259
  const crossAxisMulti = rtl && isVertical ? -1 : 1;
28971
29260
  const rawValue = evaluate(options, state);
28972
29261
  let {
@@ -29144,7 +29433,7 @@ const limitShift$2 = function(options) {
29144
29433
  if (checkCrossAxis) {
29145
29434
  var _middlewareData$offse, _middlewareData$offse2;
29146
29435
  const len = mainAxis === "y" ? "width" : "height";
29147
- const isOriginSide = ["top", "left"].includes(getSide(placement));
29436
+ const isOriginSide = originSides.has(getSide(placement));
29148
29437
  const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);
29149
29438
  const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);
29150
29439
  if (crossAxisCoord < limitMin) {
@@ -29279,6 +29568,7 @@ function isShadowRoot(value) {
29279
29568
  }
29280
29569
  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
29281
29570
  }
29571
+ const invalidOverflowDisplayValues = /* @__PURE__ */ new Set(["inline", "contents"]);
29282
29572
  function isOverflowElement(element) {
29283
29573
  const {
29284
29574
  overflow,
@@ -29286,24 +29576,29 @@ function isOverflowElement(element) {
29286
29576
  overflowY,
29287
29577
  display
29288
29578
  } = getComputedStyle$1(element);
29289
- return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !["inline", "contents"].includes(display);
29579
+ return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
29290
29580
  }
29581
+ const tableElements = /* @__PURE__ */ new Set(["table", "td", "th"]);
29291
29582
  function isTableElement(element) {
29292
- return ["table", "td", "th"].includes(getNodeName(element));
29583
+ return tableElements.has(getNodeName(element));
29293
29584
  }
29585
+ const topLayerSelectors = [":popover-open", ":modal"];
29294
29586
  function isTopLayer(element) {
29295
- return [":popover-open", ":modal"].some((selector) => {
29587
+ return topLayerSelectors.some((selector) => {
29296
29588
  try {
29297
29589
  return element.matches(selector);
29298
- } catch (e) {
29590
+ } catch (_e2) {
29299
29591
  return false;
29300
29592
  }
29301
29593
  });
29302
29594
  }
29595
+ const transformProperties = ["transform", "translate", "scale", "rotate", "perspective"];
29596
+ const willChangeValues = ["transform", "translate", "scale", "rotate", "perspective", "filter"];
29597
+ const containValues = ["paint", "layout", "strict", "content"];
29303
29598
  function isContainingBlock(elementOrCss) {
29304
29599
  const webkit = isWebKit();
29305
29600
  const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
29306
- return ["transform", "translate", "scale", "rotate", "perspective"].some((value) => css[value] ? css[value] !== "none" : false) || (css.containerType ? css.containerType !== "normal" : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== "none" : false) || !webkit && (css.filter ? css.filter !== "none" : false) || ["transform", "translate", "scale", "rotate", "perspective", "filter"].some((value) => (css.willChange || "").includes(value)) || ["paint", "layout", "strict", "content"].some((value) => (css.contain || "").includes(value));
29601
+ return transformProperties.some((value) => css[value] ? css[value] !== "none" : false) || (css.containerType ? css.containerType !== "normal" : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== "none" : false) || !webkit && (css.filter ? css.filter !== "none" : false) || willChangeValues.some((value) => (css.willChange || "").includes(value)) || containValues.some((value) => (css.contain || "").includes(value));
29307
29602
  }
29308
29603
  function getContainingBlock(element) {
29309
29604
  let currentNode = getParentNode(element);
@@ -29321,8 +29616,9 @@ function isWebKit() {
29321
29616
  if (typeof CSS === "undefined" || !CSS.supports) return false;
29322
29617
  return CSS.supports("-webkit-backdrop-filter", "none");
29323
29618
  }
29619
+ const lastTraversableNodeNames = /* @__PURE__ */ new Set(["html", "body", "#document"]);
29324
29620
  function isLastTraversableNode(node) {
29325
- return ["html", "body", "#document"].includes(getNodeName(node));
29621
+ return lastTraversableNodeNames.has(getNodeName(node));
29326
29622
  }
29327
29623
  function getComputedStyle$1(element) {
29328
29624
  return getWindow(element).getComputedStyle(element);
@@ -29605,6 +29901,7 @@ function getViewportRect(element, strategy) {
29605
29901
  y
29606
29902
  };
29607
29903
  }
29904
+ const absoluteOrFixed = /* @__PURE__ */ new Set(["absolute", "fixed"]);
29608
29905
  function getInnerBoundingClientRect(element, strategy) {
29609
29906
  const clientRect = getBoundingClientRect(element, true, strategy === "fixed");
29610
29907
  const top = clientRect.top + element.clientTop;
@@ -29662,7 +29959,7 @@ function getClippingElementAncestors(element, cache2) {
29662
29959
  if (!currentNodeIsContaining && computedStyle.position === "fixed") {
29663
29960
  currentContainingBlockComputedStyle = null;
29664
29961
  }
29665
- const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && ["absolute", "fixed"].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
29962
+ const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
29666
29963
  if (shouldDropCurrentNode) {
29667
29964
  result = result.filter((ancestor) => ancestor !== currentNode);
29668
29965
  } else {
@@ -35298,7 +35595,7 @@ const useTheme = () => {
35298
35595
  [theme, setThemeWithSideEffect]
35299
35596
  );
35300
35597
  };
35301
- const version = "0.14.3";
35598
+ const version = "0.15.0";
35302
35599
  var [createTooltipContext, createTooltipScope] = createContextScope("Tooltip", [
35303
35600
  createPopperScope
35304
35601
  ]);
@@ -36226,7 +36523,7 @@ const Sidebar = ({
36226
36523
  }
36227
36524
  ),
36228
36525
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Tooltip, { children: [
36229
- /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(CircleHelp, { className: "h-4 w-4 text-muted-foreground" }) }),
36526
+ /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(CircleQuestionMark, { className: "h-4 w-4 text-muted-foreground" }) }),
36230
36527
  /* @__PURE__ */ jsxRuntimeExports.jsx(TooltipContent, { children: configItem.description })
36231
36528
  ] })
36232
36529
  ] }),
@@ -36419,7 +36716,7 @@ const Sidebar = ({
36419
36716
  href: "https://modelcontextprotocol.io/docs/tools/inspector",
36420
36717
  target: "_blank",
36421
36718
  rel: "noopener noreferrer",
36422
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(CircleHelp, { className: "w-4 h-4 text-foreground" })
36719
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(CircleQuestionMark, { className: "w-4 h-4 text-foreground" })
36423
36720
  }
36424
36721
  ) }),
36425
36722
  /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "ghost", title: "Debugging Guide", asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -37519,13 +37816,13 @@ const App = () => {
37519
37816
  ) });
37520
37817
  if (window.location.pathname === "/oauth/callback") {
37521
37818
  const OAuthCallback = React.lazy(
37522
- () => __vitePreload(() => import("./OAuthCallback-BrCtrNqU.js"), true ? __vite__mapDeps([0,1]) : void 0)
37819
+ () => __vitePreload(() => import("./OAuthCallback-CaW3Hcqw.js"), true ? __vite__mapDeps([0,1]) : void 0)
37523
37820
  );
37524
37821
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthCallback, { onConnect: onOAuthConnect }) });
37525
37822
  }
37526
37823
  if (window.location.pathname === "/oauth/callback/debug") {
37527
37824
  const OAuthDebugCallback = React.lazy(
37528
- () => __vitePreload(() => import("./OAuthDebugCallback-CnQiL6bh.js"), true ? __vite__mapDeps([2,1]) : void 0)
37825
+ () => __vitePreload(() => import("./OAuthDebugCallback-DiBt_oxh.js"), true ? __vite__mapDeps([2,1]) : void 0)
37529
37826
  );
37530
37827
  return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthDebugCallback, { onConnect: onOAuthDebugConnect }) });
37531
37828
  }