@michelabboud/visual-forge-mcp 0.6.0 → 0.7.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 (68) hide show
  1. package/CHANGELOG.md +403 -2
  2. package/README.md +88 -5
  3. package/config/pricing.json +1 -1
  4. package/dist/parser/markdown-parser.d.ts +2 -0
  5. package/dist/parser/markdown-parser.d.ts.map +1 -1
  6. package/dist/parser/markdown-parser.js +23 -10
  7. package/dist/parser/markdown-parser.js.map +1 -1
  8. package/dist/placeholders/placeholder-manager.d.ts +8 -0
  9. package/dist/placeholders/placeholder-manager.d.ts.map +1 -1
  10. package/dist/placeholders/placeholder-manager.js +71 -18
  11. package/dist/placeholders/placeholder-manager.js.map +1 -1
  12. package/dist/providers/base-provider.d.ts +13 -0
  13. package/dist/providers/base-provider.d.ts.map +1 -1
  14. package/dist/providers/base-provider.js +263 -17
  15. package/dist/providers/base-provider.js.map +1 -1
  16. package/dist/providers/gemini/gemini-provider.d.ts.map +1 -1
  17. package/dist/providers/gemini/gemini-provider.js +3 -7
  18. package/dist/providers/gemini/gemini-provider.js.map +1 -1
  19. package/dist/providers/index.d.ts.map +1 -1
  20. package/dist/providers/index.js +5 -1
  21. package/dist/providers/index.js.map +1 -1
  22. package/dist/server/mcp-server.d.ts.map +1 -1
  23. package/dist/server/mcp-server.js +4 -1
  24. package/dist/server/mcp-server.js.map +1 -1
  25. package/dist/utils/filename-sanitizer.d.ts +85 -0
  26. package/dist/utils/filename-sanitizer.d.ts.map +1 -0
  27. package/dist/utils/filename-sanitizer.js +156 -0
  28. package/dist/utils/filename-sanitizer.js.map +1 -0
  29. package/dist/utils/image-metadata-manager.d.ts +151 -0
  30. package/dist/utils/image-metadata-manager.d.ts.map +1 -0
  31. package/dist/utils/image-metadata-manager.js +172 -0
  32. package/dist/utils/image-metadata-manager.js.map +1 -0
  33. package/dist/utils/index-manager.d.ts +38 -0
  34. package/dist/utils/index-manager.d.ts.map +1 -0
  35. package/dist/utils/index-manager.js +110 -0
  36. package/dist/utils/index-manager.js.map +1 -0
  37. package/dist/utils/index.d.ts +5 -0
  38. package/dist/utils/index.d.ts.map +1 -1
  39. package/dist/utils/index.js +5 -0
  40. package/dist/utils/index.js.map +1 -1
  41. package/dist/utils/multi-format-optimizer.d.ts +96 -0
  42. package/dist/utils/multi-format-optimizer.d.ts.map +1 -0
  43. package/dist/utils/multi-format-optimizer.js +423 -0
  44. package/dist/utils/multi-format-optimizer.js.map +1 -0
  45. package/dist/utils/pricing-checker.d.ts.map +1 -1
  46. package/dist/utils/pricing-checker.js +3 -5
  47. package/dist/utils/pricing-checker.js.map +1 -1
  48. package/dist/utils/prompt-enhancer.d.ts +48 -0
  49. package/dist/utils/prompt-enhancer.d.ts.map +1 -0
  50. package/dist/utils/prompt-enhancer.js +169 -0
  51. package/dist/utils/prompt-enhancer.js.map +1 -0
  52. package/dist/utils/quality-validator.d.ts +61 -0
  53. package/dist/utils/quality-validator.d.ts.map +1 -0
  54. package/dist/utils/quality-validator.js +386 -0
  55. package/dist/utils/quality-validator.js.map +1 -0
  56. package/dist/utils/source-metadata.d.ts +56 -0
  57. package/dist/utils/source-metadata.d.ts.map +1 -0
  58. package/dist/utils/source-metadata.js +122 -0
  59. package/dist/utils/source-metadata.js.map +1 -0
  60. package/dist/workflow/workflow-orchestrator.d.ts.map +1 -1
  61. package/dist/workflow/workflow-orchestrator.js +23 -0
  62. package/dist/workflow/workflow-orchestrator.js.map +1 -1
  63. package/dist/workflow/workflow-tools.d.ts.map +1 -1
  64. package/dist/workflow/workflow-tools.js +18 -0
  65. package/dist/workflow/workflow-tools.js.map +1 -1
  66. package/docs/guides/provider-setup.md +543 -0
  67. package/package.json +2 -2
  68. package/scripts/README.md +460 -0
