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.
Files changed (161) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.js +4766 -123
  3. package/dist/index.js.map +1 -1
  4. package/package.json +4 -2
  5. package/dist/agents/BaseAgent.d.ts +0 -52
  6. package/dist/agents/BaseAgent.d.ts.map +0 -1
  7. package/dist/agents/BaseAgent.js +0 -102
  8. package/dist/agents/BaseAgent.js.map +0 -1
  9. package/dist/agents/BlogAgent.d.ts +0 -3
  10. package/dist/agents/BlogAgent.d.ts.map +0 -1
  11. package/dist/agents/BlogAgent.js +0 -163
  12. package/dist/agents/BlogAgent.js.map +0 -1
  13. package/dist/agents/ChapterAgent.d.ts +0 -11
  14. package/dist/agents/ChapterAgent.d.ts.map +0 -1
  15. package/dist/agents/ChapterAgent.js +0 -191
  16. package/dist/agents/ChapterAgent.js.map +0 -1
  17. package/dist/agents/MediumVideoAgent.d.ts +0 -3
  18. package/dist/agents/MediumVideoAgent.d.ts.map +0 -1
  19. package/dist/agents/MediumVideoAgent.js +0 -219
  20. package/dist/agents/MediumVideoAgent.js.map +0 -1
  21. package/dist/agents/ShortsAgent.d.ts +0 -3
  22. package/dist/agents/ShortsAgent.d.ts.map +0 -1
  23. package/dist/agents/ShortsAgent.js +0 -243
  24. package/dist/agents/ShortsAgent.js.map +0 -1
  25. package/dist/agents/SilenceRemovalAgent.d.ts +0 -9
  26. package/dist/agents/SilenceRemovalAgent.d.ts.map +0 -1
  27. package/dist/agents/SilenceRemovalAgent.js +0 -209
  28. package/dist/agents/SilenceRemovalAgent.js.map +0 -1
  29. package/dist/agents/SocialMediaAgent.d.ts +0 -4
  30. package/dist/agents/SocialMediaAgent.d.ts.map +0 -1
  31. package/dist/agents/SocialMediaAgent.js +0 -248
  32. package/dist/agents/SocialMediaAgent.js.map +0 -1
  33. package/dist/agents/SummaryAgent.d.ts +0 -11
  34. package/dist/agents/SummaryAgent.d.ts.map +0 -1
  35. package/dist/agents/SummaryAgent.js +0 -333
  36. package/dist/agents/SummaryAgent.js.map +0 -1
  37. package/dist/commands/doctor.d.ts +0 -4
  38. package/dist/commands/doctor.d.ts.map +0 -1
  39. package/dist/commands/doctor.js +0 -230
  40. package/dist/commands/doctor.js.map +0 -1
  41. package/dist/config/brand.d.ts +0 -29
  42. package/dist/config/brand.d.ts.map +0 -1
  43. package/dist/config/brand.js +0 -83
  44. package/dist/config/brand.js.map +0 -1
  45. package/dist/config/environment.d.ts +0 -39
  46. package/dist/config/environment.d.ts.map +0 -1
  47. package/dist/config/environment.js +0 -47
  48. package/dist/config/environment.js.map +0 -1
  49. package/dist/config/ffmpegResolver.d.ts +0 -3
  50. package/dist/config/ffmpegResolver.d.ts.map +0 -1
  51. package/dist/config/ffmpegResolver.js +0 -37
  52. package/dist/config/ffmpegResolver.js.map +0 -1
  53. package/dist/config/logger.d.ts +0 -5
  54. package/dist/config/logger.d.ts.map +0 -1
  55. package/dist/config/logger.js +0 -13
  56. package/dist/config/logger.js.map +0 -1
  57. package/dist/config/pricing.d.ts +0 -34
  58. package/dist/config/pricing.d.ts.map +0 -1
  59. package/dist/config/pricing.js +0 -71
  60. package/dist/config/pricing.js.map +0 -1
  61. package/dist/index.d.ts.map +0 -1
  62. package/dist/pipeline.d.ts +0 -57
  63. package/dist/pipeline.d.ts.map +0 -1
  64. package/dist/pipeline.js +0 -324
  65. package/dist/pipeline.js.map +0 -1
  66. package/dist/providers/ClaudeProvider.d.ts +0 -14
  67. package/dist/providers/ClaudeProvider.d.ts.map +0 -1
  68. package/dist/providers/ClaudeProvider.js +0 -182
  69. package/dist/providers/ClaudeProvider.js.map +0 -1
  70. package/dist/providers/CopilotProvider.d.ts +0 -17
  71. package/dist/providers/CopilotProvider.d.ts.map +0 -1
  72. package/dist/providers/CopilotProvider.js +0 -149
  73. package/dist/providers/CopilotProvider.js.map +0 -1
  74. package/dist/providers/OpenAIProvider.d.ts +0 -14
  75. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  76. package/dist/providers/OpenAIProvider.js +0 -175
  77. package/dist/providers/OpenAIProvider.js.map +0 -1
  78. package/dist/providers/index.d.ts +0 -18
  79. package/dist/providers/index.d.ts.map +0 -1
  80. package/dist/providers/index.js +0 -61
  81. package/dist/providers/index.js.map +0 -1
  82. package/dist/providers/types.d.ts +0 -112
  83. package/dist/providers/types.d.ts.map +0 -1
  84. package/dist/providers/types.js +0 -8
  85. package/dist/providers/types.js.map +0 -1
  86. package/dist/services/captionGeneration.d.ts +0 -7
  87. package/dist/services/captionGeneration.d.ts.map +0 -1
  88. package/dist/services/captionGeneration.js +0 -29
  89. package/dist/services/captionGeneration.js.map +0 -1
  90. package/dist/services/costTracker.d.ts +0 -63
  91. package/dist/services/costTracker.d.ts.map +0 -1
  92. package/dist/services/costTracker.js +0 -137
  93. package/dist/services/costTracker.js.map +0 -1
  94. package/dist/services/fileWatcher.d.ts +0 -19
  95. package/dist/services/fileWatcher.d.ts.map +0 -1
  96. package/dist/services/fileWatcher.js +0 -120
  97. package/dist/services/fileWatcher.js.map +0 -1
  98. package/dist/services/gitOperations.d.ts +0 -3
  99. package/dist/services/gitOperations.d.ts.map +0 -1
  100. package/dist/services/gitOperations.js +0 -43
  101. package/dist/services/gitOperations.js.map +0 -1
  102. package/dist/services/socialPosting.d.ts +0 -38
  103. package/dist/services/socialPosting.d.ts.map +0 -1
  104. package/dist/services/socialPosting.js +0 -102
  105. package/dist/services/socialPosting.js.map +0 -1
  106. package/dist/services/transcription.d.ts +0 -3
  107. package/dist/services/transcription.d.ts.map +0 -1
  108. package/dist/services/transcription.js +0 -100
  109. package/dist/services/transcription.js.map +0 -1
  110. package/dist/services/videoIngestion.d.ts +0 -3
  111. package/dist/services/videoIngestion.d.ts.map +0 -1
  112. package/dist/services/videoIngestion.js +0 -104
  113. package/dist/services/videoIngestion.js.map +0 -1
  114. package/dist/tools/captions/captionGenerator.d.ts +0 -84
  115. package/dist/tools/captions/captionGenerator.d.ts.map +0 -1
  116. package/dist/tools/captions/captionGenerator.js +0 -390
  117. package/dist/tools/captions/captionGenerator.js.map +0 -1
  118. package/dist/tools/ffmpeg/aspectRatio.d.ts +0 -101
  119. package/dist/tools/ffmpeg/aspectRatio.d.ts.map +0 -1
  120. package/dist/tools/ffmpeg/aspectRatio.js +0 -339
  121. package/dist/tools/ffmpeg/aspectRatio.js.map +0 -1
  122. package/dist/tools/ffmpeg/audioExtraction.d.ts +0 -16
  123. package/dist/tools/ffmpeg/audioExtraction.d.ts.map +0 -1
  124. package/dist/tools/ffmpeg/audioExtraction.js +0 -87
  125. package/dist/tools/ffmpeg/audioExtraction.js.map +0 -1
  126. package/dist/tools/ffmpeg/captionBurning.d.ts +0 -8
  127. package/dist/tools/ffmpeg/captionBurning.d.ts.map +0 -1
  128. package/dist/tools/ffmpeg/captionBurning.js +0 -72
  129. package/dist/tools/ffmpeg/captionBurning.js.map +0 -1
  130. package/dist/tools/ffmpeg/clipExtraction.d.ts +0 -38
  131. package/dist/tools/ffmpeg/clipExtraction.d.ts.map +0 -1
  132. package/dist/tools/ffmpeg/clipExtraction.js +0 -215
  133. package/dist/tools/ffmpeg/clipExtraction.js.map +0 -1
  134. package/dist/tools/ffmpeg/faceDetection.d.ts +0 -127
  135. package/dist/tools/ffmpeg/faceDetection.d.ts.map +0 -1
  136. package/dist/tools/ffmpeg/faceDetection.js +0 -501
  137. package/dist/tools/ffmpeg/faceDetection.js.map +0 -1
  138. package/dist/tools/ffmpeg/frameCapture.d.ts +0 -10
  139. package/dist/tools/ffmpeg/frameCapture.d.ts.map +0 -1
  140. package/dist/tools/ffmpeg/frameCapture.js +0 -49
  141. package/dist/tools/ffmpeg/frameCapture.js.map +0 -1
  142. package/dist/tools/ffmpeg/silenceDetection.d.ts +0 -10
  143. package/dist/tools/ffmpeg/silenceDetection.d.ts.map +0 -1
  144. package/dist/tools/ffmpeg/silenceDetection.js +0 -56
  145. package/dist/tools/ffmpeg/silenceDetection.js.map +0 -1
  146. package/dist/tools/ffmpeg/singlePassEdit.d.ts +0 -25
  147. package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +0 -1
  148. package/dist/tools/ffmpeg/singlePassEdit.js +0 -124
  149. package/dist/tools/ffmpeg/singlePassEdit.js.map +0 -1
  150. package/dist/tools/search/exaClient.d.ts +0 -8
  151. package/dist/tools/search/exaClient.d.ts.map +0 -1
  152. package/dist/tools/search/exaClient.js +0 -38
  153. package/dist/tools/search/exaClient.js.map +0 -1
  154. package/dist/tools/whisper/whisperClient.d.ts +0 -3
  155. package/dist/tools/whisper/whisperClient.d.ts.map +0 -1
  156. package/dist/tools/whisper/whisperClient.js +0 -77
  157. package/dist/tools/whisper/whisperClient.js.map +0 -1
  158. package/dist/types/index.d.ts +0 -305
  159. package/dist/types/index.d.ts.map +0 -1
  160. package/dist/types/index.js +0 -44
  161. package/dist/types/index.js.map +0 -1
