@merabylabs/promptarchitect-mcp 0.1.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 (50) hide show
  1. package/README.md +230 -0
  2. package/dist/cli.d.ts +7 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +13 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +9 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +13 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/resources/index.d.ts +2 -0
  11. package/dist/resources/index.d.ts.map +1 -0
  12. package/dist/resources/index.js +2 -0
  13. package/dist/resources/index.js.map +1 -0
  14. package/dist/resources/templates.d.ts +36 -0
  15. package/dist/resources/templates.d.ts.map +1 -0
  16. package/dist/resources/templates.js +260 -0
  17. package/dist/resources/templates.js.map +1 -0
  18. package/dist/server.d.ts +15 -0
  19. package/dist/server.d.ts.map +1 -0
  20. package/dist/server.js +355 -0
  21. package/dist/server.js.map +1 -0
  22. package/dist/tools/analyzePrompt.d.ts +38 -0
  23. package/dist/tools/analyzePrompt.d.ts.map +1 -0
  24. package/dist/tools/analyzePrompt.js +196 -0
  25. package/dist/tools/analyzePrompt.js.map +1 -0
  26. package/dist/tools/generatePrompt.d.ts +33 -0
  27. package/dist/tools/generatePrompt.d.ts.map +1 -0
  28. package/dist/tools/generatePrompt.js +125 -0
  29. package/dist/tools/generatePrompt.js.map +1 -0
  30. package/dist/tools/index.d.ts +8 -0
  31. package/dist/tools/index.d.ts.map +1 -0
  32. package/dist/tools/index.js +8 -0
  33. package/dist/tools/index.js.map +1 -0
  34. package/dist/tools/refinePrompt.d.ts +33 -0
  35. package/dist/tools/refinePrompt.d.ts.map +1 -0
  36. package/dist/tools/refinePrompt.js +107 -0
  37. package/dist/tools/refinePrompt.js.map +1 -0
  38. package/dist/utils/gemini.d.ts +57 -0
  39. package/dist/utils/gemini.d.ts.map +1 -0
  40. package/dist/utils/gemini.js +254 -0
  41. package/dist/utils/gemini.js.map +1 -0
  42. package/dist/utils/index.d.ts +3 -0
  43. package/dist/utils/index.d.ts.map +1 -0
  44. package/dist/utils/index.js +3 -0
  45. package/dist/utils/index.js.map +1 -0
  46. package/dist/utils/logger.d.ts +14 -0
  47. package/dist/utils/logger.d.ts.map +1 -0
  48. package/dist/utils/logger.js +46 -0
  49. package/dist/utils/logger.js.map +1 -0
  50. package/package.json +72 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Generate Prompt Tool
