claude-presentation-master 4.0.0 → 4.1.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 +20 -1
- package/dist/index.d.ts +20 -1
- package/dist/index.js +96 -11
- package/dist/index.mjs +96 -11
- 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
|
|
23
|
+
Claude Presentation Master v4.1.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 = '
|
|
88
|
+
const version = '4.1.0';
|
|
89
89
|
|
|
90
90
|
// Parse arguments
|
|
91
91
|
function parseArgs(args) {
|
package/dist/index.d.mts
CHANGED
|
@@ -692,10 +692,27 @@ interface MetricData {
|
|
|
692
692
|
label: string;
|
|
693
693
|
trend?: 'up' | 'down' | 'neutral';
|
|
694
694
|
}
|
|
695
|
+
interface ModeConfig {
|
|
696
|
+
maxBulletsPerSlide: number;
|
|
697
|
+
maxWordsPerSlide: number;
|
|
698
|
+
minBulletsToKeep: number;
|
|
699
|
+
}
|
|
695
700
|
declare class SlideGeneratorV2 {
|
|
696
701
|
private config;
|
|
697
702
|
private presentationType;
|
|
703
|
+
/**
|
|
704
|
+
* Create a slide generator with default configs.
|
|
705
|
+
* For KB-driven configs, use createSlideGeneratorV2WithConfig() instead.
|
|
706
|
+
*/
|
|
698
707
|
constructor(presentationType?: PresentationType);
|
|
708
|
+
/**
|
|
709
|
+
* Override config with KB-loaded values at runtime.
|
|
710
|
+
*/
|
|
711
|
+
setConfig(config: ModeConfig): void;
|
|
712
|
+
/**
|
|
713
|
+
* Get current config (useful for debugging).
|
|
714
|
+
*/
|
|
715
|
+
getConfig(): ModeConfig;
|
|
699
716
|
/**
|
|
700
717
|
* Generate slides from markdown content.
|
|
701
718
|
* Simple, correct, no garbage.
|
|
@@ -1221,6 +1238,8 @@ declare class SlideQualityReviewer {
|
|
|
1221
1238
|
private whitespaceRules;
|
|
1222
1239
|
private bulletLimit;
|
|
1223
1240
|
private glanceTestSeconds;
|
|
1241
|
+
private assessmentWeights;
|
|
1242
|
+
private _loggedWeights;
|
|
1224
1243
|
private hasCialdini;
|
|
1225
1244
|
private hasGestalt;
|
|
1226
1245
|
private hasTufteDataInk;
|
|
@@ -1767,7 +1786,7 @@ declare function runCodeQualityCheck(srcDir: string): Promise<boolean>;
|
|
|
1767
1786
|
* ALL decisions come from the Knowledge Base. NO hardcoded fallbacks.
|
|
1768
1787
|
*/
|
|
1769
1788
|
|
|
1770
|
-
declare const VERSION = "
|
|
1789
|
+
declare const VERSION = "4.1.0";
|
|
1771
1790
|
interface GenerateOptions {
|
|
1772
1791
|
/** Input content (Markdown, text, etc.) */
|
|
1773
1792
|
content: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -692,10 +692,27 @@ interface MetricData {
|
|
|
692
692
|
label: string;
|
|
693
693
|
trend?: 'up' | 'down' | 'neutral';
|
|
694
694
|
}
|
|
695
|
+
interface ModeConfig {
|
|
696
|
+
maxBulletsPerSlide: number;
|
|
697
|
+
maxWordsPerSlide: number;
|
|
698
|
+
minBulletsToKeep: number;
|
|
699
|
+
}
|
|
695
700
|
declare class SlideGeneratorV2 {
|
|
696
701
|
private config;
|
|
697
702
|
private presentationType;
|
|
703
|
+
/**
|
|
704
|
+
* Create a slide generator with default configs.
|
|
705
|
+
* For KB-driven configs, use createSlideGeneratorV2WithConfig() instead.
|
|
706
|
+
*/
|
|
698
707
|
constructor(presentationType?: PresentationType);
|
|
708
|
+
/**
|
|
709
|
+
* Override config with KB-loaded values at runtime.
|
|
710
|
+
*/
|
|
711
|
+
setConfig(config: ModeConfig): void;
|
|
712
|
+
/**
|
|
713
|
+
* Get current config (useful for debugging).
|
|
714
|
+
*/
|
|
715
|
+
getConfig(): ModeConfig;
|
|
699
716
|
/**
|
|
700
717
|
* Generate slides from markdown content.
|
|
701
718
|
* Simple, correct, no garbage.
|
|
@@ -1221,6 +1238,8 @@ declare class SlideQualityReviewer {
|
|
|
1221
1238
|
private whitespaceRules;
|
|
1222
1239
|
private bulletLimit;
|
|
1223
1240
|
private glanceTestSeconds;
|
|
1241
|
+
private assessmentWeights;
|
|
1242
|
+
private _loggedWeights;
|
|
1224
1243
|
private hasCialdini;
|
|
1225
1244
|
private hasGestalt;
|
|
1226
1245
|
private hasTufteDataInk;
|
|
@@ -1767,7 +1786,7 @@ declare function runCodeQualityCheck(srcDir: string): Promise<boolean>;
|
|
|
1767
1786
|
* ALL decisions come from the Knowledge Base. NO hardcoded fallbacks.
|
|
1768
1787
|
*/
|
|
1769
1788
|
|
|
1770
|
-
declare const VERSION = "
|
|
1789
|
+
declare const VERSION = "4.1.0";
|
|
1771
1790
|
interface GenerateOptions {
|
|
1772
1791
|
/** Input content (Markdown, text, etc.) */
|
|
1773
1792
|
content: string;
|
package/dist/index.js
CHANGED
|
@@ -93756,21 +93756,52 @@ async function initSlideGenerator() {
|
|
|
93756
93756
|
|
|
93757
93757
|
// src/core/SlideGeneratorV2.ts
|
|
93758
93758
|
var import_marked = require("marked");
|
|
93759
|
-
var
|
|
93760
|
-
// Consulting decks: 40-80 words per slide is NORMAL
|
|
93759
|
+
var DEFAULT_CONFIGS = {
|
|
93760
|
+
// Consulting decks: 40-80 words per slide is NORMAL (from KB)
|
|
93761
93761
|
consulting_deck: {
|
|
93762
93762
|
maxBulletsPerSlide: 7,
|
|
93763
|
-
maxWordsPerSlide:
|
|
93764
|
-
//
|
|
93763
|
+
maxWordsPerSlide: 80,
|
|
93764
|
+
// KB: words_per_slide.max
|
|
93765
|
+
minBulletsToKeep: 3
|
|
93766
|
+
},
|
|
93767
|
+
investment_banking: {
|
|
93768
|
+
maxBulletsPerSlide: 8,
|
|
93769
|
+
maxWordsPerSlide: 120,
|
|
93770
|
+
// KB: words_per_slide.max
|
|
93765
93771
|
minBulletsToKeep: 3
|
|
93766
93772
|
},
|
|
93767
|
-
// Keynotes: fewer words, more impact
|
|
93768
|
-
|
|
93773
|
+
// Keynotes: fewer words, more impact (from KB)
|
|
93774
|
+
ted_keynote: {
|
|
93769
93775
|
maxBulletsPerSlide: 4,
|
|
93776
|
+
maxWordsPerSlide: 15,
|
|
93777
|
+
// KB: words_per_slide.max
|
|
93778
|
+
minBulletsToKeep: 2
|
|
93779
|
+
},
|
|
93780
|
+
sales_pitch: {
|
|
93781
|
+
maxBulletsPerSlide: 5,
|
|
93770
93782
|
maxWordsPerSlide: 30,
|
|
93783
|
+
// KB: words_per_slide.max
|
|
93784
|
+
minBulletsToKeep: 2
|
|
93785
|
+
},
|
|
93786
|
+
investor_pitch: {
|
|
93787
|
+
maxBulletsPerSlide: 5,
|
|
93788
|
+
maxWordsPerSlide: 50,
|
|
93789
|
+
// KB: words_per_slide.max
|
|
93771
93790
|
minBulletsToKeep: 2
|
|
93772
93791
|
},
|
|
93773
|
-
|
|
93792
|
+
technical_presentation: {
|
|
93793
|
+
maxBulletsPerSlide: 6,
|
|
93794
|
+
maxWordsPerSlide: 100,
|
|
93795
|
+
// KB: words_per_slide.max
|
|
93796
|
+
minBulletsToKeep: 3
|
|
93797
|
+
},
|
|
93798
|
+
all_hands: {
|
|
93799
|
+
maxBulletsPerSlide: 5,
|
|
93800
|
+
maxWordsPerSlide: 40,
|
|
93801
|
+
// KB: words_per_slide.max
|
|
93802
|
+
minBulletsToKeep: 2
|
|
93803
|
+
},
|
|
93804
|
+
// Default: fallback
|
|
93774
93805
|
default: {
|
|
93775
93806
|
maxBulletsPerSlide: 6,
|
|
93776
93807
|
maxWordsPerSlide: 80,
|
|
@@ -93780,9 +93811,25 @@ var MODE_CONFIGS = {
|
|
|
93780
93811
|
var SlideGeneratorV2 = class {
|
|
93781
93812
|
config;
|
|
93782
93813
|
presentationType;
|
|
93814
|
+
/**
|
|
93815
|
+
* Create a slide generator with default configs.
|
|
93816
|
+
* For KB-driven configs, use createSlideGeneratorV2WithConfig() instead.
|
|
93817
|
+
*/
|
|
93783
93818
|
constructor(presentationType = "consulting_deck") {
|
|
93784
93819
|
this.presentationType = presentationType;
|
|
93785
|
-
this.config =
|
|
93820
|
+
this.config = DEFAULT_CONFIGS[presentationType] || DEFAULT_CONFIGS.default;
|
|
93821
|
+
}
|
|
93822
|
+
/**
|
|
93823
|
+
* Override config with KB-loaded values at runtime.
|
|
93824
|
+
*/
|
|
93825
|
+
setConfig(config2) {
|
|
93826
|
+
this.config = config2;
|
|
93827
|
+
}
|
|
93828
|
+
/**
|
|
93829
|
+
* Get current config (useful for debugging).
|
|
93830
|
+
*/
|
|
93831
|
+
getConfig() {
|
|
93832
|
+
return this.config;
|
|
93786
93833
|
}
|
|
93787
93834
|
/**
|
|
93788
93835
|
* Generate slides from markdown content.
|
|
@@ -96014,7 +96061,7 @@ Output: ${htmlPath}`);
|
|
|
96014
96061
|
}
|
|
96015
96062
|
|
|
96016
96063
|
// src/qa/SlideQualityReviewer.ts
|
|
96017
|
-
var
|
|
96064
|
+
var DEFAULT_ASSESSMENT_WEIGHTS = {
|
|
96018
96065
|
visualImpact: 0.25,
|
|
96019
96066
|
contentClarity: 0.2,
|
|
96020
96067
|
layoutBalance: 0.15,
|
|
@@ -96023,6 +96070,29 @@ var ASSESSMENT_WEIGHTS = {
|
|
|
96023
96070
|
colorHarmony: 0.1,
|
|
96024
96071
|
audienceAppropriate: 0.05
|
|
96025
96072
|
};
|
|
96073
|
+
function computeWeightsFromKB(kbWeights) {
|
|
96074
|
+
const totalKB = kbWeights.visual_quality + kbWeights.content_quality + kbWeights.expert_compliance + kbWeights.accessibility;
|
|
96075
|
+
const vq = kbWeights.visual_quality / totalKB;
|
|
96076
|
+
const cq = kbWeights.content_quality / totalKB;
|
|
96077
|
+
const ec = kbWeights.expert_compliance / totalKB;
|
|
96078
|
+
const ac = kbWeights.accessibility / totalKB;
|
|
96079
|
+
return {
|
|
96080
|
+
visualImpact: vq * 0.6,
|
|
96081
|
+
// 60% of visual_quality
|
|
96082
|
+
colorHarmony: vq * 0.4,
|
|
96083
|
+
// 40% of visual_quality
|
|
96084
|
+
contentClarity: cq * 0.8,
|
|
96085
|
+
// 80% of content_quality
|
|
96086
|
+
audienceAppropriate: cq * 0.2,
|
|
96087
|
+
// 20% of content_quality
|
|
96088
|
+
layoutBalance: ec * 0.5,
|
|
96089
|
+
// 50% of expert_compliance
|
|
96090
|
+
typographyHierarchy: ec * 0.5,
|
|
96091
|
+
// 50% of expert_compliance
|
|
96092
|
+
whitespaceUsage: ac
|
|
96093
|
+
// 100% of accessibility
|
|
96094
|
+
};
|
|
96095
|
+
}
|
|
96026
96096
|
var SlideQualityReviewer = class {
|
|
96027
96097
|
kb;
|
|
96028
96098
|
initialized = false;
|
|
@@ -96031,6 +96101,9 @@ var SlideQualityReviewer = class {
|
|
|
96031
96101
|
whitespaceRules;
|
|
96032
96102
|
bulletLimit;
|
|
96033
96103
|
glanceTestSeconds;
|
|
96104
|
+
// KB-loaded scoring weights (computed from KB per presentation type)
|
|
96105
|
+
assessmentWeights = DEFAULT_ASSESSMENT_WEIGHTS;
|
|
96106
|
+
_loggedWeights = null;
|
|
96034
96107
|
// Expert rules from KB
|
|
96035
96108
|
hasCialdini = false;
|
|
96036
96109
|
hasGestalt = false;
|
|
@@ -96061,7 +96134,7 @@ var SlideQualityReviewer = class {
|
|
|
96061
96134
|
};
|
|
96062
96135
|
let totalScore = 0;
|
|
96063
96136
|
for (const [key, assessment] of Object.entries(assessments)) {
|
|
96064
|
-
const weight =
|
|
96137
|
+
const weight = this.assessmentWeights[key];
|
|
96065
96138
|
totalScore += assessment.score * weight;
|
|
96066
96139
|
}
|
|
96067
96140
|
const score = Math.round(totalScore);
|
|
@@ -96116,6 +96189,18 @@ var SlideQualityReviewer = class {
|
|
|
96116
96189
|
this.wordLimits = wordLimitsResult.value;
|
|
96117
96190
|
const whitespaceResult = this.kb.getWhitespaceRules(type);
|
|
96118
96191
|
this.whitespaceRules = whitespaceResult.value;
|
|
96192
|
+
try {
|
|
96193
|
+
const weightsResult = this.kb.getScoringWeights(type);
|
|
96194
|
+
const kbWeights = weightsResult.value;
|
|
96195
|
+
this.assessmentWeights = computeWeightsFromKB(kbWeights);
|
|
96196
|
+
if (!this._loggedWeights?.has(type)) {
|
|
96197
|
+
console.log(`[QA] Loaded scoring weights for ${type}: visual=${kbWeights.visual_quality}%, content=${kbWeights.content_quality}%, expert=${kbWeights.expert_compliance}%, accessibility=${kbWeights.accessibility}%`);
|
|
96198
|
+
if (!this._loggedWeights) this._loggedWeights = /* @__PURE__ */ new Set();
|
|
96199
|
+
this._loggedWeights.add(type);
|
|
96200
|
+
}
|
|
96201
|
+
} catch {
|
|
96202
|
+
this.assessmentWeights = DEFAULT_ASSESSMENT_WEIGHTS;
|
|
96203
|
+
}
|
|
96119
96204
|
try {
|
|
96120
96205
|
const glanceResult = this.kb.getGlanceTest();
|
|
96121
96206
|
this.glanceTestSeconds = 3;
|
|
@@ -99409,7 +99494,7 @@ if (typeof process !== "undefined" && process.argv[1]?.includes("CodeQualityVali
|
|
|
99409
99494
|
}
|
|
99410
99495
|
|
|
99411
99496
|
// src/index.ts
|
|
99412
|
-
var VERSION = "
|
|
99497
|
+
var VERSION = "4.1.0";
|
|
99413
99498
|
async function generate(options) {
|
|
99414
99499
|
const {
|
|
99415
99500
|
content,
|
package/dist/index.mjs
CHANGED
|
@@ -2040,21 +2040,52 @@ async function initSlideGenerator() {
|
|
|
2040
2040
|
|
|
2041
2041
|
// src/core/SlideGeneratorV2.ts
|
|
2042
2042
|
import { marked } from "marked";
|
|
2043
|
-
var
|
|
2044
|
-
// Consulting decks: 40-80 words per slide is NORMAL
|
|
2043
|
+
var DEFAULT_CONFIGS = {
|
|
2044
|
+
// Consulting decks: 40-80 words per slide is NORMAL (from KB)
|
|
2045
2045
|
consulting_deck: {
|
|
2046
2046
|
maxBulletsPerSlide: 7,
|
|
2047
|
-
maxWordsPerSlide:
|
|
2048
|
-
//
|
|
2047
|
+
maxWordsPerSlide: 80,
|
|
2048
|
+
// KB: words_per_slide.max
|
|
2049
|
+
minBulletsToKeep: 3
|
|
2050
|
+
},
|
|
2051
|
+
investment_banking: {
|
|
2052
|
+
maxBulletsPerSlide: 8,
|
|
2053
|
+
maxWordsPerSlide: 120,
|
|
2054
|
+
// KB: words_per_slide.max
|
|
2049
2055
|
minBulletsToKeep: 3
|
|
2050
2056
|
},
|
|
2051
|
-
// Keynotes: fewer words, more impact
|
|
2052
|
-
|
|
2057
|
+
// Keynotes: fewer words, more impact (from KB)
|
|
2058
|
+
ted_keynote: {
|
|
2053
2059
|
maxBulletsPerSlide: 4,
|
|
2060
|
+
maxWordsPerSlide: 15,
|
|
2061
|
+
// KB: words_per_slide.max
|
|
2062
|
+
minBulletsToKeep: 2
|
|
2063
|
+
},
|
|
2064
|
+
sales_pitch: {
|
|
2065
|
+
maxBulletsPerSlide: 5,
|
|
2054
2066
|
maxWordsPerSlide: 30,
|
|
2067
|
+
// KB: words_per_slide.max
|
|
2068
|
+
minBulletsToKeep: 2
|
|
2069
|
+
},
|
|
2070
|
+
investor_pitch: {
|
|
2071
|
+
maxBulletsPerSlide: 5,
|
|
2072
|
+
maxWordsPerSlide: 50,
|
|
2073
|
+
// KB: words_per_slide.max
|
|
2055
2074
|
minBulletsToKeep: 2
|
|
2056
2075
|
},
|
|
2057
|
-
|
|
2076
|
+
technical_presentation: {
|
|
2077
|
+
maxBulletsPerSlide: 6,
|
|
2078
|
+
maxWordsPerSlide: 100,
|
|
2079
|
+
// KB: words_per_slide.max
|
|
2080
|
+
minBulletsToKeep: 3
|
|
2081
|
+
},
|
|
2082
|
+
all_hands: {
|
|
2083
|
+
maxBulletsPerSlide: 5,
|
|
2084
|
+
maxWordsPerSlide: 40,
|
|
2085
|
+
// KB: words_per_slide.max
|
|
2086
|
+
minBulletsToKeep: 2
|
|
2087
|
+
},
|
|
2088
|
+
// Default: fallback
|
|
2058
2089
|
default: {
|
|
2059
2090
|
maxBulletsPerSlide: 6,
|
|
2060
2091
|
maxWordsPerSlide: 80,
|
|
@@ -2064,9 +2095,25 @@ var MODE_CONFIGS = {
|
|
|
2064
2095
|
var SlideGeneratorV2 = class {
|
|
2065
2096
|
config;
|
|
2066
2097
|
presentationType;
|
|
2098
|
+
/**
|
|
2099
|
+
* Create a slide generator with default configs.
|
|
2100
|
+
* For KB-driven configs, use createSlideGeneratorV2WithConfig() instead.
|
|
2101
|
+
*/
|
|
2067
2102
|
constructor(presentationType = "consulting_deck") {
|
|
2068
2103
|
this.presentationType = presentationType;
|
|
2069
|
-
this.config =
|
|
2104
|
+
this.config = DEFAULT_CONFIGS[presentationType] || DEFAULT_CONFIGS.default;
|
|
2105
|
+
}
|
|
2106
|
+
/**
|
|
2107
|
+
* Override config with KB-loaded values at runtime.
|
|
2108
|
+
*/
|
|
2109
|
+
setConfig(config) {
|
|
2110
|
+
this.config = config;
|
|
2111
|
+
}
|
|
2112
|
+
/**
|
|
2113
|
+
* Get current config (useful for debugging).
|
|
2114
|
+
*/
|
|
2115
|
+
getConfig() {
|
|
2116
|
+
return this.config;
|
|
2070
2117
|
}
|
|
2071
2118
|
/**
|
|
2072
2119
|
* Generate slides from markdown content.
|
|
@@ -4298,7 +4345,7 @@ Output: ${htmlPath}`);
|
|
|
4298
4345
|
}
|
|
4299
4346
|
|
|
4300
4347
|
// src/qa/SlideQualityReviewer.ts
|
|
4301
|
-
var
|
|
4348
|
+
var DEFAULT_ASSESSMENT_WEIGHTS = {
|
|
4302
4349
|
visualImpact: 0.25,
|
|
4303
4350
|
contentClarity: 0.2,
|
|
4304
4351
|
layoutBalance: 0.15,
|
|
@@ -4307,6 +4354,29 @@ var ASSESSMENT_WEIGHTS = {
|
|
|
4307
4354
|
colorHarmony: 0.1,
|
|
4308
4355
|
audienceAppropriate: 0.05
|
|
4309
4356
|
};
|
|
4357
|
+
function computeWeightsFromKB(kbWeights) {
|
|
4358
|
+
const totalKB = kbWeights.visual_quality + kbWeights.content_quality + kbWeights.expert_compliance + kbWeights.accessibility;
|
|
4359
|
+
const vq = kbWeights.visual_quality / totalKB;
|
|
4360
|
+
const cq = kbWeights.content_quality / totalKB;
|
|
4361
|
+
const ec = kbWeights.expert_compliance / totalKB;
|
|
4362
|
+
const ac = kbWeights.accessibility / totalKB;
|
|
4363
|
+
return {
|
|
4364
|
+
visualImpact: vq * 0.6,
|
|
4365
|
+
// 60% of visual_quality
|
|
4366
|
+
colorHarmony: vq * 0.4,
|
|
4367
|
+
// 40% of visual_quality
|
|
4368
|
+
contentClarity: cq * 0.8,
|
|
4369
|
+
// 80% of content_quality
|
|
4370
|
+
audienceAppropriate: cq * 0.2,
|
|
4371
|
+
// 20% of content_quality
|
|
4372
|
+
layoutBalance: ec * 0.5,
|
|
4373
|
+
// 50% of expert_compliance
|
|
4374
|
+
typographyHierarchy: ec * 0.5,
|
|
4375
|
+
// 50% of expert_compliance
|
|
4376
|
+
whitespaceUsage: ac
|
|
4377
|
+
// 100% of accessibility
|
|
4378
|
+
};
|
|
4379
|
+
}
|
|
4310
4380
|
var SlideQualityReviewer = class {
|
|
4311
4381
|
kb;
|
|
4312
4382
|
initialized = false;
|
|
@@ -4315,6 +4385,9 @@ var SlideQualityReviewer = class {
|
|
|
4315
4385
|
whitespaceRules;
|
|
4316
4386
|
bulletLimit;
|
|
4317
4387
|
glanceTestSeconds;
|
|
4388
|
+
// KB-loaded scoring weights (computed from KB per presentation type)
|
|
4389
|
+
assessmentWeights = DEFAULT_ASSESSMENT_WEIGHTS;
|
|
4390
|
+
_loggedWeights = null;
|
|
4318
4391
|
// Expert rules from KB
|
|
4319
4392
|
hasCialdini = false;
|
|
4320
4393
|
hasGestalt = false;
|
|
@@ -4345,7 +4418,7 @@ var SlideQualityReviewer = class {
|
|
|
4345
4418
|
};
|
|
4346
4419
|
let totalScore = 0;
|
|
4347
4420
|
for (const [key, assessment] of Object.entries(assessments)) {
|
|
4348
|
-
const weight =
|
|
4421
|
+
const weight = this.assessmentWeights[key];
|
|
4349
4422
|
totalScore += assessment.score * weight;
|
|
4350
4423
|
}
|
|
4351
4424
|
const score = Math.round(totalScore);
|
|
@@ -4400,6 +4473,18 @@ var SlideQualityReviewer = class {
|
|
|
4400
4473
|
this.wordLimits = wordLimitsResult.value;
|
|
4401
4474
|
const whitespaceResult = this.kb.getWhitespaceRules(type);
|
|
4402
4475
|
this.whitespaceRules = whitespaceResult.value;
|
|
4476
|
+
try {
|
|
4477
|
+
const weightsResult = this.kb.getScoringWeights(type);
|
|
4478
|
+
const kbWeights = weightsResult.value;
|
|
4479
|
+
this.assessmentWeights = computeWeightsFromKB(kbWeights);
|
|
4480
|
+
if (!this._loggedWeights?.has(type)) {
|
|
4481
|
+
console.log(`[QA] Loaded scoring weights for ${type}: visual=${kbWeights.visual_quality}%, content=${kbWeights.content_quality}%, expert=${kbWeights.expert_compliance}%, accessibility=${kbWeights.accessibility}%`);
|
|
4482
|
+
if (!this._loggedWeights) this._loggedWeights = /* @__PURE__ */ new Set();
|
|
4483
|
+
this._loggedWeights.add(type);
|
|
4484
|
+
}
|
|
4485
|
+
} catch {
|
|
4486
|
+
this.assessmentWeights = DEFAULT_ASSESSMENT_WEIGHTS;
|
|
4487
|
+
}
|
|
4403
4488
|
try {
|
|
4404
4489
|
const glanceResult = this.kb.getGlanceTest();
|
|
4405
4490
|
this.glanceTestSeconds = 3;
|
|
@@ -7693,7 +7778,7 @@ if (typeof process !== "undefined" && process.argv[1]?.includes("CodeQualityVali
|
|
|
7693
7778
|
}
|
|
7694
7779
|
|
|
7695
7780
|
// src/index.ts
|
|
7696
|
-
var VERSION = "
|
|
7781
|
+
var VERSION = "4.1.0";
|
|
7697
7782
|
async function generate(options) {
|
|
7698
7783
|
const {
|
|
7699
7784
|
content,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-presentation-master",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.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",
|