@fastcoder/vision-mcp-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +263 -0
  2. package/README.zh-CN.md +210 -0
  3. package/build/core/api-common.d.ts +89 -0
  4. package/build/core/api-common.d.ts.map +1 -0
  5. package/build/core/api-common.js +119 -0
  6. package/build/core/api-common.js.map +1 -0
  7. package/build/core/base-image-service.d.ts +38 -0
  8. package/build/core/base-image-service.d.ts.map +1 -0
  9. package/build/core/base-image-service.js +92 -0
  10. package/build/core/base-image-service.js.map +1 -0
  11. package/build/core/chat-service.d.ts +42 -0
  12. package/build/core/chat-service.d.ts.map +1 -0
  13. package/build/core/chat-service.js +97 -0
  14. package/build/core/chat-service.js.map +1 -0
  15. package/build/core/environment.d.ts +76 -0
  16. package/build/core/environment.d.ts.map +1 -0
  17. package/build/core/environment.js +132 -0
  18. package/build/core/environment.js.map +1 -0
  19. package/build/core/error-handler.d.ts +124 -0
  20. package/build/core/error-handler.d.ts.map +1 -0
  21. package/build/core/error-handler.js +248 -0
  22. package/build/core/error-handler.js.map +1 -0
  23. package/build/core/file-service.d.ts +36 -0
  24. package/build/core/file-service.d.ts.map +1 -0
  25. package/build/core/file-service.js +141 -0
  26. package/build/core/file-service.js.map +1 -0
  27. package/build/index.d.ts +3 -0
  28. package/build/index.d.ts.map +1 -0
  29. package/build/index.js +119 -0
  30. package/build/index.js.map +1 -0
  31. package/build/prompts/data-viz.d.ts +5 -0
  32. package/build/prompts/data-viz.d.ts.map +1 -0
  33. package/build/prompts/data-viz.js +98 -0
  34. package/build/prompts/data-viz.js.map +1 -0
  35. package/build/prompts/diagram-analysis.d.ts +5 -0
  36. package/build/prompts/diagram-analysis.d.ts.map +1 -0
  37. package/build/prompts/diagram-analysis.js +102 -0
  38. package/build/prompts/diagram-analysis.js.map +1 -0
  39. package/build/prompts/error-diagnosis.d.ts +5 -0
  40. package/build/prompts/error-diagnosis.d.ts.map +1 -0
  41. package/build/prompts/error-diagnosis.js +69 -0
  42. package/build/prompts/error-diagnosis.js.map +1 -0
  43. package/build/prompts/general-image.d.ts +5 -0
  44. package/build/prompts/general-image.d.ts.map +1 -0
  45. package/build/prompts/general-image.js +45 -0
  46. package/build/prompts/general-image.js.map +1 -0
  47. package/build/prompts/index.d.ts +8 -0
  48. package/build/prompts/index.d.ts.map +1 -0
  49. package/build/prompts/index.js +8 -0
  50. package/build/prompts/index.js.map +1 -0
  51. package/build/prompts/text-extraction.d.ts +5 -0
  52. package/build/prompts/text-extraction.d.ts.map +1 -0
  53. package/build/prompts/text-extraction.js +45 -0
  54. package/build/prompts/text-extraction.js.map +1 -0
  55. package/build/prompts/ui-diff.d.ts +5 -0
  56. package/build/prompts/ui-diff.d.ts.map +1 -0
  57. package/build/prompts/ui-diff.js +190 -0
  58. package/build/prompts/ui-diff.js.map +1 -0
  59. package/build/prompts/ui-to-artifact.d.ts +10 -0
  60. package/build/prompts/ui-to-artifact.d.ts.map +1 -0
  61. package/build/prompts/ui-to-artifact.js +89 -0
  62. package/build/prompts/ui-to-artifact.js.map +1 -0
  63. package/build/tools/data-viz.d.ts +5 -0
  64. package/build/tools/data-viz.d.ts.map +1 -0
  65. package/build/tools/data-viz.js +93 -0
  66. package/build/tools/data-viz.js.map +1 -0
  67. package/build/tools/diagram-analysis.d.ts +5 -0
  68. package/build/tools/diagram-analysis.d.ts.map +1 -0
  69. package/build/tools/diagram-analysis.js +93 -0
  70. package/build/tools/diagram-analysis.js.map +1 -0
  71. package/build/tools/error-diagnosis.d.ts +5 -0
  72. package/build/tools/error-diagnosis.d.ts.map +1 -0
  73. package/build/tools/error-diagnosis.js +93 -0
  74. package/build/tools/error-diagnosis.js.map +1 -0
  75. package/build/tools/general-image.d.ts +5 -0
  76. package/build/tools/general-image.d.ts.map +1 -0
  77. package/build/tools/general-image.js +81 -0
  78. package/build/tools/general-image.js.map +1 -0
  79. package/build/tools/index.d.ts +8 -0
  80. package/build/tools/index.d.ts.map +1 -0
  81. package/build/tools/index.js +9 -0
  82. package/build/tools/index.js.map +1 -0
  83. package/build/tools/text-extraction.d.ts +5 -0
  84. package/build/tools/text-extraction.d.ts.map +1 -0
  85. package/build/tools/text-extraction.js +93 -0
  86. package/build/tools/text-extraction.js.map +1 -0
  87. package/build/tools/ui-diff.d.ts +5 -0
  88. package/build/tools/ui-diff.d.ts.map +1 -0
  89. package/build/tools/ui-diff.js +98 -0
  90. package/build/tools/ui-diff.js.map +1 -0
  91. package/build/tools/ui-to-artifact.d.ts +5 -0
  92. package/build/tools/ui-to-artifact.d.ts.map +1 -0
  93. package/build/tools/ui-to-artifact.js +117 -0
  94. package/build/tools/ui-to-artifact.js.map +1 -0
  95. package/build/types/index.d.ts +26 -0
  96. package/build/types/index.d.ts.map +1 -0
  97. package/build/types/index.js +43 -0
  98. package/build/types/index.js.map +1 -0
  99. package/build/utils/logger.d.ts +24 -0
  100. package/build/utils/logger.d.ts.map +1 -0
  101. package/build/utils/logger.js +119 -0
  102. package/build/utils/logger.js.map +1 -0
  103. package/build/utils/validation.d.ts +87 -0
  104. package/build/utils/validation.d.ts.map +1 -0
  105. package/build/utils/validation.js +155 -0
  106. package/build/utils/validation.js.map +1 -0
  107. package/package.json +70 -0
