mycontext-cli 2.0.38 → 3.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 (50) hide show
  1. package/README.md +53 -266
  2. package/dist/cli.js +15 -202
  3. package/dist/cli.js.map +1 -1
  4. package/dist/clients/XAIClient.d.ts.map +1 -1
  5. package/dist/clients/XAIClient.js +6 -2
  6. package/dist/clients/XAIClient.js.map +1 -1
  7. package/dist/commands/analyze-screenshot.d.ts +8 -0
  8. package/dist/commands/analyze-screenshot.d.ts.map +1 -0
  9. package/dist/commands/analyze-screenshot.js +101 -0
  10. package/dist/commands/analyze-screenshot.js.map +1 -0
  11. package/dist/commands/analyze.d.ts +5 -0
  12. package/dist/commands/analyze.d.ts.map +1 -1
  13. package/dist/commands/analyze.js +59 -0
  14. package/dist/commands/analyze.js.map +1 -1
  15. package/dist/commands/generate-actions.d.ts +23 -0
  16. package/dist/commands/generate-actions.d.ts.map +1 -0
  17. package/dist/commands/generate-actions.js +342 -0
  18. package/dist/commands/generate-actions.js.map +1 -0
  19. package/dist/commands/generate-components-manifest.d.ts +25 -0
  20. package/dist/commands/generate-components-manifest.d.ts.map +1 -0
  21. package/dist/commands/generate-components-manifest.js +288 -0
  22. package/dist/commands/generate-components-manifest.js.map +1 -0
  23. package/dist/commands/generate-screens-list.d.ts +23 -0
  24. package/dist/commands/generate-screens-list.d.ts.map +1 -0
  25. package/dist/commands/generate-screens-list.js +282 -0
  26. package/dist/commands/generate-screens-list.js.map +1 -0
  27. package/dist/commands/generate.d.ts.map +1 -1
  28. package/dist/commands/generate.js +5 -1
  29. package/dist/commands/generate.js.map +1 -1
  30. package/dist/commands/init.d.ts.map +1 -1
  31. package/dist/commands/init.js +26 -70
  32. package/dist/commands/init.js.map +1 -1
  33. package/dist/package.json +4 -2
  34. package/dist/services/gemini-vision.d.ts +57 -0
  35. package/dist/services/gemini-vision.d.ts.map +1 -0
  36. package/dist/services/gemini-vision.js +282 -0
  37. package/dist/services/gemini-vision.js.map +1 -0
  38. package/dist/utils/geminiClient.d.ts +21 -24
  39. package/dist/utils/geminiClient.d.ts.map +1 -1
  40. package/dist/utils/geminiClient.js +211 -162
  41. package/dist/utils/geminiClient.js.map +1 -1
  42. package/dist/utils/hybridAIClient.d.ts +1 -1
  43. package/dist/utils/hybridAIClient.d.ts.map +1 -1
  44. package/dist/utils/hybridAIClient.js +40 -23
  45. package/dist/utils/hybridAIClient.js.map +1 -1
  46. package/dist/utils/visionUtils.d.ts +19 -0
  47. package/dist/utils/visionUtils.d.ts.map +1 -0
  48. package/dist/utils/visionUtils.js +86 -0
  49. package/dist/utils/visionUtils.js.map +1 -0
  50. package/package.json +4 -2
@@ -11,6 +11,7 @@ export interface GeminiGenerationConfig {
11
11
  }
