@dcyfr/ai 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/LICENSE +27 -1
- package/README.md +359 -23
- package/bin/cli.js +12 -0
- package/bin/tui/config-wizard.js +107 -0
- package/bin/tui/validation-dashboard.js +123 -0
- package/bin/tui.js +259 -0
- package/dist/ai/agents/agent-loader.d.ts.map +1 -1
- package/dist/ai/agents/agent-loader.js +4 -2
- package/dist/ai/agents/agent-loader.js.map +1 -1
- package/dist/ai/index.d.ts +2 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +2 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/mcp/index.d.ts +14 -2
- package/dist/ai/mcp/index.d.ts.map +1 -1
- package/dist/ai/mcp/index.js +11 -1
- package/dist/ai/mcp/index.js.map +1 -1
- package/dist/ai/mcp/servers/analytics/index.d.ts +19 -0
- package/dist/ai/mcp/servers/analytics/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/analytics/index.js +556 -0
- package/dist/ai/mcp/servers/analytics/index.js.map +1 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.d.ts +61 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.d.ts.map +1 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.js +8 -0
- package/dist/ai/mcp/servers/content-manager/content-provider.js.map +1 -0
- package/dist/ai/mcp/servers/content-manager/index.d.ts +19 -0
- package/dist/ai/mcp/servers/content-manager/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/content-manager/index.js +236 -0
- package/dist/ai/mcp/servers/content-manager/index.js.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/index.d.ts +19 -0
- package/dist/ai/mcp/servers/design-tokens/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/index.js +422 -0
- package/dist/ai/mcp/servers/design-tokens/index.js.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts +59 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.d.ts.map +1 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.js +8 -0
- package/dist/ai/mcp/servers/design-tokens/token-provider.js.map +1 -0
- package/dist/ai/mcp/servers/promptintel/index.d.ts +19 -0
- package/dist/ai/mcp/servers/promptintel/index.d.ts.map +1 -0
- package/dist/ai/mcp/servers/promptintel/index.js +323 -0
- package/dist/ai/mcp/servers/promptintel/index.js.map +1 -0
- package/dist/ai/mcp/servers/shared/cache.d.ts +62 -0
- package/dist/ai/mcp/servers/shared/cache.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/cache.js +117 -0
- package/dist/ai/mcp/servers/shared/cache.js.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.d.ts +53 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.js +185 -0
- package/dist/ai/mcp/servers/shared/promptintel-client.js.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.d.ts +85 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.js +7 -0
- package/dist/ai/mcp/servers/shared/promptintel-types.js.map +1 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.d.ts +54 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.js +122 -0
- package/dist/ai/mcp/servers/shared/rate-limiter.js.map +1 -0
- package/dist/ai/mcp/servers/shared/redis-client.d.ts +54 -0
- package/dist/ai/mcp/servers/shared/redis-client.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/redis-client.js +225 -0
- package/dist/ai/mcp/servers/shared/redis-client.js.map +1 -0
- package/dist/ai/mcp/servers/shared/types.d.ts +292 -0
- package/dist/ai/mcp/servers/shared/types.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/types.js +6 -0
- package/dist/ai/mcp/servers/shared/types.js.map +1 -0
- package/dist/ai/mcp/servers/shared/utils.d.ts +41 -0
- package/dist/ai/mcp/servers/shared/utils.d.ts.map +1 -0
- package/dist/ai/mcp/servers/shared/utils.js +183 -0
- package/dist/ai/mcp/servers/shared/utils.js.map +1 -0
- package/dist/ai/memory/config.d.ts +87 -0
- package/dist/ai/memory/config.d.ts.map +1 -0
- package/dist/ai/memory/config.js +154 -0
- package/dist/ai/memory/config.js.map +1 -0
- package/dist/ai/memory/dcyfr-memory.d.ts +63 -0
- package/dist/ai/memory/dcyfr-memory.d.ts.map +1 -0
- package/dist/ai/memory/dcyfr-memory.js +270 -0
- package/dist/ai/memory/dcyfr-memory.js.map +1 -0
- package/dist/ai/memory/index.d.ts +15 -0
- package/dist/ai/memory/index.d.ts.map +1 -0
- package/dist/ai/memory/index.js +15 -0
- package/dist/ai/memory/index.js.map +1 -0
- package/dist/ai/memory/mem0-client.d.ts +108 -0
- package/dist/ai/memory/mem0-client.d.ts.map +1 -0
- package/dist/ai/memory/mem0-client.js +166 -0
- package/dist/ai/memory/mem0-client.js.map +1 -0
- package/dist/ai/memory/types.d.ts +175 -0
- package/dist/ai/memory/types.d.ts.map +1 -0
- package/dist/ai/memory/types.js +10 -0
- package/dist/ai/memory/types.js.map +1 -0
- package/package.json +46 -8
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upstash Redis client for MCP servers and main app
|
|
3
|
+
* Supports multi-environment setup with automatic key namespacing
|
|
4
|
+
*
|
|
5
|
+
* Environments:
|
|
6
|
+
* - Production: Dedicated database (no key prefix)
|
|
7
|
+
* - Preview: Shared database with preview:{PR}:* prefix
|
|
8
|
+
* - Development: Shared database with dev:{username}:* prefix
|
|
9
|
+
* - Test: In-memory fallback (no Redis)
|
|
10
|
+
*
|
|
11
|
+
* Upstash provides serverless Redis with HTTP-based REST API, perfect for
|
|
12
|
+
* Vercel Edge Functions and serverless deployments (no persistent connections needed)
|
|
13
|
+
*/
|
|
14
|
+
import { Redis } from '@upstash/redis';
|
|
15
|
+
/**
|
|
16
|
+
* Upstash Redis client instance
|
|
17
|
+
* Lazy-initialized on first use to avoid connection in build/test environments
|
|
18
|
+
*/
|
|
19
|
+
let redisClient = null;
|
|
20
|
+
/**
|
|
21
|
+
* Get environment-specific Redis credentials
|
|
22
|
+
* Returns null for test environment (uses in-memory fallback)
|
|
23
|
+
*/
|
|
24
|
+
function getRedisCredentials() {
|
|
25
|
+
const isProduction = process.env.NODE_ENV === 'production' && process.env.VERCEL_ENV === 'production';
|
|
26
|
+
const isPreview = process.env.VERCEL_ENV === 'preview';
|
|
27
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
28
|
+
const isTest = process.env.NODE_ENV === 'test';
|
|
29
|
+
// Test environment: No Redis (in-memory fallback)
|
|
30
|
+
if (isTest) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
// Production: Use production credentials
|
|
34
|
+
if (isProduction) {
|
|
35
|
+
const url = process.env.UPSTASH_REDIS_REST_URL;
|
|
36
|
+
const token = process.env.UPSTASH_REDIS_REST_TOKEN;
|
|
37
|
+
if (!url || !token) {
|
|
38
|
+
console.error('❌ CRITICAL: Production Redis credentials missing');
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
return { url, token };
|
|
42
|
+
}
|
|
43
|
+
// Preview: Use preview credentials with production fallback
|
|
44
|
+
if (isPreview) {
|
|
45
|
+
const url = process.env.UPSTASH_REDIS_REST_URL_PREVIEW;
|
|
46
|
+
const token = process.env.UPSTASH_REDIS_REST_TOKEN_PREVIEW;
|
|
47
|
+
if (url && token) {
|
|
48
|
+
console.warn('Preview Redis connected (shared preview database)');
|
|
49
|
+
return { url, token };
|
|
50
|
+
}
|
|
51
|
+
// ✅ FIX: Check production credentials exist before using as fallback
|
|
52
|
+
const prodUrl = process.env.UPSTASH_REDIS_REST_URL;
|
|
53
|
+
const prodToken = process.env.UPSTASH_REDIS_REST_TOKEN;
|
|
54
|
+
if (prodUrl && prodToken) {
|
|
55
|
+
console.warn('⚠️ Preview Redis not configured, using production credentials (unsafe!)');
|
|
56
|
+
return { url: prodUrl, token: prodToken };
|
|
57
|
+
}
|
|
58
|
+
// No credentials available
|
|
59
|
+
console.error('❌ Preview Redis credentials missing (UPSTASH_REDIS_REST_URL_PREVIEW and UPSTASH_REDIS_REST_TOKEN_PREVIEW)');
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
// Development: Use shared preview database with key namespacing
|
|
63
|
+
// Graceful degradation: features disabled, no errors
|
|
64
|
+
if (isDevelopment) {
|
|
65
|
+
const url = process.env.UPSTASH_REDIS_REST_URL_PREVIEW;
|
|
66
|
+
const token = process.env.UPSTASH_REDIS_REST_TOKEN_PREVIEW;
|
|
67
|
+
if (url && token) {
|
|
68
|
+
console.warn('Development Redis connected (shared preview database)');
|
|
69
|
+
return { url, token };
|
|
70
|
+
}
|
|
71
|
+
// Graceful degradation: No warning in production logs
|
|
72
|
+
if (process.env.NODE_ENV !== 'test') {
|
|
73
|
+
console.warn('ℹ️ Development Redis not configured, analytics/caching disabled');
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get environment-specific key prefix for Redis isolation
|
|
81
|
+
*
|
|
82
|
+
* SIMPLIFIED ARCHITECTURE (2026-01-30):
|
|
83
|
+
* - Production: No prefix (dedicated database)
|
|
84
|
+
* - Everything else (Dev + Preview): 'preview:' prefix (SHARED)
|
|
85
|
+
*
|
|
86
|
+
* This allows dev and preview to share the same cached data,
|
|
87
|
+
* reducing complexity and ensuring consistency across environments.
|
|
88
|
+
*
|
|
89
|
+
* FIX (2026-02-01): More defensive production check to prevent prefix in production
|
|
90
|
+
*/
|
|
91
|
+
export function getRedisKeyPrefix() {
|
|
92
|
+
// ✅ DEFENSIVE: Multiple checks to ensure production is detected correctly
|
|
93
|
+
// Priority order: VERCEL_ENV (most reliable) > NODE_ENV (fallback)
|
|
94
|
+
const isProduction = process.env.VERCEL_ENV === 'production' ||
|
|
95
|
+
(process.env.NODE_ENV === 'production' &&
|
|
96
|
+
(!process.env.VERCEL_ENV || process.env.VERCEL_ENV !== 'preview'));
|
|
97
|
+
if (isProduction) {
|
|
98
|
+
return ''; // No prefix for production (dedicated database)
|
|
99
|
+
}
|
|
100
|
+
// ✅ SIMPLIFIED: All non-production environments share 'preview:' prefix
|
|
101
|
+
// This includes: local development, preview deployments, CI/CD
|
|
102
|
+
return 'preview:';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get or create Upstash Redis client
|
|
106
|
+
* Returns null if Redis not configured (graceful degradation)
|
|
107
|
+
*/
|
|
108
|
+
function getRedisClient() {
|
|
109
|
+
const credentials = getRedisCredentials();
|
|
110
|
+
if (!credentials) {
|
|
111
|
+
// Graceful degradation: Redis not configured (expected in development/test)
|
|
112
|
+
// Only log once to avoid console spam during module initialization
|
|
113
|
+
if (!redisClient && process.env.NODE_ENV === 'development') {
|
|
114
|
+
console.warn('[Redis] No credentials configured (using fallback)', {
|
|
115
|
+
environment: getRedisEnvironment(),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
if (!redisClient) {
|
|
121
|
+
console.warn('[Redis] Client initialized', {
|
|
122
|
+
environment: getRedisEnvironment(),
|
|
123
|
+
urlPrefix: credentials.url.substring(0, 30),
|
|
124
|
+
keyPrefix: getRedisKeyPrefix(),
|
|
125
|
+
});
|
|
126
|
+
redisClient = new Redis({
|
|
127
|
+
url: credentials.url,
|
|
128
|
+
token: credentials.token,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return redisClient;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Upstash Redis client with environment-aware key prefixing
|
|
135
|
+
* Auto-initializes on first use with environment credentials
|
|
136
|
+
*
|
|
137
|
+
* Compatible with standard Redis API:
|
|
138
|
+
* - get, set, setex, del
|
|
139
|
+
* - incr, zadd, zrange, lpush, lrange
|
|
140
|
+
* - All operations work via HTTP REST API
|
|
141
|
+
*
|
|
142
|
+
* Automatic key namespacing:
|
|
143
|
+
* - Production: no prefix (dedicated database)
|
|
144
|
+
* - Preview: preview:{PR}:key
|
|
145
|
+
* - Development: dev:{username}:key
|
|
146
|
+
*/
|
|
147
|
+
export const redis = new Proxy({}, {
|
|
148
|
+
get(_target, prop) {
|
|
149
|
+
const client = getRedisClient();
|
|
150
|
+
// Graceful degradation: return no-op functions when Redis unavailable
|
|
151
|
+
if (!client) {
|
|
152
|
+
if (prop === 'ping') {
|
|
153
|
+
return async () => {
|
|
154
|
+
throw new Error('Redis not configured');
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
// Return generic no-op async function for method calls when Redis unavailable
|
|
158
|
+
// This prevents "redis.get is not a function" errors in tests and allows
|
|
159
|
+
// code to gracefully handle missing cache (receives null result).
|
|
160
|
+
return async (..._args) => null;
|
|
161
|
+
}
|
|
162
|
+
const value = client[prop];
|
|
163
|
+
if (typeof value === 'function') {
|
|
164
|
+
// Intercept methods that use keys and add environment prefix
|
|
165
|
+
const keyMethods = [
|
|
166
|
+
'get',
|
|
167
|
+
'set',
|
|
168
|
+
'setex',
|
|
169
|
+
'del',
|
|
170
|
+
'incr',
|
|
171
|
+
'decr',
|
|
172
|
+
'zadd',
|
|
173
|
+
'zrange',
|
|
174
|
+
'zrangebyscore',
|
|
175
|
+
'zrem',
|
|
176
|
+
'lpush',
|
|
177
|
+
'rpush',
|
|
178
|
+
'lrange',
|
|
179
|
+
'llen',
|
|
180
|
+
'hget',
|
|
181
|
+
'hset',
|
|
182
|
+
'hdel',
|
|
183
|
+
'hgetall',
|
|
184
|
+
'expire',
|
|
185
|
+
'ttl',
|
|
186
|
+
'exists',
|
|
187
|
+
];
|
|
188
|
+
if (keyMethods.includes(prop)) {
|
|
189
|
+
return function (key, ...args) {
|
|
190
|
+
const prefixedKey = getRedisKeyPrefix() + key;
|
|
191
|
+
return value.call(client, prefixedKey, ...args);
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return value.bind(client);
|
|
195
|
+
}
|
|
196
|
+
return value;
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
/**
|
|
200
|
+
* Get current Redis environment for debugging
|
|
201
|
+
* Returns: 'production' | 'preview' | 'development' | 'test' | 'unknown'
|
|
202
|
+
*/
|
|
203
|
+
export function getRedisEnvironment() {
|
|
204
|
+
if (process.env.NODE_ENV === 'test')
|
|
205
|
+
return 'test';
|
|
206
|
+
if (process.env.NODE_ENV === 'production' && process.env.VERCEL_ENV === 'production') {
|
|
207
|
+
return 'production';
|
|
208
|
+
}
|
|
209
|
+
if (process.env.VERCEL_ENV === 'preview')
|
|
210
|
+
return 'preview';
|
|
211
|
+
if (process.env.NODE_ENV === 'development')
|
|
212
|
+
return 'development';
|
|
213
|
+
return 'unknown';
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Close Redis connection (for cleanup)
|
|
217
|
+
* Note: Upstash uses HTTP, so no persistent connection to close
|
|
218
|
+
* This is kept for API compatibility with previous implementation
|
|
219
|
+
*/
|
|
220
|
+
export async function closeRedisClient() {
|
|
221
|
+
// Upstash uses HTTP REST API, no persistent connection to close
|
|
222
|
+
// Just reset the client instance
|
|
223
|
+
redisClient = null;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=redis-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis-client.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/redis-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared TypeScript types for MCP servers
|
|
3
|
+
* Used across Analytics, Design Token, and Content Manager MCPs
|
|
4
|
+
*/
|
|
5
|
+
export interface MCPContext {
|
|
6
|
+
sessionId?: string;
|
|
7
|
+
requestId?: string;
|
|
8
|
+
session?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface MCPError {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
details?: unknown;
|
|
14
|
+
}
|
|
15
|
+
export type TimeRange = "1h" | "24h" | "7d" | "30d" | "all";
|
|
16
|
+
export interface PageViewData {
|
|
17
|
+
path: string;
|
|
18
|
+
views: number;
|
|
19
|
+
timeRange: TimeRange;
|
|
20
|
+
trend?: {
|
|
21
|
+
direction: "up" | "down" | "stable";
|
|
22
|
+
percentage: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface TrendingContent {
|
|
26
|
+
path: string;
|
|
27
|
+
title?: string;
|
|
28
|
+
views: number;
|
|
29
|
+
rank: number;
|
|
30
|
+
}
|
|
31
|
+
export interface EngagementMetric {
|
|
32
|
+
type: "click" | "share" | "interaction";
|
|
33
|
+
count: number;
|
|
34
|
+
path?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ActivityLog {
|
|
37
|
+
id: string;
|
|
38
|
+
type: string;
|
|
39
|
+
timestamp: number;
|
|
40
|
+
data: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
export interface Milestone {
|
|
43
|
+
id: string;
|
|
44
|
+
title: string;
|
|
45
|
+
description: string;
|
|
46
|
+
achievedAt: number;
|
|
47
|
+
category: string;
|
|
48
|
+
isTest?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface AnalyticsSummary {
|
|
51
|
+
totalViews: number;
|
|
52
|
+
topPages: TrendingContent[];
|
|
53
|
+
recentActivity: ActivityLog[];
|
|
54
|
+
milestones: Milestone[];
|
|
55
|
+
generatedAt: number;
|
|
56
|
+
}
|
|
57
|
+
export type TokenCategory = "spacing" | "typography" | "colors" | "containerWidths" | "breakpoints" | "animation";
|
|
58
|
+
export interface TokenViolation {
|
|
59
|
+
line: number;
|
|
60
|
+
column?: number;
|
|
61
|
+
hardcodedValue: string;
|
|
62
|
+
suggestedToken: string;
|
|
63
|
+
category: TokenCategory;
|
|
64
|
+
severity: "error" | "warning";
|
|
65
|
+
}
|
|
66
|
+
export interface TokenValidationResult {
|
|
67
|
+
isValid: boolean;
|
|
68
|
+
compliance: number;
|
|
69
|
+
violations: TokenViolation[];
|
|
70
|
+
totalChecks: number;
|
|
71
|
+
}
|
|
72
|
+
export interface TokenSuggestion {
|
|
73
|
+
tokenName: string;
|
|
74
|
+
tokenValue: string;
|
|
75
|
+
category: TokenCategory;
|
|
76
|
+
confidence: number;
|
|
77
|
+
usage: string;
|
|
78
|
+
}
|
|
79
|
+
export interface TokenUsage {
|
|
80
|
+
tokenName: string;
|
|
81
|
+
category: TokenCategory;
|
|
82
|
+
files: string[];
|
|
83
|
+
count: number;
|
|
84
|
+
}
|
|
85
|
+
export interface ComplianceReport {
|
|
86
|
+
overall: number;
|
|
87
|
+
byCategory: Record<TokenCategory, number>;
|
|
88
|
+
totalViolations: number;
|
|
89
|
+
recentViolations: TokenViolation[];
|
|
90
|
+
trend: {
|
|
91
|
+
direction: "improving" | "declining" | "stable";
|
|
92
|
+
changePercent: number;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
export type ContentType = "blog" | "project";
|
|
96
|
+
export interface ContentMetadata {
|
|
97
|
+
title: string;
|
|
98
|
+
description?: string;
|
|
99
|
+
date: string;
|
|
100
|
+
author?: string;
|
|
101
|
+
tags?: string[];
|
|
102
|
+
category?: string;
|
|
103
|
+
readingTime?: number;
|
|
104
|
+
wordCount?: number;
|
|
105
|
+
}
|
|
106
|
+
export interface ContentItem {
|
|
107
|
+
filePath: string;
|
|
108
|
+
type: ContentType;
|
|
109
|
+
slug: string;
|
|
110
|
+
metadata: ContentMetadata;
|
|
111
|
+
excerpt?: string;
|
|
112
|
+
}
|
|
113
|
+
export interface ContentAnalysis {
|
|
114
|
+
filePath: string;
|
|
115
|
+
metadata: ContentMetadata;
|
|
116
|
+
wordCount: number;
|
|
117
|
+
readingTime: number;
|
|
118
|
+
topics: string[];
|
|
119
|
+
links: {
|
|
120
|
+
internal: number;
|
|
121
|
+
external: number;
|
|
122
|
+
};
|
|
123
|
+
headings: {
|
|
124
|
+
h1: number;
|
|
125
|
+
h2: number;
|
|
126
|
+
h3: number;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
export interface RelatedContent {
|
|
130
|
+
content: ContentItem;
|
|
131
|
+
relevanceScore: number;
|
|
132
|
+
sharedTopics: string[];
|
|
133
|
+
}
|
|
134
|
+
export interface TopicTaxonomy {
|
|
135
|
+
topic: string;
|
|
136
|
+
count: number;
|
|
137
|
+
relatedTopics: string[];
|
|
138
|
+
contentItems: ContentItem[];
|
|
139
|
+
}
|
|
140
|
+
export interface SearchResult {
|
|
141
|
+
content: ContentItem;
|
|
142
|
+
matches: {
|
|
143
|
+
field: "title" | "description" | "body";
|
|
144
|
+
snippet: string;
|
|
145
|
+
}[];
|
|
146
|
+
score: number;
|
|
147
|
+
}
|
|
148
|
+
export interface CacheEntry<T> {
|
|
149
|
+
data: T;
|
|
150
|
+
cachedAt: number;
|
|
151
|
+
ttl: number;
|
|
152
|
+
}
|
|
153
|
+
export interface CacheOptions {
|
|
154
|
+
ttl: number;
|
|
155
|
+
key: string;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Author information from Semantic Scholar
|
|
159
|
+
*/
|
|
160
|
+
export interface ScholarAuthor {
|
|
161
|
+
authorId: string;
|
|
162
|
+
name: string;
|
|
163
|
+
affiliations?: string[];
|
|
164
|
+
homepage?: string;
|
|
165
|
+
paperCount?: number;
|
|
166
|
+
citationCount?: number;
|
|
167
|
+
hIndex?: number;
|
|
168
|
+
url?: string;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Paper information from Semantic Scholar
|
|
172
|
+
*/
|
|
173
|
+
export interface ScholarPaper {
|
|
174
|
+
paperId: string;
|
|
175
|
+
corpusId?: number;
|
|
176
|
+
title: string;
|
|
177
|
+
abstract?: string;
|
|
178
|
+
venue?: string;
|
|
179
|
+
year?: number;
|
|
180
|
+
publicationDate?: string;
|
|
181
|
+
citationCount?: number;
|
|
182
|
+
influentialCitationCount?: number;
|
|
183
|
+
referenceCount?: number;
|
|
184
|
+
authors?: ScholarAuthor[];
|
|
185
|
+
fieldsOfStudy?: string[];
|
|
186
|
+
openAccessPdf?: {
|
|
187
|
+
url: string;
|
|
188
|
+
status: string;
|
|
189
|
+
};
|
|
190
|
+
externalIds?: {
|
|
191
|
+
DOI?: string;
|
|
192
|
+
ArXiv?: string;
|
|
193
|
+
MAG?: string;
|
|
194
|
+
ACL?: string;
|
|
195
|
+
PubMed?: string;
|
|
196
|
+
CorpusId?: number;
|
|
197
|
+
};
|
|
198
|
+
url?: string;
|
|
199
|
+
tldr?: {
|
|
200
|
+
model: string;
|
|
201
|
+
text: string;
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Citation context from Semantic Scholar
|
|
206
|
+
*/
|
|
207
|
+
export interface ScholarCitation {
|
|
208
|
+
citingPaper: ScholarPaper;
|
|
209
|
+
contexts?: string[];
|
|
210
|
+
intents?: string[];
|
|
211
|
+
isInfluential?: boolean;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Reference information from Semantic Scholar
|
|
215
|
+
*/
|
|
216
|
+
export interface ScholarReference {
|
|
217
|
+
citedPaper: ScholarPaper;
|
|
218
|
+
contexts?: string[];
|
|
219
|
+
intents?: string[];
|
|
220
|
+
isInfluential?: boolean;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Search result from Semantic Scholar paper search
|
|
224
|
+
*/
|
|
225
|
+
export interface ScholarSearchResult {
|
|
226
|
+
total: number;
|
|
227
|
+
offset: number;
|
|
228
|
+
next?: number;
|
|
229
|
+
data: ScholarPaper[];
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Bulk search result with pagination token
|
|
233
|
+
*/
|
|
234
|
+
export interface ScholarBulkSearchResult {
|
|
235
|
+
total?: number;
|
|
236
|
+
token?: string;
|
|
237
|
+
data: ScholarPaper[];
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Author search result
|
|
241
|
+
*/
|
|
242
|
+
export interface ScholarAuthorSearchResult {
|
|
243
|
+
total: number;
|
|
244
|
+
offset: number;
|
|
245
|
+
next?: number;
|
|
246
|
+
data: ScholarAuthor[];
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Paper recommendation
|
|
250
|
+
*/
|
|
251
|
+
export interface ScholarRecommendation {
|
|
252
|
+
recommendedPapers: ScholarPaper[];
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Query parameters for paper search
|
|
256
|
+
*/
|
|
257
|
+
export interface ScholarSearchParams {
|
|
258
|
+
query: string;
|
|
259
|
+
fields?: string[];
|
|
260
|
+
year?: string;
|
|
261
|
+
publicationTypes?: string[];
|
|
262
|
+
openAccessPdf?: boolean;
|
|
263
|
+
minCitationCount?: number;
|
|
264
|
+
venue?: string;
|
|
265
|
+
fieldsOfStudy?: string[];
|
|
266
|
+
limit?: number;
|
|
267
|
+
offset?: number;
|
|
268
|
+
token?: string;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Cache statistics for Semantic Scholar MCP
|
|
272
|
+
*/
|
|
273
|
+
export interface ScholarCacheStats {
|
|
274
|
+
papers: {
|
|
275
|
+
total: number;
|
|
276
|
+
valid: number;
|
|
277
|
+
expired: number;
|
|
278
|
+
};
|
|
279
|
+
searches: {
|
|
280
|
+
total: number;
|
|
281
|
+
valid: number;
|
|
282
|
+
expired: number;
|
|
283
|
+
};
|
|
284
|
+
authors: {
|
|
285
|
+
total: number;
|
|
286
|
+
valid: number;
|
|
287
|
+
expired: number;
|
|
288
|
+
};
|
|
289
|
+
hitRate: number;
|
|
290
|
+
missRate: number;
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAMD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;QACpC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,aAAa,CAAC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,YAAY,GACZ,QAAQ,GACR,iBAAiB,GACjB,aAAa,GACb,WAAW,CAAC;AAEhB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,KAAK,EAAE;QACL,SAAS,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;QAChD,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAMD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,eAAe,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE;QACP,KAAK,EAAE,OAAO,GAAG,aAAa,GAAG,MAAM,CAAC;QACxC,OAAO,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC;IACR,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,YAAY,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,YAAY,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,YAAY,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,YAAY,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for MCP servers
|
|
3
|
+
* Common functions used across Analytics, Design Token, and Content Manager MCPs
|
|
4
|
+
*/
|
|
5
|
+
import type { MCPError } from "./types";
|
|
6
|
+
export declare class MCPToolError extends Error {
|
|
7
|
+
code: string;
|
|
8
|
+
details?: unknown | undefined;
|
|
9
|
+
constructor(code: string, message: string, details?: unknown | undefined);
|
|
10
|
+
toJSON(): MCPError;
|
|
11
|
+
}
|
|
12
|
+
export declare function handleToolError(error: unknown): string;
|
|
13
|
+
export declare function isProduction(): boolean;
|
|
14
|
+
export declare function isDevelopment(): boolean;
|
|
15
|
+
export declare function getEnvironment(): "production" | "preview" | "development";
|
|
16
|
+
/**
|
|
17
|
+
* Filters out test/demo data in production environments
|
|
18
|
+
*/
|
|
19
|
+
export declare function filterProductionData<T extends {
|
|
20
|
+
isTest?: boolean;
|
|
21
|
+
}>(items: T[]): T[];
|
|
22
|
+
/**
|
|
23
|
+
* Warns if using fallback/demo data in production
|
|
24
|
+
*/
|
|
25
|
+
export declare function warnProductionFallback(dataSource: string): void;
|
|
26
|
+
export declare function getTimeRangeMs(range: "1h" | "24h" | "7d" | "30d" | "all"): number;
|
|
27
|
+
export declare function isWithinTimeRange(timestamp: number, range: "1h" | "24h" | "7d" | "30d" | "all"): boolean;
|
|
28
|
+
export declare function sanitizePath(path: string): string;
|
|
29
|
+
export declare function extractSlug(filePath: string): string;
|
|
30
|
+
export declare function calculateReadingTime(wordCount: number): number;
|
|
31
|
+
export declare function dedupe<T>(items: T[]): T[];
|
|
32
|
+
export declare function sortByProperty<T>(items: T[], property: keyof T, direction?: "asc" | "desc"): T[];
|
|
33
|
+
export declare function limitResults<T>(items: T[], limit?: number): T[];
|
|
34
|
+
export declare function isValidUrl(url: string): boolean;
|
|
35
|
+
export declare function isValidPath(path: string): boolean;
|
|
36
|
+
export declare function measurePerformance<T>(operation: () => Promise<T>, label: string): Promise<{
|
|
37
|
+
result: T;
|
|
38
|
+
durationMs: number;
|
|
39
|
+
}>;
|
|
40
|
+
export declare function logToolExecution(toolName: string, params: Record<string, unknown>, success: boolean, durationMs?: number): void;
|
|
41
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../packages/ai/mcp/servers/shared/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMxC,qBAAa,YAAa,SAAQ,KAAK;IAE5B,IAAI,EAAE,MAAM;IAEZ,OAAO,CAAC,EAAE,OAAO;gBAFjB,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,OAAO,YAAA;IAM1B,MAAM,IAAI,QAAQ;CAOnB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUtD;AAMD,wBAAgB,YAAY,IAAI,OAAO,CAKtC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAKvC;AAED,wBAAgB,cAAc,IAAI,YAAY,GAAG,SAAS,GAAG,aAAa,CASzE;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,EACjE,KAAK,EAAE,CAAC,EAAE,GACT,CAAC,EAAE,CAOL;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAM/D;AAMD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GACzC,MAAM,CAiBR;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GACzC,OAAO,CAOT;AAMD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAI9D;AAMD,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEzC;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC9B,KAAK,EAAE,CAAC,EAAE,EACV,QAAQ,EAAE,MAAM,CAAC,EACjB,SAAS,GAAE,KAAK,GAAG,MAAe,GACjC,CAAC,EAAE,CAiBL;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAG/D;AAMD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGjD;AAMD,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAY5C;AAMD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAKN"}
|