3
+ * Transforms user ideas into well-structured prompts
4
+ */
5
+ import { z } from 'zod';
6
+ import { generateContent, isGeminiAvailable, logger } from '../utils/index.js';
7
+ export const generatePromptSchema = z.object({
8
+ idea: z.string().min(1).describe('The user\'s raw prompt idea or concept'),
9
+ template: z.enum(['coding', 'writing', 'research', 'analysis', 'factcheck', 'general'])
10
+ .optional()
11
+ .default('general')
12
+ .describe('Template type to use for generation'),
13
+ context: z.string().optional().describe('Additional context or constraints'),
14
+ targetModel: z.enum(['gpt-4', 'claude', 'gemini', 'general'])
15
+ .optional()
16
+ .default('general')
17
+ .describe('Target AI model to optimize for'),
18
+ });
19
+ const TEMPLATE_PREFIXES = {
20
+ coding: `Generate a detailed coding/development prompt for the following task. Include:
21
+ - Clear problem statement
22
+ - Technical requirements and constraints
23
+ - Expected input/output specifications
24
+ - Edge cases to consider
25
+ - Code quality expectations
26
+
27
+ Task: `,
28
+ writing: `Generate a comprehensive writing prompt for the following. Include:
29
+ - Clear writing objective
30
+ - Target audience and tone
31
+ - Structure/format requirements
32
+ - Key points to cover
33
+ - Style guidelines
34
+
35
+ Topic: `,
36
+ research: `Generate a thorough research prompt for the following topic. Include:
37
+ - Research questions to answer
38
+ - Scope and depth expectations
39
+ - Source requirements
40
+ - Output format (report, summary, etc.)
41
+ - Key areas to investigate
42
+
43
+ Topic: `,
44
+ analysis: `Generate an analytical prompt for the following. Include:
45
+ - What to analyze and why
46
+ - Analytical framework or approach
47
+ - Data/evidence expectations
48
+ - Output format and structure
49
+ - Key insights to uncover
50
+
51
+ Subject: `,
52
+ factcheck: `Generate a fact-checking prompt for the following claim. Include:
53
+ - The claim to verify
54
+ - Evidence standards required
55
+ - Source credibility criteria
56
+ - Output format (verdict, confidence, sources)
57
+ - Edge cases and nuances
58
+
59
+ Claim: `,
60
+ general: `Generate a well-structured prompt for the following request. Include:
61
+ - Clear objective
62
+ - Context and constraints
63
+ - Expected output format
64
+ - Quality criteria
65
+
66
+ Request: `,
67
+ };
68
+ export async function generatePrompt(input) {
69
+ const { idea, template = 'general', context, targetModel } = input;
70
+ logger.info('Generating prompt', { template, targetModel, ideaLength: idea.length });
71
+ // Build the generation request
72
+ const templatePrefix = TEMPLATE_PREFIXES[template] || TEMPLATE_PREFIXES.general;
73
+ let fullRequest = templatePrefix + idea;
74
+ if (context) {
75
+ fullRequest += `\n\nAdditional context: ${context}`;
76
+ }
77
+ if (targetModel && targetModel !== 'general') {
78
+ fullRequest += `\n\nOptimize this prompt specifically for ${targetModel}.`;
79
+ }
80
+ let generatedPrompt;
81
+ if (isGeminiAvailable()) {
82
+ generatedPrompt = await generateContent(fullRequest);
83
+ }
84
+ else {
85
+ // Fallback: Return a structured template without AI
86
+ generatedPrompt = createFallbackPrompt(idea, template, context);
87
+ logger.warn('Using fallback prompt generation (Gemini unavailable)');
88
+ }
89
+ // Calculate metadata
90
+ const wordCount = generatedPrompt.split(/\s+/).length;
91
+ const estimatedTokens = Math.ceil(wordCount * 1.3); // Rough estimate
92
+ const hasStructure = /^#+\s|^\d+\.|^-\s|^\*\s/m.test(generatedPrompt);
93
+ return {
94
+ prompt: generatedPrompt,
95
+ template,
96
+ metadata: {
97
+ estimatedTokens,
98
+ wordCount,
99
+ hasStructure,
100
+ },
101
+ };
102
+ }
103
+ function createFallbackPrompt(idea, template, context) {
104
+ const sections = [
105
+ '## Objective',
106
+ idea,
107
+ '',
108
+ '## Context',
109
+ context || 'No additional context provided.',
110
+ '',
111
+ '## Requirements',
112
+ '- Provide a clear, detailed response',
113
+ '- Use structured formatting where appropriate',
114
+ '- Include relevant examples if helpful',
115
+ '',
116
+ '## Output Format',
117
+ 'Respond with a well-organized answer that directly addresses the objective.',
118
+ ];
119
+ if (template === 'coding') {
120
+ sections.push('', '## Technical Notes', '- Include code examples where applicable', '- Consider edge cases', '- Follow best practices');
121
+ }
122
+ return sections.join('\n');
123
+ }
124
+ export default generatePrompt;
125
+ //# sourceMappingURL=generatePrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generatePrompt.js","sourceRoot":"","sources":["../../src/tools/generatePrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tools Index
3
+ * Exports all MCP tools with their schemas and handlers
4
+ */
5
+ export { generatePrompt, generatePromptSchema, type GeneratePromptInput, } from './generatePrompt.js';
6
+ export { refinePrompt, refinePromptSchema, type RefinePromptInput, } from './refinePrompt.js';
7
+ export { analyzePrompt, analyzePromptSchema, type AnalyzePromptInput, type AnalysisResult, } from './analyzePrompt.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACpB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tools Index
3
+ * Exports all MCP tools with their schemas and handlers
4
+ */
5
+ export { generatePrompt, generatePromptSchema, } from './generatePrompt.js';
6
+ export { refinePrompt, refinePromptSchema, } from './refinePrompt.js';
7
+ export { analyzePrompt, analyzePromptSchema, } from './analyzePrompt.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,cAAc,EACd,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,YAAY,EACZ,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,aAAa,EACb,mBAAmB,GAGpB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Refine Prompt Tool
3
+ * Iteratively improves existing prompts based on feedback
4
+ */
5
+ import { z } from 'zod';
6
+ export declare const refinePromptSchema: z.ZodObject<{
7
+ prompt: z.ZodString;
8
+ feedback: z.ZodString;
9
+ preserveStructure: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
10
+ targetModel: z.ZodDefault<z.ZodOptional<z.ZodEnum<["gpt-4", "claude", "gemini", "general"]>>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ targetModel: "general" | "gpt-4" | "claude" | "gemini";
13
+ prompt: string;
14
+ feedback: string;
15
+ preserveStructure: boolean;
16
+ }, {
17
+ prompt: string;
18
+ feedback: string;
19
+ targetModel?: "general" | "gpt-4" | "claude" | "gemini" | undefined;
20
+ preserveStructure?: boolean | undefined;
21
+ }>;
22
+ export type RefinePromptInput = z.infer<typeof refinePromptSchema>;
23
+ export declare function refinePrompt(input: RefinePromptInput): Promise<{
24
+ refinedPrompt: string;
25
+ changes: string[];
26
+ metadata: {
27
+ originalWordCount: number;
28
+ refinedWordCount: number;
29
+ structurePreserved: boolean;
30
+ };
31
+ }>;
32
+ export default refinePrompt;
33
+ //# sourceMappingURL=refinePrompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refinePrompt.d.ts","sourceRoot":"","sources":["../../src/tools/refinePrompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAQ7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEnE,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC;IACpE,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE;QACR,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;CACH,CAAC,CAyED;AA6BD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Refine Prompt Tool
3
+ * Iteratively improves existing prompts based on feedback
4
+ */
5
+ import { z } from 'zod';
6
+ import { generateContent, isGeminiAvailable, logger } from '../utils/index.js';
7
+ export const refinePromptSchema = z.object({
8
+ prompt: z.string().min(1).describe('The current prompt to refine'),
9
+ feedback: z.string().min(1).describe('What should be improved or changed'),
10
+ preserveStructure: z.boolean().optional().default(true).describe('Whether to preserve the original structure'),
11
+ targetModel: z.enum(['gpt-4', 'claude', 'gemini', 'general'])
12
+ .optional()
13
+ .default('general')
14
+ .describe('Target AI model to optimize for'),
15
+ });
16
+ export async function refinePrompt(input) {
17
+ const { prompt, feedback, preserveStructure = true, targetModel } = input;
18
+ logger.info('Refining prompt', {
19
+ promptLength: prompt.length,
20
+ feedbackLength: feedback.length,
21
+ preserveStructure,
22
+ targetModel
23
+ });
24
+ const refinementRequest = `You are a prompt engineering expert. Refine the following prompt based on the given feedback.
25
+
26
+ ## Original Prompt
27
+ ${prompt}
28
+
29
+ ## Feedback / Improvement Request
30
+ ${feedback}
31
+
32
+ ## Instructions
33
+ ${preserveStructure ? '- Preserve the overall structure and format of the original prompt' : '- Feel free to restructure the prompt if it improves clarity'}
34
+ - Apply the feedback to improve the prompt
35
+ - Maintain clarity and actionability
36
+ - Keep the core intent intact
37
+ ${targetModel !== 'general' ? `- Optimize for ${targetModel}` : ''}
38
+
39
+ ## Output Format
40
+ First, provide the refined prompt.
41
+ Then, list 2-4 specific changes you made in a "Changes:" section.
42
+
43
+ ---
44
+ REFINED PROMPT:`;
45
+ let refinedPrompt;
46
+ let changes = [];
47
+ if (isGeminiAvailable()) {
48
+ const response = await generateContent(refinementRequest);
49
+ // Parse response to extract prompt and changes
50
+ const changesMatch = response.match(/Changes?:?\s*([\s\S]*?)$/i);
51
+ if (changesMatch) {
52
+ refinedPrompt = response.slice(0, changesMatch.index).trim();
53
+ changes = changesMatch[1]
54
+ .split(/\n/)
55
+ .map(line => line.replace(/^[-*•]\s*/, '').trim())
56
+ .filter(line => line.length > 0);
57
+ }
58
+ else {
59
+ refinedPrompt = response.trim();
60
+ changes = ['Prompt refined based on feedback'];
61
+ }
62
+ }
63
+ else {
64
+ // Fallback: Apply basic transformations
65
+ refinedPrompt = applyBasicRefinements(prompt, feedback);
66
+ changes = ['Applied basic refinements (AI unavailable)'];
67
+ logger.warn('Using fallback refinement (Gemini unavailable)');
68
+ }
69
+ // Calculate metadata
70
+ const originalWordCount = prompt.split(/\s+/).length;
71
+ const refinedWordCount = refinedPrompt.split(/\s+/).length;
72
+ const originalHasStructure = /^#+\s|^\d+\.|^-\s|^\*\s/m.test(prompt);
73
+ const refinedHasStructure = /^#+\s|^\d+\.|^-\s|^\*\s/m.test(refinedPrompt);
74
+ const structurePreserved = !originalHasStructure || refinedHasStructure;
75
+ return {
76
+ refinedPrompt,
77
+ changes,
78
+ metadata: {
79
+ originalWordCount,
80
+ refinedWordCount,
81
+ structurePreserved,
82
+ },
83
+ };
84
+ }
85
+ function applyBasicRefinements(prompt, feedback) {
86
+ let refined = prompt;
87
+ const feedbackLower = feedback.toLowerCase();
88
+ // Basic transformations based on common feedback
89
+ if (feedbackLower.includes('more specific') || feedbackLower.includes('more detail')) {
90
+ refined += '\n\n## Additional Requirements\n- Provide specific, detailed information\n- Include concrete examples where applicable';
91
+ }
92
+ if (feedbackLower.includes('shorter') || feedbackLower.includes('concise')) {
93
+ // Try to simplify
94
+ refined = refined.replace(/\n\n+/g, '\n\n');
95
+ }
96
+ if (feedbackLower.includes('structure') || feedbackLower.includes('organize')) {
97
+ if (!/^#+\s/m.test(refined)) {
98
+ refined = '## Task\n' + refined + '\n\n## Output\nProvide a well-structured response.';
99
+ }
100
+ }
101
+ if (feedbackLower.includes('example')) {
102
+ refined += '\n\n## Example\nProvide a relevant example in your response.';
103
+ }
104
+ return refined;
105
+ }
106
+ export default refinePrompt;
107
+ //# sourceMappingURL=refinePrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refinePrompt.js","sourceRoot":"","sources":["../../src/tools/refinePrompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Gemini API client for prompt generation
3
+ *
4
+ * Optimized for:
5
+ * - Low latency with request caching
6
+ * - Graceful degradation with fallbacks
7
+ * - Contextual awareness for prompt refinement
8
+ */
9
+ /**
10
+ * Initialize the Gemini client
11
+ */
12
+ export declare function initializeGemini(apiKey?: string): void;
13
+ /**
14
+ * Check if Gemini is available
15
+ */
16
+ export declare function isGeminiAvailable(): boolean;
17
+ /**
18
+ * Get performance statistics
19
+ */
20
+ export declare function getStats(): {
21
+ totalRequests: number;
22
+ cacheHits: number;
23
+ avgLatencyMs: number;
24
+ };
25
+ /**
26
+ * Generate content using Gemini
27
+ *
28
+ * Features:
29
+ * - Request caching for repeated similar prompts
30
+ * - Performance tracking
31
+ * - Detailed error context
32
+ */
33
+ export declare function generateContent(userPrompt: string, systemInstruction?: string, options?: {
34
+ skipCache?: boolean;
35
+ temperature?: number;
36
+ }): Promise<string>;
37
+ /**
38
+ * Analyze a prompt for quality metrics
39
+ */
40
+ export declare function analyzePromptQuality(prompt: string): Promise<{
41
+ scores: {
42
+ clarity: number;
43
+ specificity: number;
44
+ actionability: number;
45
+ completeness: number;
46
+ };
47
+ suggestions: string[];
48
+ warnings: string[];
49
+ }>;
50
+ declare const _default: {
51
+ initializeGemini: typeof initializeGemini;
52
+ isGeminiAvailable: typeof isGeminiAvailable;
53
+ generateContent: typeof generateContent;
54
+ analyzePromptQuality: typeof analyzePromptQuality;
55
+ };
56
+ export default _default;
57
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/utils/gemini.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAgBtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAqCD;;GAEG;AACH,wBAAgB,QAAQ,IAAI;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAM7F;AA0BD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACtD,OAAO,CAAC,MAAM,CAAC,CA6DjB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAClE,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC,CA0CD;;;;;;;AA0CD,wBAKE"}
@@ -0,0 +1,254 @@
1
+ /**
2
+ * Gemini API client for prompt generation
3
+ *
4
+ * Optimized for:
5
+ * - Low latency with request caching
6
+ * - Graceful degradation with fallbacks
7
+ * - Contextual awareness for prompt refinement
8
+ */
9
+ import { GoogleGenerativeAI } from '@google/generative-ai';
10
+ import { logger } from './logger.js';
11
+ let genAI = null;
12
+ let model = null;
13
+ const DEFAULT_MODEL = 'gemini-3-pro-preview';
14
+ // Simple LRU cache for repeated requests (improves latency for similar prompts)
15
+ const responseCache = new Map();
16
+ const CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes
17
+ const MAX_CACHE_SIZE = 50;
18
+ // Performance metrics
19
+ let totalRequests = 0;
20
+ let cacheHits = 0;
21
+ let totalLatencyMs = 0;
22
+ /**
23
+ * Initialize the Gemini client
24
+ */
25
+ export function initializeGemini(apiKey) {
26
+ const key = apiKey || process.env.GEMINI_API_KEY;
27
+ if (!key) {
28
+ logger.warn('GEMINI_API_KEY not set - AI features will be unavailable');
29
+ return;
30
+ }
31
+ genAI = new GoogleGenerativeAI(key);
32
+ model = genAI.getGenerativeModel({
33
+ model: DEFAULT_MODEL,
34
+ generationConfig: {
35
+ temperature: 1.0, // Required for Gemini 3
36
+ },
37
+ });
38
+ logger.info('Gemini client initialized', { model: DEFAULT_MODEL });
39
+ }
40
+ /**
41
+ * Check if Gemini is available
42
+ */
43
+ export function isGeminiAvailable() {
44
+ return model !== null;
45
+ }
46
+ /**
47
+ * Get cache key for a request
48
+ */
49
+ function getCacheKey(prompt, systemInstruction) {
50
+ return `${prompt.slice(0, 100)}:${systemInstruction?.slice(0, 50) || 'default'}`;
51
+ }
52
+ /**
53
+ * Check and return cached response if valid
54
+ */
55
+ function getCachedResponse(key) {
56
+ const cached = responseCache.get(key);
57
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) {
58
+ cacheHits++;
59
+ logger.debug('Cache hit', { key: key.slice(0, 30) });
60
+ return cached.response;
61
+ }
62
+ if (cached) {
63
+ responseCache.delete(key); // Expired
64
+ }
65
+ return null;
66
+ }
67
+ /**
68
+ * Store response in cache
69
+ */
70
+ function setCachedResponse(key, response) {
71
+ // Evict oldest if at capacity
72
+ if (responseCache.size >= MAX_CACHE_SIZE) {
73
+ const oldestKey = responseCache.keys().next().value;
74
+ if (oldestKey)
75
+ responseCache.delete(oldestKey);
76
+ }
77
+ responseCache.set(key, { response, timestamp: Date.now() });
78
+ }
79
+ /**
80
+ * Get performance statistics
81
+ */
82
+ export function getStats() {
83
+ return {
84
+ totalRequests,
85
+ cacheHits,
86
+ avgLatencyMs: totalRequests > 0 ? Math.round(totalLatencyMs / totalRequests) : 0,
87
+ };
88
+ }
89
+ /**
90
+ * System instruction for prompt generation
91
+ */
92
+ const SYSTEM_INSTRUCTION = `You are PromptArchitect, an expert prompt engineer. Your role is to transform user ideas into well-structured, effective prompts for AI models.
93
+
94
+ ## Core Principles
95
+
96
+ 1. **Clarity**: Write clear, unambiguous instructions
97
+ 2. **Structure**: Use logical organization with headers, bullets, and sections
98
+ 3. **Specificity**: Include concrete details, constraints, and examples
99
+ 4. **Context**: Provide necessary background information
100
+ 5. **Output Format**: Specify exactly how the response should be formatted
101
+
102
+ ## Output Format
103
+
104
+ Always structure your generated prompts with:
105
+ - A clear objective statement
106
+ - Relevant context and constraints
107
+ - Step-by-step instructions when applicable
108
+ - Expected output format specification
109
+ - Edge cases or special considerations
110
+
111
+ Generate prompts that are immediately usable with any major AI model (GPT-4, Claude, Gemini).`;
112
+ /**
113
+ * Generate content using Gemini
114
+ *
115
+ * Features:
116
+ * - Request caching for repeated similar prompts
117
+ * - Performance tracking
118
+ * - Detailed error context
119
+ */
120
+ export async function generateContent(userPrompt, systemInstruction, options) {
121
+ if (!model) {
122
+ throw new Error('Gemini client not initialized. Set GEMINI_API_KEY environment variable.');
123
+ }
124
+ totalRequests++;
125
+ const startTime = Date.now();
126
+ const fullSystemInstruction = systemInstruction || SYSTEM_INSTRUCTION;
127
+ // Check cache first (unless explicitly skipped)
128
+ if (!options?.skipCache) {
129
+ const cacheKey = getCacheKey(userPrompt, systemInstruction);
130
+ const cached = getCachedResponse(cacheKey);
131
+ if (cached) {
132
+ totalLatencyMs += Date.now() - startTime;
133
+ return cached;
134
+ }
135
+ }
136
+ try {
137
+ logger.debug('Generating content', { promptLength: userPrompt.length });
138
+ const result = await model.generateContent({
139
+ contents: [{ role: 'user', parts: [{ text: userPrompt }] }],
140
+ systemInstruction: { role: 'model', parts: [{ text: fullSystemInstruction }] },
141
+ generationConfig: {
142
+ temperature: options?.temperature ?? 0.7,
143
+ topP: 0.95,
144
+ topK: 40,
145
+ maxOutputTokens: 8192,
146
+ },
147
+ });
148
+ const response = result.response;
149
+ const text = response.text();
150
+ const latency = Date.now() - startTime;
151
+ totalLatencyMs += latency;
152
+ // Cache the response
153
+ if (!options?.skipCache) {
154
+ const cacheKey = getCacheKey(userPrompt, systemInstruction);
155
+ setCachedResponse(cacheKey, text);
156
+ }
157
+ logger.debug('Content generated', { responseLength: text.length, latencyMs: latency });
158
+ return text;
159
+ }
160
+ catch (error) {
161
+ const latency = Date.now() - startTime;
162
+ totalLatencyMs += latency;
163
+ // Provide actionable error context
164
+ const errorMessage = error instanceof Error ? error.message : String(error);
165
+ logger.error('Gemini generation failed', {
166
+ error: errorMessage,
167
+ promptLength: userPrompt.length,
168
+ latencyMs: latency,
169
+ });
170
+ // Wrap with more context for the user
171
+ throw new Error(`AI generation failed after ${latency}ms: ${errorMessage}. Try again or simplify your prompt.`);
172
+ }
173
+ }
174
+ /**
175
+ * Analyze a prompt for quality metrics
176
+ */
177
+ export async function analyzePromptQuality(prompt) {
178
+ if (!model) {
179
+ // Return rule-based analysis if Gemini not available
180
+ return ruleBasedAnalysis(prompt);
181
+ }
182
+ const analysisPrompt = `Analyze the following prompt for quality and provide:
183
+ 1. Scores (0-10) for: clarity, specificity, actionability, completeness
184
+ 2. 2-3 specific suggestions for improvement
185
+ 3. Any warnings about potential issues
186
+
187
+ Respond in JSON format:
188
+ {
189
+ "scores": { "clarity": X, "specificity": X, "actionability": X, "completeness": X },
190
+ "suggestions": ["suggestion1", "suggestion2"],
191
+ "warnings": ["warning1"] // or empty array
192
+ }
193
+
194
+ PROMPT TO ANALYZE:
195
+ ${prompt}`;
196
+ try {
197
+ const result = await model.generateContent({
198
+ contents: [{ role: 'user', parts: [{ text: analysisPrompt }] }],
199
+ generationConfig: {
200
+ temperature: 0.3,
201
+ maxOutputTokens: 1024,
202
+ },
203
+ });
204
+ const text = result.response.text();
205
+ // Extract JSON from response
206
+ const jsonMatch = text.match(/\{[\s\S]*\}/);
207
+ if (jsonMatch) {
208
+ return JSON.parse(jsonMatch[0]);
209
+ }
210
+ return ruleBasedAnalysis(prompt);
211
+ }
212
+ catch (error) {
213
+ logger.warn('LLM analysis failed, using rule-based', { error: String(error) });
214
+ return ruleBasedAnalysis(prompt);
215
+ }
216
+ }
217
+ /**
218
+ * Rule-based prompt analysis fallback
219
+ */
220
+ function ruleBasedAnalysis(prompt) {
221
+ const wordCount = prompt.split(/\s+/).length;
222
+ const hasStructure = /^#+\s|^\d+\.|^-\s|^\*\s/m.test(prompt);
223
+ const hasExamples = /example|e\.g\.|for instance|such as/i.test(prompt);
224
+ const hasConstraints = /must|should|cannot|don't|avoid|ensure/i.test(prompt);
225
+ const hasOutputFormat = /output|format|respond|return|provide/i.test(prompt);
226
+ const clarity = Math.min(10, 5 + (hasStructure ? 2 : 0) + (wordCount > 20 ? 2 : 0) + (wordCount < 500 ? 1 : 0));
227
+ const specificity = Math.min(10, 4 + (hasExamples ? 3 : 0) + (hasConstraints ? 2 : 0) + (wordCount > 50 ? 1 : 0));
228
+ const actionability = Math.min(10, 5 + (hasConstraints ? 2 : 0) + (hasOutputFormat ? 2 : 0) + (hasStructure ? 1 : 0));
229
+ const completeness = Math.min(10, 3 + (hasStructure ? 2 : 0) + (hasExamples ? 2 : 0) + (hasOutputFormat ? 2 : 0) + (wordCount > 100 ? 1 : 0));
230
+ const suggestions = [];
231
+ const warnings = [];
232
+ if (!hasStructure)
233
+ suggestions.push('Add structure using headers, bullets, or numbered lists');
234
+ if (!hasExamples)
235
+ suggestions.push('Include concrete examples to clarify expectations');
236
+ if (!hasOutputFormat)
237
+ suggestions.push('Specify the desired output format');
238
+ if (wordCount < 20)
239
+ warnings.push('Prompt may be too brief - consider adding more context');
240
+ if (wordCount > 1000)
241
+ warnings.push('Prompt is quite long - consider breaking into sections');
242
+ return {
243
+ scores: { clarity, specificity, actionability, completeness },
244
+ suggestions: suggestions.slice(0, 3),
245
+ warnings,
246
+ };
247
+ }
248
+ export default {
249
+ initializeGemini,
250
+ isGeminiAvailable,
251
+ generateContent,
252
+ analyzePromptQuality,
253
+ };
254
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/utils/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { logger, setLogLevel, type LogLevel } from './logger.js';
2
+ export { initializeGemini, isGeminiAvailable, generateContent, analyzePromptQuality, getStats, } from './gemini.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,QAAQ,GACT,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { logger, setLogLevel } from './logger.js';
2
+ export { initializeGemini, isGeminiAvailable, generateContent, analyzePromptQuality, getStats, } from './gemini.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,QAAQ,GACT,MAAM,aAAa,CAAC"}