claude-presentation-master 7.4.0 → 8.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.
- package/README.md +57 -11
- package/assets/presentation-knowledge.yaml +90 -0
- package/bin/cli.js +51 -0
- package/dist/index.d.mts +222 -285
- package/dist/index.d.ts +222 -285
- package/dist/index.js +2043 -1332
- package/dist/index.mjs +2041 -1327
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -19,12 +19,8 @@ interface PresentationConfig {
|
|
|
19
19
|
format: OutputFormat[];
|
|
20
20
|
/** Visual theme */
|
|
21
21
|
theme?: ThemeName;
|
|
22
|
-
/** Minimum QA score required (0-100, default:
|
|
22
|
+
/** Minimum QA score required (0-100, default: 80) */
|
|
23
23
|
qaThreshold?: number;
|
|
24
|
-
/** Maximum iterations for auto-fix loop (default: 5) */
|
|
25
|
-
maxIterations?: number;
|
|
26
|
-
/** Use iterative QA with 7-dimension scoring and auto-fix (default: true) */
|
|
27
|
-
useIterativeQA?: boolean;
|
|
28
24
|
/** Skip QA validation (NOT RECOMMENDED) */
|
|
29
25
|
skipQA?: boolean;
|
|
30
26
|
/** Presentation title */
|
|
@@ -146,9 +142,9 @@ interface VisualQAResults {
|
|
|
146
142
|
/** Screenshots of each slide */
|
|
147
143
|
screenshots: Buffer[];
|
|
148
144
|
/** Per-slide visual scores */
|
|
149
|
-
perSlide: SlideVisualScore[];
|
|
145
|
+
perSlide: SlideVisualScore$1[];
|
|
150
146
|
}
|
|
151
|
-
interface SlideVisualScore {
|
|
147
|
+
interface SlideVisualScore$1 {
|
|
152
148
|
slideIndex: number;
|
|
153
149
|
whitespace: number;
|
|
154
150
|
balance: number;
|
|
@@ -348,6 +344,11 @@ interface ContentSection$1 {
|
|
|
348
344
|
label: string;
|
|
349
345
|
context?: string;
|
|
350
346
|
}>;
|
|
347
|
+
/** Sub-sections for parent-child patterns (e.g., "Three Pillars" with 3 children) */
|
|
348
|
+
subSections?: Array<{
|
|
349
|
+
title: string;
|
|
350
|
+
content: string;
|
|
351
|
+
}>;
|
|
351
352
|
}
|
|
352
353
|
interface ContentAnalysis$1 {
|
|
353
354
|
/** Detected presentation type */
|
|
@@ -505,8 +506,8 @@ interface StoryStructure {
|
|
|
505
506
|
*
|
|
506
507
|
* Features:
|
|
507
508
|
* - KB-driven slide generation
|
|
508
|
-
* -
|
|
509
|
-
* -
|
|
509
|
+
* - Visual quality evaluation (Playwright-based)
|
|
510
|
+
* - Honest scoring based on actual rendered output
|
|
510
511
|
* - Comprehensive audit trail
|
|
511
512
|
*/
|
|
512
513
|
|
|
@@ -528,9 +529,9 @@ declare class PresentationEngine {
|
|
|
528
529
|
*/
|
|
529
530
|
generate(config: PresentationConfig): Promise<PresentationResult>;
|
|
530
531
|
/**
|
|
531
|
-
* Build QA results structure from
|
|
532
|
+
* Build QA results structure from visual quality evaluation.
|
|
532
533
|
*/
|
|
533
|
-
private
|
|
534
|
+
private buildQAResultsFromVisual;
|
|
534
535
|
/**
|
|
535
536
|
* Validate presentation configuration.
|
|
536
537
|
*/
|
|
@@ -634,7 +635,8 @@ declare class KnowledgeGateway {
|
|
|
634
635
|
*/
|
|
635
636
|
getModeForType(type: PresentationType): 'keynote' | 'business';
|
|
636
637
|
/**
|
|
637
|
-
* Get word limits for the specified mode
|
|
638
|
+
* Get word limits for the specified mode.
|
|
639
|
+
* READS FROM KB - NO HARDCODED VALUES.
|
|
638
640
|
*/
|
|
639
641
|
getWordLimits(mode: 'keynote' | 'business'): {
|
|
640
642
|
min: number;
|
|
@@ -642,14 +644,16 @@ declare class KnowledgeGateway {
|
|
|
642
644
|
ideal: number;
|
|
643
645
|
};
|
|
644
646
|
/**
|
|
645
|
-
* Get bullet point limits
|
|
647
|
+
* Get bullet point limits.
|
|
648
|
+
* READS FROM KB - NO HARDCODED VALUES.
|
|
646
649
|
*/
|
|
647
650
|
getBulletLimits(mode: 'keynote' | 'business'): {
|
|
648
651
|
maxBullets: number;
|
|
649
652
|
maxWordsPerBullet: number;
|
|
650
653
|
};
|
|
651
654
|
/**
|
|
652
|
-
* Get whitespace percentage requirement
|
|
655
|
+
* Get whitespace percentage requirement.
|
|
656
|
+
* READS FROM KB - NO HARDCODED VALUES.
|
|
653
657
|
*/
|
|
654
658
|
getWhitespaceRequirement(mode: 'keynote' | 'business'): number;
|
|
655
659
|
/**
|
|
@@ -697,21 +701,24 @@ declare class KnowledgeGateway {
|
|
|
697
701
|
*/
|
|
698
702
|
getExpertPrinciples(expertName: string): unknown;
|
|
699
703
|
/**
|
|
700
|
-
* Get Duarte's glance test requirements
|
|
704
|
+
* Get Duarte's glance test requirements.
|
|
705
|
+
* READS FROM KB - NO HARDCODED VALUES.
|
|
701
706
|
*/
|
|
702
707
|
getDuarteGlanceTest(): {
|
|
703
708
|
wordLimit: number;
|
|
704
709
|
timeSeconds: number;
|
|
705
710
|
};
|
|
706
711
|
/**
|
|
707
|
-
* Get Miller's Law constraints
|
|
712
|
+
* Get Miller's Law constraints.
|
|
713
|
+
* READS FROM KB - NO HARDCODED VALUES.
|
|
708
714
|
*/
|
|
709
715
|
getMillersLaw(): {
|
|
710
716
|
minItems: number;
|
|
711
717
|
maxItems: number;
|
|
712
718
|
};
|
|
713
719
|
/**
|
|
714
|
-
* Get cognitive load constraints
|
|
720
|
+
* Get cognitive load constraints.
|
|
721
|
+
* READS FROM KB - NO HARDCODED VALUES.
|
|
715
722
|
*/
|
|
716
723
|
getCognitiveLoadLimits(): {
|
|
717
724
|
maxItemsPerChunk: number;
|
|
@@ -810,6 +817,11 @@ declare class KnowledgeGateway {
|
|
|
810
817
|
* Map a content pattern to the best allowed slide type.
|
|
811
818
|
* CRITICAL: This is how SlideFactory decides which slide type to use.
|
|
812
819
|
*/
|
|
820
|
+
/**
|
|
821
|
+
* Map semantic slide types to structural types that SlideFactory can handle.
|
|
822
|
+
* This bridges the gap between KB's rich semantic types and code's structural types.
|
|
823
|
+
*/
|
|
824
|
+
private normalizeToStructuralType;
|
|
813
825
|
mapContentPatternToSlideType(pattern: {
|
|
814
826
|
primaryPattern: string;
|
|
815
827
|
hasBigNumber?: boolean;
|
|
@@ -821,6 +833,10 @@ declare class KnowledgeGateway {
|
|
|
821
833
|
hasCode?: boolean;
|
|
822
834
|
bulletCount?: number;
|
|
823
835
|
}, allowedTypes: string[]): string;
|
|
836
|
+
/**
|
|
837
|
+
* Check if a structural type is allowed (directly or via semantic mapping)
|
|
838
|
+
*/
|
|
839
|
+
private isTypeAllowed;
|
|
824
840
|
/**
|
|
825
841
|
* Get a specific slide template by name from the KB.
|
|
826
842
|
*/
|
|
@@ -948,6 +964,11 @@ interface ContentSection {
|
|
|
948
964
|
label: string;
|
|
949
965
|
context?: string;
|
|
950
966
|
}>;
|
|
967
|
+
/** Sub-sections for parent-child patterns (e.g., "Three Pillars" with 3 children) */
|
|
968
|
+
subSections?: Array<{
|
|
969
|
+
title: string;
|
|
970
|
+
content: string;
|
|
971
|
+
}>;
|
|
951
972
|
}
|
|
952
973
|
interface ContentAnalysis {
|
|
953
974
|
detectedType: PresentationType;
|
|
@@ -1009,6 +1030,11 @@ declare class ContentAnalyzer {
|
|
|
1009
1030
|
* Extract sections from content (headers, bullets, content)
|
|
1010
1031
|
*/
|
|
1011
1032
|
private extractSections;
|
|
1033
|
+
/**
|
|
1034
|
+
* Combine parent sections with their child sub-sections.
|
|
1035
|
+
* Detects patterns like "Three Pillars" + 3 child sections and merges them.
|
|
1036
|
+
*/
|
|
1037
|
+
private combineParentChildSections;
|
|
1012
1038
|
/**
|
|
1013
1039
|
* Extract SCQA structure (Barbara Minto)
|
|
1014
1040
|
* CRITICAL: Answer must be clean prose, NOT bullet points
|
|
@@ -1071,26 +1097,32 @@ declare class ContentAnalyzer {
|
|
|
1071
1097
|
}
|
|
1072
1098
|
|
|
1073
1099
|
/**
|
|
1074
|
-
* SlideFactory -
|
|
1100
|
+
* SlideFactory - Expert-Driven Slide Creation (v8.0.0)
|
|
1101
|
+
*
|
|
1102
|
+
* PARADIGM SHIFT: This factory doesn't just TRUNCATE content to fit slides.
|
|
1103
|
+
* It CRAFTS world-class slides using expert principles from the KB.
|
|
1104
|
+
*
|
|
1105
|
+
* v8.0.0 introduces ExpertGuidanceEngine integration:
|
|
1106
|
+
* - Nancy Duarte: Sparkline narrative, STAR moments, Glance Test
|
|
1107
|
+
* - Chris Anderson: One Idea Worth Spreading, Gift Giving
|
|
1108
|
+
* - Carmine Gallo: Rule of Three, Headline Test
|
|
1109
|
+
* - Garr Reynolds: Signal to Noise, Amplification Through Simplification
|
|
1110
|
+
* - Edward Tufte: Data-Ink Ratio
|
|
1111
|
+
* - Cole Knaflic: Context Creates Meaning
|
|
1112
|
+
* - Barbara Minto: Pyramid Principle, SCQA, Answer First
|
|
1075
1113
|
*
|
|
1076
|
-
*
|
|
1077
|
-
*
|
|
1114
|
+
* Content is CRAFTED by:
|
|
1115
|
+
* 1. Understanding the slide's PURPOSE (from ExpertGuidanceEngine)
|
|
1116
|
+
* 2. Extracting the CORE INSIGHT (not just first N words)
|
|
1117
|
+
* 3. Applying expert PRINCIPLES (not just word limits)
|
|
1118
|
+
* 4. Creating slides that MOVE people (not just fit in boxes)
|
|
1078
1119
|
*
|
|
1079
|
-
* All
|
|
1120
|
+
* All configuration from KB:
|
|
1080
1121
|
* - kb.getSlideDefaults(type) → structural slide titles/labels
|
|
1081
|
-
* - kb.getSCQATitles(type) → SCQA framework titles
|
|
1082
|
-
* - kb.getSparklineTitles(type) → Sparkline framework titles
|
|
1083
1122
|
* - kb.getValidationRules(type) → word limits, bullet limits
|
|
1084
|
-
* -
|
|
1085
|
-
* - kb.getInsightMarkers() → action title detection
|
|
1086
|
-
* - kb.getTypographyForType(type) → font specifications
|
|
1087
|
-
* - kb.getRecommendedPalette(type) → color palette
|
|
1088
|
-
* - kb.getAntiPatternsForType(type) → what to avoid
|
|
1089
|
-
* - kb.getRequiredElements(type) → mandatory slides
|
|
1090
|
-
* - kb.getDuarteGlanceTest() → 3-second test limits
|
|
1091
|
-
* - kb.getMillersLaw() → 7±2 items rule
|
|
1123
|
+
* - ExpertGuidanceEngine → principles for excellence
|
|
1092
1124
|
*
|
|
1093
|
-
* @version
|
|
1125
|
+
* @version 8.0.0
|
|
1094
1126
|
*/
|
|
1095
1127
|
|
|
1096
1128
|
/**
|
|
@@ -1104,6 +1136,8 @@ declare class SlideFactory {
|
|
|
1104
1136
|
private kb;
|
|
1105
1137
|
private presentationType;
|
|
1106
1138
|
private classifier;
|
|
1139
|
+
private expertEngine;
|
|
1140
|
+
private narrativeArc;
|
|
1107
1141
|
private config;
|
|
1108
1142
|
private usedContent;
|
|
1109
1143
|
private usedTitles;
|
|
@@ -1128,11 +1162,30 @@ declare class SlideFactory {
|
|
|
1128
1162
|
private createTimelineSlide;
|
|
1129
1163
|
private createProcessSlide;
|
|
1130
1164
|
private createThreeColumnSlide;
|
|
1165
|
+
/**
|
|
1166
|
+
* Create a three-points slide for exactly 3 key points.
|
|
1167
|
+
* Used for content that fits the "rule of three" (Carmine Gallo).
|
|
1168
|
+
*/
|
|
1169
|
+
private createThreePointsSlide;
|
|
1131
1170
|
private createTwoColumnSlide;
|
|
1132
1171
|
private createQuoteSlide;
|
|
1133
1172
|
private createMetricsGridSlide;
|
|
1134
1173
|
private createBulletSlide;
|
|
1135
1174
|
private createSingleStatementSlide;
|
|
1175
|
+
/**
|
|
1176
|
+
* Create a title impact slide - emphasized statement with key takeaway.
|
|
1177
|
+
* Used for section headers with strong conclusions.
|
|
1178
|
+
*/
|
|
1179
|
+
private createTitleImpactSlide;
|
|
1180
|
+
/**
|
|
1181
|
+
* Create a data insight slide - for presenting key findings with context.
|
|
1182
|
+
* Similar to big-number but works even without a prominent metric.
|
|
1183
|
+
*/
|
|
1184
|
+
private createDataInsightSlide;
|
|
1185
|
+
/**
|
|
1186
|
+
* Create a detailed findings slide - bullet points with introductory context.
|
|
1187
|
+
*/
|
|
1188
|
+
private createDetailedFindingsSlide;
|
|
1136
1189
|
private createCodeSlide;
|
|
1137
1190
|
private createCTASlide;
|
|
1138
1191
|
private validateAndFixSlides;
|
|
@@ -1144,6 +1197,46 @@ declare class SlideFactory {
|
|
|
1144
1197
|
* Check for anti-patterns from KB
|
|
1145
1198
|
*/
|
|
1146
1199
|
private checkAntiPatterns;
|
|
1200
|
+
/**
|
|
1201
|
+
* Craft content using expert principles - NOT truncation.
|
|
1202
|
+
*
|
|
1203
|
+
* The old approach: "Take 100 words, chop to 15, add ellipsis"
|
|
1204
|
+
* The new approach: "What would Nancy Duarte say is the ONE thing to remember?"
|
|
1205
|
+
*
|
|
1206
|
+
* @param content - The raw content to craft from
|
|
1207
|
+
* @param slideType - The type of slide being created
|
|
1208
|
+
* @param maxWords - Word budget from KB
|
|
1209
|
+
* @returns Expertly crafted content that serves the slide's purpose
|
|
1210
|
+
*/
|
|
1211
|
+
private craftExpertContent;
|
|
1212
|
+
/**
|
|
1213
|
+
* Chris Anderson's "One Idea Worth Spreading"
|
|
1214
|
+
* Extract the single most valuable insight from content.
|
|
1215
|
+
*/
|
|
1216
|
+
private extractCoreIdea;
|
|
1217
|
+
/**
|
|
1218
|
+
* Extract the key phrase from a sentence - the part that matters most.
|
|
1219
|
+
*/
|
|
1220
|
+
private extractKeyPhrase;
|
|
1221
|
+
/**
|
|
1222
|
+
* Nancy Duarte's "STAR Moment" - Something They'll Always Remember
|
|
1223
|
+
* Find the most dramatic, unexpected element.
|
|
1224
|
+
*/
|
|
1225
|
+
private extractDramaticElement;
|
|
1226
|
+
/**
|
|
1227
|
+
* Edward Tufte / Cole Knaflic - Extract data insight with context
|
|
1228
|
+
*/
|
|
1229
|
+
private extractDataInsight;
|
|
1230
|
+
/**
|
|
1231
|
+
* Garr Reynolds - Signal to Noise
|
|
1232
|
+
* Extract the ONE insight, eliminate everything else.
|
|
1233
|
+
*/
|
|
1234
|
+
private extractSingleInsight;
|
|
1235
|
+
/**
|
|
1236
|
+
* Chris Anderson - Gift Giving
|
|
1237
|
+
* What can they DO tomorrow?
|
|
1238
|
+
*/
|
|
1239
|
+
private extractActionableStep;
|
|
1147
1240
|
/**
|
|
1148
1241
|
* Create a title for a slide - uses action titles for business mode per KB
|
|
1149
1242
|
*/
|
|
@@ -1486,261 +1579,100 @@ declare class QAEngine {
|
|
|
1486
1579
|
}
|
|
1487
1580
|
|
|
1488
1581
|
/**
|
|
1489
|
-
*
|
|
1582
|
+
* VisualQualityEvaluator - Evaluates presentations like a human expert.
|
|
1583
|
+
*
|
|
1584
|
+
* THIS IS NOT A LINTER. This evaluates:
|
|
1585
|
+
* - Is this slide visually compelling?
|
|
1586
|
+
* - Does the presentation tell a coherent story?
|
|
1587
|
+
* - Would an executive be impressed?
|
|
1588
|
+
* - Does it look like McKinsey made it?
|
|
1490
1589
|
*
|
|
1491
|
-
*
|
|
1492
|
-
*
|
|
1590
|
+
* Uses Playwright to render and screenshot each slide, then evaluates
|
|
1591
|
+
* the ACTUAL visual output, not just data structures.
|
|
1493
1592
|
*
|
|
1494
|
-
*
|
|
1495
|
-
* 1. Layout (15%) - Whitespace, visual balance, slide structure
|
|
1496
|
-
* 2. Contrast (15%) - WCAG compliance, text readability
|
|
1497
|
-
* 3. Graphics (10%) - Image quality, placement, relevance
|
|
1498
|
-
* 4. Content (20%) - Word limits, bullet counts, structure
|
|
1499
|
-
* 5. Clarity (15%) - Message focus, information density
|
|
1500
|
-
* 6. Effectiveness (15%) - Expert methodology compliance
|
|
1501
|
-
* 7. Consistency (10%) - Style uniformity, design coherence
|
|
1593
|
+
* @version 9.0.0
|
|
1502
1594
|
*/
|
|
1503
|
-
|
|
1504
|
-
interface DimensionScore {
|
|
1505
|
-
name: string;
|
|
1506
|
-
score: number;
|
|
1507
|
-
weight: number;
|
|
1508
|
-
issues: DimensionIssue[];
|
|
1509
|
-
details: Record<string, unknown>;
|
|
1510
|
-
}
|
|
1511
|
-
interface DimensionIssue {
|
|
1595
|
+
interface SlideVisualScore {
|
|
1512
1596
|
slideIndex: number;
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1597
|
+
slideType: string;
|
|
1598
|
+
visualImpact: number;
|
|
1599
|
+
visualImpactNotes: string;
|
|
1600
|
+
contentClarity: number;
|
|
1601
|
+
contentClarityNotes: string;
|
|
1602
|
+
professionalPolish: number;
|
|
1603
|
+
professionalPolishNotes: string;
|
|
1604
|
+
themeCoherence: number;
|
|
1605
|
+
themeCoherenceNotes: string;
|
|
1606
|
+
totalScore: number;
|
|
1607
|
+
screenshotPath?: string;
|
|
1608
|
+
}
|
|
1609
|
+
interface PresentationQualityScore {
|
|
1522
1610
|
overallScore: number;
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
consistency: DimensionScore;
|
|
1611
|
+
narrativeFlow: {
|
|
1612
|
+
score: number;
|
|
1613
|
+
hasStrongOpening: boolean;
|
|
1614
|
+
hasCompellingMiddle: boolean;
|
|
1615
|
+
hasMemorableClose: boolean;
|
|
1616
|
+
storyArcComplete: boolean;
|
|
1617
|
+
notes: string;
|
|
1531
1618
|
};
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
private presentationType;
|
|
1540
|
-
constructor(mode: 'keynote' | 'business', presentationType: PresentationType);
|
|
1541
|
-
/**
|
|
1542
|
-
* Score a presentation across all 7 dimensions.
|
|
1543
|
-
*/
|
|
1544
|
-
score(slides: Slide[], html: string, threshold?: number): Promise<SevenDimensionResult>;
|
|
1545
|
-
/**
|
|
1546
|
-
* Score layout dimension (whitespace, visual balance, structure)
|
|
1547
|
-
*/
|
|
1548
|
-
private scoreLayout;
|
|
1549
|
-
/**
|
|
1550
|
-
* Score contrast dimension (WCAG compliance, readability)
|
|
1551
|
-
*/
|
|
1552
|
-
private scoreContrast;
|
|
1553
|
-
/**
|
|
1554
|
-
* Score graphics dimension (images, placement, relevance)
|
|
1555
|
-
*/
|
|
1556
|
-
private scoreGraphics;
|
|
1557
|
-
/**
|
|
1558
|
-
* Score content dimension (word limits, bullet counts, structure)
|
|
1559
|
-
* This is critical - must use KB rules exactly.
|
|
1560
|
-
*/
|
|
1561
|
-
private scoreContent;
|
|
1562
|
-
/**
|
|
1563
|
-
* Score clarity dimension (message focus, information density)
|
|
1564
|
-
*/
|
|
1565
|
-
private scoreClarity;
|
|
1566
|
-
/**
|
|
1567
|
-
* Score effectiveness dimension (expert methodology compliance)
|
|
1568
|
-
*/
|
|
1569
|
-
private scoreEffectiveness;
|
|
1570
|
-
/**
|
|
1571
|
-
* Score consistency dimension (style uniformity, design coherence)
|
|
1572
|
-
*/
|
|
1573
|
-
private scoreConsistency;
|
|
1574
|
-
/**
|
|
1575
|
-
* Count words in a slide.
|
|
1576
|
-
*/
|
|
1577
|
-
private countWords;
|
|
1578
|
-
/**
|
|
1579
|
-
* Get a formatted report of the scoring results.
|
|
1580
|
-
*/
|
|
1581
|
-
formatReport(result: SevenDimensionResult): string;
|
|
1582
|
-
}
|
|
1583
|
-
|
|
1584
|
-
/**
|
|
1585
|
-
* AutoFix Engine
|
|
1586
|
-
*
|
|
1587
|
-
* KB-driven automatic fixing of presentation issues.
|
|
1588
|
-
* Uses Knowledge Base rules to determine correct values and apply fixes.
|
|
1589
|
-
*
|
|
1590
|
-
* Key Principles:
|
|
1591
|
-
* 1. All fixes are driven by KB rules, not hardcoded values
|
|
1592
|
-
* 2. Fixes are applied to slide data, not raw HTML (for reliability)
|
|
1593
|
-
* 3. Each fix is logged for transparency
|
|
1594
|
-
* 4. Only auto-fixable issues are addressed
|
|
1595
|
-
*/
|
|
1596
|
-
|
|
1597
|
-
interface FixResult {
|
|
1598
|
-
slideIndex: number;
|
|
1599
|
-
dimension: string;
|
|
1600
|
-
originalValue: unknown;
|
|
1601
|
-
newValue: unknown;
|
|
1602
|
-
description: string;
|
|
1603
|
-
applied: boolean;
|
|
1604
|
-
}
|
|
1605
|
-
interface AutoFixResult {
|
|
1606
|
-
slidesFixed: Slide[];
|
|
1607
|
-
fixesApplied: FixResult[];
|
|
1608
|
-
fixesSkipped: FixResult[];
|
|
1609
|
-
summary: string;
|
|
1610
|
-
}
|
|
1611
|
-
declare class AutoFixEngine {
|
|
1612
|
-
private kb;
|
|
1613
|
-
private mode;
|
|
1614
|
-
private presentationType;
|
|
1615
|
-
constructor(mode: 'keynote' | 'business', presentationType: PresentationType);
|
|
1616
|
-
/**
|
|
1617
|
-
* Apply automatic fixes to slides based on scoring results.
|
|
1618
|
-
*/
|
|
1619
|
-
fix(slides: Slide[], scoringResult: SevenDimensionResult): Promise<AutoFixResult>;
|
|
1620
|
-
/**
|
|
1621
|
-
* Apply a single fix based on the issue.
|
|
1622
|
-
*/
|
|
1623
|
-
private applyFix;
|
|
1624
|
-
/**
|
|
1625
|
-
* Fix content-related issues (word count, bullet count).
|
|
1626
|
-
*/
|
|
1627
|
-
private fixContentIssue;
|
|
1628
|
-
/**
|
|
1629
|
-
* Fix clarity-related issues (key message length, title length).
|
|
1630
|
-
*/
|
|
1631
|
-
private fixClarityIssue;
|
|
1632
|
-
/**
|
|
1633
|
-
* Fix layout-related issues.
|
|
1634
|
-
*/
|
|
1635
|
-
private fixLayoutIssue;
|
|
1636
|
-
/**
|
|
1637
|
-
* Fix consistency-related issues.
|
|
1638
|
-
*/
|
|
1639
|
-
private fixConsistencyIssue;
|
|
1640
|
-
/**
|
|
1641
|
-
* Fix contrast-related issues.
|
|
1642
|
-
* Note: These are CSS fixes, typically handled at generation time.
|
|
1643
|
-
*/
|
|
1644
|
-
private fixContrastIssue;
|
|
1645
|
-
/**
|
|
1646
|
-
* Condense text to approximately maxWords.
|
|
1647
|
-
* Uses smart truncation that preserves meaning.
|
|
1648
|
-
*/
|
|
1649
|
-
private condenseText;
|
|
1650
|
-
/**
|
|
1651
|
-
* Convert text to Title Case.
|
|
1652
|
-
*/
|
|
1653
|
-
private toTitleCase;
|
|
1654
|
-
/**
|
|
1655
|
-
* Count words in a slide.
|
|
1656
|
-
*/
|
|
1657
|
-
private countWords;
|
|
1658
|
-
/**
|
|
1659
|
-
* Count elements in a slide.
|
|
1660
|
-
*/
|
|
1661
|
-
private countElements;
|
|
1662
|
-
/**
|
|
1663
|
-
* Generate a summary of fixes applied.
|
|
1664
|
-
*/
|
|
1665
|
-
private generateSummary;
|
|
1666
|
-
}
|
|
1667
|
-
/**
|
|
1668
|
-
* Create an AutoFixEngine instance.
|
|
1669
|
-
*/
|
|
1670
|
-
declare function createAutoFixEngine(mode: 'keynote' | 'business', presentationType: PresentationType): AutoFixEngine;
|
|
1671
|
-
|
|
1672
|
-
/**
|
|
1673
|
-
* Iterative QA Engine
|
|
1674
|
-
*
|
|
1675
|
-
* Orchestrates the generate-score-fix-regenerate loop until quality threshold is met.
|
|
1676
|
-
* This is the core integration that makes the NPM tool self-correcting.
|
|
1677
|
-
*
|
|
1678
|
-
* Process:
|
|
1679
|
-
* 1. Generate initial presentation
|
|
1680
|
-
* 2. Score across 7 dimensions
|
|
1681
|
-
* 3. If score < threshold AND iterations < max:
|
|
1682
|
-
* a. Apply auto-fixes to slides
|
|
1683
|
-
* b. Regenerate HTML
|
|
1684
|
-
* c. Re-score
|
|
1685
|
-
* d. Repeat until threshold met or max iterations
|
|
1686
|
-
* 4. Return final result with full audit trail
|
|
1687
|
-
*/
|
|
1688
|
-
|
|
1689
|
-
interface IterationRecord {
|
|
1690
|
-
iteration: number;
|
|
1691
|
-
score: number;
|
|
1692
|
-
dimensionScores: {
|
|
1693
|
-
layout: number;
|
|
1694
|
-
contrast: number;
|
|
1695
|
-
graphics: number;
|
|
1696
|
-
content: number;
|
|
1697
|
-
clarity: number;
|
|
1698
|
-
effectiveness: number;
|
|
1699
|
-
consistency: number;
|
|
1619
|
+
visualConsistency: {
|
|
1620
|
+
score: number;
|
|
1621
|
+
colorPaletteConsistent: boolean;
|
|
1622
|
+
typographyConsistent: boolean;
|
|
1623
|
+
layoutPatternsConsistent: boolean;
|
|
1624
|
+
professionalLook: boolean;
|
|
1625
|
+
notes: string;
|
|
1700
1626
|
};
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
}
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1627
|
+
contentQuality: {
|
|
1628
|
+
score: number;
|
|
1629
|
+
messagesAreClear: boolean;
|
|
1630
|
+
appropriateDepth: boolean;
|
|
1631
|
+
noOverload: boolean;
|
|
1632
|
+
actionableInsights: boolean;
|
|
1633
|
+
notes: string;
|
|
1634
|
+
};
|
|
1635
|
+
executiveReadiness: {
|
|
1636
|
+
score: number;
|
|
1637
|
+
wouldImpress: boolean;
|
|
1638
|
+
readyForBoardroom: boolean;
|
|
1639
|
+
compelling: boolean;
|
|
1640
|
+
shareworthy: boolean;
|
|
1641
|
+
notes: string;
|
|
1642
|
+
};
|
|
1643
|
+
slideScores: SlideVisualScore[];
|
|
1644
|
+
verdict: 'world-class' | 'professional' | 'acceptable' | 'needs-work' | 'poor';
|
|
1645
|
+
verdictExplanation: string;
|
|
1646
|
+
topIssues: string[];
|
|
1647
|
+
topStrengths: string[];
|
|
1721
1648
|
}
|
|
1722
|
-
declare class
|
|
1723
|
-
private
|
|
1724
|
-
private
|
|
1725
|
-
private
|
|
1726
|
-
|
|
1727
|
-
private mode;
|
|
1728
|
-
private presentationType;
|
|
1729
|
-
private config;
|
|
1730
|
-
constructor(mode: 'keynote' | 'business', presentationType: PresentationType, config: PresentationConfig);
|
|
1731
|
-
/**
|
|
1732
|
-
* Run the iterative QA process.
|
|
1733
|
-
*/
|
|
1734
|
-
run(initialSlides: Slide[], initialHtml: string, options?: Partial<IterativeQAOptions>): Promise<IterativeQAResult>;
|
|
1649
|
+
declare class VisualQualityEvaluator {
|
|
1650
|
+
private browser;
|
|
1651
|
+
private page;
|
|
1652
|
+
private screenshotDir;
|
|
1653
|
+
constructor(screenshotDir?: string);
|
|
1735
1654
|
/**
|
|
1736
|
-
*
|
|
1655
|
+
* Evaluate a presentation's visual quality.
|
|
1656
|
+
* This opens the HTML in a real browser and evaluates each slide.
|
|
1737
1657
|
*/
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1658
|
+
evaluate(htmlPath: string): Promise<PresentationQualityScore>;
|
|
1659
|
+
private launchBrowser;
|
|
1660
|
+
private closeBrowser;
|
|
1661
|
+
private getSlideCount;
|
|
1662
|
+
private evaluateSlide;
|
|
1663
|
+
private scoreSlide;
|
|
1664
|
+
private inferSlideType;
|
|
1665
|
+
private evaluateNarrativeFlow;
|
|
1666
|
+
private evaluateVisualConsistency;
|
|
1667
|
+
private evaluateContentQuality;
|
|
1668
|
+
private evaluateExecutiveReadiness;
|
|
1669
|
+
private determineVerdict;
|
|
1670
|
+
private explainVerdict;
|
|
1671
|
+
private extractTopIssuesAndStrengths;
|
|
1672
|
+
generateReport(result: PresentationQualityScore): string;
|
|
1673
|
+
private scoreBar;
|
|
1674
|
+
}
|
|
1675
|
+
declare function evaluatePresentation(htmlPath: string, screenshotDir?: string): Promise<PresentationQualityScore>;
|
|
1744
1676
|
|
|
1745
1677
|
/**
|
|
1746
1678
|
* Reveal.js Generator - HTML Presentation Output
|
|
@@ -2178,17 +2110,22 @@ declare function generate(config: PresentationConfig): Promise<PresentationResul
|
|
|
2178
2110
|
* @param options - Validation options
|
|
2179
2111
|
* @returns QA validation results
|
|
2180
2112
|
*/
|
|
2181
|
-
|
|
2182
|
-
|
|
2113
|
+
/**
|
|
2114
|
+
* Validate an existing HTML presentation using visual quality evaluation.
|
|
2115
|
+
* This uses Playwright to render the presentation and evaluate it visually.
|
|
2116
|
+
*
|
|
2117
|
+
* @param htmlPath - Path to the HTML presentation file
|
|
2118
|
+
* @param options - Validation options
|
|
2119
|
+
* @returns Visual quality evaluation results
|
|
2120
|
+
*/
|
|
2121
|
+
declare function validate(htmlPath: string, options?: {
|
|
2122
|
+
screenshotDir?: string;
|
|
2183
2123
|
threshold?: number;
|
|
2184
|
-
|
|
2185
|
-
}): Promise<QAResults & {
|
|
2186
|
-
score: number;
|
|
2187
|
-
}>;
|
|
2124
|
+
}): Promise<PresentationQualityScore>;
|
|
2188
2125
|
/**
|
|
2189
2126
|
* Get the version of the package.
|
|
2190
2127
|
*/
|
|
2191
|
-
declare const VERSION = "
|
|
2128
|
+
declare const VERSION = "9.0.0";
|
|
2192
2129
|
/**
|
|
2193
2130
|
* Default export for convenience.
|
|
2194
2131
|
*/
|
|
@@ -2200,4 +2137,4 @@ declare const _default: {
|
|
|
2200
2137
|
VERSION: string;
|
|
2201
2138
|
};
|
|
2202
2139
|
|
|
2203
|
-
export { type AccessibilityResults,
|
|
2140
|
+
export { type AccessibilityResults, type ChartData, type ChartDataset, ChartJsProvider, type ChartProvider, type ChartRequest, type ChartResult, type ChartType, type ColorPalette, CompositeChartProvider, CompositeImageProvider, type ContentAnalysis$1 as ContentAnalysis, ContentAnalyzer, type ContentPattern, ContentPatternClassifier, type ContentQAResults, type ContentSection$1 as ContentSection, type ContrastIssue, type ExpertQAResults, type ExpertValidation, type FontSizeIssue, type GlanceTestResult, type ImageData, type ImageProvider, type ImageRequest, type ImageResult, KnowledgeGateway, type LegacySlide, LocalImageProvider, MermaidProvider, type MetricData, type OneIdeaResult, type OutputFormat, PlaceholderImageProvider, PowerPointGenerator, type PresentationConfig, PresentationEngine, type PresentationMetadata, type PresentationMode$1 as PresentationMode, type PresentationQualityScore, type PresentationResult, type PresentationType, QAEngine, QAFailureError, type QAIssue, type QAResults, QuickChartProvider, RevealJsGenerator, type SCQAStructure, ScoreCalculator, type ScoringWeights, type SevenDimensionQAResult, type SignalNoiseResult, type Slide, type SlideContentScore, type SlideData, SlideFactory, SlideGenerator, type SlideTemplate, type SlideType, type SlideValidationResult, type SlideVisualScore, type SparklineStructure, type StoryStructure, TemplateEngine, TemplateNotFoundError, type ThemeName, type TypographyRules, UnsplashImageProvider, VERSION, ValidationError, type ValidationRules, type VisualQAResults, VisualQualityEvaluator, createDefaultChartProvider, createDefaultImageProvider, createSlideFactory, _default as default, evaluatePresentation, generate, getKnowledgeGateway, initSlideGenerator, validate };
|