@llmindset/hf-mcp-server 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/components.json +21 -0
  3. package/dist/server/application.d.ts +30 -0
  4. package/dist/server/application.d.ts.map +1 -0
  5. package/dist/server/application.js +131 -0
  6. package/dist/server/application.js.map +1 -0
  7. package/dist/server/gradio-endpoint-connector.d.ts +46 -0
  8. package/dist/server/gradio-endpoint-connector.d.ts.map +1 -0
  9. package/dist/server/gradio-endpoint-connector.js +348 -0
  10. package/dist/server/gradio-endpoint-connector.js.map +1 -0
  11. package/dist/server/gradio-endpoint-connector.test.d.ts +2 -0
  12. package/dist/server/gradio-endpoint-connector.test.d.ts.map +1 -0
  13. package/dist/server/gradio-endpoint-connector.test.js +313 -0
  14. package/dist/server/gradio-endpoint-connector.test.js.map +1 -0
  15. package/dist/server/lib/logger.d.ts +5 -0
  16. package/dist/server/lib/logger.d.ts.map +1 -0
  17. package/dist/server/lib/logger.js +45 -0
  18. package/dist/server/lib/logger.js.map +1 -0
  19. package/dist/server/lib/mcp-api-client.d.ts +42 -0
  20. package/dist/server/lib/mcp-api-client.d.ts.map +1 -0
  21. package/dist/server/lib/mcp-api-client.js +188 -0
  22. package/dist/server/lib/mcp-api-client.js.map +1 -0
  23. package/dist/server/lib/tool-selection-strategy.d.ts +29 -0
  24. package/dist/server/lib/tool-selection-strategy.d.ts.map +1 -0
  25. package/dist/server/lib/tool-selection-strategy.js +113 -0
  26. package/dist/server/lib/tool-selection-strategy.js.map +1 -0
  27. package/dist/server/lib/tool-selection-strategy.test.d.ts +2 -0
  28. package/dist/server/lib/tool-selection-strategy.test.d.ts.map +1 -0
  29. package/dist/server/lib/tool-selection-strategy.test.js +407 -0
  30. package/dist/server/lib/tool-selection-strategy.test.js.map +1 -0
  31. package/dist/server/mcp-proxy.d.ts +5 -0
  32. package/dist/server/mcp-proxy.d.ts.map +1 -0
  33. package/dist/server/mcp-proxy.js +66 -0
  34. package/dist/server/mcp-proxy.js.map +1 -0
  35. package/dist/server/mcp-server.d.ts +8 -0
  36. package/dist/server/mcp-server.d.ts.map +1 -0
  37. package/dist/server/mcp-server.js +219 -0
  38. package/dist/server/mcp-server.js.map +1 -0
  39. package/dist/server/sse.d.ts +3 -0
  40. package/dist/server/sse.d.ts.map +1 -0
  41. package/dist/server/sse.js +47 -0
  42. package/dist/server/sse.js.map +1 -0
  43. package/dist/server/stdio.d.ts +3 -0
  44. package/dist/server/stdio.d.ts.map +1 -0
  45. package/dist/server/stdio.js +49 -0
  46. package/dist/server/stdio.js.map +1 -0
  47. package/dist/server/streamableHttp.d.ts +3 -0
  48. package/dist/server/streamableHttp.d.ts.map +1 -0
  49. package/dist/server/streamableHttp.js +53 -0
  50. package/dist/server/streamableHttp.js.map +1 -0
  51. package/dist/server/transport/base-transport.d.ts +132 -0
  52. package/dist/server/transport/base-transport.d.ts.map +1 -0
  53. package/dist/server/transport/base-transport.js +390 -0
  54. package/dist/server/transport/base-transport.js.map +1 -0
  55. package/dist/server/transport/json-rpc-errors.d.ts +36 -0
  56. package/dist/server/transport/json-rpc-errors.d.ts.map +1 -0
  57. package/dist/server/transport/json-rpc-errors.js +53 -0
  58. package/dist/server/transport/json-rpc-errors.js.map +1 -0
  59. package/dist/server/transport/sse-transport.d.ts +17 -0
  60. package/dist/server/transport/sse-transport.d.ts.map +1 -0
  61. package/dist/server/transport/sse-transport.js +170 -0
  62. package/dist/server/transport/sse-transport.js.map +1 -0
  63. package/dist/server/transport/stateless-http-transport.d.ts +11 -0
  64. package/dist/server/transport/stateless-http-transport.d.ts.map +1 -0
  65. package/dist/server/transport/stateless-http-transport.js +172 -0
  66. package/dist/server/transport/stateless-http-transport.js.map +1 -0
  67. package/dist/server/transport/stateless-http-transport.test.d.ts +2 -0
  68. package/dist/server/transport/stateless-http-transport.test.d.ts.map +1 -0
  69. package/dist/server/transport/stateless-http-transport.test.js +58 -0
  70. package/dist/server/transport/stateless-http-transport.test.js.map +1 -0
  71. package/dist/server/transport/stdio-transport.d.ts +12 -0
  72. package/dist/server/transport/stdio-transport.d.ts.map +1 -0
  73. package/dist/server/transport/stdio-transport.js +78 -0
  74. package/dist/server/transport/stdio-transport.js.map +1 -0
  75. package/dist/server/transport/streamable-http-transport.d.ts +21 -0
  76. package/dist/server/transport/streamable-http-transport.d.ts.map +1 -0
  77. package/dist/server/transport/streamable-http-transport.js +220 -0
  78. package/dist/server/transport/streamable-http-transport.js.map +1 -0
  79. package/dist/server/transport/transport-factory.d.ts +5 -0
  80. package/dist/server/transport/transport-factory.d.ts.map +1 -0
  81. package/dist/server/transport/transport-factory.js +21 -0
  82. package/dist/server/transport/transport-factory.js.map +1 -0
  83. package/dist/server/utils/api-metrics.d.ts +15 -0
  84. package/dist/server/utils/api-metrics.d.ts.map +1 -0
  85. package/dist/server/utils/api-metrics.js +39 -0
  86. package/dist/server/utils/api-metrics.js.map +1 -0
  87. package/dist/server/utils/auth-utils.d.ts +6 -0
  88. package/dist/server/utils/auth-utils.d.ts.map +1 -0
  89. package/dist/server/utils/auth-utils.js +25 -0
  90. package/dist/server/utils/auth-utils.js.map +1 -0
  91. package/dist/server/utils/browser-detection.d.ts +2 -0
  92. package/dist/server/utils/browser-detection.d.ts.map +1 -0
  93. package/dist/server/utils/browser-detection.js +15 -0
  94. package/dist/server/utils/browser-detection.js.map +1 -0
  95. package/dist/server/utils/browser-detection.test.d.ts +2 -0
  96. package/dist/server/utils/browser-detection.test.d.ts.map +1 -0
  97. package/dist/server/utils/browser-detection.test.js +50 -0
  98. package/dist/server/utils/browser-detection.test.js.map +1 -0
  99. package/dist/server/utils/gradio-metrics.d.ts +22 -0
  100. package/dist/server/utils/gradio-metrics.d.ts.map +1 -0
  101. package/dist/server/utils/gradio-metrics.js +60 -0
  102. package/dist/server/utils/gradio-metrics.js.map +1 -0
  103. package/dist/server/utils/query-params.d.ts +3 -0
  104. package/dist/server/utils/query-params.d.ts.map +1 -0
  105. package/dist/server/utils/query-params.js +17 -0
  106. package/dist/server/utils/query-params.js.map +1 -0
  107. package/dist/server/utils/query-params.test.d.ts +2 -0
  108. package/dist/server/utils/query-params.test.d.ts.map +1 -0
  109. package/dist/server/utils/query-params.test.js +75 -0
  110. package/dist/server/utils/query-params.test.js.map +1 -0
  111. package/dist/server/web-server.d.ts +29 -0
  112. package/dist/server/web-server.d.ts.map +1 -0
  113. package/dist/server/web-server.js +273 -0
  114. package/dist/server/web-server.js.map +1 -0
  115. package/dist/shared/constants.d.ts +5 -0
  116. package/dist/shared/constants.d.ts.map +1 -0
  117. package/dist/shared/constants.js +4 -0
  118. package/dist/shared/constants.js.map +1 -0
  119. package/dist/shared/settings.d.ts +19 -0
  120. package/dist/shared/settings.d.ts.map +1 -0
  121. package/dist/shared/settings.js +47 -0
  122. package/dist/shared/settings.js.map +1 -0
  123. package/dist/shared/transport-info.d.ts +18 -0
  124. package/dist/shared/transport-info.d.ts.map +1 -0
  125. package/dist/shared/transport-info.js +22 -0
  126. package/dist/shared/transport-info.js.map +1 -0
  127. package/dist/shared/transport-info.test.d.ts +2 -0
  128. package/dist/shared/transport-info.test.d.ts.map +1 -0
  129. package/dist/shared/transport-info.test.js +90 -0
  130. package/dist/shared/transport-info.test.js.map +1 -0
  131. package/dist/shared/transport-metrics.d.ts +180 -0
  132. package/dist/shared/transport-metrics.d.ts.map +1 -0
  133. package/dist/shared/transport-metrics.js +247 -0
  134. package/dist/shared/transport-metrics.js.map +1 -0
  135. package/dist/shared/transport-metrics.test.d.ts +2 -0
  136. package/dist/shared/transport-metrics.test.d.ts.map +1 -0
  137. package/dist/shared/transport-metrics.test.js +10 -0
  138. package/dist/shared/transport-metrics.test.js.map +1 -0
  139. package/dist/web/assets/button-C4Q2P8Ns.css +1 -0
  140. package/dist/web/assets/button-DOWMQOme.js +79 -0
  141. package/dist/web/assets/hf-logo-DbjPOSLw.svg +21 -0
  142. package/dist/web/assets/main-CB77vUha.js +115 -0
  143. package/dist/web/assets/mcpWelcome-Cpw1-KJi.js +1 -0
  144. package/dist/web/hf-logo-DbjPOSLw.svg +21 -0
  145. package/dist/web/index.html +15 -0
  146. package/dist/web/mcp-welcome.html +92 -0
  147. package/package.json +100 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-info.test.js","sourceRoot":"","sources":["../../src/shared/transport-info.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import type { TransportType } from './constants.js';
