mcp-image 0.1.0 → 0.2.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 (178) hide show
  1. package/README.md +41 -17
  2. package/dist/api/geminiClient.d.ts +2 -12
  3. package/dist/api/geminiClient.d.ts.map +1 -1
  4. package/dist/api/geminiClient.js +28 -56
  5. package/dist/api/geminiClient.js.map +1 -1
  6. package/dist/api/geminiTextClient.d.ts +42 -0
  7. package/dist/api/geminiTextClient.d.ts.map +1 -0
  8. package/dist/api/geminiTextClient.js +198 -0
  9. package/dist/api/geminiTextClient.js.map +1 -0
  10. package/dist/business/__tests__/mocks/mcpSamplingClient.mock.d.ts +84 -0
  11. package/dist/business/__tests__/mocks/mcpSamplingClient.mock.d.ts.map +1 -0
  12. package/dist/business/__tests__/mocks/mcpSamplingClient.mock.js +100 -0
  13. package/dist/business/__tests__/mocks/mcpSamplingClient.mock.js.map +1 -0
  14. package/dist/business/bestPracticesEngine.d.ts +149 -0
  15. package/dist/business/bestPracticesEngine.d.ts.map +1 -0
  16. package/dist/business/bestPracticesEngine.js +781 -0
  17. package/dist/business/bestPracticesEngine.js.map +1 -0
  18. package/dist/business/complexityAssessment.d.ts +132 -0
  19. package/dist/business/complexityAssessment.d.ts.map +1 -0
  20. package/dist/business/complexityAssessment.js +488 -0
  21. package/dist/business/complexityAssessment.js.map +1 -0
  22. package/dist/business/fallbackStrategies.d.ts +177 -0
  23. package/dist/business/fallbackStrategies.d.ts.map +1 -0
  24. package/dist/business/fallbackStrategies.js +368 -0
  25. package/dist/business/fallbackStrategies.js.map +1 -0
  26. package/dist/business/imageGenerator.d.ts.map +1 -1
  27. package/dist/business/imageGenerator.js +26 -5
  28. package/dist/business/imageGenerator.js.map +1 -1
  29. package/dist/business/multiImage/aspectRatioController.d.ts +77 -0
  30. package/dist/business/multiImage/aspectRatioController.d.ts.map +1 -0
  31. package/dist/business/multiImage/aspectRatioController.js +580 -0
  32. package/dist/business/multiImage/aspectRatioController.js.map +1 -0
  33. package/dist/business/multiImage/multiImageCoordinator.d.ts +142 -0
  34. package/dist/business/multiImage/multiImageCoordinator.d.ts.map +1 -0
  35. package/dist/business/multiImage/multiImageCoordinator.js +801 -0
  36. package/dist/business/multiImage/multiImageCoordinator.js.map +1 -0
  37. package/dist/business/pomlTemplateEngine.d.ts +206 -0
  38. package/dist/business/pomlTemplateEngine.d.ts.map +1 -0
  39. package/dist/business/pomlTemplateEngine.js +737 -0
  40. package/dist/business/pomlTemplateEngine.js.map +1 -0
  41. package/dist/business/promptOrchestrator.d.ts +173 -0
  42. package/dist/business/promptOrchestrator.d.ts.map +1 -0
  43. package/dist/business/promptOrchestrator.js +490 -0
  44. package/dist/business/promptOrchestrator.js.map +1 -0
  45. package/dist/business/responseBuilder.d.ts +2 -2
  46. package/dist/business/responseBuilder.d.ts.map +1 -1
  47. package/dist/business/responseBuilder.js +6 -1
  48. package/dist/business/responseBuilder.js.map +1 -1
  49. package/dist/business/structuredPromptGenerator.d.ts +54 -0
  50. package/dist/business/structuredPromptGenerator.d.ts.map +1 -0
  51. package/dist/business/structuredPromptGenerator.js +208 -0
  52. package/dist/business/structuredPromptGenerator.js.map +1 -0
  53. package/dist/business/templateNormalizer.d.ts +81 -0
  54. package/dist/business/templateNormalizer.d.ts.map +1 -0
  55. package/dist/business/templateNormalizer.js +659 -0
  56. package/dist/business/templateNormalizer.js.map +1 -0
  57. package/dist/documentation/apiContractValidation.d.ts +62 -0
  58. package/dist/documentation/apiContractValidation.d.ts.map +1 -0
  59. package/dist/documentation/apiContractValidation.js +305 -0
  60. package/dist/documentation/apiContractValidation.js.map +1 -0
  61. package/dist/infrastructure/concurrency/concurrencyManager.d.ts +101 -0
  62. package/dist/infrastructure/concurrency/concurrencyManager.d.ts.map +1 -0
  63. package/dist/infrastructure/concurrency/concurrencyManager.js +345 -0
  64. package/dist/infrastructure/concurrency/concurrencyManager.js.map +1 -0
  65. package/dist/infrastructure/config/secureConfigManager.d.ts +319 -0
  66. package/dist/infrastructure/config/secureConfigManager.d.ts.map +1 -0
  67. package/dist/infrastructure/config/secureConfigManager.js +600 -0
  68. package/dist/infrastructure/config/secureConfigManager.js.map +1 -0
  69. package/dist/infrastructure/errorHandling/orchestrationErrorHandler.d.ts +229 -0
  70. package/dist/infrastructure/errorHandling/orchestrationErrorHandler.d.ts.map +1 -0
  71. package/dist/infrastructure/errorHandling/orchestrationErrorHandler.js +61 -0
  72. package/dist/infrastructure/errorHandling/orchestrationErrorHandler.js.map +1 -0
  73. package/dist/infrastructure/errorHandling/orchestrationErrorHandlerImpl.d.ts +133 -0
  74. package/dist/infrastructure/errorHandling/orchestrationErrorHandlerImpl.d.ts.map +1 -0
  75. package/dist/infrastructure/errorHandling/orchestrationErrorHandlerImpl.js +569 -0
  76. package/dist/infrastructure/errorHandling/orchestrationErrorHandlerImpl.js.map +1 -0
  77. package/dist/infrastructure/mcp/MCPSamplingClient.d.ts +19 -0
  78. package/dist/infrastructure/mcp/MCPSamplingClient.d.ts.map +1 -0
  79. package/dist/infrastructure/mcp/MCPSamplingClient.js +31 -0
  80. package/dist/infrastructure/mcp/MCPSamplingClient.js.map +1 -0
  81. package/dist/infrastructure/mcp/RealMCPSamplingClient.d.ts +59 -0
  82. package/dist/infrastructure/mcp/RealMCPSamplingClient.d.ts.map +1 -0
  83. package/dist/infrastructure/mcp/RealMCPSamplingClient.js +271 -0
  84. package/dist/infrastructure/mcp/RealMCPSamplingClient.js.map +1 -0
  85. package/dist/infrastructure/metadata/generationMetadata.d.ts +72 -0
  86. package/dist/infrastructure/metadata/generationMetadata.d.ts.map +1 -0
  87. package/dist/infrastructure/metadata/generationMetadata.js +228 -0
  88. package/dist/infrastructure/metadata/generationMetadata.js.map +1 -0
  89. package/dist/infrastructure/monitoring/OrchestrationMetrics.d.ts +106 -0
  90. package/dist/infrastructure/monitoring/OrchestrationMetrics.d.ts.map +1 -0
  91. package/dist/infrastructure/monitoring/OrchestrationMetrics.js +456 -0
  92. package/dist/infrastructure/monitoring/OrchestrationMetrics.js.map +1 -0
  93. package/dist/infrastructure/monitoring/alertingSystem.d.ts +135 -0
  94. package/dist/infrastructure/monitoring/alertingSystem.d.ts.map +1 -0
  95. package/dist/infrastructure/monitoring/alertingSystem.js +549 -0
  96. package/dist/infrastructure/monitoring/alertingSystem.js.map +1 -0
  97. package/dist/infrastructure/optimization/performanceOptimizer.d.ts +89 -0
  98. package/dist/infrastructure/optimization/performanceOptimizer.d.ts.map +1 -0
  99. package/dist/infrastructure/optimization/performanceOptimizer.js +375 -0
  100. package/dist/infrastructure/optimization/performanceOptimizer.js.map +1 -0
  101. package/dist/infrastructure/security/AdvancedContentFilter.d.ts +99 -0
  102. package/dist/infrastructure/security/AdvancedContentFilter.d.ts.map +1 -0
  103. package/dist/infrastructure/security/AdvancedContentFilter.js +363 -0
  104. package/dist/infrastructure/security/AdvancedContentFilter.js.map +1 -0
  105. package/dist/infrastructure/security/MCPSecurityValidator.d.ts +62 -0
  106. package/dist/infrastructure/security/MCPSecurityValidator.d.ts.map +1 -0
  107. package/dist/infrastructure/security/MCPSecurityValidator.js +129 -0
  108. package/dist/infrastructure/security/MCPSecurityValidator.js.map +1 -0
  109. package/dist/infrastructure/security/OrchestrationSecurityMiddleware.d.ts +304 -0
  110. package/dist/infrastructure/security/OrchestrationSecurityMiddleware.d.ts.map +1 -0
  111. package/dist/infrastructure/security/OrchestrationSecurityMiddleware.js +61 -0
  112. package/dist/infrastructure/security/OrchestrationSecurityMiddleware.js.map +1 -0
  113. package/dist/infrastructure/security/OrchestrationSecurityMiddlewareImpl.d.ts +62 -0
  114. package/dist/infrastructure/security/OrchestrationSecurityMiddlewareImpl.d.ts.map +1 -0
  115. package/dist/infrastructure/security/OrchestrationSecurityMiddlewareImpl.js +591 -0
  116. package/dist/infrastructure/security/OrchestrationSecurityMiddlewareImpl.js.map +1 -0
  117. package/dist/infrastructure/security/SecureMCPClient.d.ts +154 -0
  118. package/dist/infrastructure/security/SecureMCPClient.d.ts.map +1 -0
  119. package/dist/infrastructure/security/SecureMCPClient.js +292 -0
  120. package/dist/infrastructure/security/SecureMCPClient.js.map +1 -0
  121. package/dist/infrastructure/security/SecurityIncidentManager.d.ts +142 -0
  122. package/dist/infrastructure/security/SecurityIncidentManager.d.ts.map +1 -0
  123. package/dist/infrastructure/security/SecurityIncidentManager.js +260 -0
  124. package/dist/infrastructure/security/SecurityIncidentManager.js.map +1 -0
  125. package/dist/infrastructure/security/apiKeyManager.d.ts +297 -0
  126. package/dist/infrastructure/security/apiKeyManager.d.ts.map +1 -0
  127. package/dist/infrastructure/security/apiKeyManager.js +254 -0
  128. package/dist/infrastructure/security/apiKeyManager.js.map +1 -0
  129. package/dist/infrastructure/security/dataSanitizer.d.ts +157 -0
  130. package/dist/infrastructure/security/dataSanitizer.d.ts.map +1 -0
  131. package/dist/infrastructure/security/dataSanitizer.js +525 -0
  132. package/dist/infrastructure/security/dataSanitizer.js.map +1 -0
  133. package/dist/infrastructure/validation/inputValidator.d.ts +54 -0
  134. package/dist/infrastructure/validation/inputValidator.d.ts.map +1 -0
  135. package/dist/infrastructure/validation/inputValidator.js +362 -0
  136. package/dist/infrastructure/validation/inputValidator.js.map +1 -0
  137. package/dist/integration/parameterOptimizer.d.ts +69 -0
  138. package/dist/integration/parameterOptimizer.d.ts.map +1 -0
  139. package/dist/integration/parameterOptimizer.js +317 -0
  140. package/dist/integration/parameterOptimizer.js.map +1 -0
  141. package/dist/integration/twoStageProcessor.d.ts +66 -0
  142. package/dist/integration/twoStageProcessor.d.ts.map +1 -0
  143. package/dist/integration/twoStageProcessor.js +348 -0
  144. package/dist/integration/twoStageProcessor.js.map +1 -0
  145. package/dist/server/handlers/structuredPromptHandler.d.ts +65 -0
  146. package/dist/server/handlers/structuredPromptHandler.d.ts.map +1 -0
  147. package/dist/server/handlers/structuredPromptHandler.js +314 -0
  148. package/dist/server/handlers/structuredPromptHandler.js.map +1 -0
  149. package/dist/server/mcpServer.d.ts +16 -35
  150. package/dist/server/mcpServer.d.ts.map +1 -1
  151. package/dist/server/mcpServer.js +111 -150
  152. package/dist/server/mcpServer.js.map +1 -1
  153. package/dist/server/mcpServerWithOrchestration.d.ts +98 -0
  154. package/dist/server/mcpServerWithOrchestration.d.ts.map +1 -0
  155. package/dist/server/mcpServerWithOrchestration.js +284 -0
  156. package/dist/server/mcpServerWithOrchestration.js.map +1 -0
  157. package/dist/types/mcpOrchestrationTypes.d.ts +135 -0
  158. package/dist/types/mcpOrchestrationTypes.d.ts.map +1 -0
  159. package/dist/types/mcpOrchestrationTypes.js +28 -0
  160. package/dist/types/mcpOrchestrationTypes.js.map +1 -0
  161. package/dist/types/multiImageTypes.d.ts +328 -0
  162. package/dist/types/multiImageTypes.d.ts.map +1 -0
  163. package/dist/types/multiImageTypes.js +27 -0
  164. package/dist/types/multiImageTypes.js.map +1 -0
  165. package/dist/types/performanceTypes.d.ts +300 -0
  166. package/dist/types/performanceTypes.d.ts.map +1 -0
  167. package/dist/types/performanceTypes.js +50 -0
  168. package/dist/types/performanceTypes.js.map +1 -0
  169. package/dist/types/twoStageTypes.d.ts +123 -0
  170. package/dist/types/twoStageTypes.d.ts.map +1 -0
  171. package/dist/types/twoStageTypes.js +7 -0
  172. package/dist/types/twoStageTypes.js.map +1 -0
  173. package/dist/utils/config.d.ts +1 -0
  174. package/dist/utils/config.d.ts.map +1 -1
  175. package/dist/utils/config.js +1 -0
  176. package/dist/utils/config.js.map +1 -1
  177. package/package.json +11 -4
  178. package/vitest.config.mjs +0 -47
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Real MCP Sampling Client Implementation
3
+ * Server-side implementation that uses existing MCP connection
4
+ * Follows ADR-0003 specification for MCP Sampling
5
+ */
6
+ import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
+ import type { MCPSamplingClient, MCPSamplingConfig, MCPSamplingResult } from '../../business/__tests__/mocks/mcpSamplingClient.mock';
8
+ /**
9
+ * Real MCP Sampling Client for production use
10
+ * Uses existing MCP Server connection for sampling requests
11
+ */
12
+ export declare class RealMCPSamplingClient implements MCPSamplingClient {
13
+ private securityValidator;
14
+ private config;
15
+ private server;
16
+ constructor(config: MCPSamplingConfig);
17
+ /**
18
+ * Set the MCP Server instance for sampling requests
19
+ * Should be called after MCPServerImpl initialization
20
+ * @param server - The MCP Server instance from MCPServerImpl
21
+ */
22
+ setServer(server: Server): void;
23
+ /**
24
+ * Refine prompt using real MCP sampling
25
+ */
26
+ refinePrompt(prompt: string): Promise<MCPSamplingResult>;
27
+ /**
28
+ * Execute real MCP request using Server instance
29
+ */
30
+ private executeMCPRequest;
31
+ /**
32
+ * Build enhancement prompt for LLM
33
+ * Based on Gemini 2.5 Flash Image best practices from Design Doc
34
+ */
35
+ private buildEnhancementPrompt;
36
+ /**
37
+ * Create fallback result
38
+ */
39
+ private createFallbackResult;
40
+ /**
41
+ * Check availability
42
+ */
43
+ isAvailable(): Promise<boolean>;
44
+ /**
45
+ * Cleanup resources
46
+ * Note: Server lifecycle is managed by MCPServerImpl, not here
47
+ */
48
+ disconnect(): Promise<void>;
49
+ /**
50
+ * Build assessment prompt for testing purposes
51
+ * Public for compatibility, but not part of the interface
52
+ */
53
+ buildAssessmentPrompt(originalPrompt: string): string;
54
+ /**
55
+ * Assess prompt complexity
56
+ */
57
+ private assessComplexity;
58
+ }
59
+ //# sourceMappingURL=RealMCPSamplingClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealMCPSamplingClient.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/mcp/RealMCPSamplingClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAA;AACvE,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,uDAAuD,CAAA;AAG9D;;;GAGG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,iBAAiB;IAKrC;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiC9D;;OAEG;YACW,iBAAiB;IAuF/B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAyD9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;;OAGG;IACH,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAoBrD;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAczB"}
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ /**
3
+ * Real MCP Sampling Client Implementation
4
+ * Server-side implementation that uses existing MCP connection
5
+ * Follows ADR-0003 specification for MCP Sampling
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.RealMCPSamplingClient = void 0;
9
+ const MCPSecurityValidator_1 = require("../security/MCPSecurityValidator");
10
+ /**
11
+ * Real MCP Sampling Client for production use
12
+ * Uses existing MCP Server connection for sampling requests
13
+ */
14
+ class RealMCPSamplingClient {
15
+ constructor(config) {
16
+ this.server = null;
17
+ this.config = config;
18
+ this.securityValidator = new MCPSecurityValidator_1.MCPSecurityValidator();
19
+ }
20
+ /**
21
+ * Set the MCP Server instance for sampling requests
22
+ * Should be called after MCPServerImpl initialization
23
+ * @param server - The MCP Server instance from MCPServerImpl
24
+ */
25
+ setServer(server) {
26
+ this.server = server;
27
+ }
28
+ /**
29
+ * Refine prompt using real MCP sampling
30
+ */
31
+ async refinePrompt(prompt) {
32
+ const startTime = Date.now();
33
+ // Check if server is set
34
+ if (!this.server) {
35
+ if (this.config.enableLogging) {
36
+ console.warn('MCP Server not initialized, using fallback');
37
+ }
38
+ return this.createFallbackResult(prompt, startTime);
39
+ }
40
+ try {
41
+ // Security validation
42
+ try {
43
+ this.securityValidator.validateRequest({
44
+ method: 'sampling/createMessage',
45
+ params: { prompt },
46
+ });
47
+ }
48
+ catch (validationError) {
49
+ return this.createFallbackResult(prompt, startTime);
50
+ }
51
+ // Real MCP request with timeout
52
+ const result = await this.executeMCPRequest(prompt, startTime);
53
+ return result;
54
+ }
55
+ catch (error) {
56
+ if (this.config.enableLogging) {
57
+ console.error('MCP sampling failed:', error);
58
+ }
59
+ return this.createFallbackResult(prompt, startTime);
60
+ }
61
+ }
62
+ /**
63
+ * Execute real MCP request using Server instance
64
+ */
65
+ async executeMCPRequest(prompt, startTime) {
66
+ if (!this.server) {
67
+ throw new Error('Server not initialized');
68
+ }
69
+ const timeoutId = setTimeout(() => {
70
+ throw new Error('MCP Sampling timeout');
71
+ }, this.config.timeout);
72
+ try {
73
+ const samplingRequest = {
74
+ jsonrpc: '2.0',
75
+ id: crypto.randomUUID(),
76
+ method: 'sampling/createMessage',
77
+ params: {
78
+ messages: [
79
+ {
80
+ role: 'user',
81
+ content: {
82
+ type: 'text',
83
+ text: this.buildEnhancementPrompt(prompt),
84
+ },
85
+ },
86
+ ],
87
+ modelPreferences: {
88
+ hints: [{ name: 'claude-3-sonnet' }],
89
+ intelligencePriority: 0.8,
90
+ speedPriority: 0.5,
91
+ },
92
+ systemPrompt: 'You are an expert at enhancing image generation prompts.',
93
+ maxTokens: 800,
94
+ },
95
+ };
96
+ // Use the existing server connection to request sampling
97
+ const response = await Promise.race([
98
+ this.server.request(samplingRequest),
99
+ new Promise((_, reject) => {
100
+ setTimeout(() => reject(new Error('Timeout')), this.config.timeout);
101
+ }),
102
+ ]);
103
+ clearTimeout(timeoutId);
104
+ // Parse response
105
+ const responseText = response?.result?.content?.text || '';
106
+ let enhancedPrompt = prompt;
107
+ let confidence = 0.8;
108
+ let appliedRules = [];
109
+ try {
110
+ const parsed = JSON.parse(responseText);
111
+ enhancedPrompt = parsed.enhancedPrompt || prompt;
112
+ confidence = parsed.confidenceScore || 0.8;
113
+ appliedRules = parsed.appliedRules || [];
114
+ if (this.config.enableLogging) {
115
+ console.debug('MCP Sampling successful:', {
116
+ appliedRules,
117
+ confidence,
118
+ reasoning: parsed.reasoning
119
+ });
120
+ }
121
+ }
122
+ catch {
123
+ // Use text as-is if not JSON
124
+ enhancedPrompt = responseText || prompt;
125
+ }
126
+ return {
127
+ refinedPrompt: enhancedPrompt,
128
+ success: true,
129
+ processingTime: Date.now() - startTime,
130
+ metadata: {
131
+ model: 'claude-3-sonnet',
132
+ iterations: 1,
133
+ confidence,
134
+ },
135
+ };
136
+ }
137
+ catch (error) {
138
+ clearTimeout(timeoutId);
139
+ throw error;
140
+ }
141
+ }
142
+ /**
143
+ * Build enhancement prompt for LLM
144
+ * Based on Gemini 2.5 Flash Image best practices from Design Doc
145
+ */
146
+ buildEnhancementPrompt(prompt) {
147
+ return `You are an expert image prompt engineer. Enhance the following prompt for Gemini 2.5 Flash Image using these specific techniques:
148
+
149
+ ORIGINAL PROMPT: "${prompt}"
150
+
151
+ APPLY THESE 7 TECHNIQUES (check each that applies):
152
+
153
+ 1. **HYPER-SPECIFIC DETAILS**
154
+ - Replace vague terms with precise descriptions
155
+ - Add material, texture, color specifications
156
+ - Include specific architectural/design elements
157
+ - Example: "fantasy armor" → "ornate elven plate armor, etched with silver leaf patterns, high collar, falcon-wing pauldrons"
158
+
159
+ 2. **CHARACTER CONSISTENCY**
160
+ - Add consistent physical feature descriptions
161
+ - Specify facial characteristics, build, age
162
+ - Include clothing/accessory details for recognition
163
+ - Use "maintaining consistent [feature] throughout" phrasing
164
+
165
+ 3. **CONTEXT AND PURPOSE**
166
+ - State the image's intended use clearly
167
+ - Add environmental context
168
+ - Specify mood, atmosphere, or emotional tone
169
+ - Include time period, setting, or cultural context
170
+
171
+ 4. **REFINEMENT-FRIENDLY STRUCTURE**
172
+ - Use clear, comma-separated descriptive phrases
173
+ - Avoid run-on sentences or complex nested clauses
174
+ - Structure for easy modification of individual elements
175
+ - Front-load the most important visual elements
176
+
177
+ 5. **POSITIVE PHRASING (NO NEGATIVES)**
178
+ - Never use "no," "not," "without," "don't"
179
+ - Describe what IS desired instead of what isn't
180
+ - Example: "no cars" → "empty cobblestone street, peaceful pedestrian walkway"
181
+
182
+ 6. **ASPECT RATIO OPTIMIZATION**
183
+ - Add dimensions if not specified: portrait (3:4), landscape (16:9), square (1:1)
184
+ - Match ratio to content type (portrait for people, landscape for vistas)
185
+
186
+ 7. **PHOTOGRAPHIC CONTROL**
187
+ - Add specific lens types: 85mm portrait, wide-angle, macro
188
+ - Include lighting: golden hour, studio lighting, natural light
189
+ - Specify angle: low-angle, bird's eye view, eye-level
190
+ - Add composition terms: rule of thirds, centered, dynamic angle
191
+
192
+ RESPOND IN EXACTLY THIS JSON FORMAT:
193
+ {
194
+ "enhancedPrompt": "[COMPLETE enhanced prompt - be thorough and specific]",
195
+ "appliedRules": ["List each rule number you applied (1-7)"],
196
+ "confidenceScore": [0.0-1.0 confidence in improvement],
197
+ "reasoning": "[Explain the 2-3 most impactful changes made]"
198
+ }
199
+
200
+ PRIORITIZE: Concrete visual details that will directly improve image generation quality.`;
201
+ }
202
+ /**
203
+ * Create fallback result
204
+ */
205
+ createFallbackResult(prompt, startTime) {
206
+ return {
207
+ refinedPrompt: prompt,
208
+ success: false,
209
+ processingTime: Date.now() - startTime,
210
+ metadata: {
211
+ model: 'fallback',
212
+ iterations: 0,
213
+ confidence: 0,
214
+ },
215
+ };
216
+ }
217
+ /**
218
+ * Check availability
219
+ */
220
+ async isAvailable() {
221
+ // Server-side implementation: check if server is set
222
+ return this.server !== null;
223
+ }
224
+ /**
225
+ * Cleanup resources
226
+ * Note: Server lifecycle is managed by MCPServerImpl, not here
227
+ */
228
+ async disconnect() {
229
+ // No action needed - server is managed externally
230
+ this.server = null;
231
+ }
232
+ /**
233
+ * Build assessment prompt for testing purposes
234
+ * Public for compatibility, but not part of the interface
235
+ */
236
+ buildAssessmentPrompt(originalPrompt) {
237
+ const complexity = this.assessComplexity(originalPrompt);
238
+ return `Assessment for AI execution accuracy maximization:
239
+
240
+ Original prompt: ${originalPrompt}
241
+
242
+ Assessment criteria:
243
+ - Execution accuracy: Verify that generated content precisely matches requirements
244
+ - Quality metrics: Evaluate technical precision, clarity, and completeness
245
+ - Complexity: ${complexity}
246
+ - Technical requirements: ${complexity === 'high' ? 'Detailed specifications, precision factors, advanced techniques' : 'Standard quality checks, basic validation'}
247
+
248
+ Enhancement objectives:
249
+ - Maximize output reliability and consistency
250
+ - Ensure technical accuracy and specification compliance
251
+ - Optimize for intended use case and context
252
+ - Apply best practices for ${complexity}-complexity scenarios`;
253
+ }
254
+ /**
255
+ * Assess prompt complexity
256
+ */
257
+ assessComplexity(prompt) {
258
+ const technicalTerms = /(?:detailed|precise|accurate|specific|technical|architectural|rendering|photorealistic|professional)/gi;
259
+ const complexityIndicators = /(?:lighting|shadows|materials|composition|advanced|multiple|complex|intricate)/gi;
260
+ const technicalMatches = (prompt.match(technicalTerms) || []).length;
261
+ const complexityMatches = (prompt.match(complexityIndicators) || []).length;
262
+ const totalIndicators = technicalMatches + complexityMatches;
263
+ if (totalIndicators >= 4 || prompt.length > 200)
264
+ return 'high';
265
+ if (totalIndicators >= 2 || prompt.length > 100)
266
+ return 'medium';
267
+ return 'low';
268
+ }
269
+ }
270
+ exports.RealMCPSamplingClient = RealMCPSamplingClient;
271
+ //# sourceMappingURL=RealMCPSamplingClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealMCPSamplingClient.js","sourceRoot":"","sources":["../../../src/infrastructure/mcp/RealMCPSamplingClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Metadata management system for 2-stage processing
3
+ * Handles session tracking, stage recording, and performance metrics
4
+ */
5
+ import type { ProcessingMetadata, StageMetadata } from '../../types/twoStageTypes';
6
+ /**
7
+ * Metadata manager for generation sessions
8
+ */
9
+ export declare class GenerationMetadataManager {
10
+ private sessions;
11
+ private sessionCounter;
12
+ /**
13
+ * Create a new processing session
14
+ */
15
+ createSession(originalPrompt: string): string;
16
+ /**
17
+ * Record a processing stage
18
+ */
19
+ recordStage(sessionId: string, stage: Omit<StageMetadata, 'startTime'>): void;
20
+ /**
21
+ * Mark a stage as completed
22
+ */
23
+ completeStage(sessionId: string, stageName: string, outputData?: unknown): void;
24
+ /**
25
+ * Mark a stage as failed
26
+ */
27
+ failStage(sessionId: string, stageName: string, error: Error): void;
28
+ /**
29
+ * Record applied optimizations
30
+ */
31
+ recordOptimization(sessionId: string, optimization: string): void;
32
+ /**
33
+ * Mark fallback as used
34
+ */
35
+ recordFallback(sessionId: string): void;
36
+ /**
37
+ * Complete a session and calculate final metrics
38
+ */
39
+ completeSession(sessionId: string): ProcessingMetadata | undefined;
40
+ /**
41
+ * Get current session metadata
42
+ */
43
+ getSession(sessionId: string): ProcessingMetadata | undefined;
44
+ /**
45
+ * Clean up old inactive sessions (memory management)
46
+ */
47
+ cleanup(maxAge?: number): number;
48
+ /**
49
+ * Get statistics for monitoring and observability
50
+ */
51
+ getStatistics(): {
52
+ activeSessions: number;
53
+ totalSessions: number;
54
+ averageProcessingTime: number;
55
+ successRate: number;
56
+ fallbackRate: number;
57
+ performanceMetrics: {
58
+ averagePromptTime: number;
59
+ averageImageTime: number;
60
+ timeoutCount: number;
61
+ };
62
+ };
63
+ /**
64
+ * Generate unique session ID
65
+ */
66
+ private generateSessionId;
67
+ }
68
+ /**
69
+ * Global metadata manager instance
70
+ */
71
+ export declare const globalMetadataManager: GenerationMetadataManager;
72
+ //# sourceMappingURL=generationMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generationMetadata.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/metadata/generationMetadata.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AASlF;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,cAAc,CAAI;IAE1B;;OAEG;IACH,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM;IAoB7C;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,IAAI;IAc7E;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI;IA8B/E;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAenE;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAOjE;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOvC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IA4BlE;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAmB7D;;OAEG;IACH,OAAO,CAAC,MAAM,SAAU,GAAG,MAAM;IAejC;;OAEG;IACH,aAAa,IAAI;QACf,cAAc,EAAE,MAAM,CAAA;QACtB,aAAa,EAAE,MAAM,CAAA;QACrB,qBAAqB,EAAE,MAAM,CAAA;QAC7B,WAAW,EAAE,MAAM,CAAA;QACnB,YAAY,EAAE,MAAM,CAAA;QACpB,kBAAkB,EAAE;YAClB,iBAAiB,EAAE,MAAM,CAAA;YACzB,gBAAgB,EAAE,MAAM,CAAA;YACxB,YAAY,EAAE,MAAM,CAAA;SACrB,CAAA;KACF;IAsDD;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAO1B;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,2BAAkC,CAAA"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /**
3
+ * Metadata management system for 2-stage processing
4
+ * Handles session tracking, stage recording, and performance metrics
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.globalMetadataManager = exports.GenerationMetadataManager = void 0;
8
+ /**
9
+ * Metadata manager for generation sessions
10
+ */
11
+ class GenerationMetadataManager {
12
+ constructor() {
13
+ this.sessions = new Map();
14
+ this.sessionCounter = 0;
15
+ }
16
+ /**
17
+ * Create a new processing session
18
+ */
19
+ createSession(originalPrompt) {
20
+ const sessionId = this.generateSessionId();
21
+ const session = {
22
+ sessionId,
23
+ originalPrompt,
24
+ stages: [],
25
+ totalProcessingTime: 0,
26
+ promptEnhancementTime: 0,
27
+ imageGenerationTime: 0,
28
+ appliedOptimizations: [],
29
+ fallbackUsed: false,
30
+ timestamp: new Date(),
31
+ active: true,
32
+ };
33
+ this.sessions.set(sessionId, session);
34
+ return sessionId;
35
+ }
36
+ /**
37
+ * Record a processing stage
38
+ */
39
+ recordStage(sessionId, stage) {
40
+ const session = this.sessions.get(sessionId);
41
+ if (!session || !session.active) {
42
+ return;
43
+ }
44
+ const stageWithTimestamp = {
45
+ ...stage,
46
+ startTime: new Date(),
47
+ };
48
+ session.stages.push(stageWithTimestamp);
49
+ }
50
+ /**
51
+ * Mark a stage as completed
52
+ */
53
+ completeStage(sessionId, stageName, outputData) {
54
+ const session = this.sessions.get(sessionId);
55
+ if (!session || !session.active) {
56
+ return;
57
+ }
58
+ const stage = session.stages.find((s) => s.stageName === stageName && s.status === 'processing');
59
+ if (stage) {
60
+ stage.status = 'completed';
61
+ stage.endTime = new Date();
62
+ stage.processingTime = stage.endTime.getTime() - stage.startTime.getTime();
63
+ stage.outputData = outputData;
64
+ // Update session timing based on stage
65
+ if (stage.processingTime) {
66
+ switch (stageName) {
67
+ case 'Structured Prompt Generation':
68
+ case 'POML Template Structuring':
69
+ case 'Best Practices Enhancement':
70
+ session.promptEnhancementTime += stage.processingTime;
71
+ break;
72
+ case 'Image Generation':
73
+ case 'Fallback Image Generation':
74
+ session.imageGenerationTime += stage.processingTime;
75
+ break;
76
+ }
77
+ }
78
+ }
79
+ }
80
+ /**
81
+ * Mark a stage as failed
82
+ */
83
+ failStage(sessionId, stageName, error) {
84
+ const session = this.sessions.get(sessionId);
85
+ if (!session || !session.active) {
86
+ return;
87
+ }
88
+ const stage = session.stages.find((s) => s.stageName === stageName && s.status === 'processing');
89
+ if (stage) {
90
+ stage.status = 'failed';
91
+ stage.endTime = new Date();
92
+ stage.processingTime = stage.endTime.getTime() - stage.startTime.getTime();
93
+ stage.error = error;
94
+ }
95
+ }
96
+ /**
97
+ * Record applied optimizations
98
+ */
99
+ recordOptimization(sessionId, optimization) {
100
+ const session = this.sessions.get(sessionId);
101
+ if (session?.active) {
102
+ session.appliedOptimizations.push(optimization);
103
+ }
104
+ }
105
+ /**
106
+ * Mark fallback as used
107
+ */
108
+ recordFallback(sessionId) {
109
+ const session = this.sessions.get(sessionId);
110
+ if (session?.active) {
111
+ session.fallbackUsed = true;
112
+ }
113
+ }
114
+ /**
115
+ * Complete a session and calculate final metrics
116
+ */
117
+ completeSession(sessionId) {
118
+ const session = this.sessions.get(sessionId);
119
+ if (!session || !session.active) {
120
+ return undefined;
121
+ }
122
+ // Calculate total processing time
123
+ session.totalProcessingTime = session.promptEnhancementTime + session.imageGenerationTime;
124
+ // Mark session as inactive
125
+ session.active = false;
126
+ // Return immutable copy
127
+ const metadata = {
128
+ sessionId: session.sessionId,
129
+ originalPrompt: session.originalPrompt,
130
+ stages: [...session.stages],
131
+ totalProcessingTime: session.totalProcessingTime,
132
+ promptEnhancementTime: session.promptEnhancementTime,
133
+ imageGenerationTime: session.imageGenerationTime,
134
+ appliedOptimizations: [...session.appliedOptimizations],
135
+ fallbackUsed: session.fallbackUsed,
136
+ timestamp: session.timestamp,
137
+ };
138
+ return metadata;
139
+ }
140
+ /**
141
+ * Get current session metadata
142
+ */
143
+ getSession(sessionId) {
144
+ const session = this.sessions.get(sessionId);
145
+ if (!session) {
146
+ return undefined;
147
+ }
148
+ return {
149
+ sessionId: session.sessionId,
150
+ originalPrompt: session.originalPrompt,
151
+ stages: [...session.stages],
152
+ totalProcessingTime: session.totalProcessingTime,
153
+ promptEnhancementTime: session.promptEnhancementTime,
154
+ imageGenerationTime: session.imageGenerationTime,
155
+ appliedOptimizations: [...session.appliedOptimizations],
156
+ fallbackUsed: session.fallbackUsed,
157
+ timestamp: session.timestamp,
158
+ };
159
+ }
160
+ /**
161
+ * Clean up old inactive sessions (memory management)
162
+ */
163
+ cleanup(maxAge = 3600000) {
164
+ // Default 1 hour
165
+ const now = Date.now();
166
+ let cleaned = 0;
167
+ for (const [sessionId, session] of this.sessions.entries()) {
168
+ if (!session.active && now - session.timestamp.getTime() > maxAge) {
169
+ this.sessions.delete(sessionId);
170
+ cleaned++;
171
+ }
172
+ }
173
+ return cleaned;
174
+ }
175
+ /**
176
+ * Get statistics for monitoring and observability
177
+ */
178
+ getStatistics() {
179
+ const sessions = Array.from(this.sessions.values());
180
+ const activeSessions = sessions.filter((s) => s.active).length;
181
+ const completedSessions = sessions.filter((s) => !s.active);
182
+ const averageProcessingTime = completedSessions.length > 0
183
+ ? completedSessions.reduce((sum, s) => sum + s.totalProcessingTime, 0) /
184
+ completedSessions.length
185
+ : 0;
186
+ const successfulSessions = completedSessions.filter((s) => s.stages.some((stage) => stage.status === 'completed' && stage.stageName === 'Image Generation')).length;
187
+ const successRate = completedSessions.length > 0 ? successfulSessions / completedSessions.length : 0;
188
+ const fallbackSessions = completedSessions.filter((s) => s.fallbackUsed).length;
189
+ const fallbackRate = completedSessions.length > 0 ? fallbackSessions / completedSessions.length : 0;
190
+ const averagePromptTime = completedSessions.length > 0
191
+ ? completedSessions.reduce((sum, s) => sum + s.promptEnhancementTime, 0) /
192
+ completedSessions.length
193
+ : 0;
194
+ const averageImageTime = completedSessions.length > 0
195
+ ? completedSessions.reduce((sum, s) => sum + s.imageGenerationTime, 0) /
196
+ completedSessions.length
197
+ : 0;
198
+ const timeoutSessions = completedSessions.filter((s) => s.appliedOptimizations.some((opt) => opt.includes('performance target exceeded'))).length;
199
+ return {
200
+ activeSessions,
201
+ totalSessions: sessions.length,
202
+ averageProcessingTime,
203
+ successRate,
204
+ fallbackRate,
205
+ performanceMetrics: {
206
+ averagePromptTime,
207
+ averageImageTime,
208
+ timeoutCount: timeoutSessions,
209
+ },
210
+ };
211
+ }
212
+ /**
213
+ * Generate unique session ID
214
+ */
215
+ generateSessionId() {
216
+ this.sessionCounter++;
217
+ const timestamp = Date.now().toString(36);
218
+ const counter = this.sessionCounter.toString(36);
219
+ const random = Math.random().toString(36).substring(2, 8);
220
+ return `2stage-${timestamp}-${counter}-${random}`;
221
+ }
222
+ }
223
+ exports.GenerationMetadataManager = GenerationMetadataManager;
224
+ /**
225
+ * Global metadata manager instance
226
+ */
227
+ exports.globalMetadataManager = new GenerationMetadataManager();
228
+ //# sourceMappingURL=generationMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generationMetadata.js","sourceRoot":"","sources":["../../../src/infrastructure/metadata/generationMetadata.ts"],"names":[],"mappings":"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"}