mycontext-cli 2.0.37 → 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 +213 -159
  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,15 +30,19 @@ 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
- private apiKey;
37
- private baseUrl;
38
- private client;
37
+ private apiKey?;
38
+ private genAI?;
39
39
  private model;
40
+ private readonly MODELS;
40
41
  constructor();
42
+ /**
43
+ * Initialize SDK client
44
+ */
45
+ private initializeClient;
41
46
  /**
42
47
  * Get Gemini API key from environment
43
48
  */
@@ -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,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAS;;IAgBtB;;OAEG;IACH,OAAO,CAAC,SAAS;IAejB;;OAEG;IACH,SAAS,IAAI,OAAO;IASpB;;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,116 +1,183 @@
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.apiKey = this.getApiKey();
16
- this.baseUrl = "https://generativelanguage.googleapis.com/v1beta";
17
- this.model = "gemini-2.0-flash-exp"; // Latest Gemini model
18
- this.client = axios_1.default.create({
19
- baseURL: this.baseUrl,
20
- timeout: 120000, // 2 minutes for complex generations
21
- headers: {
22
- "Content-Type": "application/json",
23
- },
24
- });
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
+ }
25
68
  }
26
69
  /**
27
70
  * Get Gemini API key from environment
28
71
  */
29
72
  getApiKey() {
73
+ if (this.apiKey) {
74
+ return this.apiKey;
75
+ }
30
76
  const key = process.env.GEMINI_API_KEY ||
31
77
  process.env.GOOGLE_API_KEY ||
32
78
  process.env.MYCONTEXT_GEMINI_API_KEY;
33
- if (!key) {
34
- throw new Error("Gemini API key not found. Set GEMINI_API_KEY in .mycontext/.env");
79
+ if (key) {
80
+ this.apiKey = key;
35
81
  }
36
- return key;
82
+ return key || "";
37
83
  }
38
84
  /**
39
85
  * Check if Gemini client has a valid API key
40
86
  */
41
87
  hasApiKey() {
42
- try {
43
- this.getApiKey();
44
- return true;
45
- }
46
- catch {
47
- return false;
48
- }
88
+ return !!this.getApiKey();
49
89
  }
50
90
  /**
51
- * Generate text completion using Gemini
91
+ * Generate text completion using Gemini with fallback
52
92
  */
53
- async generateText(messages, config) {
54
- try {
55
- logger_1.logger.debug("Gemini: Generating text completion");
56
- // Convert messages to Gemini format
57
- const contents = this.convertMessages(messages);
58
- const response = await this.client.post(`/models/${this.model}:generateContent?key=${this.apiKey}`, {
59
- contents,
60
- 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 = {
61
119
  temperature: config?.temperature ?? 0.7,
62
- maxOutputTokens: config?.maxTokens ?? 4000,
120
+ maxOutputTokens: config?.maxTokens ?? 8192,
63
121
  topP: config?.topP ?? 0.95,
64
122
  topK: config?.topK ?? 40,
65
123
  stopSequences: config?.stopSequences,
66
- },
67
- });
68
- const candidate = response.data.candidates?.[0];
69
- if (!candidate) {
70
- 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;
71
155
  }
72
- const content = candidate.content?.parts?.[0]?.text || "";
73
- const usage = response.data.usageMetadata;
74
- return {
75
- content,
76
- model: this.model,
77
- finishReason: candidate.finishReason,
78
- usage: usage
79
- ? {
80
- promptTokens: usage.promptTokenCount || 0,
81
- completionTokens: usage.candidatesTokenCount || 0,
82
- totalTokens: usage.totalTokenCount || 0,
83
- }
84
- : undefined,
85
- };
86
- }
87
- catch (error) {
88
- logger_1.logger.error("Gemini generation failed:", error.message);
89
- throw new Error(`Gemini generation failed: ${error.message}`);
90
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
+ }));
91
168
  }
92
169
  /**
93
170
  * Generate visual screen (HTML + optional screenshot) using Gemini + nanobanana
94
- * This uses Gemini's multimodal capabilities to generate HTML
95
171
  */