12
12
  export interface GeminiResponse {
13
13
  content: string;
14
+ text?: string;
14
15
  model: string;
15
16
  finishReason?: string;
16
17
  usage?: {
@@ -29,17 +30,21 @@ export interface GeminiVisualResponse {
29
30
  };
30
31
  }
31
32
  /**
32
- * Gemini API Client with nanobanana support for visual generation
33
- * Supports both text generation and HTML/screenshot generation
33
+ * Gemini API Client using official Google Generative AI SDK
34
+ * Supports text generation, multimodal interaction, and visual generation
34
35
  */
35
36
  export declare class GeminiClient {
36
37
  private apiKey?;
37
- private baseUrl;
38
- private client;
38
+ private genAI?;
39
39
  private model;
40
+ private readonly MODELS;
40
41
  constructor();
41
42
  /**
42
- * Get Gemini API key from environment (lazy loaded)
43
+ * Initialize SDK client
44
+ */
45
+ private initializeClient;
46
+ /**
47
+ * Get Gemini API key from environment
43
48
  */
44
49
  private getApiKey;
45
50
  /**
@@ -47,12 +52,15 @@ export declare class GeminiClient {
47
52
  */
48
53
  hasApiKey(): boolean;
49
54
  /**
50
- * Generate text completion using Gemini
55
+ * Generate text completion using Gemini with fallback
56
+ */
57
+ generateText(input: GeminiMessage[] | string, config?: GeminiGenerationConfig): Promise<GeminiResponse>;
58
+ /**
59
+ * Convert simplified messages to SDK Content format
51
60
  */
52
- generateText(messages: GeminiMessage[], config?: GeminiGenerationConfig): Promise<GeminiResponse>;
61
+ private convertMessagesToContent;
53
62
  /**
54
63
  * Generate visual screen (HTML + optional screenshot) using Gemini + nanobanana
55
- * This uses Gemini's multimodal capabilities to generate HTML
56
64
  */
57
65
  generateVisualScreen(prompt: string, context?: {
58
66
  prd?: string;
@@ -62,31 +70,20 @@ export declare class GeminiClient {
62
70
  }, config?: GeminiGenerationConfig & {
63
71
  includeScreenshot?: boolean;
64
72
  }): Promise<GeminiVisualResponse>;
65
- /**
66
- * Build comprehensive prompt for visual screen generation
67
- */
68
73
  private buildVisualPrompt;
69
- /**
70
- * Extract HTML from Gemini response (handles markdown code blocks)
71
- */
72
74
  private extractHtml;
73
- /**
74
- * Generate screenshot from HTML using nanobanana-style approach
75
- * For now, this is a placeholder - actual implementation would use puppeteer/playwright
76
- * or a headless browser API
77
- */
78
75
  private generateScreenshot;
79
- /**
80
- * Convert messages to Gemini API format
81
- */
82
- private convertMessages;
83
76
  /**
84
77
  * Test Gemini API connection
85
78
  */
86
79
  testConnection(): Promise<boolean>;
87
80
  /**
88
- * Get available Gemini models
81
+ * Generate text from image input (multimodal)
89
82
  */
83
+ generateFromImage(prompt: string, imagePath: string, config?: GeminiGenerationConfig & {
84
+ systemPrompt?: string;
85
+ }): Promise<GeminiResponse>;
90
86
  listModels(): Promise<string[]>;
87
+ private getMimeType;
91
88
  }
92
89
  //# sourceMappingURL=geminiClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/utils/geminiClient.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAS;;IAetB;;OAEG;IACH,OAAO,CAAC,SAAS;IAoBjB;;OAEG;IACH,SAAS,IAAI,OAAO;IAYpB;;OAEG;IACG,YAAY,CAChB,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC,cAAc,CAAC;IA+C1B;;;OAGG;IACG,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,GAAG,CAAC;KAClB,EACD,MAAM,CAAC,EAAE,sBAAsB,GAAG;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAChE,OAAO,CAAC,oBAAoB,CAAC;IA6ChC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8CzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;;;OAIG;YACW,kBAAkB;IAmBhC;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAexC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAWtC"}
1
+ {"version":3,"file":"geminiClient.d.ts","sourceRoot":"","sources":["../../src/utils/geminiClient.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,KAAK,CAAC,CAAqB;IACnC,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAMrB;;IAOF;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,SAAS;IAgBjB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,EAC/B,MAAM,CAAC,EAAE,sBAAsB,GAC9B,OAAO,CAAC,cAAc,CAAC;IAiF1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAOhC;;OAEG;IACG,oBAAoB,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,GAAG,CAAC;KAClB,EACD,MAAM,CAAC,EAAE,sBAAsB,GAAG;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAChE,OAAO,CAAC,oBAAoB,CAAC;IAoChC,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,WAAW;YAWL,kBAAkB;IAKhC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAUxC;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,sBAAsB,GAAG;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAC1D,OAAO,CAAC,cAAc,CAAC;IAmDpB,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,OAAO,CAAC,WAAW;CAYpB"}
@@ -1,29 +1,73 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
5
35
  Object.defineProperty(exports, "__esModule", { value: true });
6
36
  exports.GeminiClient = void 0;
37
+ const generative_ai_1 = require("@google/generative-ai");
7
38
  const logger_1 = require("./logger");
8
- const axios_1 = __importDefault(require("axios"));
9
39
  /**
10
- * Gemini API Client with nanobanana support for visual generation
11
- * Supports both text generation and HTML/screenshot generation
40
+ * Gemini API Client using official Google Generative AI SDK
41
+ * Supports text generation, multimodal interaction, and visual generation
12
42
  */
13
43
  class GeminiClient {
14
44
  constructor() {
15
- this.baseUrl = "https://generativelanguage.googleapis.com/v1beta";
16
- this.model = "gemini-2.0-flash-exp"; // Latest Gemini model
17
- this.client = axios_1.default.create({
18
- baseURL: this.baseUrl,
19
- timeout: 120000, // 2 minutes for complex generations
20
- headers: {
21
- "Content-Type": "application/json",
22
- },
23
- });
45
+ this.MODELS = [
46
+ "gemini-1.5-flash",
47
+ "gemini-2.0-flash",
48
+ "gemini-1.5-pro",
49
+ "gemini-2.0-flash-exp",
50
+ "gemini-1.5-flash-latest"
51
+ ];
52
+ this.model = this.MODELS[0] || "gemini-1.5-flash";
53
+ this.initializeClient();
54
+ }
55
+ /**
56
+ * Initialize SDK client
57
+ */
58
+ initializeClient() {
59
+ try {
60
+ const key = this.getApiKey();
61
+ if (key) {
62
+ this.genAI = new generative_ai_1.GoogleGenerativeAI(key);
63
+ }
64
+ }
65
+ catch (e) {
66
+ // Ignore if key missing, will ensure check availability later
67
+ }
24
68
  }
25
69
  /**
26
- * Get Gemini API key from environment (lazy loaded)
70
+ * Get Gemini API key from environment
27
71
  */
28
72
  getApiKey() {
29
73
  if (this.apiKey) {
@@ -32,90 +76,108 @@ class GeminiClient {
32
76
  const key = process.env.GEMINI_API_KEY ||
33
77
  process.env.GOOGLE_API_KEY ||
34
78
  process.env.MYCONTEXT_GEMINI_API_KEY;
35
- if (!key) {
36
- throw new Error("Gemini API key not found. Set GEMINI_API_KEY in .mycontext/.env");
79
+ if (key) {
80
+ this.apiKey = key;
37
81
  }
38
- this.apiKey = key;
39
- return key;
82
+ return key || "";
40
83
  }
41
84
  /**
42
85
  * Check if Gemini client has a valid API key
43
86
  */
44
87
  hasApiKey() {
45
- try {
46
- const key = process.env.GEMINI_API_KEY ||
47
- process.env.GOOGLE_API_KEY ||
48
- process.env.MYCONTEXT_GEMINI_API_KEY;
49
- return !!key;
50
- }
51
- catch {
52
- return false;
53
- }
88
+ return !!this.getApiKey();
54
89
  }
55
90
  /**
56
- * Generate text completion using Gemini
91
+ * Generate text completion using Gemini with fallback
57
92
  */
58
- async generateText(messages, config) {
59
- try {
60
- logger_1.logger.debug("Gemini: Generating text completion");
61
- // Convert messages to Gemini format
62
- const contents = this.convertMessages(messages);
63
- const response = await this.client.post(`/models/${this.model}:generateContent?key=${this.apiKey}`, {
64
- contents,
65
- generationConfig: {
93
+ async generateText(input, config) {
94
+ if (!this.genAI) {
95
+ this.initializeClient();
96
+ if (!this.genAI)
97
+ throw new Error("Gemini API key not configured");
98
+ }
99
+ let lastError;
100
+ // Normalize input to array of messages
101
+ const messages = typeof input === "string" ? [{ role: "user", content: input }] : input;
102
+ // Extract system instruction if present
103
+ const systemMessage = messages.find(m => m.role === "system");
104
+ const systemInstruction = systemMessage ? systemMessage.content : undefined;
105
+ // Convert remaining messages to SDK Content format
106
+ const history = this.convertMessagesToContent(messages.filter(m => m.role !== "system"));
107
+ // Try models in order
108
+ for (const modelName of this.MODELS) {
109
+ try {
110
+ this.model = modelName;
111
+ // Check if model supports system instructions (Pro Vision didn't, but Flash/Pro 1.5+ do)
112
+ // We blindly try passing it. SDK/API handles 400 if unsupported usually.
113
+ const model = this.genAI.getGenerativeModel({
114
+ model: modelName,
115
+ systemInstruction: systemInstruction
116
+ });
117
+ logger_1.logger.debug(`Gemini: Generating with ${modelName}`);
118
+ const generationConfig = {
66
119
  temperature: config?.temperature ?? 0.7,
67
- maxOutputTokens: config?.maxTokens ?? 4000,
120
+ maxOutputTokens: config?.maxTokens ?? 8192,
68
121
  topP: config?.topP ?? 0.95,
69
122
  topK: config?.topK ?? 40,
70
123
  stopSequences: config?.stopSequences,
71
- },
72
- });
73
- const candidate = response.data.candidates?.[0];
74
- if (!candidate) {
75
- throw new Error("No response from Gemini");
124
+ };
125
+ // If history is empty (and we have no system prompt), we need at least one user message.
126
+ if (history.length === 0) {
127
+ throw new Error("No user content provided for generation");
128
+ }
129
+ const result = await model.generateContent({
130
+ contents: history,
131
+ generationConfig
132
+ });
133
+ const response = await result.response;
134
+ const text = response.text();
135
+ const usage = result.response.usageMetadata;
136
+ return {
137
+ content: text,
138
+ text: text, // Alias for backward compatibility
139
+ model: modelName,
140
+ finishReason: response.candidates?.[0]?.finishReason,
141
+ usage: usage ? {
142
+ promptTokens: usage.promptTokenCount,
143
+ completionTokens: usage.candidatesTokenCount,
144
+ totalTokens: usage.totalTokenCount
145
+ } : undefined
146
+ };
147
+ }
148
+ catch (error) {
149
+ lastError = error;
150
+ console.error(`⚠️ Gemini model ${modelName} failed: ${error.message}`);
151
+ if (process.env.DEBUG || process.env.VERBOSE) {
152
+ logger_1.logger.warn(`Gemini (${modelName}) failed: ${error.message}, trying next...`);
153
+ }
154
+ continue;
76
155
  }
77
- const content = candidate.content?.parts?.[0]?.text || "";
78
- const usage = response.data.usageMetadata;
79
- return {
80
- content,
81
- model: this.model,
82
- finishReason: candidate.finishReason,
83
- usage: usage
84
- ? {
85
- promptTokens: usage.promptTokenCount || 0,
86
- completionTokens: usage.candidatesTokenCount || 0,
87
- totalTokens: usage.totalTokenCount || 0,
88
- }
89
- : undefined,
90
- };
91
- }
92
- catch (error) {
93
- logger_1.logger.error("Gemini generation failed:", error.message);
94
- throw new Error(`Gemini generation failed: ${error.message}`);
95
156
  }
157
+ logger_1.logger.error("All Gemini models failed:", lastError?.message);
158
+ throw new Error(`Gemini generation failed: ${lastError?.message || "Unknown error"}`);
159
+ }
160
+ /**
161
+ * Convert simplified messages to SDK Content format
162
+ */
163
+ convertMessagesToContent(messages) {
164
+ return messages.map(msg => ({
165
+ role: msg.role === "assistant" ? "model" : "user",
166
+ parts: [{ text: msg.content }]
167
+ }));
96
168
  }
97
169
  /**
98
170
  * Generate visual screen (HTML + optional screenshot) using Gemini + nanobanana
99
- * This uses Gemini's multimodal capabilities to generate HTML
100
171
  */
101
172
  async generateVisualScreen(prompt, context, config) {
102
173
  try {
103
174
  logger_1.logger.debug("Gemini: Generating visual screen");
104
- // Build comprehensive prompt for HTML generation
105
175
  const systemPrompt = this.buildVisualPrompt(prompt, context);
106
176
  const response = await this.generateText([
107
- {
108
- role: "system",
109
- content: systemPrompt,
110
- },
111
- {
112
- role: "user",
113
- content: prompt,
114
- },
177
+ { role: "system", content: systemPrompt },
178
+ { role: "user", content: prompt },
115
179
  ], config);
116
- // Extract HTML from response
117
180
  const html = this.extractHtml(response.content);
118
- // Optionally generate screenshot using nanobanana-style rendering
119
181
  let screenshot;
120
182
  if (config?.includeScreenshot) {
121
183
  screenshot = await this.generateScreenshot(html);
@@ -135,105 +197,42 @@ class GeminiClient {
135
197
  throw new Error(`Visual screen generation failed: ${error.message}`);
136
198
  }
137
199
  }
138
- /**
139
- * Build comprehensive prompt for visual screen generation
140
- */
141
200
  buildVisualPrompt(userPrompt, context) {
142
201
  let prompt = `You are an expert UI/UX designer and frontend developer. Generate a complete, production-ready HTML page based on the following requirements.
143
-
144
- IMPORTANT INSTRUCTIONS:
145
- - Generate COMPLETE, VALID HTML with inline CSS
146
- - Use modern, responsive design principles
147
- - Include realistic content and data
148
- - Use semantic HTML5 elements
149
- - Make it mobile-first and accessible
150
- - Include all necessary meta tags and viewport settings
151
- - Use CSS Grid or Flexbox for layouts
152
- - Add smooth transitions and hover states
153
- - Ensure high contrast for readability
154
- - Output ONLY the HTML code, wrapped in \`\`\`html code blocks
155
-
202
+ IMPORTANT: Output ONLY valid HTML code within \`\`\`html blocks.
156
203
  `;
157
- if (context?.brand) {
158
- prompt += `\n## BRAND GUIDELINES:\n${context.brand}\n`;
159
- }
160
- if (context?.prd) {
161
- prompt += `\n## PROJECT CONTEXT:\n${context.prd}\n`;
162
- }
163
- if (context?.flows) {
164
- prompt += `\n## USER FLOWS:\n${context.flows}\n`;
165
- }
166
- if (context?.sampleData) {
167
- prompt += `\n## SAMPLE DATA (use this for realistic content):\n${JSON.stringify(context.sampleData, null, 2)}\n`;
168
- }
169
- prompt += `\n## USER REQUEST:\n${userPrompt}\n`;
204
+ if (context?.brand)
205
+ prompt += `\n## BRAND:\n${context.brand}\n`;
206
+ if (context?.prd)
207
+ prompt += `\n## CONTEXT:\n${context.prd}\n`;
208
+ if (context?.flows)
209
+ prompt += `\n## FLOWS:\n${context.flows}\n`;
210
+ if (context?.sampleData)
211
+ prompt += `\n## DATA:\n${JSON.stringify(context.sampleData, null, 2)}\n`;
212
+ prompt += `\n## REQUEST:\n${userPrompt}\n`;
170
213
  return prompt;
171
214
  }
172
- /**
173
- * Extract HTML from Gemini response (handles markdown code blocks)
174
- */
175
215
  extractHtml(content) {
176
- // Try to extract from code blocks first
177
- const htmlBlockMatch = content.match(/```html\n([\s\S]*?)\n```/);
178
- if (htmlBlockMatch && htmlBlockMatch[1]) {
179
- return htmlBlockMatch[1].trim();
180
- }
181
- // Try generic code blocks
182
- const codeBlockMatch = content.match(/```\n([\s\S]*?)\n```/);
183
- if (codeBlockMatch && codeBlockMatch[1]) {
184
- return codeBlockMatch[1].trim();
185
- }
186
- // If no code blocks, check if it's already HTML
187
- if (content.includes("<!DOCTYPE html>") || content.includes("<html")) {
216
+ const htmlBlock = content.match(/```html\n([\s\S]*?)\n```/);
217
+ if (htmlBlock?.[1])
218
+ return htmlBlock[1].trim();
219
+ const codeBlock = content.match(/```\n([\s\S]*?)\n```/);
220
+ if (codeBlock?.[1])
221
+ return codeBlock[1].trim();
222
+ if (content.includes("<!DOCTYPE html>") || content.includes("<html"))
188
223
  return content.trim();
189
- }
190
- // Last resort: return as-is and hope for the best
191
- logger_1.logger.warn("Could not extract HTML from response, using raw content");
192
224
  return content;
193
225
  }
194
- /**
195
- * Generate screenshot from HTML using nanobanana-style approach
196
- * For now, this is a placeholder - actual implementation would use puppeteer/playwright
197
- * or a headless browser API
198
- */
199
226
  async generateScreenshot(html) {
200
- // TODO: Implement actual screenshot generation
201
- // Options:
202
- // 1. Use Puppeteer/Playwright locally
203
- // 2. Use a screenshot API service
204
- // 3. Use Gemini's native screenshot capabilities (if available)
205
227
  logger_1.logger.debug("Screenshot generation not yet implemented");
206
- return ""; // Return empty string for now
207
- // Future implementation:
208
- // const browser = await puppeteer.launch();
209
- // const page = await browser.newPage();
210
- // await page.setContent(html);
211
- // const screenshot = await page.screenshot({ encoding: 'base64' });
212
- // await browser.close();
213
- // return screenshot;
214
- }
215
- /**
216
- * Convert messages to Gemini API format
217
- */
218
- convertMessages(messages) {
219
- return messages
220
- .filter((msg) => msg.role !== "system") // Gemini doesn't support system messages directly
221
- .map((msg) => ({
222
- role: msg.role === "assistant" ? "model" : "user",
223
- parts: [{ text: msg.content }],
224
- }));
228
+ return "";
225
229
  }
226
230
  /**
227
231
  * Test Gemini API connection
228
232
  */
229
233
  async testConnection() {
230
234
  try {
231
- await this.generateText([
232
- {
233
- role: "user",
234
- content: "Say 'Hello from Gemini' if you can read this.",
235
- },
236
- ]);
235
+ await this.generateText("Say 'Hello' if connected.");
237
236
  return true;
238
237
  }
239
238
  catch (error) {
@@ -242,16 +241,66 @@ IMPORTANT INSTRUCTIONS:
242
241
  }
243
242
  }
244
243
  /**
245
- * Get available Gemini models
244
+ * Generate text from image input (multimodal)
246
245
  */
247
- async listModels() {
246
+ async generateFromImage(prompt, imagePath, config) {
247
+ if (!this.genAI)
248
+ this.initializeClient();
249
+ if (!this.genAI)
250
+ throw new Error("Gemini API key not configured");
248
251
  try {
249
- const response = await this.client.get(`/models?key=${this.apiKey}`);
250
- return (response.data.models?.map((model) => model.name) || [this.model]);
252
+ logger_1.logger.debug(`Gemini: Generating from image: ${imagePath}`);
253
+ // Helper to encode image
254
+ // We need just the base64 data and mimeType, assuming VisionUtils provides that or path
255
+ // Note: VisionUtils usually returns a Part object correct for REST API.
256
+ // For SDK, we use inlineData.
257
+ // Let's assume we read file ourselves to be safe and dependent-less if possible.
258
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
259
+ const imageBuffer = await fs.promises.readFile(imagePath);
260
+ const mimeType = this.getMimeType(imagePath);
261
+ const imagePart = {
262
+ inlineData: {
263
+ data: imageBuffer.toString('base64'),
264
+ mimeType: mimeType
265
+ }
266
+ };
267
+ const systemInstruction = config?.systemPrompt;
268
+ // Try models
269
+ for (const modelName of this.MODELS) {
270
+ try {
271
+ const model = this.genAI.getGenerativeModel({ model: modelName, systemInstruction });
272
+ const result = await model.generateContent([prompt, imagePart]);
273
+ const response = await result.response;
274
+ return {
275
+ content: response.text(),
276
+ model: modelName,
277
+ finishReason: response.candidates?.[0]?.finishReason
278
+ };
279
+ }
280
+ catch (e) {
281
+ continue;
282
+ }
283
+ }
284
+ throw new Error("All vision models failed");
251
285
  }
252
286
  catch (error) {
253
- logger_1.logger.warn("Could not list Gemini models:", error);
254
- return [this.model];
287
+ logger_1.logger.error("Gemini vision generation failed:", error.message);
288
+ throw new Error(`Gemini vision generation failed: ${error.message}`);
289
+ }
290
+ }
291
+ async listModels() {
292
+ return this.MODELS;
293
+ }
294
+ getMimeType(filePath) {
295
+ const ext = filePath.toLowerCase().split('.').pop();
296
+ switch (ext) {
297
+ case 'png': return 'image/png';
298
+ case 'jpg':
299
+ case 'jpeg': return 'image/jpeg';
300
+ case 'webp': return 'image/webp';
301
+ case 'heic': return 'image/heic';
302
+ case 'heif': return 'image/heif';
303
+ default: return 'image/jpeg';
255
304
  }
256
305
  }
257
306
  }
@@ -1 +1 @@
1
- {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/utils/geminiClient.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAkC;AAClC,kDAA6C;AAoC7C;;;GAGG;AACH,MAAa,YAAY;IAMvB;QACE,IAAI,CAAC,OAAO,GAAG,kDAAkD,CAAC;QAClE,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,CAAC,sBAAsB;QAE3D,IAAI,CAAC,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,MAAM,EAAE,oCAAoC;YACrD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,cAAc;YAC1B,OAAO,CAAC,GAAG,CAAC,cAAc;YAC1B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAEvC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC;YACH,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,cAAc;gBAC1B,OAAO,CAAC,GAAG,CAAC,cAAc;gBAC1B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;YACvC,OAAO,CAAC,CAAC,GAAG,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,QAAyB,EACzB,MAA+B;QAE/B,IAAI,CAAC;YACH,eAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAEnD,oCAAoC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAEhD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CACrC,WAAW,IAAI,CAAC,KAAK,wBAAwB,IAAI,CAAC,MAAM,EAAE,EAC1D;gBACE,QAAQ;gBACR,gBAAgB,EAAE;oBAChB,WAAW,EAAE,MAAM,EAAE,WAAW,IAAI,GAAG;oBACvC,eAAe,EAAE,MAAM,EAAE,SAAS,IAAI,IAAI;oBAC1C,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI;oBAC1B,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE;oBACxB,aAAa,EAAE,MAAM,EAAE,aAAa;iBACrC;aACF,CACF,CAAC;YAEF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;YAE1C,OAAO;gBACL,OAAO;gBACP,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,KAAK,EAAE,KAAK;oBACV,CAAC,CAAC;wBACE,YAAY,EAAE,KAAK,CAAC,gBAAgB,IAAI,CAAC;wBACzC,gBAAgB,EAAE,KAAK,CAAC,oBAAoB,IAAI,CAAC;wBACjD,WAAW,EAAE,KAAK,CAAC,eAAe,IAAI,CAAC;qBACxC;oBACH,CAAC,CAAC,SAAS;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,oBAAoB,CACxB,MAAc,EACd,OAKC,EACD,MAAiE;QAEjE,IAAI,CAAC;YACH,eAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAEjD,iDAAiD;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAE7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CACtC;gBACE;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,YAAY;iBACtB;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,MAAM;iBAChB;aACF,EACD,MAAM,CACP,CAAC;YAEF,6BAA6B;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEhD,kEAAkE;YAClE,IAAI,UAA8B,CAAC;YACnC,IAAI,MAAM,EAAE,iBAAiB,EAAE,CAAC;gBAC9B,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;YAED,OAAO;gBACL,IAAI;gBACJ,UAAU;gBACV,QAAQ,EAAE;oBACR,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,MAAM,EAAE,MAAM;iBACf;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,eAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,UAAkB,EAClB,OAKC;QAED,IAAI,MAAM,GAAG;;;;;;;;;;;;;;CAchB,CAAC;QAEE,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,2BAA2B,OAAO,CAAC,KAAK,IAAI,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,EAAE,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,0BAA0B,OAAO,CAAC,GAAG,IAAI,CAAC;QACtD,CAAC;QAED,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,qBAAqB,OAAO,CAAC,KAAK,IAAI,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,MAAM,IAAI,uDAAuD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACnH,CAAC;QAED,MAAM,IAAI,uBAAuB,UAAU,IAAI,CAAC;QAEhD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,OAAe;QACjC,wCAAwC;QACxC,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACjE,IAAI,cAAc,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QAED,0BAA0B;QAC1B,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC7D,IAAI,cAAc,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QAED,gDAAgD;QAChD,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACrE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QACxB,CAAC;QAED,kDAAkD;QAClD,eAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAAC,IAAY;QAC3C,+CAA+C;QAC/C,WAAW;QACX,sCAAsC;QACtC,kCAAkC;QAClC,gEAAgE;QAEhE,eAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC,CAAC,8BAA8B;QAEzC,yBAAyB;QACzB,4CAA4C;QAC5C,wCAAwC;QACxC,+BAA+B;QAC/B,oEAAoE;QACpE,yBAAyB;QACzB,qBAAqB;IACvB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAyB;QAC/C,OAAO,QAAQ;aACZ,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,kDAAkD;aACzF,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,IAAI,EAAE,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;YACjD,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;SAC/B,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC;gBACtB;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,+CAA+C;iBACzD;aACF,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO,CACL,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CACtE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,eAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAvTD,oCAuTC"}
1
+ {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/utils/geminiClient.ts"],"names":[],"mappings":"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"}
@@ -71,7 +71,7 @@ export declare class HybridAIClient {
71
71
  /**
72
72
  * Generate generic text (used for PRD, types, brand, etc.)
73
73
  */
74
- generateText(prompt: string, options?: any): Promise<{
74
+ generateText(prompt: string, options?: any, attemptedProviders?: Set<string>): Promise<{
75
75
  text: string;
76
76
  provider: string;
77
77
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"hybridAIClient.d.ts","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hybridAIClient.d.ts","sourceRoot":"","sources":["../../src/utils/hybridAIClient.ts"],"names":[],"mappings":"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"}