2
+ export interface TransportMetrics {
3
+ startupTime: Date;
4
+ connections: {
5
+ active: number | 'stateless';
6
+ total: number;
7
+ authenticated: number;
8
+ denied: number;
9
+ anonymous: number;
10
+ unauthorized?: number;
11
+ cleaned?: number;
12
+ };
13
+ requests: {
14
+ total: number;
15
+ averagePerMinute: number;
16
+ };
17
+ pings?: {
18
+ sent: number;
19
+ successful: number;
20
+ failed: number;
21
+ lastPingTime?: Date;
22
+ };
23
+ errors: {
24
+ expected: number;
25
+ unexpected: number;
26
+ lastError?: {
27
+ type: string;
28
+ message: string;
29
+ timestamp: Date;
30
+ };
31
+ };
32
+ clients: Map<string, ClientMetrics>;
33
+ methods: Map<string, MethodMetrics>;
34
+ staticPageHits200?: number;
35
+ staticPageHits405?: number;
36
+ }
37
+ export interface ClientMetrics {
38
+ name: string;
39
+ version: string;
40
+ requestCount: number;
41
+ firstSeen: Date;
42
+ lastSeen: Date;
43
+ isConnected: boolean;
44
+ activeConnections: number;
45
+ totalConnections: number;
46
+ }
47
+ export interface MethodMetrics {
48
+ method: string;
49
+ count: number;
50
+ firstCalled: Date;
51
+ lastCalled: Date;
52
+ averageResponseTime?: number;
53
+ errors: number;
54
+ }
55
+ export interface ApiCallMetrics {
56
+ anonymous: number;
57
+ authenticated: number;
58
+ unauthorized: number;
59
+ forbidden: number;
60
+ }
61
+ export interface GradioToolMetrics {
62
+ success: number;
63
+ failure: number;
64
+ byTool: Record<string, {
65
+ success: number;
66
+ failure: number;
67
+ }>;
68
+ }
69
+ export interface SessionData {
70
+ id: string;
71
+ connectedAt: string;
72
+ lastActivity: string;
73
+ clientInfo?: {
74
+ name: string;
75
+ version: string;
76
+ };
77
+ isConnected: boolean;
78
+ connectionStatus?: 'Connected' | 'Distressed' | 'Disconnected';
79
+ pingFailures?: number;
80
+ lastPingAttempt?: string;
81
+ }
82
+ export interface TransportMetricsResponse {
83
+ transport: TransportType;
84
+ isStateless: boolean;
85
+ startupTime: string;
86
+ currentTime: string;
87
+ uptimeSeconds: number;
88
+ configuration?: {
89
+ heartbeatInterval: number;
90
+ staleCheckInterval: number;
91
+ staleTimeout: number;
92
+ pingEnabled?: boolean;
93
+ pingInterval?: number;
94
+ pingFailureThreshold?: number;
95
+ };
96
+ connections: {
97
+ active: number | 'stateless';
98
+ total: number;
99
+ cleaned?: number;
100
+ };
101
+ requests: {
102
+ total: number;
103
+ averagePerMinute: number;
104
+ };
105
+ staticPageHits200?: number;
106
+ staticPageHits405?: number;
107
+ pings?: {
108
+ sent: number;
109
+ successful: number;
110
+ failed: number;
111
+ lastPingTime?: string;
112
+ };
113
+ errors: {
114
+ expected: number;
115
+ unexpected: number;
116
+ lastError?: {
117
+ type: string;
118
+ message: string;
119
+ timestamp: string;
120
+ };
121
+ };
122
+ clients: Array<{
123
+ name: string;
124
+ version: string;
125
+ requestCount: number;
126
+ firstSeen: string;
127
+ lastSeen: string;
128
+ isConnected: boolean;
129
+ activeConnections: number;
130
+ totalConnections: number;
131
+ }>;
132
+ sessions: SessionData[];
133
+ methods: Array<{
134
+ method: string;
135
+ count: number;
136
+ firstCalled: string;
137
+ lastCalled: string;
138
+ averageResponseTime?: number;
139
+ errors: number;
140
+ errorRate: number;
141
+ }>;
142
+ apiMetrics?: ApiCallMetrics;
143
+ gradioMetrics?: GradioToolMetrics;
144
+ }
145
+ export declare function formatMetricsForAPI(metrics: TransportMetrics, transport: TransportType, isStateless: boolean, sessions?: SessionData[]): TransportMetricsResponse;
146
+ export declare function isInitializeRequest(method: string): boolean;
147
+ export declare function createEmptyMetrics(): TransportMetrics;
148
+ export declare function getClientKey(name: string, version: string): string;
149
+ export declare class MetricsCounter {
150
+ private metrics;
151
+ constructor();
152
+ getMetrics(): TransportMetrics;
153
+ trackRequest(): void;
154
+ trackError(statusCode?: number, error?: Error): void;
155
+ trackNewConnection(): void;
156
+ updateActiveConnections(count: number): void;
157
+ trackSessionCleaned(): void;
158
+ associateSessionWithClient(clientInfo: {
159
+ name: string;
160
+ version: string;
161
+ }): void;
162
+ updateClientActivity(clientInfo?: {
163
+ name: string;
164
+ version: string;
165
+ }): void;
166
+ disconnectClient(clientInfo?: {
167
+ name: string;
168
+ version: string;
169
+ }): void;
170
+ trackMethod(method: string | null, responseTime?: number, isError?: boolean): void;
171
+ trackPingSent(): void;
172
+ trackPingSuccess(): void;
173
+ trackPingFailed(): void;
174
+ trackStaticPageHit(statusCode: number): void;
175
+ trackAuthenticatedConnection(): void;
176
+ trackAnonymousConnection(): void;
177
+ trackUnauthorizedConnection(): void;
178
+ private updateRequestsPerMinute;
179
+ }
180
+ //# sourceMappingURL=transport-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-metrics.d.ts","sourceRoot":"","sources":["../../src/shared/transport-metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ export function formatMetricsForAPI(metrics, transport, isStateless, sessions = []) {
2
+ const currentTime = new Date();
3
+ const uptimeSeconds = Math.floor((currentTime.getTime() - metrics.startupTime.getTime()) / 1000);
4
+ return {
5
+ transport,
6
+ isStateless,
7
+ startupTime: metrics.startupTime.toISOString(),
8
+ currentTime: currentTime.toISOString(),
9
+ uptimeSeconds,
10
+ connections: metrics.connections,
11
+ requests: metrics.requests,
12
+ pings: metrics.pings
13
+ ? {
14
+ ...metrics.pings,
15
+ lastPingTime: metrics.pings.lastPingTime?.toISOString(),
16
+ }
17
+ : undefined,
18
+ errors: {
19
+ ...metrics.errors,
20
+ lastError: metrics.errors.lastError
21
+ ? {
22
+ ...metrics.errors.lastError,
23
+ timestamp: metrics.errors.lastError.timestamp.toISOString(),
24
+ }
25
+ : undefined,
26
+ },
27
+ clients: Array.from(metrics.clients.values()).map((client) => ({
28
+ ...client,
29
+ firstSeen: client.firstSeen.toISOString(),
30
+ lastSeen: client.lastSeen.toISOString(),
31
+ })),
32
+ sessions,
33
+ staticPageHits200: metrics.staticPageHits200,
34
+ staticPageHits405: metrics.staticPageHits405,
35
+ methods: Array.from(metrics.methods.values()).map((method) => ({
36
+ ...method,
37
+ firstCalled: method.firstCalled.toISOString(),
38
+ lastCalled: method.lastCalled.toISOString(),
39
+ errorRate: method.count > 0 ? (method.errors / method.count) * 100 : 0,
40
+ })),
41
+ };
42
+ }
43
+ export function isInitializeRequest(method) {
44
+ return method === 'initialize';
45
+ }
46
+ export function createEmptyMetrics() {
47
+ return {
48
+ startupTime: new Date(),
49
+ connections: {
50
+ active: 0,
51
+ total: 0,
52
+ authenticated: 0,
53
+ denied: 0,
54
+ anonymous: 0,
55
+ },
56
+ requests: {
57
+ total: 0,
58
+ averagePerMinute: 0,
59
+ },
60
+ errors: {
61
+ expected: 0,
62
+ unexpected: 0,
63
+ },
64
+ clients: new Map(),
65
+ methods: new Map(),
66
+ staticPageHits200: 0,
67
+ staticPageHits405: 0,
68
+ };
69
+ }
70
+ export function getClientKey(name, version) {
71
+ return `${name} ${version}`;
72
+ }
73
+ export class MetricsCounter {
74
+ metrics;
75
+ constructor() {
76
+ this.metrics = createEmptyMetrics();
77
+ }
78
+ getMetrics() {
79
+ return this.metrics;
80
+ }
81
+ trackRequest() {
82
+ this.metrics.requests.total++;
83
+ this.updateRequestsPerMinute();
84
+ }
85
+ trackError(statusCode, error) {
86
+ if (statusCode && statusCode >= 400 && statusCode < 500) {
87
+ this.metrics.errors.expected++;
88
+ }
89
+ else {
90
+ this.metrics.errors.unexpected++;
91
+ }
92
+ if (error) {
93
+ this.metrics.errors.lastError = {
94
+ type: error.constructor.name,
95
+ message: error.message,
96
+ timestamp: new Date(),
97
+ };
98
+ }
99
+ }
100
+ trackNewConnection() {
101
+ this.metrics.connections.total++;
102
+ }
103
+ updateActiveConnections(count) {
104
+ this.metrics.connections.active = count;
105
+ }
106
+ trackSessionCleaned() {
107
+ if (!this.metrics.connections.cleaned) {
108
+ this.metrics.connections.cleaned = 0;
109
+ }
110
+ this.metrics.connections.cleaned++;
111
+ }
112
+ associateSessionWithClient(clientInfo) {
113
+ const clientKey = getClientKey(clientInfo.name, clientInfo.version);
114
+ let clientMetrics = this.metrics.clients.get(clientKey);
115
+ if (!clientMetrics) {
116
+ clientMetrics = {
117
+ name: clientInfo.name,
118
+ version: clientInfo.version,
119
+ requestCount: 0,
120
+ firstSeen: new Date(),
121
+ lastSeen: new Date(),
122
+ isConnected: true,
123
+ activeConnections: 1,
124
+ totalConnections: 1,
125
+ };
126
+ this.metrics.clients.set(clientKey, clientMetrics);
127
+ }
128
+ else {
129
+ clientMetrics.lastSeen = new Date();
130
+ clientMetrics.isConnected = true;
131
+ clientMetrics.activeConnections++;
132
+ clientMetrics.totalConnections++;
133
+ }
134
+ }
135
+ updateClientActivity(clientInfo) {
136
+ if (!clientInfo)
137
+ return;
138
+ const clientKey = getClientKey(clientInfo.name, clientInfo.version);
139
+ const clientMetrics = this.metrics.clients.get(clientKey);
140
+ if (clientMetrics) {
141
+ clientMetrics.requestCount++;
142
+ clientMetrics.lastSeen = new Date();
143
+ }
144
+ }
145
+ disconnectClient(clientInfo) {
146
+ if (!clientInfo)
147
+ return;
148
+ const clientKey = getClientKey(clientInfo.name, clientInfo.version);
149
+ const clientMetrics = this.metrics.clients.get(clientKey);
150
+ if (clientMetrics && clientMetrics.activeConnections > 0) {
151
+ clientMetrics.activeConnections--;
152
+ if (clientMetrics.activeConnections === 0) {
153
+ clientMetrics.isConnected = false;
154
+ }
155
+ }
156
+ }
157
+ trackMethod(method, responseTime, isError = false) {
158
+ if (!method)
159
+ return;
160
+ let methodMetrics = this.metrics.methods.get(method);
161
+ if (!methodMetrics) {
162
+ methodMetrics = {
163
+ method,
164
+ count: 0,
165
+ firstCalled: new Date(),
166
+ lastCalled: new Date(),
167
+ errors: 0,
168
+ };
169
+ this.metrics.methods.set(method, methodMetrics);
170
+ }
171
+ methodMetrics.count++;
172
+ methodMetrics.lastCalled = new Date();
173
+ if (isError) {
174
+ methodMetrics.errors++;
175
+ }
176
+ if (responseTime !== undefined && !isError) {
177
+ const successfulCalls = methodMetrics.count - methodMetrics.errors;
178
+ if (successfulCalls === 1) {
179
+ methodMetrics.averageResponseTime = responseTime;
180
+ }
181
+ else {
182
+ const currentAvg = methodMetrics.averageResponseTime || 0;
183
+ const totalTime = currentAvg * (successfulCalls - 1) + responseTime;
184
+ methodMetrics.averageResponseTime = totalTime / successfulCalls;
185
+ }
186
+ }
187
+ }
188
+ trackPingSent() {
189
+ if (!this.metrics.pings) {
190
+ this.metrics.pings = {
191
+ sent: 0,
192
+ successful: 0,
193
+ failed: 0,
194
+ };
195
+ }
196
+ this.metrics.pings.sent++;
197
+ }
198
+ trackPingSuccess() {
199
+ if (!this.metrics.pings) {
200
+ this.metrics.pings = {
201
+ sent: 0,
202
+ successful: 0,
203
+ failed: 0,
204
+ };
205
+ }
206
+ this.metrics.pings.successful++;
207
+ this.metrics.pings.lastPingTime = new Date();
208
+ }
209
+ trackPingFailed() {
210
+ if (!this.metrics.pings) {
211
+ this.metrics.pings = {
212
+ sent: 0,
213
+ successful: 0,
214
+ failed: 0,
215
+ };
216
+ }
217
+ this.metrics.pings.failed++;
218
+ }
219
+ trackStaticPageHit(statusCode) {
220
+ if (statusCode === 200) {
221
+ this.metrics.staticPageHits200 = (this.metrics.staticPageHits200 || 0) + 1;
222
+ }
223
+ else if (statusCode === 405) {
224
+ this.metrics.staticPageHits405 = (this.metrics.staticPageHits405 || 0) + 1;
225
+ }
226
+ }
227
+ trackAuthenticatedConnection() {
228
+ this.metrics.connections.authenticated++;
229
+ }
230
+ trackAnonymousConnection() {
231
+ this.metrics.connections.anonymous++;
232
+ }
233
+ trackUnauthorizedConnection() {
234
+ if (!this.metrics.connections.unauthorized) {
235
+ this.metrics.connections.unauthorized = 0;
236
+ }
237
+ this.metrics.connections.unauthorized++;
238
+ }
239
+ updateRequestsPerMinute() {
240
+ const now = Date.now();
241
+ const startupTime = this.metrics.startupTime.getTime();
242
+ const uptimeMinutes = (now - startupTime) / (1000 * 60);
243
+ this.metrics.requests.averagePerMinute =
244
+ uptimeMinutes > 0 ? Math.round((this.metrics.requests.total / uptimeMinutes) * 100) / 100 : 0;
245
+ }
246
+ }
247
+ //# sourceMappingURL=transport-metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-metrics.js","sourceRoot":"","sources":["../../src/shared/transport-metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transport-metrics.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-metrics.test.d.ts","sourceRoot":"","sources":["../../src/shared/transport-metrics.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { isInitializeRequest } from './transport-metrics.js';
3
+ describe('isInitializeRequest', () => {
4
+ it('should identify initialize requests', () => {
5
+ expect(isInitializeRequest('initialize')).toBe(true);
6
+ expect(isInitializeRequest('notifications/initialized')).toBe(false);
7
+ expect(isInitializeRequest('tools/list')).toBe(false);
8
+ });
9
+ });
10
+ //# sourceMappingURL=transport-metrics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-metrics.test.js","sourceRoot":"","sources":["../../src/shared/transport-metrics.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,mBAAmB,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.1.7 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-green-100:oklch(96.2% .044 156.743);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-gray-200:oklch(92.8% .006 264.531);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-2xl:42rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-relaxed:1.625;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{background-color:var(--background);color:var(--foreground)}}@layer components;@layer utilities{.\@container\/card-header{container:card-header/inline-size}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.left-2{left:calc(var(--spacing)*2)}.z-50{z-index:50}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-4{margin-top:calc(var(--spacing)*4)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3\.5{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-24{height:calc(var(--spacing)*24)}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-auto{height:auto}.h-px{height:1px}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-screen{min-height:100vh}.w-1\/2{width:50%}.w-2\/3{width:66.6667%}.w-3{width:calc(var(--spacing)*3)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-9{width:calc(var(--spacing)*9)}.w-fit{width:fit-content}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[700px\]{max-width:700px}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[80px\]{min-width:80px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-manipulation{touch-action:manipulation}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-3>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*3)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-blue-200{border-color:var(--color-blue-200)}.border-border{border-color:var(--border)}.border-input{border-color:var(--input)}.border-transparent{border-color:#0000}.bg-background{background-color:var(--background)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-destructive{background-color:var(--destructive)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-green-100{background-color:var(--color-green-100)}.bg-muted,.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:#0000}.fill-current{fill:currentColor}.fill-primary{fill:var(--primary)}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.p-\[3px\]{padding:3px}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.pr-2{padding-right:calc(var(--spacing)*2)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-20{padding-bottom:calc(var(--spacing)*20)}.pl-8{padding-left:calc(var(--spacing)*8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.whitespace-nowrap{white-space:nowrap}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-blue-900{color:var(--color-blue-900)}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-destructive{color:var(--destructive)}.text-foreground{color:var(--foreground)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-muted-foreground{color:var(--muted-foreground)}.text-orange-600{color:var(--color-orange-600)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-purple-800{color:var(--color-purple-800)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.underline-offset-4{text-underline-offset:4px}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-200{--tw-duration:.2s;transition-duration:.2s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.selection\:bg-primary ::selection{background-color:var(--primary)}.selection\:bg-primary::selection{background-color:var(--primary)}.selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:border-green-500:active{border-color:var(--color-green-500)}.active\:bg-green-500:active{background-color:var(--color-green-500)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}@media (min-width:40rem){.sm\:p-8{padding:calc(var(--spacing)*8)}}@media (min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.dark\:border-blue-800:is(.dark *){border-color:var(--color-blue-800)}.dark\:bg-blue-950:is(.dark *){background-color:var(--color-blue-950)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:text-blue-100:is(.dark *){color:var(--color-blue-100)}.dark\:text-blue-300:is(.dark *){color:var(--color-blue-300)}.dark\:text-blue-400:is(.dark *){color:var(--color-blue-400)}.dark\:text-green-400:is(.dark *){color:var(--color-green-400)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}.dark\:text-orange-400:is(.dark *){color:var(--color-orange-400)}.dark\:text-purple-400:is(.dark *){color:var(--color-purple-400)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-green-100\/90:hover{background-color:#dcfce7e6}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-green-100\/90:hover{background-color:color-mix(in oklab,var(--color-green-100)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(64.6% .222 41.116);--chart-2:oklch(60% .118 184.704);--chart-3:oklch(39.8% .07 227.392);--chart-4:oklch(82.8% .189 84.429);--chart-5:oklch(76.9% .188 70.08);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(48.8% .243 264.376);--chart-2:oklch(69.6% .17 162.48);--chart-3:oklch(76.9% .188 70.08);--chart-4:oklch(62.7% .265 303.9);--chart-5:oklch(64.5% .246 16.439);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}