96
172
  async generateVisualScreen(prompt, context, config) {
97
173
  try {
98
174
  logger_1.logger.debug("Gemini: Generating visual screen");
99
- // Build comprehensive prompt for HTML generation
100
175
  const systemPrompt = this.buildVisualPrompt(prompt, context);
101
176
  const response = await this.generateText([
102
- {
103
- role: "system",
104
- content: systemPrompt,
105
- },
106
- {
107
- role: "user",
108
- content: prompt,
109
- },
177
+ { role: "system", content: systemPrompt },
178
+ { role: "user", content: prompt },
110
179
  ], config);
111
- // Extract HTML from response
112
180
  const html = this.extractHtml(response.content);
113
- // Optionally generate screenshot using nanobanana-style rendering
114
181
  let screenshot;
115
182
  if (config?.includeScreenshot) {
116
183
  screenshot = await this.generateScreenshot(html);
@@ -130,105 +197,42 @@ class GeminiClient {
130
197
  throw new Error(`Visual screen generation failed: ${error.message}`);
131
198
  }
132
199
  }
133
- /**
134
- * Build comprehensive prompt for visual screen generation
135
- */
136
200
  buildVisualPrompt(userPrompt, context) {
137
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.
138
-
139
- IMPORTANT INSTRUCTIONS:
140
- - Generate COMPLETE, VALID HTML with inline CSS
141
- - Use modern, responsive design principles
142
- - Include realistic content and data
143
- - Use semantic HTML5 elements
144
- - Make it mobile-first and accessible
145
- - Include all necessary meta tags and viewport settings
146
- - Use CSS Grid or Flexbox for layouts
147
- - Add smooth transitions and hover states
148
- - Ensure high contrast for readability
149
- - Output ONLY the HTML code, wrapped in \`\`\`html code blocks
150
-
202
+ IMPORTANT: Output ONLY valid HTML code within \`\`\`html blocks.
151
203
  `;
152
- if (context?.brand) {
153
- prompt += `\n## BRAND GUIDELINES:\n${context.brand}\n`;
154
- }
155
- if (context?.prd) {
156
- prompt += `\n## PROJECT CONTEXT:\n${context.prd}\n`;
157
- }
158
- if (context?.flows) {
159
- prompt += `\n## USER FLOWS:\n${context.flows}\n`;
160
- }
161
- if (context?.sampleData) {
162
- prompt += `\n## SAMPLE DATA (use this for realistic content):\n${JSON.stringify(context.sampleData, null, 2)}\n`;
163
- }
164
- 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`;
165
213
  return prompt;
166
214
  }
167
- /**
168
- * Extract HTML from Gemini response (handles markdown code blocks)
169
- */
170
215
  extractHtml(content) {
171
- // Try to extract from code blocks first
172
- const htmlBlockMatch = content.match(/```html\n([\s\S]*?)\n```/);
173
- if (htmlBlockMatch && htmlBlockMatch[1]) {
174
- return htmlBlockMatch[1].trim();
175
- }
176
- // Try generic code blocks
177
- const codeBlockMatch = content.match(/```\n([\s\S]*?)\n```/);
178
- if (codeBlockMatch && codeBlockMatch[1]) {
179
- return codeBlockMatch[1].trim();
180
- }
181
- // If no code blocks, check if it's already HTML
182
- 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"))
183
223
  return content.trim();
184
- }
185
- // Last resort: return as-is and hope for the best
186
- logger_1.logger.warn("Could not extract HTML from response, using raw content");
187
224
  return content;
188
225
  }
189
- /**
190
- * Generate screenshot from HTML using nanobanana-style approach
191
- * For now, this is a placeholder - actual implementation would use puppeteer/playwright
192
- * or a headless browser API
193
- */
194
226
  async generateScreenshot(html) {
195
- // TODO: Implement actual screenshot generation
196
- // Options:
197
- // 1. Use Puppeteer/Playwright locally
198
- // 2. Use a screenshot API service
199
- // 3. Use Gemini's native screenshot capabilities (if available)
200
227
  logger_1.logger.debug("Screenshot generation not yet implemented");
201
- return ""; // Return empty string for now
202
- // Future implementation:
203
- // const browser = await puppeteer.launch();
204
- // const page = await browser.newPage();
205
- // await page.setContent(html);
206
- // const screenshot = await page.screenshot({ encoding: 'base64' });
207
- // await browser.close();
208
- // return screenshot;
209
- }
210
- /**
211
- * Convert messages to Gemini API format
212
- */
213
- convertMessages(messages) {
214
- return messages
215
- .filter((msg) => msg.role !== "system") // Gemini doesn't support system messages directly
216
- .map((msg) => ({
217
- role: msg.role === "assistant" ? "model" : "user",
218
- parts: [{ text: msg.content }],
219
- }));
228
+ return "";
220
229
  }
221
230
  /**
222
231
  * Test Gemini API connection
223
232
  */
224
233
  async testConnection() {
225
234
  try {
226
- await this.generateText([
227
- {
228
- role: "user",
229
- content: "Say 'Hello from Gemini' if you can read this.",
230
- },
231
- ]);
235
+ await this.generateText("Say 'Hello' if connected.");
232
236
  return true;
233
237
  }
234
238
  catch (error) {
@@ -237,16 +241,66 @@ IMPORTANT INSTRUCTIONS:
237
241
  }
238
242
  }
239
243
  /**
240
- * Get available Gemini models
244
+ * Generate text from image input (multimodal)
241
245
  */
242
- 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");
243
251
  try {
244
- const response = await this.client.get(`/models?key=${this.apiKey}`);
245
- 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");
246
285
  }
247
286
  catch (error) {
248
- logger_1.logger.warn("Could not list Gemini models:", error);
249
- 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';
250
304
  }
251
305
  }
252
306
  }
@@ -1 +1 @@
1
- {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/utils/geminiClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geminiClient.js","sourceRoot":"","sources":["../../src/utils/geminiClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA0E;AAC1E,qCAAkC;AAsClC;;;GAGG;AACH,MAAa,YAAY;IAavB;QARiB,WAAM,GAAG;YACxB,kBAAkB;YAClB,kBAAkB;YAClB,gBAAgB;YAChB,sBAAsB;YACtB,yBAAyB;SAC1B,CAAC;QAGA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,kBAAkB,CAAC;QAClD,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7B,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,KAAK,GAAG,IAAI,kCAAkB,CAAC,GAAG,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,8DAA8D;QAChE,CAAC;IACH,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,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;QACpB,CAAC;QACD,OAAO,GAAG,IAAI,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,KAA+B,EAC/B,MAA+B;QAE/B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,SAAc,CAAC;QAEnB,uCAAuC;QACvC,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAoB,CAAC,CAAC,CAAC,KAAK,CAAC;QAE3G,wCAAwC;QACxC,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAC9D,MAAM,iBAAiB,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5E,mDAAmD;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC;QAEzF,sBAAsB;QACtB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACvB,yFAAyF;gBACzF,yEAAyE;gBAEzE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC;oBACxC,KAAK,EAAE,SAAS;oBAChB,iBAAiB,EAAE,iBAAiB;iBACvC,CAAC,CAAC;gBAEH,eAAM,CAAC,KAAK,CAAC,2BAA2B,SAAS,EAAE,CAAC,CAAC;gBAErD,MAAM,gBAAgB,GAAG;oBACrB,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;iBACvC,CAAC;gBAEF,yFAAyF;gBACzF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBAChE,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC;oBACvC,QAAQ,EAAE,OAAO;oBACjB,gBAAgB;iBACnB,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAE5C,OAAO;oBACH,OAAO,EAAE,IAAI;oBACb,IAAI,EAAE,IAAI,EAAE,mCAAmC;oBAC/C,KAAK,EAAE,SAAS;oBAChB,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY;oBACpD,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;wBACX,YAAY,EAAE,KAAK,CAAC,gBAAgB;wBACpC,gBAAgB,EAAE,KAAK,CAAC,oBAAoB;wBAC5C,WAAW,EAAE,KAAK,CAAC,eAAe;qBACrC,CAAC,CAAC,CAAC,SAAS;iBAChB,CAAC;YAEJ,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,SAAS,GAAG,KAAK,CAAC;gBAClB,OAAO,CAAC,KAAK,CAAC,mBAAmB,SAAS,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAEvE,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;oBAC3C,eAAM,CAAC,IAAI,CAAC,WAAW,SAAS,aAAa,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;gBAClF,CAAC;gBACD,SAAS;YACX,CAAC;QACH,CAAC;QAED,eAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;IACxF,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,QAAyB;QACxD,OAAO,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxB,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;SACjC,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,oBAAoB,CACxB,MAAc,EACd,OAKC,EACD,MAAiE;QAEjE,IAAI,CAAC;YACH,eAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAEjD,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAE7D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CACtC;gBACE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;gBACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;aAClC,EACD,MAAM,CACP,CAAC;YAEF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEhD,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;IAEO,iBAAiB,CAAC,UAAkB,EAAE,OAAa;QACzD,IAAI,MAAM,GAAG;;CAEhB,CAAC;QACE,IAAI,OAAO,EAAE,KAAK;YAAE,MAAM,IAAI,gBAAgB,OAAO,CAAC,KAAK,IAAI,CAAC;QAChE,IAAI,OAAO,EAAE,GAAG;YAAE,MAAM,IAAI,kBAAkB,OAAO,CAAC,GAAG,IAAI,CAAC;QAC9D,IAAI,OAAO,EAAE,KAAK;YAAE,MAAM,IAAI,gBAAgB,OAAO,CAAC,KAAK,IAAI,CAAC;QAChE,IAAI,OAAO,EAAE,UAAU;YAAE,MAAM,IAAI,eAAe,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QAElG,MAAM,IAAI,kBAAkB,UAAU,IAAI,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC5D,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACxD,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/C,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5F,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAY;QAC3C,eAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,CAAC;YACrD,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,iBAAiB,CACrB,MAAc,EACd,SAAiB,EACjB,MAA2D;QAE3D,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAElE,IAAI,CAAC;YACH,eAAM,CAAC,KAAK,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;YAC5D,yBAAyB;YAEzB,wFAAwF;YACxF,yEAAyE;YACzE,+BAA+B;YAC/B,iFAAiF;YAEjF,MAAM,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAC;YAE9B,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAE7C,MAAM,SAAS,GAAG;gBACd,UAAU,EAAE;oBACR,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBACpC,QAAQ,EAAE,QAAQ;iBACrB;aACJ,CAAC;YAEF,MAAM,iBAAiB,GAAG,MAAM,EAAE,YAAY,CAAC;YAE/C,aAAa;YACb,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClC,IAAI,CAAC;oBACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBACrF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;oBAChE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;oBAEvC,OAAO;wBACH,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE;wBACxB,KAAK,EAAE,SAAS;wBAChB,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY;qBACvD,CAAC;gBACN,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,SAAS;gBACb,CAAC;YACL,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAE9C,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,KAAK,CAAC,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;QACpD,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,KAAK,CAAC,CAAC,OAAO,WAAW,CAAC;YAC/B,KAAK,KAAK,CAAC;YACX,KAAK,MAAM,CAAC,CAAC,OAAO,YAAY,CAAC;YACjC,KAAK,MAAM,CAAC,CAAC,OAAO,YAAY,CAAC;YACjC,KAAK,MAAM,CAAC,CAAC,OAAO,YAAY,CAAC;YACjC,KAAK,MAAM,CAAC,CAAC,OAAO,YAAY,CAAC;YACjC,OAAO,CAAC,CAAC,OAAO,YAAY,CAAC;QAC/B,CAAC;IACH,CAAC;CACF;AA/TD,oCA+TC"}
@@ -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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"}