@@ -0,0 +1,38 @@
1
+ import { MultimodalContent } from './api-common.js';
2
+ /**
3
+ * Base image analysis service providing shared functionality
4
+ * for all specialized image analysis tools
5
+ */
6
+ export declare class BaseImageAnalysisService {
7
+ protected chatService: import("./chat-service.js").ChatService;
8
+ protected fileService: typeof import("./file-service.js").FileService;
9
+ protected MAX_IMAGE_SIZE_MB: number;
10
+ /**
11
+ * Process image source and validate it
12
+ * @param imageSource Image file path or URL
13
+ * @returns Processed image content for API
14
+ */
15
+ protected processImageSource(imageSource: string): Promise<MultimodalContent>;
16
+ /**
17
+ * Process multiple image sources (for tools like UI diff)
18
+ * @param imageSources Array of image file paths or URLs
19
+ * @returns Array of processed image content objects
20
+ */
21
+ protected processMultipleImageSources(imageSources: string[]): Promise<MultimodalContent[]>;
22
+ /**
23
+ * Execute vision analysis with a system prompt
24
+ * @param systemPrompt System-level instructions for AI
25
+ * @param userPrompt User's specific request
26
+ * @param imageContents Array of processed image content
27
+ * @param toolName Name of calling tool (for error context)
28
+ * @returns Analysis result
29
+ */
30
+ protected executeVisionAnalysis(systemPrompt: string, userPrompt: string, imageContents: MultimodalContent[], toolName: string): Promise<string>;
31
+ /**
32
+ * Validate that a prompt is not empty
33
+ * @param prompt Prompt to validate
34
+ * @param toolName Name of calling tool
35
+ */
36
+ protected validatePrompt(prompt: string, toolName: string): void;
37
+ }
38
+ //# sourceMappingURL=base-image-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-image-service.d.ts","sourceRoot":"","sources":["../../src/core/base-image-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;GAGG;AACH,qBAAa,wBAAwB;IACnC,SAAS,CAAC,WAAW,0CAAe;IACpC,SAAS,CAAC,WAAW,iDAAe;IACpC,SAAS,CAAC,iBAAiB,SAAM;IAEjC;;;;OAIG;cACa,kBAAkB,CAChC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC;IAkB7B;;;;OAIG;cACa,2BAA2B,CACzC,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAS/B;;;;;;;OAOG;cACa,qBAAqB,CACnC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,iBAAiB,EAAE,EAClC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC;IAgClB;;;;OAIG;IACH,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAajE"}
@@ -0,0 +1,92 @@
1
+ import { ToolExecutionError } from './error-handler.js';
2
+ import { createMultiModalMessage, createImageContent } from './api-common.js';
3
+ import { fileService } from './file-service.js';
4
+ import { chatService } from './chat-service.js';
5
+ /**
6
+ * Base image analysis service providing shared functionality
7
+ * for all specialized image analysis tools
8
+ */
9
+ export class BaseImageAnalysisService {
10
+ chatService = chatService;
11
+ fileService = fileService;
12
+ MAX_IMAGE_SIZE_MB = 20; // Updated to 20MB for OpenAI
13
+ /**
14
+ * Process image source and validate it
15
+ * @param imageSource Image file path or URL
16
+ * @returns Processed image content for API
17
+ */
18
+ async processImageSource(imageSource) {
19
+ // Validate image source and size
20
+ await this.fileService.validateImageSource(imageSource, this.MAX_IMAGE_SIZE_MB);
21
+ // Handle image source (URL or local file)
22
+ if (this.fileService.isUrl(imageSource)) {
23
+ // For URLs, pass directly without base64 encoding
24
+ return createImageContent(imageSource);
25
+ }
26
+ else {
27
+ // For local files, encode to base64
28
+ const imageData = await this.fileService.encodeImageToBase64(imageSource);
29
+ return createImageContent(imageData);
30
+ }
31
+ }
32
+ /**
33
+ * Process multiple image sources (for tools like UI diff)
34
+ * @param imageSources Array of image file paths or URLs
35
+ * @returns Array of processed image content objects
36
+ */
37
+ async processMultipleImageSources(imageSources) {
38
+ const imageContents = [];
39
+ for (const imageSource of imageSources) {
40
+ const imageContent = await this.processImageSource(imageSource);
41
+ imageContents.push(imageContent);
42
+ }
43
+ return imageContents;
44
+ }
45
+ /**
46
+ * Execute vision analysis with a system prompt
47
+ * @param systemPrompt System-level instructions for AI
48
+ * @param userPrompt User's specific request
49
+ * @param imageContents Array of processed image content
50
+ * @param toolName Name of calling tool (for error context)
51
+ * @returns Analysis result
52
+ */
53
+ async executeVisionAnalysis(systemPrompt, userPrompt, imageContents, toolName) {
54
+ try {
55
+ // Create multimodal message with system context
56
+ const messages = [
57
+ {
58
+ role: 'system',
59
+ content: systemPrompt
60
+ },
61
+ ...createMultiModalMessage(imageContents, userPrompt)
62
+ ];
63
+ const result = await this.chatService.visionCompletions(messages);
64
+ console.info(`${toolName} analysis completed successfully`);
65
+ return result;
66
+ }
67
+ catch (error) {
68
+ console.error(`${toolName} analysis failed`, {
69
+ error: error instanceof Error ? error.message : String(error)
70
+ });
71
+ throw new ToolExecutionError(`${toolName} analysis failed: ${error instanceof Error ? error.message : String(error)}`, toolName, 'EXECUTION_ERROR', {
72
+ toolName,
73
+ operation: 'executeVisionAnalysis',
74
+ metadata: { originalError: error }
75
+ }, error instanceof Error ? error : undefined);
76
+ }
77
+ }
78
+ /**
79
+ * Validate that a prompt is not empty
80
+ * @param prompt Prompt to validate
81
+ * @param toolName Name of calling tool
82
+ */
83
+ validatePrompt(prompt, toolName) {
84
+ if (!prompt || prompt.trim().length === 0) {
85
+ throw new ToolExecutionError('Prompt is required for image analysis', toolName, 'VALIDATION_ERROR', {
86
+ toolName,
87
+ operation: 'validatePrompt'
88
+ });
89
+ }
90
+ }
91
+ }
92
+ //# sourceMappingURL=base-image-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-image-service.js","sourceRoot":"","sources":["../../src/core/base-image-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { EnvironmentService } from './environment.js';
2
+ /**
3
+ * OpenAI API request interface
4
+ */
5
+ interface OpenAIChatRequest {
6
+ model: string;
7
+ messages: Array<{
8
+ role: string;
9
+ content: string | Array<{
10
+ type: string;
11
+ text?: string;
12
+ image_url?: {
13
+ url: string;
14
+ };
15
+ }>;
16
+ }>;
17
+ temperature: number;
18
+ top_p: number;
19
+ max_tokens: number;
20
+ stream: boolean;
21
+ }
22
+ /**
23
+ * OpenAI API service implementation
24
+ */
25
+ export declare class ChatService {
26
+ private environmentService;
27
+ constructor(environmentService?: EnvironmentService);
28
+ /**
29
+ * OpenAI chat completions API for vision analysis
30
+ */
31
+ visionCompletions(messages: OpenAIChatRequest['messages']): Promise<string>;
32
+ /**
33
+ * Make HTTP request to OpenAI API with proper headers and error handling
34
+ */
35
+ private chatCompletions;
36
+ }
37
+ /**
38
+ * OpenAI API chat completions service instance
39
+ */
40
+ export declare const chatService: ChatService;
41
+ export {};
42
+ //# sourceMappingURL=chat-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-service.d.ts","sourceRoot":"","sources":["../../src/core/chat-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;GAEG;AACH,UAAU,iBAAiB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE;gBAAE,GAAG,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC,CAAC;KACvF,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB;AAgBD;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,kBAAkB,qBAAmC;IAIjE;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC;IA0ClB;;OAEG;YACW,eAAe;CAyD9B;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { ApiError } from '../types/index.js';
2
+ import { configurationService } from './environment.js';
3
+ import { EnvironmentService } from './environment.js';
4
+ /**
5
+ * OpenAI API service implementation
6
+ */
7
+ export class ChatService {
8
+ environmentService;
9
+ constructor(environmentService = EnvironmentService.getInstance()) {
10
+ this.environmentService = environmentService;
11
+ }
12
+ /**
13
+ * OpenAI chat completions API for vision analysis
14
+ */
15
+ async visionCompletions(messages) {
16
+ const visionConfig = configurationService.getVisionConfig();
17
+ const apiKey = this.environmentService.getApiKey();
18
+ const requestBody = {
19
+ model: visionConfig.model,
20
+ messages,
21
+ temperature: visionConfig.temperature,
22
+ top_p: visionConfig.topP,
23
+ max_tokens: visionConfig.maxTokens,
24
+ stream: false
25
+ };
26
+ console.info('Requesting OpenAI chat completions API for vision analysis', {
27
+ model: visionConfig.model,
28
+ messageCount: messages.length
29
+ });
30
+ try {
31
+ const response = await this.chatCompletions(visionConfig.url, requestBody, apiKey);
32
+ const result = response.choices?.[0]?.message?.content;
33
+ if (!result) {
34
+ throw new ApiError('Invalid API response: missing content');
35
+ }
36
+ console.info('OpenAI chat completions API request successful');
37
+ return result;
38
+ }
39
+ catch (error) {
40
+ console.error('OpenAI chat completions API request failed', {
41
+ error: error instanceof Error ? error.message : String(error)
42
+ });
43
+ throw error instanceof ApiError
44
+ ? error
45
+ : new ApiError(`API call failed: ${error}`);
46
+ }
47
+ }
48
+ /**
49
+ * Make HTTP request to OpenAI API with proper headers and error handling
50
+ */
51
+ async chatCompletions(url, body, apiKey) {
52
+ const apiConfig = configurationService.getVisionConfig();
53
+ const controller = new AbortController();
54
+ const timeoutId = setTimeout(() => controller.abort(), apiConfig.timeout);
55
+ try {
56
+ const response = await fetch(url, {
57
+ method: 'POST',
58
+ headers: {
59
+ Authorization: `Bearer ${apiKey}`,
60
+ 'Content-Type': 'application/json',
61
+ Accept: 'application/json'
62
+ },
63
+ body: JSON.stringify(body),
64
+ signal: controller.signal
65
+ });
66
+ clearTimeout(timeoutId);
67
+ if (!response.ok) {
68
+ const errorText = await response.text();
69
+ throw new ApiError(`HTTP ${response.status}: ${errorText}`);
70
+ }
71
+ return await response.json();
72
+ }
73
+ catch (error) {
74
+ clearTimeout(timeoutId);
75
+ if (error instanceof ApiError) {
76
+ throw error;
77
+ }
78
+ if (error instanceof Error) {
79
+ if (error.name === 'AbortError') {
80
+ throw new ApiError(`Request timeout after ${apiConfig.timeout}ms when calling ${url}`);
81
+ }
82
+ if (error.message.includes('fetch failed')) {
83
+ const causeInfo = error.cause ? ` | Cause: ${error.cause}` : '';
84
+ throw new ApiError(`Network error: Failed to connect to ${url}. ` +
85
+ `Original error: ${error.message}${causeInfo}`);
86
+ }
87
+ throw new ApiError(`Network error: ${error.message}`);
88
+ }
89
+ throw new ApiError(`Network error: ${String(error)}`);
90
+ }
91
+ }
92
+ }
93
+ /**
94
+ * OpenAI API chat completions service instance
95
+ */
96
+ export const chatService = new ChatService();
97
+ //# sourceMappingURL=chat-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-service.js","sourceRoot":"","sources":["../../src/core/chat-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Environment configuration interface
3
+ */
4
+ interface EnvironmentConfig {
5
+ OPENAI_API_KEY: string;
6
+ OPENAI_BASE_URL: string;
7
+ OPENAI_VISION_MODEL: string;
8
+ OPENAI_MODEL_TEMPERATURE: number;
9
+ OPENAI_MODEL_TOP_P: number;
10
+ OPENAI_MODEL_MAX_TOKENS: number;
11
+ OPENAI_TIMEOUT: number;
12
+ OPENAI_RETRY_COUNT: number;
13
+ SERVER_NAME: string;
14
+ SERVER_VERSION: string;
15
+ }
16
+ /**
17
+ * Vision configuration interface
18
+ */
19
+ interface VisionConfig {
20
+ model: string;
21
+ timeout: number;
22
+ retryCount: number;
23
+ url: string;
24
+ temperature: number;
25
+ topP: number;
26
+ maxTokens: number;
27
+ }
28
+ /**
29
+ * Server configuration interface
30
+ */
31
+ interface ServerConfig {
32
+ name: string;
33
+ version: string;
34
+ }
35
+ /**
36
+ * Environment configuration service using singleton pattern
37
+ */
38
+ export declare class EnvironmentService {
39
+ private static instance;
40
+ private config;
41
+ private constructor();
42
+ /**
43
+ * Get singleton instance of EnvironmentService
44
+ */
45
+ static getInstance(): EnvironmentService;
46
+ /**
47
+ * Get environment configuration
48
+ */
49
+ getConfig(): EnvironmentConfig;
50
+ /**
51
+ * Load environment configuration from process.env
52
+ */
53
+ private loadEnvironmentConfig;
54
+ /**
55
+ * Get server configuration
56
+ */
57
+ getServerConfig(): ServerConfig;
58
+ /**
59
+ * Get API configuration for vision analysis
60
+ */
61
+ getVisionConfig(): VisionConfig;
62
+ /**
63
+ * Get OpenAI API key from configuration
64
+ */
65
+ getApiKey(): string;
66
+ }
67
+ /**
68
+ * Global environment service instance
69
+ */
70
+ export declare const environmentService: EnvironmentService;
71
+ /**
72
+ * Configuration service instance (for backward compatibility)
73
+ */
74
+ export declare const configurationService: EnvironmentService;
75
+ export {};
76
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/core/environment.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,UAAU,iBAAiB;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wBAAwB,EAAE,MAAM,CAAC;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,MAAM,CAAkC;IAEhD,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,SAAS,IAAI,iBAAiB;IAO9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2F7B;;OAEG;IACH,eAAe,IAAI,YAAY;IAQ/B;;OAEG;IACH,eAAe,IAAI,YAAY;IAqB/B;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,oBAAmC,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,oBAAoB,oBAAqB,CAAC"}
@@ -0,0 +1,132 @@
1
+ import { ApiError } from '../types/index.js';
2
+ /**
3
+ * Environment configuration service using singleton pattern
4
+ */
5
+ export class EnvironmentService {
6
+ static instance;
7
+ config = null;
8
+ constructor() { }
9
+ /**
10
+ * Get singleton instance of EnvironmentService
11
+ */
12
+ static getInstance() {
13
+ if (!EnvironmentService.instance) {
14
+ EnvironmentService.instance = new EnvironmentService();
15
+ }
16
+ return EnvironmentService.instance;
17
+ }
18
+ /**
19
+ * Get environment configuration
20
+ */
21
+ getConfig() {
22
+ if (!this.config) {
23
+ this.config = this.loadEnvironmentConfig();
24
+ }
25
+ return this.config;
26
+ }
27
+ /**
28
+ * Load environment configuration from process.env
29
+ */
30
+ loadEnvironmentConfig() {
31
+ const envConfig = { ...process.env };
32
+ // Support both VISION_MCP_* and OPENAI_* environment variable prefixes
33
+ // VISION_MCP_* takes precedence
34
+ const apiKey = envConfig.VISION_MCP_API_KEY ||
35
+ envConfig.OPENAI_API_KEY ||
36
+ '';
37
+ // Validate required API Key
38
+ if (!apiKey || apiKey.trim().length === 0) {
39
+ throw new ApiError('VISION_MCP_API_KEY or OPENAI_API_KEY environment variable is required');
40
+ }
41
+ // Detect placeholder API keys
42
+ if (apiKey.toLowerCase().includes('your_') ||
43
+ apiKey.toLowerCase().includes('api_key') ||
44
+ apiKey.toLowerCase().includes('sk-your-openai-api-key')) {
45
+ throw new ApiError('API key appears to be a placeholder. Please set your actual API key.');
46
+ }
47
+ const baseUrl = envConfig.VISION_MCP_API_URL ||
48
+ envConfig.OPENAI_BASE_URL ||
49
+ 'https://api.openai.com/v1';
50
+ const model = envConfig.VISION_MCP_MODEL ||
51
+ envConfig.OPENAI_VISION_MODEL ||
52
+ 'gpt-4o';
53
+ const temperature = parseFloat(envConfig.VISION_MCP_TEMPERATURE ||
54
+ envConfig.OPENAI_MODEL_TEMPERATURE ||
55
+ '0.7');
56
+ const topP = parseFloat(envConfig.VISION_MCP_TOP_P ||
57
+ envConfig.OPENAI_MODEL_TOP_P ||
58
+ '1.0');
59
+ const maxTokens = parseInt(envConfig.VISION_MCP_MAX_TOKENS ||
60
+ envConfig.OPENAI_MODEL_MAX_TOKENS ||
61
+ '2048');
62
+ const timeout = parseInt(envConfig.VISION_MCP_TIMEOUT ||
63
+ envConfig.OPENAI_TIMEOUT ||
64
+ '60000');
65
+ const retryCount = parseInt(envConfig.OPENAI_RETRY_COUNT ||
66
+ '1');
67
+ const serverName = envConfig.VISION_MCP_SERVER_NAME ||
68
+ envConfig.SERVER_NAME ||
69
+ 'vision-mcp-server';
70
+ const serverVersion = envConfig.VISION_MCP_SERVER_VERSION ||
71
+ envConfig.SERVER_VERSION ||
72
+ '0.1.0';
73
+ return {
74
+ OPENAI_API_KEY: apiKey,
75
+ OPENAI_BASE_URL: baseUrl,
76
+ OPENAI_VISION_MODEL: model,
77
+ OPENAI_MODEL_TEMPERATURE: temperature,
78
+ OPENAI_MODEL_TOP_P: topP,
79
+ OPENAI_MODEL_MAX_TOKENS: maxTokens,
80
+ OPENAI_TIMEOUT: timeout,
81
+ OPENAI_RETRY_COUNT: retryCount,
82
+ SERVER_NAME: serverName,
83
+ SERVER_VERSION: serverVersion
84
+ };
85
+ }
86
+ /**
87
+ * Get server configuration
88
+ */
89
+ getServerConfig() {
90
+ const config = this.getConfig();
91
+ return {
92
+ name: config.SERVER_NAME,
93
+ version: config.SERVER_VERSION
94
+ };
95
+ }
96
+ /**
97
+ * Get API configuration for vision analysis
98
+ */
99
+ getVisionConfig() {
100
+ const config = this.getConfig();
101
+ const baseUrl = config.OPENAI_BASE_URL;
102
+ // Check if the base URL already includes /chat/completions
103
+ // If so, use it directly; otherwise, append it
104
+ const url = baseUrl.includes('/chat/completions')
105
+ ? baseUrl
106
+ : `${baseUrl}/chat/completions`;
107
+ return {
108
+ model: config.OPENAI_VISION_MODEL,
109
+ timeout: config.OPENAI_TIMEOUT,
110
+ retryCount: config.OPENAI_RETRY_COUNT,
111
+ url,
112
+ temperature: config.OPENAI_MODEL_TEMPERATURE,
113
+ topP: config.OPENAI_MODEL_TOP_P,
114
+ maxTokens: config.OPENAI_MODEL_MAX_TOKENS
115
+ };
116
+ }
117
+ /**
118
+ * Get OpenAI API key from configuration
119
+ */
120
+ getApiKey() {
121
+ return this.getConfig().OPENAI_API_KEY;
122
+ }
123
+ }
124
+ /**
125
+ * Global environment service instance
126
+ */
127
+ export const environmentService = EnvironmentService.getInstance();
128
+ /**
129
+ * Configuration service instance (for backward compatibility)
130
+ */
131
+ export const configurationService = environmentService;
132
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/core/environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Error severity levels
3
+ */
4
+ export declare enum ErrorSeverity {
5
+ LOW = "low",
6
+ MEDIUM = "medium",
7
+ HIGH = "high",
8
+ CRITICAL = "critical"
9
+ }
10
+ /**
11
+ * Error categories
12
+ */
13
+ export declare enum ErrorCategory {
14
+ VALIDATION = "validation",
15
+ AUTHENTICATION = "authentication",
16
+ AUTHORIZATION = "authorization",
17
+ NETWORK = "network",
18
+ API = "api",
19
+ SYSTEM = "system",
20
+ BUSINESS = "business",
21
+ UNKNOWN = "unknown"
22
+ }
23
+ /**
24
+ * Error context interface
25
+ */
26
+ export interface ErrorContext {
27
+ timestamp: number;
28
+ [key: string]: unknown;
29
+ }
30
+ /**
31
+ * Base error class
32
+ */
33
+ export declare class BaseError extends Error {
34
+ readonly code: string;
35
+ readonly severity: ErrorSeverity;
36
+ readonly category: ErrorCategory;
37
+ readonly context: ErrorContext;
38
+ readonly cause?: Error;
39
+ readonly recoverable: boolean;
40
+ constructor(message: string, code: string, severity: ErrorSeverity, category: ErrorCategory, context?: Partial<ErrorContext>, cause?: Error, recoverable?: boolean);
41
+ /**
42
+ * Convert to JSON format
43
+ */
44
+ toJSON(): Record<string, unknown>;
45
+ /**
46
+ * Get user-friendly error message
47
+ */
48
+ getUserMessage(): string;
49
+ }
50
+ /**
51
+ * Business logic error
52
+ */
53
+ export declare class BusinessError extends BaseError {
54
+ constructor(message: string, code?: string, context?: Partial<ErrorContext>, cause?: Error);
55
+ getUserMessage(): string;
56
+ }
57
+ /**
58
+ * System error
59
+ */
60
+ export declare class SystemError extends BaseError {
61
+ constructor(message: string, code?: string, context?: Partial<ErrorContext>, cause?: Error);
62
+ getUserMessage(): string;
63
+ }
64
+ /**
65
+ * Network error
66
+ */
67
+ export declare class NetworkError extends BaseError {
68
+ constructor(message: string, code?: string, context?: Partial<ErrorContext>, cause?: Error);
69
+ getUserMessage(): string;
70
+ }
71
+ /**
72
+ * Authentication error
73
+ */
74
+ export declare class AuthenticationError extends BaseError {
75
+ constructor(message: string, code?: string, context?: Partial<ErrorContext>, cause?: Error);
76
+ getUserMessage(): string;
77
+ }
78
+ /**
79
+ * Authorization error
80
+ */
81
+ export declare class AuthorizationError extends BaseError {
82
+ constructor(message: string, code?: string, context?: Partial<ErrorContext>, cause?: Error);
83
+ getUserMessage(): string;
84
+ }
85
+ /**
86
+ * Tool execution error
87
+ */
88
+ export declare class ToolExecutionError extends BaseError {
89
+ readonly toolName: string;
90
+ constructor(message: string, toolName: string, code?: string, context?: Partial<ErrorContext>, cause?: Error);
91
+ getUserMessage(): string;
92
+ }
93
+ /**
94
+ * Error handling strategy interface
95
+ */
96
+ interface ErrorHandlingStrategy {
97
+ canHandle(error: Error | BaseError): boolean;
98
+ handle(error: Error | BaseError, context: ErrorContext): Promise<BaseError>;
99
+ }
100
+ /**
101
+ * Unified error handler
102
+ */
103
+ export declare class ErrorHandler {
104
+ private strategies;
105
+ constructor();
106
+ /**
107
+ * Add error handling strategy
108
+ */
109
+ addStrategy(strategy: ErrorHandlingStrategy): void;
110
+ /**
111
+ * Handle error
112
+ */
113
+ handleError(error: Error | BaseError, context?: Partial<ErrorContext>): Promise<BaseError>;
114
+ }
115
+ /**
116
+ * Global error handler instance
117
+ */
118
+ export declare const errorHandler: ErrorHandler;
119
+ /**
120
+ * Convenience function to handle errors
121
+ */
122
+ export declare function handleError(error: Error | BaseError, context?: Partial<ErrorContext>): Promise<BaseError>;
123
+ export {};
124
+ //# sourceMappingURL=error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/core/error-handler.ts"],"names":[],"mappings":"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"}