claude-presentation-master 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +2 -2
- package/dist/index.d.mts +35 -16
- package/dist/index.d.ts +35 -16
- package/dist/index.js +153 -97
- package/dist/index.mjs +153 -97
- package/package.json +1 -1
package/bin/cli.js
CHANGED
|
@@ -20,7 +20,7 @@ const args = process.argv.slice(2);
|
|
|
20
20
|
|
|
21
21
|
// Help text
|
|
22
22
|
const helpText = `
|
|
23
|
-
Claude Presentation Master v4.
|
|
23
|
+
Claude Presentation Master v4.2.0
|
|
24
24
|
Generate world-class presentations using expert methodologies
|
|
25
25
|
|
|
26
26
|
100% FREE • Zero API Keys • Runs Locally
|
|
@@ -85,7 +85,7 @@ For more information: https://github.com/Stuinfla/claude-presentation-master
|
|
|
85
85
|
`;
|
|
86
86
|
|
|
87
87
|
// Version
|
|
88
|
-
const version = '4.
|
|
88
|
+
const version = '4.2.0';
|
|
89
89
|
|
|
90
90
|
// Parse arguments
|
|
91
91
|
function parseArgs(args) {
|
package/dist/index.d.mts
CHANGED
|
@@ -787,26 +787,37 @@ declare class SlideGeneratorV2 {
|
|
|
787
787
|
declare function createSlideGeneratorV2(type?: PresentationType): SlideGeneratorV2;
|
|
788
788
|
|
|
789
789
|
/**
|
|
790
|
-
* Renderer V2 -
|
|
790
|
+
* Renderer V2 - KB-Driven Visual Excellence
|
|
791
791
|
*
|
|
792
792
|
* Renders slides to HTML and PDF with:
|
|
793
793
|
* - Tables as actual tables (not mangled metrics)
|
|
794
794
|
* - Complete bullets (never truncated)
|
|
795
795
|
* - Clean professional CSS (no random stock photos)
|
|
796
|
-
* -
|
|
796
|
+
* - Color palettes loaded from Knowledge Base per presentation type
|
|
797
|
+
* - Typography and spacing from KB
|
|
797
798
|
* - Automatic PDF generation alongside HTML
|
|
798
799
|
*/
|
|
799
800
|
|
|
800
|
-
type ThemeStyle = '
|
|
801
|
+
type ThemeStyle = 'light' | 'dark';
|
|
801
802
|
declare class RendererV2 {
|
|
802
803
|
private theme;
|
|
803
804
|
private presentationType;
|
|
805
|
+
private kb;
|
|
806
|
+
/**
|
|
807
|
+
* Create renderer with theme loaded from Knowledge Base.
|
|
808
|
+
* @param presentationType - The type of deck being created (determines palette)
|
|
809
|
+
* @param kb - Knowledge Base gateway (optional, will use global if not provided)
|
|
810
|
+
*/
|
|
811
|
+
constructor(presentationType?: PresentationType, kb?: KnowledgeGateway);
|
|
812
|
+
/**
|
|
813
|
+
* Load theme configuration from Knowledge Base.
|
|
814
|
+
* Falls back to hardcoded values only if KB fails.
|
|
815
|
+
*/
|
|
816
|
+
private loadThemeFromKB;
|
|
804
817
|
/**
|
|
805
|
-
*
|
|
806
|
-
* @param presentationType - The type of deck being created (determines theme)
|
|
807
|
-
* @param themeOverride - Optional explicit theme override
|
|
818
|
+
* Default palette mapping per presentation type (used if KB doesn't specify).
|
|
808
819
|
*/
|
|
809
|
-
|
|
820
|
+
private getDefaultPaletteName;
|
|
810
821
|
/**
|
|
811
822
|
* Render slides to complete HTML document.
|
|
812
823
|
*/
|
|
@@ -829,9 +840,9 @@ declare class RendererV2 {
|
|
|
829
840
|
*/
|
|
830
841
|
private renderForPrint;
|
|
831
842
|
/**
|
|
832
|
-
*
|
|
843
|
+
* Light theme print HTML (professional, white background).
|
|
833
844
|
*/
|
|
834
|
-
private
|
|
845
|
+
private getLightPrintHTML;
|
|
835
846
|
/**
|
|
836
847
|
* Dark theme print HTML (legacy).
|
|
837
848
|
*/
|
|
@@ -889,17 +900,25 @@ declare class RendererV2 {
|
|
|
889
900
|
*/
|
|
890
901
|
private escapeHtml;
|
|
891
902
|
/**
|
|
892
|
-
*
|
|
903
|
+
* Generate CSS with colors from Knowledge Base.
|
|
893
904
|
*/
|
|
894
905
|
private getCSS;
|
|
895
906
|
/**
|
|
896
|
-
*
|
|
907
|
+
* Generate CSS variables from KB palette.
|
|
908
|
+
*/
|
|
909
|
+
private getCSSVariables;
|
|
910
|
+
/**
|
|
911
|
+
* Lighten or darken a hex color.
|
|
912
|
+
*/
|
|
913
|
+
private lightenColor;
|
|
914
|
+
/**
|
|
915
|
+
* Light theme CSS (consulting style) with KB palette colors.
|
|
897
916
|
*/
|
|
898
|
-
private
|
|
917
|
+
private getLightThemeCSS;
|
|
899
918
|
/**
|
|
900
|
-
* Dark theme CSS
|
|
919
|
+
* Dark theme CSS with KB palette colors.
|
|
901
920
|
*/
|
|
902
|
-
private
|
|
921
|
+
private getDarkThemeCSS;
|
|
903
922
|
}
|
|
904
923
|
/**
|
|
905
924
|
* Create a renderer with theme matched to the presentation type.
|
|
@@ -914,7 +933,7 @@ declare class RendererV2 {
|
|
|
914
933
|
* - product_demo, investor_pitch → Startup (modern dark)
|
|
915
934
|
* - executive_briefing → Corporate (professional)
|
|
916
935
|
*/
|
|
917
|
-
declare function createRendererV2(presentationType?: PresentationType,
|
|
936
|
+
declare function createRendererV2(presentationType?: PresentationType, kb?: KnowledgeGateway): RendererV2;
|
|
918
937
|
|
|
919
938
|
/**
|
|
920
939
|
* PresentationEngineV2 - Knowledge-Driven Excellence
|
|
@@ -1786,7 +1805,7 @@ declare function runCodeQualityCheck(srcDir: string): Promise<boolean>;
|
|
|
1786
1805
|
* ALL decisions come from the Knowledge Base. NO hardcoded fallbacks.
|
|
1787
1806
|
*/
|
|
1788
1807
|
|
|
1789
|
-
declare const VERSION = "4.
|
|
1808
|
+
declare const VERSION = "4.2.0";
|
|
1790
1809
|
interface GenerateOptions {
|
|
1791
1810
|
/** Input content (Markdown, text, etc.) */
|
|
1792
1811
|
content: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -787,26 +787,37 @@ declare class SlideGeneratorV2 {
|
|
|
787
787
|
declare function createSlideGeneratorV2(type?: PresentationType): SlideGeneratorV2;
|
|
788
788
|
|
|
789
789
|
/**
|
|
790
|
-
* Renderer V2 -
|
|
790
|
+
* Renderer V2 - KB-Driven Visual Excellence
|
|
791
791
|
*
|
|
792
792
|
* Renders slides to HTML and PDF with:
|
|
793
793
|
* - Tables as actual tables (not mangled metrics)
|
|
794
794
|
* - Complete bullets (never truncated)
|
|
795
795
|
* - Clean professional CSS (no random stock photos)
|
|
796
|
-
* -
|
|
796
|
+
* - Color palettes loaded from Knowledge Base per presentation type
|
|
797
|
+
* - Typography and spacing from KB
|
|
797
798
|
* - Automatic PDF generation alongside HTML
|
|
798
799
|
*/
|
|
799
800
|
|
|
800
|
-
type ThemeStyle = '
|
|
801
|
+
type ThemeStyle = 'light' | 'dark';
|
|
801
802
|
declare class RendererV2 {
|
|
802
803
|
private theme;
|
|
803
804
|
private presentationType;
|
|
805
|
+
private kb;
|
|
806
|
+
/**
|
|
807
|
+
* Create renderer with theme loaded from Knowledge Base.
|
|
808
|
+
* @param presentationType - The type of deck being created (determines palette)
|
|
809
|
+
* @param kb - Knowledge Base gateway (optional, will use global if not provided)
|
|
810
|
+
*/
|
|
811
|
+
constructor(presentationType?: PresentationType, kb?: KnowledgeGateway);
|
|
812
|
+
/**
|
|
813
|
+
* Load theme configuration from Knowledge Base.
|
|
814
|
+
* Falls back to hardcoded values only if KB fails.
|
|
815
|
+
*/
|
|
816
|
+
private loadThemeFromKB;
|
|
804
817
|
/**
|
|
805
|
-
*
|
|
806
|
-
* @param presentationType - The type of deck being created (determines theme)
|
|
807
|
-
* @param themeOverride - Optional explicit theme override
|
|
818
|
+
* Default palette mapping per presentation type (used if KB doesn't specify).
|
|
808
819
|
*/
|
|
809
|
-
|
|
820
|
+
private getDefaultPaletteName;
|
|
810
821
|
/**
|
|
811
822
|
* Render slides to complete HTML document.
|
|
812
823
|
*/
|
|
@@ -829,9 +840,9 @@ declare class RendererV2 {
|
|
|
829
840
|
*/
|
|
830
841
|
private renderForPrint;
|
|
831
842
|
/**
|
|
832
|
-
*
|
|
843
|
+
* Light theme print HTML (professional, white background).
|
|
833
844
|
*/
|
|
834
|
-
private
|
|
845
|
+
private getLightPrintHTML;
|
|
835
846
|
/**
|
|
836
847
|
* Dark theme print HTML (legacy).
|
|
837
848
|
*/
|
|
@@ -889,17 +900,25 @@ declare class RendererV2 {
|
|
|
889
900
|
*/
|
|
890
901
|
private escapeHtml;
|
|
891
902
|
/**
|
|
892
|
-
*
|
|
903
|
+
* Generate CSS with colors from Knowledge Base.
|
|
893
904
|
*/
|
|
894
905
|
private getCSS;
|
|
895
906
|
/**
|
|
896
|
-
*
|
|
907
|
+
* Generate CSS variables from KB palette.
|
|
908
|
+
*/
|
|
909
|
+
private getCSSVariables;
|
|
910
|
+
/**
|
|
911
|
+
* Lighten or darken a hex color.
|
|
912
|
+
*/
|
|
913
|
+
private lightenColor;
|
|
914
|
+
/**
|
|
915
|
+
* Light theme CSS (consulting style) with KB palette colors.
|
|
897
916
|
*/
|
|
898
|
-
private
|
|
917
|
+
private getLightThemeCSS;
|
|
899
918
|
/**
|
|
900
|
-
* Dark theme CSS
|
|
919
|
+
* Dark theme CSS with KB palette colors.
|
|
901
920
|
*/
|
|
902
|
-
private
|
|
921
|
+
private getDarkThemeCSS;
|
|
903
922
|
}
|
|
904
923
|
/**
|
|
905
924
|
* Create a renderer with theme matched to the presentation type.
|
|
@@ -914,7 +933,7 @@ declare class RendererV2 {
|
|
|
914
933
|
* - product_demo, investor_pitch → Startup (modern dark)
|
|
915
934
|
* - executive_briefing → Corporate (professional)
|
|
916
935
|
*/
|
|
917
|
-
declare function createRendererV2(presentationType?: PresentationType,
|
|
936
|
+
declare function createRendererV2(presentationType?: PresentationType, kb?: KnowledgeGateway): RendererV2;
|
|
918
937
|
|
|
919
938
|
/**
|
|
920
939
|
* PresentationEngineV2 - Knowledge-Driven Excellence
|
|
@@ -1786,7 +1805,7 @@ declare function runCodeQualityCheck(srcDir: string): Promise<boolean>;
|
|
|
1786
1805
|
* ALL decisions come from the Knowledge Base. NO hardcoded fallbacks.
|
|
1787
1806
|
*/
|
|
1788
1807
|
|
|
1789
|
-
declare const VERSION = "4.
|
|
1808
|
+
declare const VERSION = "4.2.0";
|
|
1790
1809
|
interface GenerateOptions {
|
|
1791
1810
|
/** Input content (Markdown, text, etc.) */
|
|
1792
1811
|
content: string;
|
package/dist/index.js
CHANGED
|
@@ -94205,69 +94205,112 @@ function createSlideGeneratorV2(type = "consulting_deck") {
|
|
|
94205
94205
|
|
|
94206
94206
|
// src/output/RendererV2.ts
|
|
94207
94207
|
var import_fs8 = require("fs");
|
|
94208
|
-
var
|
|
94209
|
-
|
|
94210
|
-
|
|
94211
|
-
|
|
94212
|
-
|
|
94213
|
-
|
|
94214
|
-
|
|
94208
|
+
var FALLBACK_PALETTES = {
|
|
94209
|
+
consulting_classic: {
|
|
94210
|
+
background: "#FAFAF9",
|
|
94211
|
+
primary: "#0F172A",
|
|
94212
|
+
secondary: "#475569",
|
|
94213
|
+
accent: "#0369A1",
|
|
94214
|
+
text: "#18181B",
|
|
94215
|
+
name: "Consulting Classic"
|
|
94215
94216
|
},
|
|
94216
|
-
|
|
94217
|
-
|
|
94218
|
-
|
|
94219
|
-
|
|
94220
|
-
|
|
94217
|
+
dark_executive: {
|
|
94218
|
+
background: "#18181B",
|
|
94219
|
+
primary: "#FAFAFA",
|
|
94220
|
+
secondary: "#A1A1AA",
|
|
94221
|
+
accent: "#F59E0B",
|
|
94222
|
+
text: "#F4F4F5",
|
|
94223
|
+
name: "Dark Executive"
|
|
94221
94224
|
},
|
|
94222
|
-
|
|
94223
|
-
|
|
94224
|
-
|
|
94225
|
-
|
|
94226
|
-
|
|
94225
|
+
modern_business: {
|
|
94226
|
+
background: "#F8FAFC",
|
|
94227
|
+
primary: "#1E293B",
|
|
94228
|
+
secondary: "#64748B",
|
|
94229
|
+
accent: "#0891B2",
|
|
94230
|
+
text: "#0F172A",
|
|
94231
|
+
name: "Modern Business"
|
|
94227
94232
|
},
|
|
94228
|
-
|
|
94229
|
-
|
|
94230
|
-
|
|
94231
|
-
|
|
94232
|
-
|
|
94233
|
-
|
|
94233
|
+
executive_professional: {
|
|
94234
|
+
background: "#F5F5F4",
|
|
94235
|
+
primary: "#1E3A5F",
|
|
94236
|
+
secondary: "#64748B",
|
|
94237
|
+
accent: "#D97706",
|
|
94238
|
+
text: "#1F2937",
|
|
94239
|
+
name: "Executive Professional"
|
|
94234
94240
|
},
|
|
94235
|
-
|
|
94236
|
-
|
|
94237
|
-
|
|
94238
|
-
|
|
94239
|
-
|
|
94241
|
+
strategy_growth: {
|
|
94242
|
+
background: "#FAF9F7",
|
|
94243
|
+
primary: "#292524",
|
|
94244
|
+
secondary: "#78716C",
|
|
94245
|
+
accent: "#059669",
|
|
94246
|
+
text: "#1C1917",
|
|
94247
|
+
name: "Strategy Growth"
|
|
94240
94248
|
}
|
|
94241
94249
|
};
|
|
94242
|
-
|
|
94243
|
-
|
|
94244
|
-
|
|
94245
|
-
// Sales → Dark dramatic style (persuasion, impact)
|
|
94246
|
-
sales_pitch: "dark",
|
|
94247
|
-
// Consulting/Analysis decks → McKinsey white style (data-heavy, professional)
|
|
94248
|
-
consulting_deck: "mckinsey",
|
|
94249
|
-
// Investment Banking → McKinsey style (financial, dense data)
|
|
94250
|
-
investment_banking: "mckinsey",
|
|
94251
|
-
// Investor Pitch → Startup dark style (modern, VC audiences)
|
|
94252
|
-
investor_pitch: "startup",
|
|
94253
|
-
// Technical → Dark style (engineering audiences like dark mode)
|
|
94254
|
-
technical_presentation: "dark",
|
|
94255
|
-
// All Hands → Minimal clean style (readable, accessible)
|
|
94256
|
-
all_hands: "minimal"
|
|
94257
|
-
};
|
|
94250
|
+
function getPaletteStyle(paletteName) {
|
|
94251
|
+
return paletteName === "dark_executive" ? "dark" : "light";
|
|
94252
|
+
}
|
|
94258
94253
|
var RendererV2 = class {
|
|
94259
94254
|
theme;
|
|
94260
94255
|
presentationType;
|
|
94256
|
+
kb;
|
|
94261
94257
|
/**
|
|
94262
|
-
* Create renderer with theme
|
|
94263
|
-
* @param presentationType - The type of deck being created (determines
|
|
94264
|
-
* @param
|
|
94258
|
+
* Create renderer with theme loaded from Knowledge Base.
|
|
94259
|
+
* @param presentationType - The type of deck being created (determines palette)
|
|
94260
|
+
* @param kb - Knowledge Base gateway (optional, will use global if not provided)
|
|
94265
94261
|
*/
|
|
94266
|
-
constructor(presentationType = "consulting_deck",
|
|
94262
|
+
constructor(presentationType = "consulting_deck", kb) {
|
|
94267
94263
|
this.presentationType = presentationType;
|
|
94268
|
-
|
|
94269
|
-
this.theme =
|
|
94270
|
-
console.log(`[RendererV2] Using "${this.theme.
|
|
94264
|
+
this.kb = kb || getKB();
|
|
94265
|
+
this.theme = this.loadThemeFromKB(presentationType);
|
|
94266
|
+
console.log(`[RendererV2] Using "${this.theme.paletteName}" palette (${this.theme.style} style) for "${presentationType}" deck`);
|
|
94267
|
+
}
|
|
94268
|
+
/**
|
|
94269
|
+
* Load theme configuration from Knowledge Base.
|
|
94270
|
+
* Falls back to hardcoded values only if KB fails.
|
|
94271
|
+
*/
|
|
94272
|
+
loadThemeFromKB(type) {
|
|
94273
|
+
try {
|
|
94274
|
+
const paletteName = this.kb.queryOptional(`presentation_types.${type}.color_palette`).value || this.getDefaultPaletteName(type);
|
|
94275
|
+
const kbPalette = this.kb.queryOptional(`color_palettes.${paletteName}`).value;
|
|
94276
|
+
if (kbPalette) {
|
|
94277
|
+
console.log(`[RendererV2] Loaded "${paletteName}" palette from KB: bg=${kbPalette.background}, accent=${kbPalette.accent}`);
|
|
94278
|
+
return {
|
|
94279
|
+
style: getPaletteStyle(paletteName),
|
|
94280
|
+
palette: kbPalette,
|
|
94281
|
+
paletteName
|
|
94282
|
+
};
|
|
94283
|
+
}
|
|
94284
|
+
const fallback = FALLBACK_PALETTES[paletteName] ?? FALLBACK_PALETTES.consulting_classic;
|
|
94285
|
+
console.log(`[RendererV2] Using fallback "${paletteName}" palette`);
|
|
94286
|
+
return {
|
|
94287
|
+
style: getPaletteStyle(paletteName),
|
|
94288
|
+
palette: fallback,
|
|
94289
|
+
paletteName
|
|
94290
|
+
};
|
|
94291
|
+
} catch {
|
|
94292
|
+
const defaultPalette = FALLBACK_PALETTES.consulting_classic;
|
|
94293
|
+
return {
|
|
94294
|
+
style: "light",
|
|
94295
|
+
palette: defaultPalette,
|
|
94296
|
+
paletteName: "consulting_classic"
|
|
94297
|
+
};
|
|
94298
|
+
}
|
|
94299
|
+
}
|
|
94300
|
+
/**
|
|
94301
|
+
* Default palette mapping per presentation type (used if KB doesn't specify).
|
|
94302
|
+
*/
|
|
94303
|
+
getDefaultPaletteName(type) {
|
|
94304
|
+
const defaults = {
|
|
94305
|
+
ted_keynote: "dark_executive",
|
|
94306
|
+
sales_pitch: "modern_business",
|
|
94307
|
+
consulting_deck: "consulting_classic",
|
|
94308
|
+
investment_banking: "executive_professional",
|
|
94309
|
+
investor_pitch: "modern_business",
|
|
94310
|
+
technical_presentation: "dark_executive",
|
|
94311
|
+
all_hands: "strategy_growth"
|
|
94312
|
+
};
|
|
94313
|
+
return defaults[type] || "consulting_classic";
|
|
94271
94314
|
}
|
|
94272
94315
|
/**
|
|
94273
94316
|
* Render slides to complete HTML document.
|
|
@@ -94357,15 +94400,15 @@ ${slidesHtml}
|
|
|
94357
94400
|
const content = this.renderSlideContent(slide);
|
|
94358
94401
|
return `<div class="slide slide-${slide.type}">${content}</div>`;
|
|
94359
94402
|
}).join("\n");
|
|
94360
|
-
if (this.theme.style === "
|
|
94361
|
-
return this.
|
|
94403
|
+
if (this.theme.style === "light") {
|
|
94404
|
+
return this.getLightPrintHTML(title, slidesHtml);
|
|
94362
94405
|
}
|
|
94363
94406
|
return this.getDarkPrintHTML(title, slidesHtml);
|
|
94364
94407
|
}
|
|
94365
94408
|
/**
|
|
94366
|
-
*
|
|
94409
|
+
* Light theme print HTML (professional, white background).
|
|
94367
94410
|
*/
|
|
94368
|
-
|
|
94411
|
+
getLightPrintHTML(title, slidesHtml) {
|
|
94369
94412
|
return `<!DOCTYPE html>
|
|
94370
94413
|
<html lang="en">
|
|
94371
94414
|
<head>
|
|
@@ -95021,34 +95064,59 @@ ${content}
|
|
|
95021
95064
|
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
95022
95065
|
}
|
|
95023
95066
|
/**
|
|
95024
|
-
*
|
|
95067
|
+
* Generate CSS with colors from Knowledge Base.
|
|
95025
95068
|
*/
|
|
95026
95069
|
getCSS() {
|
|
95027
|
-
if (this.theme.style === "
|
|
95028
|
-
return this.
|
|
95070
|
+
if (this.theme.style === "light") {
|
|
95071
|
+
return this.getLightThemeCSS();
|
|
95029
95072
|
}
|
|
95030
|
-
return this.
|
|
95073
|
+
return this.getDarkThemeCSS();
|
|
95031
95074
|
}
|
|
95032
95075
|
/**
|
|
95033
|
-
*
|
|
95076
|
+
* Generate CSS variables from KB palette.
|
|
95034
95077
|
*/
|
|
95035
|
-
|
|
95078
|
+
getCSSVariables() {
|
|
95079
|
+
const p = this.theme.palette;
|
|
95080
|
+
const isLight = this.theme.style === "light";
|
|
95081
|
+
const bgSecondary = isLight ? this.lightenColor(p.background, -5) : this.lightenColor(p.background, 10);
|
|
95082
|
+
const bgAccent = isLight ? this.lightenColor(p.background, -10) : this.lightenColor(p.background, 15);
|
|
95083
|
+
const textMuted = isLight ? this.lightenColor(p.text, 40) : this.lightenColor(p.text, -30);
|
|
95036
95084
|
return `
|
|
95037
|
-
/*
|
|
95085
|
+
/* ${this.theme.paletteName} Theme - Loaded from Knowledge Base */
|
|
95038
95086
|
:root {
|
|
95039
|
-
--
|
|
95040
|
-
--bg-
|
|
95041
|
-
--bg-
|
|
95042
|
-
--
|
|
95043
|
-
--text-
|
|
95044
|
-
--text-
|
|
95045
|
-
--
|
|
95046
|
-
--
|
|
95087
|
+
--kb-palette: "${this.theme.paletteName}";
|
|
95088
|
+
--bg-primary: ${p.background};
|
|
95089
|
+
--bg-secondary: ${bgSecondary};
|
|
95090
|
+
--bg-accent: ${bgAccent};
|
|
95091
|
+
--text-primary: ${p.text};
|
|
95092
|
+
--text-secondary: ${p.secondary};
|
|
95093
|
+
--text-muted: ${textMuted};
|
|
95094
|
+
--color-primary: ${p.primary};
|
|
95095
|
+
--color-accent: ${p.accent};
|
|
95096
|
+
--accent-blue: ${p.accent};
|
|
95047
95097
|
--accent-green: #28a745;
|
|
95048
95098
|
--accent-red: #dc3545;
|
|
95049
|
-
--border-color: #dee2e6;
|
|
95050
|
-
--header-bar:
|
|
95051
|
-
}
|
|
95099
|
+
--border-color: ${isLight ? "#dee2e6" : "rgba(255,255,255,0.1)"};
|
|
95100
|
+
--header-bar: ${p.primary};
|
|
95101
|
+
}`;
|
|
95102
|
+
}
|
|
95103
|
+
/**
|
|
95104
|
+
* Lighten or darken a hex color.
|
|
95105
|
+
*/
|
|
95106
|
+
lightenColor(hex, percent) {
|
|
95107
|
+
const num = parseInt(hex.replace("#", ""), 16);
|
|
95108
|
+
const amt = Math.round(2.55 * percent);
|
|
95109
|
+
const R = Math.max(0, Math.min(255, (num >> 16) + amt));
|
|
95110
|
+
const G = Math.max(0, Math.min(255, (num >> 8 & 255) + amt));
|
|
95111
|
+
const B = Math.max(0, Math.min(255, (num & 255) + amt));
|
|
95112
|
+
return `#${(16777216 + R * 65536 + G * 256 + B).toString(16).slice(1)}`;
|
|
95113
|
+
}
|
|
95114
|
+
/**
|
|
95115
|
+
* Light theme CSS (consulting style) with KB palette colors.
|
|
95116
|
+
*/
|
|
95117
|
+
getLightThemeCSS() {
|
|
95118
|
+
return `
|
|
95119
|
+
${this.getCSSVariables()}
|
|
95052
95120
|
|
|
95053
95121
|
.reveal {
|
|
95054
95122
|
font-family: 'Georgia', 'Times New Roman', serif;
|
|
@@ -95319,23 +95387,11 @@ ${content}
|
|
|
95319
95387
|
`;
|
|
95320
95388
|
}
|
|
95321
95389
|
/**
|
|
95322
|
-
* Dark theme CSS
|
|
95390
|
+
* Dark theme CSS with KB palette colors.
|
|
95323
95391
|
*/
|
|
95324
|
-
|
|
95392
|
+
getDarkThemeCSS() {
|
|
95325
95393
|
return `
|
|
95326
|
-
|
|
95327
|
-
:root {
|
|
95328
|
-
--bg-primary: #1a1a2e;
|
|
95329
|
-
--bg-secondary: #16213e;
|
|
95330
|
-
--bg-accent: #0f3460;
|
|
95331
|
-
--text-primary: #ffffff;
|
|
95332
|
-
--text-secondary: rgba(255, 255, 255, 0.85);
|
|
95333
|
-
--text-muted: rgba(255, 255, 255, 0.6);
|
|
95334
|
-
--accent-blue: #4a9eff;
|
|
95335
|
-
--accent-green: #00d4aa;
|
|
95336
|
-
--accent-orange: #ff9f43;
|
|
95337
|
-
--border-color: rgba(255, 255, 255, 0.1);
|
|
95338
|
-
}
|
|
95394
|
+
${this.getCSSVariables()}
|
|
95339
95395
|
|
|
95340
95396
|
.reveal {
|
|
95341
95397
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
@@ -95546,18 +95602,18 @@ ${content}
|
|
|
95546
95602
|
`;
|
|
95547
95603
|
}
|
|
95548
95604
|
};
|
|
95549
|
-
function createRendererV2(presentationType = "consulting_deck",
|
|
95550
|
-
return new RendererV2(presentationType,
|
|
95605
|
+
function createRendererV2(presentationType = "consulting_deck", kb) {
|
|
95606
|
+
return new RendererV2(presentationType, kb);
|
|
95551
95607
|
}
|
|
95552
95608
|
|
|
95553
95609
|
// src/core/PresentationEngineV2.ts
|
|
95554
95610
|
var import_fs9 = require("fs");
|
|
95555
95611
|
var PALETTE_TO_THEME = {
|
|
95556
95612
|
dark_executive: "dark",
|
|
95557
|
-
modern_business: "
|
|
95558
|
-
consulting_classic: "
|
|
95559
|
-
executive_professional: "
|
|
95560
|
-
strategy_growth: "
|
|
95613
|
+
modern_business: "light",
|
|
95614
|
+
consulting_classic: "light",
|
|
95615
|
+
executive_professional: "light",
|
|
95616
|
+
strategy_growth: "light"
|
|
95561
95617
|
};
|
|
95562
95618
|
async function loadDesignSpecsFromKB(kb, type) {
|
|
95563
95619
|
const typeConfig = kb.queryRequired(`presentation_types.${type}`);
|
|
@@ -95568,7 +95624,7 @@ async function loadDesignSpecsFromKB(kb, type) {
|
|
|
95568
95624
|
const typography = typeConfig.value.typography;
|
|
95569
95625
|
const primaryExperts = typeConfig.value.primary_experts;
|
|
95570
95626
|
const colorPalette = typeConfig.value.color_palette || "consulting_classic";
|
|
95571
|
-
const theme = PALETTE_TO_THEME[colorPalette] || "
|
|
95627
|
+
const theme = PALETTE_TO_THEME[colorPalette] || "light";
|
|
95572
95628
|
const scoringWeights = typeConfig.value.scoring_weights;
|
|
95573
95629
|
let structure = "General presentation structure";
|
|
95574
95630
|
if (primaryExperts.some((e) => e.includes("Minto") || e.includes("McKinsey"))) {
|
|
@@ -95705,7 +95761,7 @@ Summary: ${review.summary}`
|
|
|
95705
95761
|
);
|
|
95706
95762
|
}
|
|
95707
95763
|
this.log("Step 7: Rendering output...");
|
|
95708
|
-
const renderer = createRendererV2(presentationType, this.
|
|
95764
|
+
const renderer = createRendererV2(presentationType, this.kb);
|
|
95709
95765
|
const html = renderer.render(slides, title || "Presentation");
|
|
95710
95766
|
this.log(`
|
|
95711
95767
|
SUCCESS: Generated ${slides.length} slides scoring ${review.overallScore}/100`);
|
|
@@ -99494,7 +99550,7 @@ if (typeof process !== "undefined" && process.argv[1]?.includes("CodeQualityVali
|
|
|
99494
99550
|
}
|
|
99495
99551
|
|
|
99496
99552
|
// src/index.ts
|
|
99497
|
-
var VERSION = "4.
|
|
99553
|
+
var VERSION = "4.2.0";
|
|
99498
99554
|
async function generate(options) {
|
|
99499
99555
|
const {
|
|
99500
99556
|
content,
|
package/dist/index.mjs
CHANGED
|
@@ -2489,69 +2489,112 @@ function createSlideGeneratorV2(type = "consulting_deck") {
|
|
|
2489
2489
|
|
|
2490
2490
|
// src/output/RendererV2.ts
|
|
2491
2491
|
import { writeFileSync } from "fs";
|
|
2492
|
-
var
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2492
|
+
var FALLBACK_PALETTES = {
|
|
2493
|
+
consulting_classic: {
|
|
2494
|
+
background: "#FAFAF9",
|
|
2495
|
+
primary: "#0F172A",
|
|
2496
|
+
secondary: "#475569",
|
|
2497
|
+
accent: "#0369A1",
|
|
2498
|
+
text: "#18181B",
|
|
2499
|
+
name: "Consulting Classic"
|
|
2499
2500
|
},
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2501
|
+
dark_executive: {
|
|
2502
|
+
background: "#18181B",
|
|
2503
|
+
primary: "#FAFAFA",
|
|
2504
|
+
secondary: "#A1A1AA",
|
|
2505
|
+
accent: "#F59E0B",
|
|
2506
|
+
text: "#F4F4F5",
|
|
2507
|
+
name: "Dark Executive"
|
|
2505
2508
|
},
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2509
|
+
modern_business: {
|
|
2510
|
+
background: "#F8FAFC",
|
|
2511
|
+
primary: "#1E293B",
|
|
2512
|
+
secondary: "#64748B",
|
|
2513
|
+
accent: "#0891B2",
|
|
2514
|
+
text: "#0F172A",
|
|
2515
|
+
name: "Modern Business"
|
|
2511
2516
|
},
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
|
|
2517
|
+
executive_professional: {
|
|
2518
|
+
background: "#F5F5F4",
|
|
2519
|
+
primary: "#1E3A5F",
|
|
2520
|
+
secondary: "#64748B",
|
|
2521
|
+
accent: "#D97706",
|
|
2522
|
+
text: "#1F2937",
|
|
2523
|
+
name: "Executive Professional"
|
|
2518
2524
|
},
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2525
|
+
strategy_growth: {
|
|
2526
|
+
background: "#FAF9F7",
|
|
2527
|
+
primary: "#292524",
|
|
2528
|
+
secondary: "#78716C",
|
|
2529
|
+
accent: "#059669",
|
|
2530
|
+
text: "#1C1917",
|
|
2531
|
+
name: "Strategy Growth"
|
|
2524
2532
|
}
|
|
2525
2533
|
};
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
// Sales → Dark dramatic style (persuasion, impact)
|
|
2530
|
-
sales_pitch: "dark",
|
|
2531
|
-
// Consulting/Analysis decks → McKinsey white style (data-heavy, professional)
|
|
2532
|
-
consulting_deck: "mckinsey",
|
|
2533
|
-
// Investment Banking → McKinsey style (financial, dense data)
|
|
2534
|
-
investment_banking: "mckinsey",
|
|
2535
|
-
// Investor Pitch → Startup dark style (modern, VC audiences)
|
|
2536
|
-
investor_pitch: "startup",
|
|
2537
|
-
// Technical → Dark style (engineering audiences like dark mode)
|
|
2538
|
-
technical_presentation: "dark",
|
|
2539
|
-
// All Hands → Minimal clean style (readable, accessible)
|
|
2540
|
-
all_hands: "minimal"
|
|
2541
|
-
};
|
|
2534
|
+
function getPaletteStyle(paletteName) {
|
|
2535
|
+
return paletteName === "dark_executive" ? "dark" : "light";
|
|
2536
|
+
}
|
|
2542
2537
|
var RendererV2 = class {
|
|
2543
2538
|
theme;
|
|
2544
2539
|
presentationType;
|
|
2540
|
+
kb;
|
|
2545
2541
|
/**
|
|
2546
|
-
* Create renderer with theme
|
|
2547
|
-
* @param presentationType - The type of deck being created (determines
|
|
2548
|
-
* @param
|
|
2542
|
+
* Create renderer with theme loaded from Knowledge Base.
|
|
2543
|
+
* @param presentationType - The type of deck being created (determines palette)
|
|
2544
|
+
* @param kb - Knowledge Base gateway (optional, will use global if not provided)
|
|
2549
2545
|
*/
|
|
2550
|
-
constructor(presentationType = "consulting_deck",
|
|
2546
|
+
constructor(presentationType = "consulting_deck", kb) {
|
|
2551
2547
|
this.presentationType = presentationType;
|
|
2552
|
-
|
|
2553
|
-
this.theme =
|
|
2554
|
-
console.log(`[RendererV2] Using "${this.theme.
|
|
2548
|
+
this.kb = kb || getKB();
|
|
2549
|
+
this.theme = this.loadThemeFromKB(presentationType);
|
|
2550
|
+
console.log(`[RendererV2] Using "${this.theme.paletteName}" palette (${this.theme.style} style) for "${presentationType}" deck`);
|
|
2551
|
+
}
|
|
2552
|
+
/**
|
|
2553
|
+
* Load theme configuration from Knowledge Base.
|
|
2554
|
+
* Falls back to hardcoded values only if KB fails.
|
|
2555
|
+
*/
|
|
2556
|
+
loadThemeFromKB(type) {
|
|
2557
|
+
try {
|
|
2558
|
+
const paletteName = this.kb.queryOptional(`presentation_types.${type}.color_palette`).value || this.getDefaultPaletteName(type);
|
|
2559
|
+
const kbPalette = this.kb.queryOptional(`color_palettes.${paletteName}`).value;
|
|
2560
|
+
if (kbPalette) {
|
|
2561
|
+
console.log(`[RendererV2] Loaded "${paletteName}" palette from KB: bg=${kbPalette.background}, accent=${kbPalette.accent}`);
|
|
2562
|
+
return {
|
|
2563
|
+
style: getPaletteStyle(paletteName),
|
|
2564
|
+
palette: kbPalette,
|
|
2565
|
+
paletteName
|
|
2566
|
+
};
|
|
2567
|
+
}
|
|
2568
|
+
const fallback = FALLBACK_PALETTES[paletteName] ?? FALLBACK_PALETTES.consulting_classic;
|
|
2569
|
+
console.log(`[RendererV2] Using fallback "${paletteName}" palette`);
|
|
2570
|
+
return {
|
|
2571
|
+
style: getPaletteStyle(paletteName),
|
|
2572
|
+
palette: fallback,
|
|
2573
|
+
paletteName
|
|
2574
|
+
};
|
|
2575
|
+
} catch {
|
|
2576
|
+
const defaultPalette = FALLBACK_PALETTES.consulting_classic;
|
|
2577
|
+
return {
|
|
2578
|
+
style: "light",
|
|
2579
|
+
palette: defaultPalette,
|
|
2580
|
+
paletteName: "consulting_classic"
|
|
2581
|
+
};
|
|
2582
|
+
}
|
|
2583
|
+
}
|
|
2584
|
+
/**
|
|
2585
|
+
* Default palette mapping per presentation type (used if KB doesn't specify).
|
|
2586
|
+
*/
|
|
2587
|
+
getDefaultPaletteName(type) {
|
|
2588
|
+
const defaults = {
|
|
2589
|
+
ted_keynote: "dark_executive",
|
|
2590
|
+
sales_pitch: "modern_business",
|
|
2591
|
+
consulting_deck: "consulting_classic",
|
|
2592
|
+
investment_banking: "executive_professional",
|
|
2593
|
+
investor_pitch: "modern_business",
|
|
2594
|
+
technical_presentation: "dark_executive",
|
|
2595
|
+
all_hands: "strategy_growth"
|
|
2596
|
+
};
|
|
2597
|
+
return defaults[type] || "consulting_classic";
|
|
2555
2598
|
}
|
|
2556
2599
|
/**
|
|
2557
2600
|
* Render slides to complete HTML document.
|
|
@@ -2641,15 +2684,15 @@ ${slidesHtml}
|
|
|
2641
2684
|
const content = this.renderSlideContent(slide);
|
|
2642
2685
|
return `<div class="slide slide-${slide.type}">${content}</div>`;
|
|
2643
2686
|
}).join("\n");
|
|
2644
|
-
if (this.theme.style === "
|
|
2645
|
-
return this.
|
|
2687
|
+
if (this.theme.style === "light") {
|
|
2688
|
+
return this.getLightPrintHTML(title, slidesHtml);
|
|
2646
2689
|
}
|
|
2647
2690
|
return this.getDarkPrintHTML(title, slidesHtml);
|
|
2648
2691
|
}
|
|
2649
2692
|
/**
|
|
2650
|
-
*
|
|
2693
|
+
* Light theme print HTML (professional, white background).
|
|
2651
2694
|
*/
|
|
2652
|
-
|
|
2695
|
+
getLightPrintHTML(title, slidesHtml) {
|
|
2653
2696
|
return `<!DOCTYPE html>
|
|
2654
2697
|
<html lang="en">
|
|
2655
2698
|
<head>
|
|
@@ -3305,34 +3348,59 @@ ${content}
|
|
|
3305
3348
|
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
3306
3349
|
}
|
|
3307
3350
|
/**
|
|
3308
|
-
*
|
|
3351
|
+
* Generate CSS with colors from Knowledge Base.
|
|
3309
3352
|
*/
|
|
3310
3353
|
getCSS() {
|
|
3311
|
-
if (this.theme.style === "
|
|
3312
|
-
return this.
|
|
3354
|
+
if (this.theme.style === "light") {
|
|
3355
|
+
return this.getLightThemeCSS();
|
|
3313
3356
|
}
|
|
3314
|
-
return this.
|
|
3357
|
+
return this.getDarkThemeCSS();
|
|
3315
3358
|
}
|
|
3316
3359
|
/**
|
|
3317
|
-
*
|
|
3360
|
+
* Generate CSS variables from KB palette.
|
|
3318
3361
|
*/
|
|
3319
|
-
|
|
3362
|
+
getCSSVariables() {
|
|
3363
|
+
const p = this.theme.palette;
|
|
3364
|
+
const isLight = this.theme.style === "light";
|
|
3365
|
+
const bgSecondary = isLight ? this.lightenColor(p.background, -5) : this.lightenColor(p.background, 10);
|
|
3366
|
+
const bgAccent = isLight ? this.lightenColor(p.background, -10) : this.lightenColor(p.background, 15);
|
|
3367
|
+
const textMuted = isLight ? this.lightenColor(p.text, 40) : this.lightenColor(p.text, -30);
|
|
3320
3368
|
return `
|
|
3321
|
-
/*
|
|
3369
|
+
/* ${this.theme.paletteName} Theme - Loaded from Knowledge Base */
|
|
3322
3370
|
:root {
|
|
3323
|
-
--
|
|
3324
|
-
--bg-
|
|
3325
|
-
--bg-
|
|
3326
|
-
--
|
|
3327
|
-
--text-
|
|
3328
|
-
--text-
|
|
3329
|
-
--
|
|
3330
|
-
--
|
|
3371
|
+
--kb-palette: "${this.theme.paletteName}";
|
|
3372
|
+
--bg-primary: ${p.background};
|
|
3373
|
+
--bg-secondary: ${bgSecondary};
|
|
3374
|
+
--bg-accent: ${bgAccent};
|
|
3375
|
+
--text-primary: ${p.text};
|
|
3376
|
+
--text-secondary: ${p.secondary};
|
|
3377
|
+
--text-muted: ${textMuted};
|
|
3378
|
+
--color-primary: ${p.primary};
|
|
3379
|
+
--color-accent: ${p.accent};
|
|
3380
|
+
--accent-blue: ${p.accent};
|
|
3331
3381
|
--accent-green: #28a745;
|
|
3332
3382
|
--accent-red: #dc3545;
|
|
3333
|
-
--border-color: #dee2e6;
|
|
3334
|
-
--header-bar:
|
|
3335
|
-
}
|
|
3383
|
+
--border-color: ${isLight ? "#dee2e6" : "rgba(255,255,255,0.1)"};
|
|
3384
|
+
--header-bar: ${p.primary};
|
|
3385
|
+
}`;
|
|
3386
|
+
}
|
|
3387
|
+
/**
|
|
3388
|
+
* Lighten or darken a hex color.
|
|
3389
|
+
*/
|
|
3390
|
+
lightenColor(hex, percent) {
|
|
3391
|
+
const num = parseInt(hex.replace("#", ""), 16);
|
|
3392
|
+
const amt = Math.round(2.55 * percent);
|
|
3393
|
+
const R = Math.max(0, Math.min(255, (num >> 16) + amt));
|
|
3394
|
+
const G = Math.max(0, Math.min(255, (num >> 8 & 255) + amt));
|
|
3395
|
+
const B = Math.max(0, Math.min(255, (num & 255) + amt));
|
|
3396
|
+
return `#${(16777216 + R * 65536 + G * 256 + B).toString(16).slice(1)}`;
|
|
3397
|
+
}
|
|
3398
|
+
/**
|
|
3399
|
+
* Light theme CSS (consulting style) with KB palette colors.
|
|
3400
|
+
*/
|
|
3401
|
+
getLightThemeCSS() {
|
|
3402
|
+
return `
|
|
3403
|
+
${this.getCSSVariables()}
|
|
3336
3404
|
|
|
3337
3405
|
.reveal {
|
|
3338
3406
|
font-family: 'Georgia', 'Times New Roman', serif;
|
|
@@ -3603,23 +3671,11 @@ ${content}
|
|
|
3603
3671
|
`;
|
|
3604
3672
|
}
|
|
3605
3673
|
/**
|
|
3606
|
-
* Dark theme CSS
|
|
3674
|
+
* Dark theme CSS with KB palette colors.
|
|
3607
3675
|
*/
|
|
3608
|
-
|
|
3676
|
+
getDarkThemeCSS() {
|
|
3609
3677
|
return `
|
|
3610
|
-
|
|
3611
|
-
:root {
|
|
3612
|
-
--bg-primary: #1a1a2e;
|
|
3613
|
-
--bg-secondary: #16213e;
|
|
3614
|
-
--bg-accent: #0f3460;
|
|
3615
|
-
--text-primary: #ffffff;
|
|
3616
|
-
--text-secondary: rgba(255, 255, 255, 0.85);
|
|
3617
|
-
--text-muted: rgba(255, 255, 255, 0.6);
|
|
3618
|
-
--accent-blue: #4a9eff;
|
|
3619
|
-
--accent-green: #00d4aa;
|
|
3620
|
-
--accent-orange: #ff9f43;
|
|
3621
|
-
--border-color: rgba(255, 255, 255, 0.1);
|
|
3622
|
-
}
|
|
3678
|
+
${this.getCSSVariables()}
|
|
3623
3679
|
|
|
3624
3680
|
.reveal {
|
|
3625
3681
|
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
@@ -3830,18 +3886,18 @@ ${content}
|
|
|
3830
3886
|
`;
|
|
3831
3887
|
}
|
|
3832
3888
|
};
|
|
3833
|
-
function createRendererV2(presentationType = "consulting_deck",
|
|
3834
|
-
return new RendererV2(presentationType,
|
|
3889
|
+
function createRendererV2(presentationType = "consulting_deck", kb) {
|
|
3890
|
+
return new RendererV2(presentationType, kb);
|
|
3835
3891
|
}
|
|
3836
3892
|
|
|
3837
3893
|
// src/core/PresentationEngineV2.ts
|
|
3838
3894
|
import { writeFileSync as writeFileSync2 } from "fs";
|
|
3839
3895
|
var PALETTE_TO_THEME = {
|
|
3840
3896
|
dark_executive: "dark",
|
|
3841
|
-
modern_business: "
|
|
3842
|
-
consulting_classic: "
|
|
3843
|
-
executive_professional: "
|
|
3844
|
-
strategy_growth: "
|
|
3897
|
+
modern_business: "light",
|
|
3898
|
+
consulting_classic: "light",
|
|
3899
|
+
executive_professional: "light",
|
|
3900
|
+
strategy_growth: "light"
|
|
3845
3901
|
};
|
|
3846
3902
|
async function loadDesignSpecsFromKB(kb, type) {
|
|
3847
3903
|
const typeConfig = kb.queryRequired(`presentation_types.${type}`);
|
|
@@ -3852,7 +3908,7 @@ async function loadDesignSpecsFromKB(kb, type) {
|
|
|
3852
3908
|
const typography = typeConfig.value.typography;
|
|
3853
3909
|
const primaryExperts = typeConfig.value.primary_experts;
|
|
3854
3910
|
const colorPalette = typeConfig.value.color_palette || "consulting_classic";
|
|
3855
|
-
const theme = PALETTE_TO_THEME[colorPalette] || "
|
|
3911
|
+
const theme = PALETTE_TO_THEME[colorPalette] || "light";
|
|
3856
3912
|
const scoringWeights = typeConfig.value.scoring_weights;
|
|
3857
3913
|
let structure = "General presentation structure";
|
|
3858
3914
|
if (primaryExperts.some((e) => e.includes("Minto") || e.includes("McKinsey"))) {
|
|
@@ -3989,7 +4045,7 @@ Summary: ${review.summary}`
|
|
|
3989
4045
|
);
|
|
3990
4046
|
}
|
|
3991
4047
|
this.log("Step 7: Rendering output...");
|
|
3992
|
-
const renderer = createRendererV2(presentationType, this.
|
|
4048
|
+
const renderer = createRendererV2(presentationType, this.kb);
|
|
3993
4049
|
const html = renderer.render(slides, title || "Presentation");
|
|
3994
4050
|
this.log(`
|
|
3995
4051
|
SUCCESS: Generated ${slides.length} slides scoring ${review.overallScore}/100`);
|
|
@@ -7778,7 +7834,7 @@ if (typeof process !== "undefined" && process.argv[1]?.includes("CodeQualityVali
|
|
|
7778
7834
|
}
|
|
7779
7835
|
|
|
7780
7836
|
// src/index.ts
|
|
7781
|
-
var VERSION = "4.
|
|
7837
|
+
var VERSION = "4.2.0";
|
|
7782
7838
|
async function generate(options) {
|
|
7783
7839
|
const {
|
|
7784
7840
|
content,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-presentation-master",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.2.0",
|
|
4
4
|
"description": "Generate world-class presentations using expert methodologies from Duarte, Reynolds, Gallo, and Anderson. Enforces rigorous quality standards through real visual validation.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|