vidpipe 1.2.2 → 1.2.3
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/dist/index.d.ts +2 -2
- package/dist/index.js +4766 -123
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/agents/BaseAgent.d.ts +0 -52
- package/dist/agents/BaseAgent.d.ts.map +0 -1
- package/dist/agents/BaseAgent.js +0 -102
- package/dist/agents/BaseAgent.js.map +0 -1
- package/dist/agents/BlogAgent.d.ts +0 -3
- package/dist/agents/BlogAgent.d.ts.map +0 -1
- package/dist/agents/BlogAgent.js +0 -163
- package/dist/agents/BlogAgent.js.map +0 -1
- package/dist/agents/ChapterAgent.d.ts +0 -11
- package/dist/agents/ChapterAgent.d.ts.map +0 -1
- package/dist/agents/ChapterAgent.js +0 -191
- package/dist/agents/ChapterAgent.js.map +0 -1
- package/dist/agents/MediumVideoAgent.d.ts +0 -3
- package/dist/agents/MediumVideoAgent.d.ts.map +0 -1
- package/dist/agents/MediumVideoAgent.js +0 -219
- package/dist/agents/MediumVideoAgent.js.map +0 -1
- package/dist/agents/ShortsAgent.d.ts +0 -3
- package/dist/agents/ShortsAgent.d.ts.map +0 -1
- package/dist/agents/ShortsAgent.js +0 -243
- package/dist/agents/ShortsAgent.js.map +0 -1
- package/dist/agents/SilenceRemovalAgent.d.ts +0 -9
- package/dist/agents/SilenceRemovalAgent.d.ts.map +0 -1
- package/dist/agents/SilenceRemovalAgent.js +0 -209
- package/dist/agents/SilenceRemovalAgent.js.map +0 -1
- package/dist/agents/SocialMediaAgent.d.ts +0 -4
- package/dist/agents/SocialMediaAgent.d.ts.map +0 -1
- package/dist/agents/SocialMediaAgent.js +0 -248
- package/dist/agents/SocialMediaAgent.js.map +0 -1
- package/dist/agents/SummaryAgent.d.ts +0 -11
- package/dist/agents/SummaryAgent.d.ts.map +0 -1
- package/dist/agents/SummaryAgent.js +0 -333
- package/dist/agents/SummaryAgent.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -4
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -230
- package/dist/commands/doctor.js.map +0 -1
- package/dist/config/brand.d.ts +0 -29
- package/dist/config/brand.d.ts.map +0 -1
- package/dist/config/brand.js +0 -83
- package/dist/config/brand.js.map +0 -1
- package/dist/config/environment.d.ts +0 -39
- package/dist/config/environment.d.ts.map +0 -1
- package/dist/config/environment.js +0 -47
- package/dist/config/environment.js.map +0 -1
- package/dist/config/ffmpegResolver.d.ts +0 -3
- package/dist/config/ffmpegResolver.d.ts.map +0 -1
- package/dist/config/ffmpegResolver.js +0 -37
- package/dist/config/ffmpegResolver.js.map +0 -1
- package/dist/config/logger.d.ts +0 -5
- package/dist/config/logger.d.ts.map +0 -1
- package/dist/config/logger.js +0 -13
- package/dist/config/logger.js.map +0 -1
- package/dist/config/pricing.d.ts +0 -34
- package/dist/config/pricing.d.ts.map +0 -1
- package/dist/config/pricing.js +0 -71
- package/dist/config/pricing.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/pipeline.d.ts +0 -57
- package/dist/pipeline.d.ts.map +0 -1
- package/dist/pipeline.js +0 -324
- package/dist/pipeline.js.map +0 -1
- package/dist/providers/ClaudeProvider.d.ts +0 -14
- package/dist/providers/ClaudeProvider.d.ts.map +0 -1
- package/dist/providers/ClaudeProvider.js +0 -182
- package/dist/providers/ClaudeProvider.js.map +0 -1
- package/dist/providers/CopilotProvider.d.ts +0 -17
- package/dist/providers/CopilotProvider.d.ts.map +0 -1
- package/dist/providers/CopilotProvider.js +0 -149
- package/dist/providers/CopilotProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts +0 -14
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js +0 -175
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/index.d.ts +0 -18
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -61
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/types.d.ts +0 -112
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -8
- package/dist/providers/types.js.map +0 -1
- package/dist/services/captionGeneration.d.ts +0 -7
- package/dist/services/captionGeneration.d.ts.map +0 -1
- package/dist/services/captionGeneration.js +0 -29
- package/dist/services/captionGeneration.js.map +0 -1
- package/dist/services/costTracker.d.ts +0 -63
- package/dist/services/costTracker.d.ts.map +0 -1
- package/dist/services/costTracker.js +0 -137
- package/dist/services/costTracker.js.map +0 -1
- package/dist/services/fileWatcher.d.ts +0 -19
- package/dist/services/fileWatcher.d.ts.map +0 -1
- package/dist/services/fileWatcher.js +0 -120
- package/dist/services/fileWatcher.js.map +0 -1
- package/dist/services/gitOperations.d.ts +0 -3
- package/dist/services/gitOperations.d.ts.map +0 -1
- package/dist/services/gitOperations.js +0 -43
- package/dist/services/gitOperations.js.map +0 -1
- package/dist/services/socialPosting.d.ts +0 -38
- package/dist/services/socialPosting.d.ts.map +0 -1
- package/dist/services/socialPosting.js +0 -102
- package/dist/services/socialPosting.js.map +0 -1
- package/dist/services/transcription.d.ts +0 -3
- package/dist/services/transcription.d.ts.map +0 -1
- package/dist/services/transcription.js +0 -100
- package/dist/services/transcription.js.map +0 -1
- package/dist/services/videoIngestion.d.ts +0 -3
- package/dist/services/videoIngestion.d.ts.map +0 -1
- package/dist/services/videoIngestion.js +0 -104
- package/dist/services/videoIngestion.js.map +0 -1
- package/dist/tools/captions/captionGenerator.d.ts +0 -84
- package/dist/tools/captions/captionGenerator.d.ts.map +0 -1
- package/dist/tools/captions/captionGenerator.js +0 -390
- package/dist/tools/captions/captionGenerator.js.map +0 -1
- package/dist/tools/ffmpeg/aspectRatio.d.ts +0 -101
- package/dist/tools/ffmpeg/aspectRatio.d.ts.map +0 -1
- package/dist/tools/ffmpeg/aspectRatio.js +0 -339
- package/dist/tools/ffmpeg/aspectRatio.js.map +0 -1
- package/dist/tools/ffmpeg/audioExtraction.d.ts +0 -16
- package/dist/tools/ffmpeg/audioExtraction.d.ts.map +0 -1
- package/dist/tools/ffmpeg/audioExtraction.js +0 -87
- package/dist/tools/ffmpeg/audioExtraction.js.map +0 -1
- package/dist/tools/ffmpeg/captionBurning.d.ts +0 -8
- package/dist/tools/ffmpeg/captionBurning.d.ts.map +0 -1
- package/dist/tools/ffmpeg/captionBurning.js +0 -72
- package/dist/tools/ffmpeg/captionBurning.js.map +0 -1
- package/dist/tools/ffmpeg/clipExtraction.d.ts +0 -38
- package/dist/tools/ffmpeg/clipExtraction.d.ts.map +0 -1
- package/dist/tools/ffmpeg/clipExtraction.js +0 -215
- package/dist/tools/ffmpeg/clipExtraction.js.map +0 -1
- package/dist/tools/ffmpeg/faceDetection.d.ts +0 -127
- package/dist/tools/ffmpeg/faceDetection.d.ts.map +0 -1
- package/dist/tools/ffmpeg/faceDetection.js +0 -501
- package/dist/tools/ffmpeg/faceDetection.js.map +0 -1
- package/dist/tools/ffmpeg/frameCapture.d.ts +0 -10
- package/dist/tools/ffmpeg/frameCapture.d.ts.map +0 -1
- package/dist/tools/ffmpeg/frameCapture.js +0 -49
- package/dist/tools/ffmpeg/frameCapture.js.map +0 -1
- package/dist/tools/ffmpeg/silenceDetection.d.ts +0 -10
- package/dist/tools/ffmpeg/silenceDetection.d.ts.map +0 -1
- package/dist/tools/ffmpeg/silenceDetection.js +0 -56
- package/dist/tools/ffmpeg/silenceDetection.js.map +0 -1
- package/dist/tools/ffmpeg/singlePassEdit.d.ts +0 -25
- package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +0 -1
- package/dist/tools/ffmpeg/singlePassEdit.js +0 -124
- package/dist/tools/ffmpeg/singlePassEdit.js.map +0 -1
- package/dist/tools/search/exaClient.d.ts +0 -8
- package/dist/tools/search/exaClient.d.ts.map +0 -1
- package/dist/tools/search/exaClient.js +0 -38
- package/dist/tools/search/exaClient.js.map +0 -1
- package/dist/tools/whisper/whisperClient.d.ts +0 -3
- package/dist/tools/whisper/whisperClient.d.ts.map +0 -1
- package/dist/tools/whisper/whisperClient.js +0 -77
- package/dist/tools/whisper/whisperClient.js.map +0 -1
- package/dist/types/index.d.ts +0 -305
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -44
- package/dist/types/index.js.map +0 -1
package/dist/config/brand.js
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import { getConfig } from './environment';
|
|
3
|
-
import logger from './logger';
|
|
4
|
-
const defaultBrand = {
|
|
5
|
-
name: 'Creator',
|
|
6
|
-
handle: '@creator',
|
|
7
|
-
tagline: '',
|
|
8
|
-
voice: {
|
|
9
|
-
tone: 'professional, friendly',
|
|
10
|
-
personality: 'A knowledgeable content creator.',
|
|
11
|
-
style: 'Clear and concise.',
|
|
12
|
-
},
|
|
13
|
-
advocacy: {
|
|
14
|
-
primary: [],
|
|
15
|
-
interests: [],
|
|
16
|
-
avoids: [],
|
|
17
|
-
},
|
|
18
|
-
customVocabulary: [],
|
|
19
|
-
hashtags: {
|
|
20
|
-
always: [],
|
|
21
|
-
preferred: [],
|
|
22
|
-
platforms: {},
|
|
23
|
-
},
|
|
24
|
-
contentGuidelines: {
|
|
25
|
-
shortsFocus: 'Highlight key moments and insights.',
|
|
26
|
-
blogFocus: 'Educational and informative content.',
|
|
27
|
-
socialFocus: 'Engaging and authentic posts.',
|
|
28
|
-
},
|
|
29
|
-
};
|
|
30
|
-
let cachedBrand = null;
|
|
31
|
-
/** Validate brand config and log warnings for missing or empty fields. */
|
|
32
|
-
function validateBrandConfig(brand) {
|
|
33
|
-
const requiredStrings = ['name', 'handle', 'tagline'];
|
|
34
|
-
for (const field of requiredStrings) {
|
|
35
|
-
if (!brand[field]) {
|
|
36
|
-
logger.warn(`brand.json: missing or empty field "${field}"`);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
const requiredObjects = [
|
|
40
|
-
{ key: 'voice', subKeys: ['tone', 'personality', 'style'] },
|
|
41
|
-
{ key: 'advocacy', subKeys: ['primary', 'interests'] },
|
|
42
|
-
{ key: 'hashtags', subKeys: ['always', 'preferred'] },
|
|
43
|
-
{ key: 'contentGuidelines', subKeys: ['shortsFocus', 'blogFocus', 'socialFocus'] },
|
|
44
|
-
];
|
|
45
|
-
for (const { key, subKeys } of requiredObjects) {
|
|
46
|
-
if (!brand[key]) {
|
|
47
|
-
logger.warn(`brand.json: missing section "${key}"`);
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
const section = brand[key];
|
|
51
|
-
for (const sub of subKeys) {
|
|
52
|
-
if (!section[sub] || (Array.isArray(section[sub]) && section[sub].length === 0)) {
|
|
53
|
-
logger.warn(`brand.json: missing or empty field "${key}.${sub}"`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
if (!brand.customVocabulary || brand.customVocabulary.length === 0) {
|
|
59
|
-
logger.warn('brand.json: "customVocabulary" is empty — Whisper prompt will be blank');
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
export function getBrandConfig() {
|
|
63
|
-
if (cachedBrand)
|
|
64
|
-
return cachedBrand;
|
|
65
|
-
const config = getConfig();
|
|
66
|
-
const brandPath = config.BRAND_PATH;
|
|
67
|
-
if (!fs.existsSync(brandPath)) {
|
|
68
|
-
logger.warn('brand.json not found — using defaults');
|
|
69
|
-
cachedBrand = { ...defaultBrand };
|
|
70
|
-
return cachedBrand;
|
|
71
|
-
}
|
|
72
|
-
const raw = fs.readFileSync(brandPath, 'utf-8');
|
|
73
|
-
cachedBrand = JSON.parse(raw);
|
|
74
|
-
validateBrandConfig(cachedBrand);
|
|
75
|
-
logger.info(`Brand config loaded: ${cachedBrand.name}`);
|
|
76
|
-
return cachedBrand;
|
|
77
|
-
}
|
|
78
|
-
// Helper to get Whisper prompt from brand vocabulary
|
|
79
|
-
export function getWhisperPrompt() {
|
|
80
|
-
const brand = getBrandConfig();
|
|
81
|
-
return brand.customVocabulary.join(', ');
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=brand.js.map
|
package/dist/config/brand.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/config/brand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,MAAM,MAAM,UAAU,CAAA;AA6B7B,MAAM,YAAY,GAAgB;IAChC,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,EAAE;IACX,KAAK,EAAE;QACL,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,kCAAkC;QAC/C,KAAK,EAAE,oBAAoB;KAC5B;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,EAAE;KACX;IACD,gBAAgB,EAAE,EAAE;IACpB,QAAQ,EAAE;QACR,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;KACd;IACD,iBAAiB,EAAE;QACjB,WAAW,EAAE,qCAAqC;QAClD,SAAS,EAAE,sCAAsC;QACjD,WAAW,EAAE,+BAA+B;KAC7C;CACF,CAAA;AAED,IAAI,WAAW,GAAuB,IAAI,CAAA;AAE1C,0EAA0E;AAC1E,SAAS,mBAAmB,CAAC,KAA2B;IACtD,MAAM,eAAe,GAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC5E,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,uCAAuC,KAAK,GAAG,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAoD;QACvE,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE;QAC3D,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE;QACtD,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE;QACrD,EAAE,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE;KACnF,CAAA;IAED,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,eAAe,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,gCAAgC,GAAG,GAAG,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAA4B,CAAA;YACrD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAK,OAAO,CAAC,GAAG,CAAe,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC/F,MAAM,CAAC,IAAI,CAAC,uCAAuC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAA;gBACnE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;IACvF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,WAAW;QAAE,OAAO,WAAW,CAAA;IAEnC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAA;IAEnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;QACpD,WAAW,GAAG,EAAE,GAAG,YAAY,EAAE,CAAA;QACjC,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IAC/C,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAA;IAC5C,mBAAmB,CAAC,WAAW,CAAC,CAAA;IAChC,MAAM,CAAC,IAAI,CAAC,wBAAwB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;IACvD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAA;IAC9B,OAAO,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
export interface AppEnvironment {
|
|
2
|
-
OPENAI_API_KEY: string;
|
|
3
|
-
WATCH_FOLDER: string;
|
|
4
|
-
REPO_ROOT: string;
|
|
5
|
-
FFMPEG_PATH: string;
|
|
6
|
-
FFPROBE_PATH: string;
|
|
7
|
-
EXA_API_KEY: string;
|
|
8
|
-
LLM_PROVIDER: string;
|
|
9
|
-
LLM_MODEL: string;
|
|
10
|
-
ANTHROPIC_API_KEY: string;
|
|
11
|
-
OUTPUT_DIR: string;
|
|
12
|
-
BRAND_PATH: string;
|
|
13
|
-
VERBOSE: boolean;
|
|
14
|
-
SKIP_GIT: boolean;
|
|
15
|
-
SKIP_SILENCE_REMOVAL: boolean;
|
|
16
|
-
SKIP_SHORTS: boolean;
|
|
17
|
-
SKIP_MEDIUM_CLIPS: boolean;
|
|
18
|
-
SKIP_SOCIAL: boolean;
|
|
19
|
-
SKIP_CAPTIONS: boolean;
|
|
20
|
-
}
|
|
21
|
-
export interface CLIOptions {
|
|
22
|
-
watchDir?: string;
|
|
23
|
-
outputDir?: string;
|
|
24
|
-
openaiKey?: string;
|
|
25
|
-
exaKey?: string;
|
|
26
|
-
brand?: string;
|
|
27
|
-
verbose?: boolean;
|
|
28
|
-
git?: boolean;
|
|
29
|
-
silenceRemoval?: boolean;
|
|
30
|
-
shorts?: boolean;
|
|
31
|
-
mediumClips?: boolean;
|
|
32
|
-
social?: boolean;
|
|
33
|
-
captions?: boolean;
|
|
34
|
-
}
|
|
35
|
-
export declare function validateRequiredKeys(): void;
|
|
36
|
-
/** Merge CLI options → env vars → defaults. Call before getConfig(). */
|
|
37
|
-
export declare function initConfig(cli?: CLIOptions): AppEnvironment;
|
|
38
|
-
export declare function getConfig(): AppEnvironment;
|
|
39
|
-
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAID,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,GAAG,GAAE,UAAe,GAAG,cAAc,CAyB/D;AAED,wBAAgB,SAAS,IAAI,cAAc,CAO1C"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import path from 'path';
|
|
2
|
-
import fs from 'fs';
|
|
3
|
-
import dotenv from 'dotenv';
|
|
4
|
-
// Load .env file from repo root
|
|
5
|
-
const envPath = path.join(process.cwd(), '.env');
|
|
6
|
-
if (fs.existsSync(envPath)) {
|
|
7
|
-
dotenv.config({ path: envPath });
|
|
8
|
-
}
|
|
9
|
-
let config = null;
|
|
10
|
-
export function validateRequiredKeys() {
|
|
11
|
-
if (!config?.OPENAI_API_KEY && !process.env.OPENAI_API_KEY) {
|
|
12
|
-
throw new Error('Missing required: OPENAI_API_KEY (set via --openai-key or env var)');
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
/** Merge CLI options → env vars → defaults. Call before getConfig(). */
|
|
16
|
-
export function initConfig(cli = {}) {
|
|
17
|
-
const repoRoot = process.env.REPO_ROOT || process.cwd();
|
|
18
|
-
config = {
|
|
19
|
-
OPENAI_API_KEY: cli.openaiKey || process.env.OPENAI_API_KEY || '',
|
|
20
|
-
WATCH_FOLDER: cli.watchDir || process.env.WATCH_FOLDER || path.join(repoRoot, 'watch'),
|
|
21
|
-
REPO_ROOT: repoRoot,
|
|
22
|
-
FFMPEG_PATH: process.env.FFMPEG_PATH || 'ffmpeg', // legacy; prefer ffmpegResolver
|
|
23
|
-
FFPROBE_PATH: process.env.FFPROBE_PATH || 'ffprobe', // legacy; prefer ffmpegResolver
|
|
24
|
-
EXA_API_KEY: cli.exaKey || process.env.EXA_API_KEY || '',
|
|
25
|
-
LLM_PROVIDER: process.env.LLM_PROVIDER || 'copilot',
|
|
26
|
-
LLM_MODEL: process.env.LLM_MODEL || '',
|
|
27
|
-
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY || '',
|
|
28
|
-
OUTPUT_DIR: cli.outputDir || process.env.OUTPUT_DIR || path.join(repoRoot, 'recordings'),
|
|
29
|
-
BRAND_PATH: cli.brand || process.env.BRAND_PATH || path.join(repoRoot, 'brand.json'),
|
|
30
|
-
VERBOSE: cli.verbose ?? false,
|
|
31
|
-
SKIP_GIT: cli.git === false,
|
|
32
|
-
SKIP_SILENCE_REMOVAL: cli.silenceRemoval === false,
|
|
33
|
-
SKIP_SHORTS: cli.shorts === false,
|
|
34
|
-
SKIP_MEDIUM_CLIPS: cli.mediumClips === false,
|
|
35
|
-
SKIP_SOCIAL: cli.social === false,
|
|
36
|
-
SKIP_CAPTIONS: cli.captions === false,
|
|
37
|
-
};
|
|
38
|
-
return config;
|
|
39
|
-
}
|
|
40
|
-
export function getConfig() {
|
|
41
|
-
if (config) {
|
|
42
|
-
return config;
|
|
43
|
-
}
|
|
44
|
-
// Fallback: init with no CLI options (pure env-var mode)
|
|
45
|
-
return initConfig();
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=environment.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,gCAAgC;AAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;AAChD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAClC,CAAC;AAsCD,IAAI,MAAM,GAA0B,IAAI,CAAA;AAExC,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,MAAM,EAAE,cAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;IACvF,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,MAAkB,EAAE;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAEvD,MAAM,GAAG;QACP,cAAc,EAAE,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;QACjE,YAAY,EAAE,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;QACtF,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,QAAQ,EAAI,gCAAgC;QACpF,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS,EAAE,gCAAgC;QACrF,WAAW,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QACxD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS;QACnD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACtD,UAAU,EAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;QACvF,UAAU,EAAE,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;QACpF,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,KAAK;QAC7B,QAAQ,EAAE,GAAG,CAAC,GAAG,KAAK,KAAK;QAC3B,oBAAoB,EAAE,GAAG,CAAC,cAAc,KAAK,KAAK;QAClD,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK;QACjC,iBAAiB,EAAE,GAAG,CAAC,WAAW,KAAK,KAAK;QAC5C,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK;QACjC,aAAa,EAAE,GAAG,CAAC,QAAQ,KAAK,KAAK;KACtC,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAA;IACf,CAAC;IAED,yDAAyD;IACzD,OAAO,UAAU,EAAE,CAAA;AACrB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpegResolver.d.ts","sourceRoot":"","sources":["../../src/config/ffmpegResolver.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,IAAI,MAAM,CActC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAcvC"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module';
|
|
2
|
-
import { existsSync } from 'fs';
|
|
3
|
-
import logger from './logger.js';
|
|
4
|
-
const require = createRequire(import.meta.url);
|
|
5
|
-
export function getFFmpegPath() {
|
|
6
|
-
if (process.env.FFMPEG_PATH) {
|
|
7
|
-
logger.debug(`FFmpeg: using FFMPEG_PATH env var: ${process.env.FFMPEG_PATH}`);
|
|
8
|
-
return process.env.FFMPEG_PATH;
|
|
9
|
-
}
|
|
10
|
-
try {
|
|
11
|
-
const staticPath = require('ffmpeg-static');
|
|
12
|
-
if (staticPath && existsSync(staticPath)) {
|
|
13
|
-
logger.debug(`FFmpeg: using ffmpeg-static: ${staticPath}`);
|
|
14
|
-
return staticPath;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
catch { /* ffmpeg-static not available */ }
|
|
18
|
-
logger.debug('FFmpeg: falling back to system PATH');
|
|
19
|
-
return 'ffmpeg';
|
|
20
|
-
}
|
|
21
|
-
export function getFFprobePath() {
|
|
22
|
-
if (process.env.FFPROBE_PATH) {
|
|
23
|
-
logger.debug(`FFprobe: using FFPROBE_PATH env var: ${process.env.FFPROBE_PATH}`);
|
|
24
|
-
return process.env.FFPROBE_PATH;
|
|
25
|
-
}
|
|
26
|
-
try {
|
|
27
|
-
const { path: probePath } = require('@ffprobe-installer/ffprobe');
|
|
28
|
-
if (probePath && existsSync(probePath)) {
|
|
29
|
-
logger.debug(`FFprobe: using @ffprobe-installer/ffprobe: ${probePath}`);
|
|
30
|
-
return probePath;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
catch { /* @ffprobe-installer/ffprobe not available */ }
|
|
34
|
-
logger.debug('FFprobe: falling back to system PATH');
|
|
35
|
-
return 'ffprobe';
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=ffmpegResolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpegResolver.js","sourceRoot":"","sources":["../../src/config/ffmpegResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,UAAU,aAAa;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,sCAAsC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC9E,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACjC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAW,CAAC;QACtD,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;YAC3D,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,iCAAiC,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,wCAAwC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QACjF,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAClC,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAqB,CAAC;QACtF,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,CAAC,8CAA8C,SAAS,EAAE,CAAC,CAAC;YACxE,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,8CAA8C,CAAC,CAAC;IAC1D,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/config/logger.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/config/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,QAAA,MAAM,MAAM,gBASV,CAAA;AAEF,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED,eAAe,MAAM,CAAA"}
|
package/dist/config/logger.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import winston from 'winston';
|
|
2
|
-
const logger = winston.createLogger({
|
|
3
|
-
level: 'info',
|
|
4
|
-
format: winston.format.combine(winston.format.timestamp(), winston.format.printf(({ timestamp, level, message }) => {
|
|
5
|
-
return `${timestamp} [${level.toUpperCase()}]: ${message}`;
|
|
6
|
-
})),
|
|
7
|
-
transports: [new winston.transports.Console()],
|
|
8
|
-
});
|
|
9
|
-
export function setVerbose() {
|
|
10
|
-
logger.level = 'debug';
|
|
11
|
-
}
|
|
12
|
-
export default logger;
|
|
13
|
-
//# sourceMappingURL=logger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/config/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QACtD,OAAO,GAAG,SAAS,KAAK,KAAK,CAAC,WAAW,EAAE,MAAM,OAAO,EAAE,CAAA;IAC5D,CAAC,CAAC,CACH;IACD,UAAU,EAAE,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;CAC/C,CAAC,CAAA;AAEF,MAAM,UAAU,UAAU;IACxB,MAAM,CAAC,KAAK,GAAG,OAAO,CAAA;AACxB,CAAC;AAED,eAAe,MAAM,CAAA"}
|
package/dist/config/pricing.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LLM Model Pricing Configuration
|
|
3
|
-
*
|
|
4
|
-
* Per-model pricing for cost calculation. Updated Feb 2026.
|
|
5
|
-
* Copilot uses Premium Request Units (PRUs), others use per-token pricing.
|
|
6
|
-
*/
|
|
7
|
-
export interface ModelPricing {
|
|
8
|
-
/** Price per 1M input tokens (USD) — for OpenAI/Claude */
|
|
9
|
-
inputPer1M?: number;
|
|
10
|
-
/** Price per 1M output tokens (USD) — for OpenAI/Claude */
|
|
11
|
-
outputPer1M?: number;
|
|
12
|
-
/** Premium request multiplier — for Copilot */
|
|
13
|
-
pruMultiplier?: number;
|
|
14
|
-
/** Whether this model is included free on paid Copilot plans */
|
|
15
|
-
copilotIncluded?: boolean;
|
|
16
|
-
}
|
|
17
|
-
/** Overage rate for Copilot premium requests: $0.04 per PRU */
|
|
18
|
-
export declare const COPILOT_PRU_OVERAGE_RATE = 0.04;
|
|
19
|
-
export declare const MODEL_PRICING: Record<string, ModelPricing>;
|
|
20
|
-
/**
|
|
21
|
-
* Calculate cost for a single LLM call using per-token pricing.
|
|
22
|
-
* Returns USD amount.
|
|
23
|
-
*/
|
|
24
|
-
export declare function calculateTokenCost(model: string, inputTokens: number, outputTokens: number): number;
|
|
25
|
-
/**
|
|
26
|
-
* Calculate PRU cost for a Copilot premium request.
|
|
27
|
-
* Returns PRU count consumed (multiply by $0.04 for overage cost).
|
|
28
|
-
*/
|
|
29
|
-
export declare function calculatePRUCost(model: string): number;
|
|
30
|
-
/**
|
|
31
|
-
* Look up model pricing. Returns undefined if model is unknown.
|
|
32
|
-
*/
|
|
33
|
-
export declare function getModelPricing(model: string): ModelPricing | undefined;
|
|
34
|
-
//# sourceMappingURL=pricing.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/config/pricing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA8BtD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,CAOR;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAOvE"}
|
package/dist/config/pricing.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LLM Model Pricing Configuration
|
|
3
|
-
*
|
|
4
|
-
* Per-model pricing for cost calculation. Updated Feb 2026.
|
|
5
|
-
* Copilot uses Premium Request Units (PRUs), others use per-token pricing.
|
|
6
|
-
*/
|
|
7
|
-
/** Overage rate for Copilot premium requests: $0.04 per PRU */
|
|
8
|
-
export const COPILOT_PRU_OVERAGE_RATE = 0.04;
|
|
9
|
-
export const MODEL_PRICING = {
|
|
10
|
-
// === OpenAI Models (from Copilot model picker) ===
|
|
11
|
-
'gpt-4o': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 0, copilotIncluded: true },
|
|
12
|
-
'gpt-4o-mini': { inputPer1M: 0.15, outputPer1M: 0.60, pruMultiplier: 0, copilotIncluded: true },
|
|
13
|
-
'gpt-4.1': { inputPer1M: 2.00, outputPer1M: 8.00, pruMultiplier: 0, copilotIncluded: true },
|
|
14
|
-
'gpt-4.1-mini': { inputPer1M: 0.40, outputPer1M: 1.60 },
|
|
15
|
-
'gpt-5-mini': { inputPer1M: 0.15, outputPer1M: 0.60, pruMultiplier: 0, copilotIncluded: true },
|
|
16
|
-
'gpt-5': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
|
|
17
|
-
'gpt-5-codex': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
|
|
18
|
-
'gpt-5.1': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
|
|
19
|
-
'gpt-5.1-codex': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
|
|
20
|
-
'gpt-5.1-codex-max': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
|
|
21
|
-
'gpt-5.1-codex-mini': { inputPer1M: 0.15, outputPer1M: 0.60, pruMultiplier: 0.33 },
|
|
22
|
-
'gpt-5.2': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
|
|
23
|
-
'gpt-5.2-codex': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
|
|
24
|
-
'o3': { inputPer1M: 10.00, outputPer1M: 40.00, pruMultiplier: 5 },
|
|
25
|
-
'o4-mini-high': { inputPer1M: 1.10, outputPer1M: 4.40, pruMultiplier: 20 },
|
|
26
|
-
// === Anthropic Models (from Copilot model picker) ===
|
|
27
|
-
'claude-haiku-4.5': { inputPer1M: 0.80, outputPer1M: 4.00, pruMultiplier: 0.33 },
|
|
28
|
-
'claude-sonnet-4': { inputPer1M: 3.00, outputPer1M: 15.00, pruMultiplier: 1 },
|
|
29
|
-
'claude-sonnet-4.5': { inputPer1M: 3.00, outputPer1M: 15.00, pruMultiplier: 1 },
|
|
30
|
-
'claude-opus-4.5': { inputPer1M: 15.00, outputPer1M: 75.00, pruMultiplier: 3 },
|
|
31
|
-
'claude-opus-4.6': { inputPer1M: 5.00, outputPer1M: 25.00, pruMultiplier: 3 },
|
|
32
|
-
'claude-opus-4.6-fast': { inputPer1M: 5.00, outputPer1M: 25.00, pruMultiplier: 9 },
|
|
33
|
-
// === Google Models (from Copilot model picker) ===
|
|
34
|
-
'gemini-2.5-pro': { inputPer1M: 1.25, outputPer1M: 5.00, pruMultiplier: 1 },
|
|
35
|
-
'gemini-3-flash': { inputPer1M: 0.10, outputPer1M: 0.40, pruMultiplier: 0.33 },
|
|
36
|
-
'gemini-3-pro': { inputPer1M: 1.25, outputPer1M: 5.00, pruMultiplier: 1 },
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Calculate cost for a single LLM call using per-token pricing.
|
|
40
|
-
* Returns USD amount.
|
|
41
|
-
*/
|
|
42
|
-
export function calculateTokenCost(model, inputTokens, outputTokens) {
|
|
43
|
-
const pricing = getModelPricing(model);
|
|
44
|
-
if (!pricing || (!pricing.inputPer1M && !pricing.outputPer1M))
|
|
45
|
-
return 0;
|
|
46
|
-
const inputCost = ((pricing.inputPer1M ?? 0) / 1_000_000) * inputTokens;
|
|
47
|
-
const outputCost = ((pricing.outputPer1M ?? 0) / 1_000_000) * outputTokens;
|
|
48
|
-
return inputCost + outputCost;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Calculate PRU cost for a Copilot premium request.
|
|
52
|
-
* Returns PRU count consumed (multiply by $0.04 for overage cost).
|
|
53
|
-
*/
|
|
54
|
-
export function calculatePRUCost(model) {
|
|
55
|
-
const pricing = getModelPricing(model);
|
|
56
|
-
if (!pricing)
|
|
57
|
-
return 1; // Default 1 PRU for unknown models
|
|
58
|
-
if (pricing.copilotIncluded)
|
|
59
|
-
return 0; // Free on paid plans
|
|
60
|
-
return pricing.pruMultiplier ?? 1;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Look up model pricing. Returns undefined if model is unknown.
|
|
64
|
-
*/
|
|
65
|
-
export function getModelPricing(model) {
|
|
66
|
-
// Try exact match first, then case-insensitive
|
|
67
|
-
return MODEL_PRICING[model] ??
|
|
68
|
-
MODEL_PRICING[model.toLowerCase()] ??
|
|
69
|
-
Object.entries(MODEL_PRICING).find(([key]) => model.toLowerCase().includes(key.toLowerCase()))?.[1];
|
|
70
|
-
}
|
|
71
|
-
//# sourceMappingURL=pricing.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/config/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/pipeline.d.ts
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import type { Transcript, StageResult, PipelineResult, PipelineStage } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Execute a single pipeline stage with error isolation and timing.
|
|
4
|
-
*
|
|
5
|
-
* ### Stage contract
|
|
6
|
-
* - Each stage is wrapped in a try/catch so a failure **does not abort** the
|
|
7
|
-
* pipeline. Subsequent stages proceed with whatever data is available.
|
|
8
|
-
* - Returns `undefined` on failure (callers must null-check before using the result).
|
|
9
|
-
* - Records success/failure, error message, and wall-clock duration in `stageResults`
|
|
10
|
-
* for the pipeline summary.
|
|
11
|
-
*
|
|
12
|
-
* This design lets the pipeline produce partial results — e.g. if shorts
|
|
13
|
-
* generation fails, the summary and social posts can still be generated
|
|
14
|
-
* from the transcript.
|
|
15
|
-
*
|
|
16
|
-
* @param stageName - Enum value identifying the stage (used in logs and results)
|
|
17
|
-
* @param fn - Async function that performs the stage's work
|
|
18
|
-
* @param stageResults - Mutable array that accumulates per-stage outcome records
|
|
19
|
-
* @returns The stage result on success, or `undefined` on failure
|
|
20
|
-
*/
|
|
21
|
-
export declare function runStage<T>(stageName: PipelineStage, fn: () => Promise<T>, stageResults: StageResult[]): Promise<T | undefined>;
|
|
22
|
-
/**
|
|
23
|
-
* Adjust transcript timestamps to account for removed silence segments.
|
|
24
|
-
* Shifts all timestamps by subtracting the cumulative removed duration before each point.
|
|
25
|
-
*/
|
|
26
|
-
export declare function adjustTranscript(transcript: Transcript, removals: {
|
|
27
|
-
start: number;
|
|
28
|
-
end: number;
|
|
29
|
-
}[]): Transcript;
|
|
30
|
-
/**
|
|
31
|
-
* Run the full video processing pipeline.
|
|
32
|
-
*
|
|
33
|
-
* ### Stage ordering and data flow
|
|
34
|
-
* 1. **Ingest** — extracts metadata (slug, duration, paths). Required; aborts if failed.
|
|
35
|
-
* 2. **Transcribe** — Whisper transcription with word-level timestamps.
|
|
36
|
-
* 3. **Silence removal** — trims dead air from the video and adjusts the transcript
|
|
37
|
-
* timestamps accordingly. Produces an `adjustedTranscript` for captions.
|
|
38
|
-
* 4. **Captions** — generates SRT/VTT/ASS files from the (adjusted) transcript.
|
|
39
|
-
* 5. **Caption burn** — renders captions into the video using FFmpeg. Prefers a
|
|
40
|
-
* single-pass approach (silence removal + captions in one encode) when possible.
|
|
41
|
-
* 6. **Shorts** — AI-selected short clips. Uses the **original** transcript because
|
|
42
|
-
* clips are cut from the original (unedited) video.
|
|
43
|
-
* 7. **Medium clips** — longer AI-selected clips (same original-transcript reasoning).
|
|
44
|
-
* 8. **Chapters** — topic-boundary detection for YouTube chapters.
|
|
45
|
-
* 9. **Summary** — README generation (runs after shorts/chapters so it can reference them).
|
|
46
|
-
* 10–12. **Social posts** — platform-specific posts for the full video and each clip.
|
|
47
|
-
* 13. **Blog** — long-form blog post from transcript + summary.
|
|
48
|
-
* 14. **Git push** — commits all generated assets and pushes.
|
|
49
|
-
*
|
|
50
|
-
* ### Why failures don't abort
|
|
51
|
-
* Each stage runs through {@link runStage} which catches errors. This means a
|
|
52
|
-
* transcription failure still lets git-push run (committing whatever was produced),
|
|
53
|
-
* and a shorts failure doesn't block summary generation.
|
|
54
|
-
*/
|
|
55
|
-
export declare function processVideo(videoPath: string): Promise<PipelineResult>;
|
|
56
|
-
export declare function processVideoSafe(videoPath: string): Promise<PipelineResult | null>;
|
|
57
|
-
//# sourceMappingURL=pipeline.d.ts.map
|
package/dist/pipeline.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,UAAU,EAKV,WAAW,EACX,cAAc,EACd,aAAa,EAGd,MAAM,SAAS,CAAA;AAGhB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,SAAS,EAAE,aAAa,EACxB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,YAAY,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAgBxB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,GACzC,UAAU,CAmCZ;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoN7E;AA8BD,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQxF"}
|