@@ -17,10 +17,16 @@ export declare class PlaceholderManager {
17
17
  addPlaceholders(filePath: string, globalContext?: string): Promise<PlaceholderInfo[]>;
18
18
  /**
19
19
  * Replace placeholder with image link
20
+ *
21
+ * NEW FORMAT: Matches ```vf-placeholder ... ``` blocks
22
+ * Uses HTML img tag with width=80% for better display control
20
23
  */
21
24
  replacePlaceholder(filePath: string, imageId: string, imagePath: string, altText: string): Promise<void>;
22
25
  /**
23
26
  * Replace all placeholders in a file
27
+ *
28
+ * NEW FORMAT: Matches ```vf-placeholder ... ``` blocks
29
+ * Uses HTML img tag with width=80% for better display control
24
30
  */
25
31
  replaceAllPlaceholders(filePath: string, replacements: Map<string, {
26
32
  imagePath: string;
@@ -58,6 +64,8 @@ export declare class PlaceholderManager {
58
64
  private generatePrompt;
59
65
  /**
60
66
  * Insert placeholder into content
67
+ *
68
+ * NEW FORMAT: Creates unified ```vf-placeholder ... ``` block
61
69
  */
62
70
  private insertPlaceholder;
63
71
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder-manager.d.ts","sourceRoot":"","sources":["../../src/placeholders/placeholder-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAA6B,MAAM,qBAAqB,CAAC;AAIjF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAuB;IAC5C;;;;;;;;OAQG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,eAAe,EAAE,CAAC;IAyF7B;;OAEG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAwBhB;;OAEG;IACG,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC;IAsBhB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2CvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAqClB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAyEtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiCzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAIxB;AAKD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D"}
1
+ {"version":3,"file":"placeholder-manager.d.ts","sourceRoot":"","sources":["../../src/placeholders/placeholder-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAA6B,MAAM,qBAAqB,CAAC;AAIjF,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAuB;IAC5C;;;;;;;;OAQG;IACG,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,eAAe,EAAE,CAAC;IAyF7B;;;;;OAKG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IA4BhB;;;;;OAKG;IACG,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC;IAsBhB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2CvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAqClB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmCtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IA8HtB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAkCzB;;OAEG;IACH,OAAO,CAAC,eAAe;CAIxB;AAKD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D"}
@@ -87,32 +87,44 @@ export class PlaceholderManager {
87
87
  }
88
88
  /**
89
89
  * Replace placeholder with image link
90
+ *
91
+ * NEW FORMAT: Matches ```vf-placeholder ... ``` blocks
92
+ * Uses HTML img tag with width=80% for better display control
90
93
  */
91
94
  async replacePlaceholder(filePath, imageId, imagePath, altText) {
92
95
  logger.info(`Replacing placeholder ${imageId} in ${filePath}`);
93
96
  let content = await fs.readFile(filePath, 'utf-8');
94
- // Find and replace placeholder block
95
- // Match: **Visual Forge Place Holder** followed by ```image ... ```
96
- const placeholderRegex = /\*\*Visual Forge Place Holder\*\*\s*```image[\s\S]*?```/g;
97
+ // Match the new unified format: ```vf-placeholder ... ```
98
+ // Use more specific regex that matches the complete block structure
99
+ // Matches from opening ``` through closing ``` on its own line
100
+ const placeholderRegex = /```vf-placeholder\s+[\s\S]*?\n```/;
97
101
  let replacementCount = 0;
98
- content = content.replace(placeholderRegex, (_match) => {
99
- replacementCount++;
100
- // Replace with image markdown
101
- return `![${altText}](${imagePath})`;
102
- });
102
+ const match = content.match(placeholderRegex);
103
+ // Replace first occurrence (FIFO - first in, first out)
104
+ if (match) {
105
+ // Use HTML img tag with width=80% for better display control
106
+ const imageTag = `<img src="${imagePath}" alt="${altText}" width="80%">`;
107
+ content = content.replace(placeholderRegex, imageTag);
108
+ replacementCount = 1;
109
+ }
103
110
  await fs.writeFile(filePath, content, 'utf-8');
104
111
  logger.info(`Replaced placeholder in ${filePath} (${replacementCount} replacements)`);
105
112
  }
106
113
  /**
107
114
  * Replace all placeholders in a file
115
+ *
116
+ * NEW FORMAT: Matches ```vf-placeholder ... ``` blocks
117
+ * Uses HTML img tag with width=80% for better display control
108
118
  */
109
119
  async replaceAllPlaceholders(filePath, replacements) {
110
120
  logger.info(`Replacing all placeholders in ${filePath}`);
111
121
  let content = await fs.readFile(filePath, 'utf-8');
112
- // Replace each placeholder
122
+ // Replace each placeholder (FIFO order)
113
123
  for (const [_imageId, { imagePath, altText }] of replacements) {
114
- const placeholderRegex = /\*\*Visual Forge Place Holder\*\*\s*```image[\s\S]*?```/;
115
- content = content.replace(placeholderRegex, `![${altText}](${imagePath})`);
124
+ // Use more specific regex that matches the complete block structure
125
+ const placeholderRegex = /```vf-placeholder\s+[\s\S]*?\n```/;
126
+ const imageTag = `<img src="${imagePath}" alt="${altText}" width="80%">`;
127
+ content = content.replace(placeholderRegex, imageTag);
116
128
  }
117
129
  await fs.writeFile(filePath, content, 'utf-8');
118
130
  logger.info(`Replaced ${replacements.size} placeholders in ${filePath}`);
@@ -261,9 +273,47 @@ export class PlaceholderManager {
261
273
  generatePrompt(section, globalContext) {
262
274
  const sectionName = section.name;
263
275
  const type = this.inferImageType(section);
264
- // Extract key points from content (first few sentences)
265
- const sentences = section.content.split(/[.!?]/).filter((s) => s.trim().length > 0);
266
- const keyPoints = sentences.slice(0, 2).join('. ');
276
+ // Clean section content before extraction
277
+ // Remove code blocks, images, links, and markdown formatting
278
+ let cleanContent = section.content;
279
+ // Remove code blocks (```...```)
280
+ cleanContent = cleanContent.replace(/```[\s\S]*?```/g, '');
281
+ // Remove inline code (`...`)
282
+ cleanContent = cleanContent.replace(/`[^`]+`/g, '');
283
+ // Remove horizontal rules (---, ___, ***)
284
+ cleanContent = cleanContent.replace(/^[\s]*[-_*]{3,}[\s]*$/gm, '');
285
+ // Remove markdown headers (keep the text but remove the ##)
286
+ cleanContent = cleanContent.replace(/^#{1,6}\s+/gm, '');
287
+ // Remove images (![...](...)
288
+ cleanContent = cleanContent.replace(/!\[.*?\]\(.*?\)/g, '');
289
+ // Remove links but keep text ([text](url) → text)
290
+ cleanContent = cleanContent.replace(/\[([^\]]+)\]\([^)]+\)/g, '$1');
291
+ // Remove markdown formatting (**, *, __, _, ~~, etc.)
292
+ cleanContent = cleanContent.replace(/(\*\*|__)(.*?)\1/g, '$2');
293
+ cleanContent = cleanContent.replace(/(\*|_)(.*?)\1/g, '$2');
294
+ cleanContent = cleanContent.replace(/~~(.*?)~~/g, '$1');
295
+ // Remove HTML tags
296
+ cleanContent = cleanContent.replace(/<[^>]+>/g, '');
297
+ // Remove bullet points and list markers
298
+ cleanContent = cleanContent.replace(/^[\s]*[-*+]\s+/gm, '');
299
+ cleanContent = cleanContent.replace(/^[\s]*\d+\.\s+/gm, '');
300
+ // Remove emojis and special characters that are often decorative
301
+ cleanContent = cleanContent.replace(/[📖⚙️🎯👉💡🚀✅❌⚠️]/g, '');
302
+ // Remove "Reading time" and "Hands-on time" patterns
303
+ cleanContent = cleanContent.replace(/Reading time:.*?(?:\||$)/gi, '');
304
+ cleanContent = cleanContent.replace(/Hands-on time:.*?(?:\||$)/gi, '');
305
+ // Remove navigation patterns (← Previous, Next →, Quick Nav, etc.)
306
+ cleanContent = cleanContent.replace(/←.*?→/g, '');
307
+ cleanContent = cleanContent.replace(/Quick Nav:.*$/gm, '');
308
+ cleanContent = cleanContent.replace(/Previous:.*?(?:\||$)/g, '');
309
+ cleanContent = cleanContent.replace(/Next:.*?(?:\||$)/g, '');
310
+ // Remove multiple blank lines
311
+ cleanContent = cleanContent.replace(/\n\s*\n\s*\n/g, '\n\n');
312
+ // Trim whitespace
313
+ cleanContent = cleanContent.trim();
314
+ // Extract key points from cleaned content (first few sentences)
315
+ const sentences = cleanContent.split(/[.!?]/).filter((s) => s.trim().length > 20);
316
+ const keyPoints = sentences.slice(0, 2).join('. ').trim();
267
317
  let specificPrompt = '';
268
318
  // Type-specific prompt templates
269
319
  switch (type) {
@@ -315,16 +365,19 @@ export class PlaceholderManager {
315
365
  }
316
366
  /**
317
367
  * Insert placeholder into content
368
+ *
369
+ * NEW FORMAT: Creates unified ```vf-placeholder ... ``` block
318
370
  */
319
371
  insertPlaceholder(content, section, placeholder) {
372
+ // Create unified placeholder block
373
+ // Use YAML-style format with pipe | for multiline prompt
320
374
  const placeholderText = `
321
- **Visual Forge Place Holder**
322
-
323
- \`\`\`image
375
+ \`\`\`vf-placeholder
324
376
  type: ${placeholder.type}
325
377
  aspectRatio: ${placeholder.aspectRatio}
326
378
  section: ${placeholder.section}
327
- prompt: ${placeholder.prompt}
379
+ prompt: |
380
+ ${placeholder.prompt.split('\n').join('\n ')}
328
381
  \`\`\`
329
382
  `;
330
383
  // Insert after section header
@@ -1 +1 @@
1
- {"version":3,"file":"placeholder-manager.js","sourceRoot":"","sources":["../../src/placeholders/placeholder-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"placeholder-manager.js","sourceRoot":"","sources":["../../src/placeholders/placeholder-manager.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,22 @@ export declare abstract class BaseProvider implements IImageProvider {
13
13
  * Initialize provider (call after construction)
14
14
  */
15
15
  protected init(): void;
16
+ /**
17
+ * Create output path for generated image with new index-based directory structure
18
+ * Structure: generated-images/{index}-{filename}/{provider}/{image-id}.png
19
+ *
20
+ * @param spec Image specification
21
+ * @param extension File extension (default: 'png')
22
+ * @returns Full path to output file
23
+ */
24
+ protected createOutputPath(spec: ImageSpec, extension?: string): Promise<string>;
16
25
  get isAvailable(): boolean;
17
26
  isConfigured(): boolean;
18
27
  generate(spec: ImageSpec, options?: GenerationOptions): Promise<GeneratedImage>;
28
+ /**
29
+ * Save image metadata and generation log
30
+ */
31
+ private saveImageMetadata;
19
32
  estimateCost(_spec: ImageSpec): number;
20
33
  /**
21
34
  * Provider-specific generation logic - must be implemented by subclasses
@@ -1 +1 @@
1
- {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAwD,MAAM,mBAAmB,CAAC;AAGrG,8BAAsB,YAAa,YAAW,cAAc;IAC1D,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAEtC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,MAAM,EAAE,cAAc;IAWlC;;OAEG;IACH,SAAS,CAAC,IAAI,IAAI,IAAI;IAStB,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,YAAY,IAAI,OAAO;IASjB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgDrF,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAKtC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAC9B,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,GAAG;IAE3E;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,oBAAoB;IAEhD;;;OAGG;IACH,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAMhC;;OAEG;IACH,SAAS,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAY1F"}
1
+ {"version":3,"file":"base-provider.d.ts","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,SAAS,EACT,aAAa,EACb,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,UAAU,EAWX,MAAM,mBAAmB,CAAC;AAM3B,8BAAsB,YAAa,YAAW,cAAc;IAC1D,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAEtC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,MAAM,EAAE,cAAc;IAWlC;;OAEG;IACH,SAAS,CAAC,IAAI,IAAI,IAAI;IAStB;;;;;;;OAOG;cACa,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAmC7F,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,YAAY,IAAI,OAAO;IASjB,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IA0MrF;;OAEG;YACW,iBAAiB;IAkH/B,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAKtC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAC9B,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,GAAG;IAE3E;;OAEG;IACH,QAAQ,CAAC,eAAe,IAAI,oBAAoB;IAEhD;;;OAGG;IACH,QAAQ,CAAC,cAAc,IAAI,OAAO,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAMhC;;OAEG;IACH,SAAS,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAY1F"}
@@ -1,8 +1,11 @@
1
1
  /**
2
2
  * Base provider class - all providers extend this
3
3
  */
4
- import { HttpClient, logger, Validator, ProviderError, ConfigurationError } from '../utils/index.js';
4
+ import { HttpClient, logger, Validator, ProviderError, ConfigurationError, createImagePath, getIndexDirectory, ImageMetadataManager, optimizeToMultipleFormats, validateImageQuality, enhanceByType, } from '../utils/index.js';
5
+ import { SourceMetadataManager } from '../utils/source-metadata.js';
5
6
  import { rateLimiter } from '../utils/rate-limiter.js';
7
+ import * as fs from 'fs/promises';
8
+ import * as path from 'path';
6
9
  export class BaseProvider {
7
10
  client;
8
11
  config;
@@ -24,6 +27,37 @@ export class BaseProvider {
24
27
  rateLimit: this.config.rateLimit,
25
28
  });
26
29
  }
30
+ /**
31
+ * Create output path for generated image with new index-based directory structure
32
+ * Structure: generated-images/{index}-{filename}/{provider}/{image-id}.png
33
+ *
34
+ * @param spec Image specification
35
+ * @param extension File extension (default: 'png')
36
+ * @returns Full path to output file
37
+ */
38
+ async createOutputPath(spec, extension = 'png') {
39
+ // Use utility to create path with indexed directory structure (now async)
40
+ const filepath = await createImagePath(spec.sourceFile, this.name, spec.id, extension);
41
+ // Ensure directory exists
42
+ const directory = path.dirname(filepath);
43
+ await fs.mkdir(directory, { recursive: true });
44
+ // Create or update source metadata
45
+ const indexDir = await getIndexDirectory(spec.sourceFile);
46
+ const metadataExists = await SourceMetadataManager.exists(indexDir);
47
+ if (!metadataExists) {
48
+ // Get index from the directory name (e.g., "001-01-lesson-md" -> 1)
49
+ const dirName = path.basename(indexDir);
50
+ const indexMatch = dirName.match(/^(\d+)-/);
51
+ const index = indexMatch ? parseInt(indexMatch[1], 10) : 0;
52
+ await SourceMetadataManager.create(indexDir, spec.sourceFile, index, this.name);
53
+ logger.debug('Created source metadata', {
54
+ indexDir,
55
+ sourceFile: spec.sourceFile,
56
+ provider: this.name,
57
+ });
58
+ }
59
+ return filepath;
60
+ }
27
61
  get isAvailable() {
28
62
  return this.isConfigured();
29
63
  }
@@ -40,35 +74,247 @@ export class BaseProvider {
40
74
  if (!this.isConfigured()) {
41
75
  throw new ConfigurationError(`Provider ${this.name} is not properly configured`);
42
76
  }
77
+ // Auto-regeneration configuration from environment
78
+ const autoRegenerate = process.env.VF_AUTO_REGENERATE !== 'false'; // Default: true
79
+ const maxRetries = parseInt(process.env.VF_MAX_RETRIES || '3', 10);
80
+ const qualityValidationEnabled = process.env.VF_QUALITY_VALIDATION !== 'false'; // Default: true
43
81
  logger.info(`Generating image with ${this.displayName}`, {
44
82
  imageId: spec.id,
45
83
  type: spec.type,
46
84
  provider: this.name,
85
+ autoRegenerate,
86
+ maxRetries,
87
+ qualityValidation: qualityValidationEnabled,
47
88
  });
48
- // Wait for rate limit
49
- await rateLimiter.consume(this.name);
50
- const startTime = Date.now();
89
+ let attempt = 0;
90
+ let lastError;
91
+ let lastQualityScore = 0;
92
+ while (attempt < maxRetries) {
93
+ attempt++;
94
+ logger.info(`Generation attempt ${attempt}/${maxRetries}`, {
95
+ imageId: spec.id,
96
+ isRetry: attempt > 1,
97
+ });
98
+ // Wait for rate limit
99
+ await rateLimiter.consume(this.name);
100
+ const startTime = Date.now();
101
+ try {
102
+ // Enhance prompt to minimize text rendering errors
103
+ const enhancedSpec = { ...spec };
104
+ enhancedSpec.prompt = enhanceByType(spec.prompt, spec.type);
105
+ logger.debug('Prompt enhanced', {
106
+ imageId: spec.id,
107
+ originalPromptLength: spec.prompt.length,
108
+ enhancedPromptLength: enhancedSpec.prompt.length,
109
+ });
110
+ // Call provider-specific generation logic
111
+ const result = await this.generateImage(enhancedSpec, options);
112
+ const endTime = Date.now();
113
+ const generationTime = endTime - startTime;
114
+ logger.info(`Image generated successfully`, {
115
+ imageId: spec.id,
116
+ provider: this.name,
117
+ generationTime: `${generationTime}ms`,
118
+ cost: result.metadata.actualCost,
119
+ attempt,
120
+ });
121
+ // Optimize to multiple formats with watermarking
122
+ // Configuration from environment variables
123
+ const generatePNG = process.env.VF_GENERATE_PNG === 'true'; // Default: false
124
+ const pngQuality = parseInt(process.env.VF_PNG_QUALITY || '85', 10);
125
+ const pngUsePalette = process.env.VF_PNG_PALETTE !== 'false'; // Default: true
126
+ const pngColors = parseInt(process.env.VF_PNG_COLORS || '256', 10);
127
+ const pngDither = parseFloat(process.env.VF_PNG_DITHER || '1.0');
128
+ const optimizationResult = await optimizeToMultipleFormats(result.filepath, spec.sourceFile, spec.id, this.name, {
129
+ generateWebP: true,
130
+ generateJPEG: true,
131
+ generatePNG,
132
+ webpQuality: 85,
133
+ jpegQuality: 90,
134
+ pngQuality,
135
+ pngUsePalette,
136
+ pngColors,
137
+ pngDither,
138
+ skipWatermark: false,
139
+ });
140
+ logger.info('Multi-format optimization complete', {
141
+ imageId: spec.id,
142
+ formats: optimizationResult.formats.map(f => f.format),
143
+ originalSize: optimizationResult.originalSize,
144
+ totalOptimizedSize: optimizationResult.totalOptimizedSize,
145
+ watermarked: optimizationResult.watermarkApplied,
146
+ });
147
+ // Validate quality (use original PNG for validation)
148
+ let qualityResult;
149
+ if (qualityValidationEnabled) {
150
+ qualityResult = await validateImageQuality(optimizationResult.originalPath, {
151
+ enableOCR: true,
152
+ minSharpness: 50,
153
+ minBrightness: 30,
154
+ maxBrightness: 240,
155
+ minQualityScore: 60,
156
+ });
157
+ logger.info('Quality validation complete', {
158
+ imageId: spec.id,
159
+ passed: qualityResult.passed,
160
+ score: qualityResult.score,
161
+ attempt,
162
+ });
163
+ lastQualityScore = qualityResult.score;
164
+ // If quality failed and auto-regeneration enabled, retry
165
+ if (!qualityResult.passed && autoRegenerate && attempt < maxRetries) {
166
+ logger.warn('Quality validation failed - will retry generation', {
167
+ imageId: spec.id,
168
+ score: qualityResult.score,
169
+ failureReasons: qualityResult.failureReasons,
170
+ nextAttempt: attempt + 1,
171
+ });
172
+ // Save metadata about failed attempt
173
+ const originalDir = path.join(await getIndexDirectory(spec.sourceFile), this.name, 'original');
174
+ await fs.mkdir(originalDir, { recursive: true });
175
+ await ImageMetadataManager.addRegenerationMetadata(originalDir, spec.id, attempt, `Quality validation failed: ${qualityResult.failureReasons.join(', ')}`, qualityResult.score);
176
+ // Continue to next attempt
177
+ continue;
178
+ }
179
+ }
180
+ // Update result with optimized WebP path (for markdown insertion)
181
+ const webpFormat = optimizationResult.formats.find(f => f.format === 'webp');
182
+ if (webpFormat) {
183
+ result.filepath = webpFormat.path;
184
+ result.metadata.format = 'webp';
185
+ result.metadata.fileSize = webpFormat.size;
186
+ result.metadata.optimization = {
187
+ optimized: true,
188
+ originalPath: optimizationResult.originalPath,
189
+ originalSize: optimizationResult.originalSize,
190
+ reduction: ((optimizationResult.originalSize - webpFormat.size) / optimizationResult.originalSize) * 100,
191
+ };
192
+ logger.debug('Updated result with WebP path for markdown', {
193
+ imageId: spec.id,
194
+ filepath: result.filepath,
195
+ });
196
+ }
197
+ // Save metadata and log in original/ directory
198
+ await this.saveImageMetadata(spec, result, startTime, endTime, options, optimizationResult, qualityResult);
199
+ return result;
200
+ }
201
+ catch (error) {
202
+ const generationTime = Date.now() - startTime;
203
+ lastError = error;
204
+ logger.error(`Image generation failed (attempt ${attempt}/${maxRetries})`, {
205
+ imageId: spec.id,
206
+ provider: this.name,
207
+ error: error.message,
208
+ generationTime: `${generationTime}ms`,
209
+ });
210
+ // If auto-regeneration enabled and we have attempts left, retry
211
+ if (autoRegenerate && attempt < maxRetries) {
212
+ logger.info('Will retry generation', {
213
+ imageId: spec.id,
214
+ nextAttempt: attempt + 1,
215
+ });
216
+ continue;
217
+ }
218
+ // No more retries, throw error
219
+ break;
220
+ }
221
+ }
222
+ // All attempts failed
223
+ throw new ProviderError(`Failed to generate image after ${attempt} attempts: ${lastError?.message || 'Unknown error'}. Last quality score: ${lastQualityScore}`, this.name, lastError?.statusCode);
224
+ }
225
+ /**
226
+ * Save image metadata and generation log
227
+ */
228
+ async saveImageMetadata(spec, result, startTime, endTime, options, optimizationResult, qualityResult) {
51
229
  try {
52
- // Call provider-specific generation logic
53
- const result = await this.generateImage(spec, options);
54
- const generationTime = Date.now() - startTime;
55
- logger.info(`Image generated successfully`, {
230
+ // Get the original/ directory path
231
+ const indexDir = await getIndexDirectory(spec.sourceFile);
232
+ const originalDir = path.join(indexDir, this.name, 'original');
233
+ // Ensure original/ directory exists
234
+ await fs.mkdir(originalDir, { recursive: true });
235
+ // Build global context string if present
236
+ let globalContextStr;
237
+ if (spec.globalContext) {
238
+ const ctx = spec.globalContext;
239
+ globalContextStr = [
240
+ ctx.prePrompt,
241
+ `Document vibe: ${ctx.documentVibe}`,
242
+ `Visual style: ${ctx.style.visualStyle}`,
243
+ `Mood: ${ctx.style.mood}`,
244
+ ctx.style.colorPalette ? `Colors: ${ctx.style.colorPalette.join(', ')}` : '',
245
+ ctx.postPrompt,
246
+ ]
247
+ .filter(Boolean)
248
+ .join('\n');
249
+ }
250
+ // Build full prompt
251
+ const fullPrompt = globalContextStr
252
+ ? `${globalContextStr}\n\n${spec.prompt}`
253
+ : spec.prompt;
254
+ // Save complete metadata
255
+ await ImageMetadataManager.createCompleteMetadata(originalDir, spec.id, {
256
+ prompt: {
257
+ original: spec.prompt,
258
+ globalContext: globalContextStr,
259
+ fullPrompt,
260
+ },
261
+ generation: {
262
+ provider: this.name,
263
+ model: result.metadata.model || this.displayName,
264
+ startTime,
265
+ endTime,
266
+ parameters: options
267
+ ? {
268
+ quality: options.quality,
269
+ style: options.style,
270
+ model: options.model,
271
+ timeout: options.timeout,
272
+ }
273
+ : undefined,
274
+ },
275
+ quality: {
276
+ sharpness: qualityResult?.sharpness?.value,
277
+ brightness: qualityResult?.brightness?.value,
278
+ dimensions: result.metadata.dimensions
279
+ ? `${result.metadata.dimensions.width}x${result.metadata.dimensions.height}`
280
+ : 'unknown',
281
+ fileSize: result.metadata.fileSize || 0,
282
+ passed: qualityResult?.passed !== false, // Pass if no quality check or passed
283
+ score: qualityResult?.score,
284
+ },
285
+ cost: {
286
+ estimated: spec.metadata.estimatedCost || this.estimateCost(spec),
287
+ actual: result.metadata.actualCost,
288
+ },
289
+ });
290
+ // Add optimization metadata if available
291
+ if (optimizationResult && optimizationResult.formats) {
292
+ const formatsMetadata = {};
293
+ for (const format of optimizationResult.formats) {
294
+ if (format.format !== 'original') {
295
+ formatsMetadata[format.format] = {
296
+ size: format.size,
297
+ path: format.path,
298
+ };
299
+ }
300
+ }
301
+ await ImageMetadataManager.addOptimizationMetadata(originalDir, spec.id, formatsMetadata, optimizationResult.watermarkApplied);
302
+ logger.debug('Added optimization metadata', {
303
+ imageId: spec.id,
304
+ formats: Object.keys(formatsMetadata),
305
+ });
306
+ }
307
+ logger.debug('Saved image metadata and log', {
56
308
  imageId: spec.id,
57
- provider: this.name,
58
- generationTime: `${generationTime}ms`,
59
- cost: result.metadata.actualCost,
309
+ originalDir,
60
310
  });
61
- return result;
62
311
  }
63
312
  catch (error) {
64
- const generationTime = Date.now() - startTime;
65
- logger.error(`Image generation failed`, {
313
+ // Don't fail the whole generation if metadata save fails
314
+ logger.warn('Failed to save image metadata', {
66
315
  imageId: spec.id,
67
- provider: this.name,
68
316
  error: error.message,
69
- generationTime: `${generationTime}ms`,
70
317
  });
71
- throw new ProviderError(`Failed to generate image: ${error.message}`, this.name, error.statusCode);
72
318
  }
73
319
  }
74
320
  estimateCost(_spec) {
@@ -1 +1 @@
1
- {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base-provider.js","sourceRoot":"","sources":["../../src/providers/base-provider.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gemini-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/gemini-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,cAAc,EACd,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAqB9B,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAY;IACvC,QAAQ,CAAC,WAAW,iCAAiC;gBAEzC,MAAM,EAAE,cAAc;cAOlB,aAAa,CAC3B,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC;IAwF1B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAe5D,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAItC,eAAe,IAAI,oBAAoB;IAajC,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAoCzF"}
1
+ {"version":3,"file":"gemini-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/gemini-provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,cAAc,EACd,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAoB9B,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAY;IACvC,QAAQ,CAAC,WAAW,iCAAiC;gBAEzC,MAAM,EAAE,cAAc;cAOlB,aAAa,CAC3B,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,cAAc,CAAC;IAoF1B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAe5D,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAItC,eAAe,IAAI,oBAAoB;IAajC,cAAc,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAoCzF"}
@@ -5,7 +5,6 @@
5
5
  import { BaseProvider } from '../base-provider.js';
6
6
  import { logger } from '../../utils/index.js';
7
7
  import * as fs from 'fs/promises';
8
- import * as path from 'path';
9
8
  export class GeminiProvider extends BaseProvider {
10
9
  name = 'gemini';
11
10
  displayName = 'Google Gemini (Nano Banana)';
@@ -57,12 +56,9 @@ export class GeminiProvider extends BaseProvider {
57
56
  const imageData = imagePart.inlineData.data;
58
57
  // Decode base64
59
58
  const imageBuffer = Buffer.from(imageData, 'base64');
60
- // Save to output directory
61
- const baseDir = process.env.IMAGE_GEN_OUTPUT_DIR || './generated-images';
62
- const providerDir = path.join(baseDir, this.name);
63
- await fs.mkdir(providerDir, { recursive: true });
64
- const filename = `${spec.id}.png`;
65
- const filepath = path.join(providerDir, filename);
59
+ // Use BaseProvider helper to create path with new directory structure
60
+ // Structure: generated-images/<sanitized-filename>/<provider>/<image-id>.png
61
+ const filepath = await this.createOutputPath(spec, 'png');
66
62
  await fs.writeFile(filepath, imageBuffer);
67
63
  logger.info('Image generated and saved', {
68
64
  imageId: spec.id,