@@ -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
@@ -1 +0,0 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/config/brand.ts"],"names":[],"mappings":"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"}
@@ -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,3 +0,0 @@
1
- export declare function getFFmpegPath(): string;
2
- export declare function getFFprobePath(): string;
3
- //# sourceMappingURL=ffmpegResolver.d.ts.map
@@ -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"}
@@ -1,5 +0,0 @@
1
- import winston from 'winston';
2
- declare const logger: winston.Logger;
3
- export declare function setVerbose(): void;
4
- export default logger;
5
- //# sourceMappingURL=logger.d.ts.map
@@ -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"}
@@ -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"}
@@ -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"}
@@ -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":"AAAA;;;;;GAKG;AAaH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,MAAM,CAAC,MAAM,aAAa,GAAiC;IACzD,oDAAoD;IACpD,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;IAC3F,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;IAC/F,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;IAC3F,cAAc,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;IACvD,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE;IAC9F,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IACnE,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IACzE,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IACrE,eAAe,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IAC3E,mBAAmB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IAC/E,oBAAoB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAClF,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IACrE,eAAe,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IAC3E,IAAI,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IACjE,cAAc,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE;IAE1E,uDAAuD;IACvD,kBAAkB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAChF,iBAAiB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IAC7E,mBAAmB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IAC/E,iBAAiB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IAC9E,iBAAiB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IAC7E,sBAAsB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,EAAE;IAElF,oDAAoD;IACpD,gBAAgB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE;IAC3E,gBAAgB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9E,cAAc,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,EAAE;CAC1E,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,WAAmB,EACnB,YAAoB;IAEpB,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,WAAW,CAAC;IACxE,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,YAAY,CAAC;IAC3E,OAAO,SAAS,GAAG,UAAU,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,CAAC,mCAAmC;IAC3D,IAAI,OAAO,CAAC,eAAe;QAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB;IAC5D,OAAO,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,+CAA+C;IAC/C,OAAO,aAAa,CAAC,KAAK,CAAC;QACzB,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAC3C,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAChD,EAAE,CAAC,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
@@ -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
@@ -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"}