@thunderkiller/video-clipper 1.5.3 → 1.5.4

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 (241) hide show
  1. package/dist/cli.d.ts +5 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +1 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config/env.d.ts +49 -0
  6. package/dist/config/env.d.ts.map +1 -0
  7. package/dist/config/env.js +1 -0
  8. package/dist/config/env.js.map +1 -0
  9. package/dist/config/index.d.ts +3 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +1 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/index.d.ts +3 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib.d.ts +17 -0
  18. package/dist/lib.d.ts.map +1 -0
  19. package/dist/lib.js +17 -0
  20. package/dist/lib.js.map +1 -0
  21. package/dist/pipeline/runner.d.ts +23 -0
  22. package/dist/pipeline/runner.d.ts.map +1 -0
  23. package/dist/pipeline/runner.js +1 -0
  24. package/dist/pipeline/runner.js.map +1 -0
  25. package/dist/pipeline/stages/audioProcessor.d.ts +20 -0
  26. package/dist/pipeline/stages/audioProcessor.d.ts.map +1 -0
  27. package/dist/pipeline/stages/audioProcessor.js +1 -0
  28. package/dist/pipeline/stages/audioProcessor.js.map +1 -0
  29. package/dist/pipeline/stages/clipExporter.d.ts +15 -0
  30. package/dist/pipeline/stages/clipExporter.d.ts.map +1 -0
  31. package/dist/pipeline/stages/clipExporter.js +1 -0
  32. package/dist/pipeline/stages/clipExporter.js.map +1 -0
  33. package/dist/pipeline/stages/segmentAnalyzer.d.ts +27 -0
  34. package/dist/pipeline/stages/segmentAnalyzer.d.ts.map +1 -0
  35. package/dist/pipeline/stages/segmentAnalyzer.js +1 -0
  36. package/dist/pipeline/stages/segmentAnalyzer.js.map +1 -0
  37. package/dist/pipeline/stages/segmentSelector.d.ts +13 -0
  38. package/dist/pipeline/stages/segmentSelector.d.ts.map +1 -0
  39. package/dist/pipeline/stages/segmentSelector.js +1 -0
  40. package/dist/pipeline/stages/segmentSelector.js.map +1 -0
  41. package/dist/pipeline/stages/videoResolver.d.ts +12 -0
  42. package/dist/pipeline/stages/videoResolver.d.ts.map +1 -0
  43. package/dist/pipeline/stages/videoResolver.js +1 -0
  44. package/dist/pipeline/stages/videoResolver.js.map +1 -0
  45. package/dist/services/audioAnalyzers/base.d.ts +26 -0
  46. package/dist/services/audioAnalyzers/base.d.ts.map +1 -0
  47. package/dist/services/audioAnalyzers/base.js +1 -0
  48. package/dist/services/audioAnalyzers/base.js.map +1 -0
  49. package/dist/services/audioAnalyzers/factory.d.ts +23 -0
  50. package/dist/services/audioAnalyzers/factory.d.ts.map +1 -0
  51. package/dist/services/audioAnalyzers/factory.js +1 -0
  52. package/dist/services/audioAnalyzers/factory.js.map +1 -0
  53. package/dist/services/audioAnalyzers/gemini.d.ts +29 -0
  54. package/dist/services/audioAnalyzers/gemini.d.ts.map +1 -0
  55. package/dist/services/audioAnalyzers/gemini.js +1 -0
  56. package/dist/services/audioAnalyzers/gemini.js.map +1 -0
  57. package/dist/services/audioAnalyzers/index.d.ts +7 -0
  58. package/dist/services/audioAnalyzers/index.d.ts.map +1 -0
  59. package/dist/services/audioAnalyzers/index.js +1 -0
  60. package/dist/services/audioAnalyzers/index.js.map +1 -0
  61. package/dist/services/audioAnalyzers/whisper.d.ts +14 -0
  62. package/dist/services/audioAnalyzers/whisper.d.ts.map +1 -0
  63. package/dist/services/audioAnalyzers/whisper.js +3 -1
  64. package/dist/services/audioAnalyzers/whisper.js.map +1 -0
  65. package/dist/services/audioAnalyzers/yamnet.d.ts +13 -0
  66. package/dist/services/audioAnalyzers/yamnet.d.ts.map +1 -0
  67. package/dist/services/audioAnalyzers/yamnet.js +3 -1
  68. package/dist/services/audioAnalyzers/yamnet.js.map +1 -0
  69. package/dist/services/audioDownloader/index.d.ts +2 -0
  70. package/dist/services/audioDownloader/index.d.ts.map +1 -0
  71. package/dist/services/audioDownloader/index.js +1 -0
  72. package/dist/services/audioDownloader/index.js.map +1 -0
  73. package/dist/services/chunkBuilder/index.d.ts +20 -0
  74. package/dist/services/chunkBuilder/index.d.ts.map +1 -0
  75. package/dist/services/chunkBuilder/index.js +1 -0
  76. package/dist/services/chunkBuilder/index.js.map +1 -0
  77. package/dist/services/clipGenerator/index.d.ts +30 -0
  78. package/dist/services/clipGenerator/index.d.ts.map +1 -0
  79. package/dist/services/clipGenerator/index.js +1 -0
  80. package/dist/services/clipGenerator/index.js.map +1 -0
  81. package/dist/services/clipRefiner/index.d.ts +9 -0
  82. package/dist/services/clipRefiner/index.d.ts.map +1 -0
  83. package/dist/services/clipRefiner/index.js +1 -0
  84. package/dist/services/clipRefiner/index.js.map +1 -0
  85. package/dist/services/eventDetector/index.d.ts +28 -0
  86. package/dist/services/eventDetector/index.d.ts.map +1 -0
  87. package/dist/services/eventDetector/index.js +1 -0
  88. package/dist/services/eventDetector/index.js.map +1 -0
  89. package/dist/services/llmAnalyzer/LLMAnalyzer.d.ts +41 -0
  90. package/dist/services/llmAnalyzer/LLMAnalyzer.d.ts.map +1 -0
  91. package/dist/services/llmAnalyzer/LLMAnalyzer.js +1 -0
  92. package/dist/services/llmAnalyzer/LLMAnalyzer.js.map +1 -0
  93. package/dist/services/llmAnalyzer/index.d.ts +8 -0
  94. package/dist/services/llmAnalyzer/index.d.ts.map +1 -0
  95. package/dist/services/llmAnalyzer/index.js +1 -0
  96. package/dist/services/llmAnalyzer/index.js.map +1 -0
  97. package/dist/services/metadataExtractor/index.d.ts +12 -0
  98. package/dist/services/metadataExtractor/index.d.ts.map +1 -0
  99. package/dist/services/metadataExtractor/index.js +1 -0
  100. package/dist/services/metadataExtractor/index.js.map +1 -0
  101. package/dist/services/segmentRanker/index.d.ts +3 -0
  102. package/dist/services/segmentRanker/index.d.ts.map +1 -0
  103. package/dist/services/segmentRanker/index.js +1 -0
  104. package/dist/services/segmentRanker/index.js.map +1 -0
  105. package/dist/services/signalMerger/index.d.ts +5 -0
  106. package/dist/services/signalMerger/index.d.ts.map +1 -0
  107. package/dist/services/signalMerger/index.js +1 -0
  108. package/dist/services/signalMerger/index.js.map +1 -0
  109. package/dist/services/transcriptAnalyzers/base.d.ts +25 -0
  110. package/dist/services/transcriptAnalyzers/base.d.ts.map +1 -0
  111. package/dist/services/transcriptAnalyzers/base.js +1 -0
  112. package/dist/services/transcriptAnalyzers/base.js.map +1 -0
  113. package/dist/services/transcriptAnalyzers/factory.d.ts +21 -0
  114. package/dist/services/transcriptAnalyzers/factory.d.ts.map +1 -0
  115. package/dist/services/transcriptAnalyzers/factory.js +1 -0
  116. package/dist/services/transcriptAnalyzers/factory.js.map +1 -0
  117. package/dist/services/transcriptAnalyzers/gemini.d.ts +18 -0
  118. package/dist/services/transcriptAnalyzers/gemini.d.ts.map +1 -0
  119. package/dist/services/transcriptAnalyzers/gemini.js +1 -0
  120. package/dist/services/transcriptAnalyzers/gemini.js.map +1 -0
  121. package/dist/services/transcriptAnalyzers/index.d.ts +7 -0
  122. package/dist/services/transcriptAnalyzers/index.d.ts.map +1 -0
  123. package/dist/services/transcriptAnalyzers/index.js +1 -0
  124. package/dist/services/transcriptAnalyzers/index.js.map +1 -0
  125. package/dist/services/transcriptAnalyzers/whisper.d.ts +18 -0
  126. package/dist/services/transcriptAnalyzers/whisper.d.ts.map +1 -0
  127. package/dist/services/transcriptAnalyzers/whisper.js +3 -1
  128. package/dist/services/transcriptAnalyzers/whisper.js.map +1 -0
  129. package/dist/services/transcriptAnalyzers/ytdlp.d.ts +15 -0
  130. package/dist/services/transcriptAnalyzers/ytdlp.d.ts.map +1 -0
  131. package/dist/services/transcriptAnalyzers/ytdlp.js +1 -0
  132. package/dist/services/transcriptAnalyzers/ytdlp.js.map +1 -0
  133. package/dist/services/transcriptDetector/index.d.ts +53 -0
  134. package/dist/services/transcriptDetector/index.d.ts.map +1 -0
  135. package/dist/services/transcriptDetector/index.js +1 -0
  136. package/dist/services/transcriptDetector/index.js.map +1 -0
  137. package/dist/services/transcriptFetcher/index.d.ts +26 -0
  138. package/dist/services/transcriptFetcher/index.d.ts.map +1 -0
  139. package/dist/services/transcriptFetcher/index.js +1 -0
  140. package/dist/services/transcriptFetcher/index.js.map +1 -0
  141. package/dist/services/urlParser/index.d.ts +12 -0
  142. package/dist/services/urlParser/index.d.ts.map +1 -0
  143. package/dist/services/urlParser/index.js +1 -0
  144. package/dist/services/urlParser/index.js.map +1 -0
  145. package/dist/services/videoDownloader/index.d.ts +27 -0
  146. package/dist/services/videoDownloader/index.d.ts.map +1 -0
  147. package/dist/services/videoDownloader/index.js +1 -0
  148. package/dist/services/videoDownloader/index.js.map +1 -0
  149. package/dist/types/analyzer.d.ts +21 -0
  150. package/dist/types/analyzer.d.ts.map +1 -0
  151. package/dist/types/analyzer.js +1 -0
  152. package/dist/types/analyzer.js.map +1 -0
  153. package/dist/types/audio.d.ts +26 -0
  154. package/dist/types/audio.d.ts.map +1 -0
  155. package/dist/types/audio.js +1 -0
  156. package/dist/types/audio.js.map +1 -0
  157. package/dist/types/cache.d.ts +7 -0
  158. package/dist/types/cache.d.ts.map +1 -0
  159. package/dist/types/cache.js +1 -0
  160. package/dist/types/cache.js.map +1 -0
  161. package/dist/types/cli.d.ts +23 -0
  162. package/dist/types/cli.d.ts.map +1 -0
  163. package/dist/types/cli.js +1 -0
  164. package/dist/types/cli.js.map +1 -0
  165. package/dist/types/config.d.ts +90 -0
  166. package/dist/types/config.d.ts.map +1 -0
  167. package/dist/types/config.js +1 -0
  168. package/dist/types/config.js.map +1 -0
  169. package/dist/types/downloader.d.ts +11 -0
  170. package/dist/types/downloader.d.ts.map +1 -0
  171. package/dist/types/downloader.js +1 -0
  172. package/dist/types/downloader.js.map +1 -0
  173. package/dist/types/factory.d.ts +3 -0
  174. package/dist/types/factory.d.ts.map +1 -0
  175. package/dist/types/factory.js +1 -0
  176. package/dist/types/factory.js.map +1 -0
  177. package/dist/types/index.d.ts +18 -0
  178. package/dist/types/index.d.ts.map +1 -0
  179. package/dist/types/index.js +1 -0
  180. package/dist/types/index.js.map +1 -0
  181. package/dist/types/pipeline.d.ts +48 -0
  182. package/dist/types/pipeline.d.ts.map +1 -0
  183. package/dist/types/pipeline.js +1 -0
  184. package/dist/types/pipeline.js.map +1 -0
  185. package/dist/types/segment.d.ts +42 -0
  186. package/dist/types/segment.d.ts.map +1 -0
  187. package/dist/types/segment.js +1 -0
  188. package/dist/types/segment.js.map +1 -0
  189. package/dist/types/transcript.d.ts +20 -0
  190. package/dist/types/transcript.d.ts.map +1 -0
  191. package/dist/types/transcript.js +1 -0
  192. package/dist/types/transcript.js.map +1 -0
  193. package/dist/types/video.d.ts +44 -0
  194. package/dist/types/video.d.ts.map +1 -0
  195. package/dist/types/video.js +1 -0
  196. package/dist/types/video.js.map +1 -0
  197. package/dist/utils/cache.d.ts +34 -0
  198. package/dist/utils/cache.d.ts.map +1 -0
  199. package/dist/utils/cache.js +1 -0
  200. package/dist/utils/cache.js.map +1 -0
  201. package/dist/utils/chunker.d.ts +38 -0
  202. package/dist/utils/chunker.d.ts.map +1 -0
  203. package/dist/utils/chunker.js +1 -0
  204. package/dist/utils/chunker.js.map +1 -0
  205. package/dist/utils/dumper.d.ts +12 -0
  206. package/dist/utils/dumper.d.ts.map +1 -0
  207. package/dist/utils/dumper.js +1 -0
  208. package/dist/utils/dumper.js.map +1 -0
  209. package/dist/utils/format.d.ts +6 -0
  210. package/dist/utils/format.d.ts.map +1 -0
  211. package/dist/utils/format.js +1 -0
  212. package/dist/utils/format.js.map +1 -0
  213. package/dist/utils/logger.d.ts +6 -0
  214. package/dist/utils/logger.d.ts.map +1 -0
  215. package/dist/utils/logger.js +1 -0
  216. package/dist/utils/logger.js.map +1 -0
  217. package/dist/utils/modelFactory.d.ts +14 -0
  218. package/dist/utils/modelFactory.d.ts.map +1 -0
  219. package/dist/utils/modelFactory.js +1 -0
  220. package/dist/utils/modelFactory.js.map +1 -0
  221. package/dist/utils/paths.d.ts +16 -0
  222. package/dist/utils/paths.d.ts.map +1 -0
  223. package/dist/utils/paths.js +20 -0
  224. package/dist/utils/paths.js.map +1 -0
  225. package/dist/utils/redactConfig.d.ts +7 -0
  226. package/dist/utils/redactConfig.d.ts.map +1 -0
  227. package/dist/utils/redactConfig.js +1 -0
  228. package/dist/utils/redactConfig.js.map +1 -0
  229. package/dist/utils/sliceAudio.d.ts +2 -0
  230. package/dist/utils/sliceAudio.d.ts.map +1 -0
  231. package/dist/utils/sliceAudio.js +1 -0
  232. package/dist/utils/sliceAudio.js.map +1 -0
  233. package/package.json +26 -2
  234. package/requirements.txt +5 -0
  235. package/scripts/detect_events.py +81 -0
  236. package/scripts/detect_events_whisper.py +101 -0
  237. package/scripts/transcribe_whisper.py +70 -0
  238. package/.env.example +0 -130
  239. package/CHANGELOG.md +0 -102
  240. package/CONTRIBUTING.md +0 -100
  241. package/commitlint.config.js +0 -25
@@ -2,6 +2,7 @@ import { execa } from 'execa';
2
2
  import { config } from '../../config/index.js';
3
3
  import { log } from '../../utils/logger.js';
4
4
  import { AudioAnalyzer } from './base.js';
5
+ import { scriptPath } from '../../utils/paths.js';
5
6
  /**
6
7
  * Resolves the Python interpreter binary, caching the result after the first
7
8
  * successful lookup. Shared by both Python-based analyzers (Whisper, YAMNet).
@@ -35,7 +36,7 @@ export class WhisperAudioAnalyzer extends AudioAnalyzer {
35
36
  let stdout;
36
37
  try {
37
38
  const result = await execa(python, [
38
- 'scripts/detect_events_whisper.py',
39
+ scriptPath('detect_events_whisper.py'),
39
40
  audioPath,
40
41
  String(config.AUDIO_CONFIDENCE_THRESHOLD),
41
42
  gameProfile,
@@ -60,3 +61,4 @@ export class WhisperAudioAnalyzer extends AudioAnalyzer {
60
61
  }));
61
62
  }
62
63
  }
64
+ //# sourceMappingURL=whisper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whisper.js","sourceRoot":"","sources":["../../../src/services/audioAnalyzers/whisper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;GAGG;AACH,IAAI,UAAU,GAAkB,IAAI,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAChC,UAAU,GAAG,GAAG,CAAC;YACjB,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,mCAAmC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IAC5C,MAAM,GAAG,SAAkB,CAAC;IAErC,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,WAAmB,EACnB,cAAsB,EACtB,iBAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QAEpC,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;gBACjC,UAAU,CAAC,0BAA0B,CAAC;gBACtC,SAAS;gBACT,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC;gBACzC,WAAW;gBACX,MAAM,CAAC,mBAAmB;aAC3B,CAAC,CAAC;YACH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEjE,IAAI,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACnF,MAAM,IAAI,KAAK,CACb,iEAAiE;oBAC/D,kFAAkF,CACrF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA+D,CAAC;QAEhG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,cAAc;YAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { AudioEvent } from '../../types/index.js';
2
+ import { AudioAnalyzer } from './base.js';
3
+ /**
4
+ * Uses YAMNet (TensorFlow Hub) via a Python script to classify audio frames
5
+ * against a fixed set of game-relevant sound classes (gunshot, explosion, etc.).
6
+ *
7
+ * Requires: pip install tensorflow-hub soundfile numpy
8
+ */
9
+ export declare class YAMNetAudioAnalyzer extends AudioAnalyzer {
10
+ readonly source: "yamnet";
11
+ detect(audioPath: string, _gameProfile: string, chunkOffsetSec: number, _chunkDurationSec: number): Promise<AudioEvent[]>;
12
+ }
13
+ //# sourceMappingURL=yamnet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yamnet.d.ts","sourceRoot":"","sources":["../../../src/services/audioAnalyzers/yamnet.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,aAAa;IACpD,QAAQ,CAAC,MAAM,EAAG,QAAQ,CAAU;IAE9B,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC;CAiCzB"}
@@ -2,6 +2,7 @@ import { execa } from 'execa';
2
2
  import { config } from '../../config/index.js';
3
3
  import { AudioAnalyzer } from './base.js';
4
4
  import { getPythonBin } from './whisper.js';
5
+ import { scriptPath } from '../../utils/paths.js';
5
6
  /**
6
7
  * Uses YAMNet (TensorFlow Hub) via a Python script to classify audio frames
7
8
  * against a fixed set of game-relevant sound classes (gunshot, explosion, etc.).
@@ -15,7 +16,7 @@ export class YAMNetAudioAnalyzer extends AudioAnalyzer {
15
16
  let stdout;
16
17
  try {
17
18
  const result = await execa(python, [
18
- 'scripts/detect_events.py',
19
+ scriptPath('detect_events.py'),
19
20
  audioPath,
20
21
  String(config.AUDIO_CONFIDENCE_THRESHOLD),
21
22
  ]);
@@ -38,3 +39,4 @@ export class YAMNetAudioAnalyzer extends AudioAnalyzer {
38
39
  }));
39
40
  }
40
41
  }
42
+ //# sourceMappingURL=yamnet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yamnet.js","sourceRoot":"","sources":["../../../src/services/audioAnalyzers/yamnet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC3C,MAAM,GAAG,QAAiB,CAAC;IAEpC,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,YAAoB,EACpB,cAAsB,EACtB,iBAAyB;QAEzB,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;QAEpC,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;gBACjC,UAAU,CAAC,kBAAkB,CAAC;gBAC9B,SAAS;gBACT,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC;aAC1C,CAAC,CAAC;YACH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAEjE,IAAI,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACnF,MAAM,IAAI,KAAK,CACb,iFAAiF;oBAC/E,kFAAkF,CACrF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAA+D,CAAC;QAEhG,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,cAAc;YAC7B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC,CAAC;IACN,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function downloadAudio(videoId: string, outputDir: string): Promise<string>;
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/audioDownloader/index.ts"],"names":[],"mappings":"AAmBA,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkFvF"}
@@ -79,3 +79,4 @@ export async function downloadAudio(videoId, outputDir) {
79
79
  console.log(`[audio] Audio saved to ${outputPath}`);
80
80
  return outputPath;
81
81
  }
82
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/audioDownloader/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { TranscriptLine, MicroBlock, LLMChunk } from '../../types/index.js';
2
+ /**
3
+ * Groups raw transcript lines into micro-blocks of approximately `windowSec` seconds.
4
+ *
5
+ * A new block starts whenever the next line's `start` falls outside the current window.
6
+ * Empty input returns an empty array.
7
+ */
8
+ export declare function buildMicroBlocks(lines: TranscriptLine[], windowSec: number): MicroBlock[];
9
+ /**
10
+ * Groups micro-blocks into larger LLM analysis chunks using a sliding window
11
+ * of `chunkLen` seconds with `overlap` seconds of overlap between consecutive chunks.
12
+ *
13
+ * Each chunk spans from the first block whose `start >= chunkStart` to the last block
14
+ * whose `start < chunkStart + chunkLen`. The next chunk starts at
15
+ * `chunkStart + chunkLen - overlap`.
16
+ *
17
+ * Empty input returns an empty array.
18
+ */
19
+ export declare function buildLLMChunks(blocks: MicroBlock[], chunkLen: number, overlap: number): LLMChunk[];
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/chunkBuilder/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEjF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,EAAE,CA8BzF;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAAE,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,QAAQ,EAAE,CA2BZ"}
@@ -65,3 +65,4 @@ export function buildLLMChunks(blocks, chunkLen, overlap) {
65
65
  }
66
66
  return chunks;
67
67
  }
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/chunkBuilder/index.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAuB,EAAE,SAAiB;IACzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjC,IAAI,KAAK,GAAa,EAAE,CAAC;IAEzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW,GAAG,SAAS,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,WAAW;gBAClB,GAAG,EAAE,IAAI,CAAC,KAAK;gBACf,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;aACtB,CAAC,CAAC;YACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,KAAK,GAAG,EAAE,CAAC;QACb,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,WAAW;YAClB,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,QAAQ;YACvC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAoB,EACpB,QAAgB,EAChB,OAAe;IAEf,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,IAAI,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEjC,OAAO,UAAU,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;QAEvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,IAAI,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;QAEjF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;gBACtB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG;gBAClC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,GAAG,OAAO,CAAC;QAChC,UAAU,IAAI,IAAI,CAAC;QAEnB,IAAI,IAAI,IAAI,CAAC;YAAE,MAAM;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { RankedSegment } from '../../types/index.js';
2
+ /**
3
+ * Generates video clips for each ranked segment using fluent-ffmpeg.
4
+ *
5
+ * - Auto-creates the output directory if it doesn't exist.
6
+ * - Runs clips with controlled concurrency via p-limit.
7
+ * - Logs a warning per failed clip; never aborts the entire run.
8
+ * - Re-encodes with libx264/aac for accurate audio/video sync.
9
+ *
10
+ * @param videoPath - Local path to the downloaded mp4
11
+ * @param segments - Ranked segments to cut
12
+ * @param videoId - Used to name output files
13
+ * @param customPath - Custom output directory (optional, overrides OUTPUT_DIR)
14
+ * @param concurrency - Maximum number of parallel clip operations (default: 1)
15
+ * @returns Array of successfully written clip file paths
16
+ * @throws {Error} if ffmpeg is not installed
17
+ */
18
+ export declare function generateClips(videoPath: string, segments: RankedSegment[], videoId: string, customPath?: string, concurrency?: number): Promise<string[]>;
19
+ /**
20
+ * Organizes pre-downloaded segment files from downloads/ to outputs/.
21
+ * Used when videos are downloaded via --download-sections segments mode.
22
+ *
23
+ * @param sourcePaths - Paths to the pre-downloaded segment files in downloads/
24
+ * @param videoId - Used to verify file naming
25
+ * @param customPath - Custom output directory (optional, overrides OUTPUT_DIR)
26
+ * @param concurrency - Maximum number of parallel copy operations (default: 1)
27
+ * @returns Array of organized clip file paths in outputs/
28
+ */
29
+ export declare function organizeClips(sourcePaths: string[], videoId: string, customPath?: string, concurrency?: number): Promise<string[]>;
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/clipGenerator/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA8D1D;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,aAAa,EAAE,EACzB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,GAAE,MAAU,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CA6CnB;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EAAE,EACrB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,GAAE,MAAU,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAwCnB"}
@@ -154,3 +154,4 @@ async function verifyFfmpeg() {
154
154
  });
155
155
  });
156
156
  }
157
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/clipGenerator/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CACd,SAAiB,EACjB,KAAa,EACb,GAAW,EACX,UAAkB;IAElB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACvF,MAAM,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;IAE7C,GAAG,CAAC,IAAI,CACN,uBAAuB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACrH,CAAC;IACF,IAAI,MAAM,CAAC,wBAAwB,KAAK,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,wBAAwB,GAAG,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,SAAS,CAAC;aACd,YAAY,CAAC,aAAa,CAAC;aAC3B,WAAW,CAAC,QAAQ,CAAC;aACrB,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC;aAChC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC;aAC9C,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;aAC5B,MAAM,CAAC,UAAU,CAAC;aAClB,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;aACpC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aACxC,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,WAAW,CACxB,UAAkB,EAClB,UAAkB,EAClB,UAAmB;IAEnB,MAAM,SAAS,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC/C,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,QAAyB,EACzB,OAAe,EACf,UAAmB,EACnB,cAAsB,CAAC;IAEvB,MAAM,SAAS,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAClD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QACpE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,GAAG,CAAC,IAAI,CACN,cAAc,QAAQ,CAAC,MAAM,QAAQ,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,0BAA0B,WAAW,eAAe,CAC1H,CAAC;IAEF,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CACvC,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,IAAI,QAAQ,IAAI,MAAM,MAAM,CAAC,CAAC;QAE3E,GAAG,CAAC,IAAI,CACN,iBAAiB,UAAU,KAAK,aAAa,CAAC,QAAQ,CAAC,MAAM,aAAa,CAAC,MAAM,CAAC,GAAG,CACtF,CAAC;QACF,OAAO,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpE,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9F,GAAG,CAAC,IAAI,CACN,mCAAmC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,IAAI,MAAM,MAAM,EAAE,CACrI,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,WAAqB,EACrB,OAAe,EACf,UAAmB,EACnB,cAAsB,CAAC;IAEvB,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAClD,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAClC,GAAG,CAAC,IAAI,CACN,cAAc,WAAW,CAAC,MAAM,QAAQ,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,WAAW,eAAe,CAC/G,CAAC;IAEF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAC1C,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE7C,GAAG,CAAC,IAAI,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;QAC3C,OAAO,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9F,GAAG,CAAC,IAAI,CAAC,2BAA2B,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,YAAY;IACzB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,EAAE;YACjC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { RankedSegment, MicroBlock } from '../../types/index.js';
2
+ /**
3
+ * Runs a second LLM pass on all ranked segments in parallel to tighten clip boundaries.
4
+ * Segments that fail refinement retain their original boundaries.
5
+ *
6
+ * @returns RankedSegment[] with refined (or original) start/end values
7
+ */
8
+ export declare function refineSegments(segments: RankedSegment[], allBlocks: MicroBlock[], concurrency: number, noCache?: boolean): Promise<RankedSegment[]>;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/clipRefiner/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAqGtE;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,UAAU,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,OAAO,UAAQ,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CAqB1B"}
@@ -101,3 +101,4 @@ export async function refineSegments(segments, allBlocks, concurrency, noCache =
101
101
  log.info(`Refinement complete`);
102
102
  return refined;
103
103
  }
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/clipRefiner/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { AudioAnalyzer } from '../audioAnalyzers/index.js';
2
+ import type { AudioEvent } from '../../types/index.js';
3
+ /**
4
+ * Top-level audio event detector.
5
+ *
6
+ * Holds an ordered chain of AudioAnalyzer instances and walks the chain on each
7
+ * `detect()` call: the first analyzer that succeeds wins. If an analyzer throws,
8
+ * the error is logged and the next analyzer in the chain is tried. If the entire
9
+ * chain is exhausted without success the error from the last analyzer is re-thrown.
10
+ *
11
+ * The chain is built once at startup via `createAnalyzerChain(config.AUDIO_PROVIDER)`
12
+ * and injected here, keeping provider-selection logic out of this class.
13
+ *
14
+ * @example
15
+ * const chain = createAnalyzerChain('gemini,whisper');
16
+ * const detector = new EventDetector(chain);
17
+ * const events = await detector.detect(audioPath, 'valorant', 0, 120);
18
+ */
19
+ export declare class EventDetector {
20
+ private readonly chain;
21
+ constructor(chain: AudioAnalyzer[]);
22
+ /**
23
+ * Detect audio events by walking the analyzer chain in order.
24
+ * Falls back to the next analyzer whenever one throws.
25
+ */
26
+ detect(audioPath: string, gameProfile: string, chunkOffsetSec: number, chunkDurationSec: number): Promise<AudioEvent[]>;
27
+ }
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/eventDetector/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,aAAa,EAAE;IAMnD;;;OAGG;IACG,MAAM,CACV,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,UAAU,EAAE,CAAC;CA+BzB"}
@@ -52,3 +52,4 @@ export class EventDetector {
52
52
  throw lastError;
53
53
  }
54
54
  }
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/eventDetector/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAI5C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,KAAsB;QAAtB,UAAK,GAAL,KAAK,CAAiB;QACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,WAAmB,EACnB,cAAsB,EACtB,gBAAwB;QAExB,IAAI,SAAkB,CAAC;QAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAE3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAClC,SAAS,EACT,WAAW,EACX,cAAc,EACd,gBAAgB,CACjB,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,MAAM,cAAc,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;gBACxE,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,SAAS,GAAG,GAAG,CAAC;gBAChB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAEjE,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;oBAC5C,GAAG,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,MAAM,6BAA6B,UAAU,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC3F,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,MAAM,iCAAiC,OAAO,EAAE,CAAC,CAAC;gBACjF,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,SAAS,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ import type { TranscriptDetector } from '../transcriptDetector/index.js';
2
+ import type { Cache } from '../../utils/cache.js';
3
+ import type { MicroBlock, RankedSegment, LLMAnalyzerResult, LLMAnalyzerOpts } from '../../types/index.js';
4
+ /**
5
+ * LLMAnalyzer — orchestrates transcript fetching + LLM-based segment analysis.
6
+ *
7
+ * Owns a TranscriptDetector (which encapsulates the provider chain) and the
8
+ * Cache. Audio events are provided externally — they are pre-computed by the
9
+ * AudioProcessor stage so that the full per-chunk caching logic stays in
10
+ * audioProcessor.ts and is not duplicated here.
11
+ *
12
+ * LLM pass 1 (`analyze`) — fetches transcript, runs chunk analysis.
13
+ * LLM pass 2 (`refine`) — tightens clip boundaries on ranked segments.
14
+ *
15
+ * The free functions in `llmAnalyzer/index.ts` and `clipRefiner/index.ts` are
16
+ * NOT modified — this class wraps them.
17
+ *
18
+ * @example
19
+ * const analyzer = new LLMAnalyzer(transcriptDetector, cache);
20
+ * const result = await analyzer.analyze({ videoId, audioPath, audioEvents, ... });
21
+ * // ... ranking step ...
22
+ * const refined = await analyzer.refine(rankedSegments, result.microBlocks, opts);
23
+ */
24
+ export declare class LLMAnalyzer {
25
+ private readonly transcriptDetector;
26
+ private readonly cache;
27
+ constructor(transcriptDetector: TranscriptDetector, cache: Cache);
28
+ /**
29
+ * LLM pass 1 — fetch transcript then run chunk analysis.
30
+ *
31
+ * Returns lines, microBlocks, chunks, and chunkEvals so the caller has
32
+ * everything needed for the ranking step.
33
+ */
34
+ analyze(opts: LLMAnalyzerOpts): Promise<LLMAnalyzerResult>;
35
+ /**
36
+ * LLM pass 2 — tighten clip boundaries on already-ranked segments.
37
+ * Must be called after ranking, since it takes `RankedSegment[]` as input.
38
+ */
39
+ refine(rankedSegments: RankedSegment[], microBlocks: MicroBlock[], opts: Pick<LLMAnalyzerOpts, 'maxParallel' | 'noCache'>): Promise<RankedSegment[]>;
40
+ }
41
+ //# sourceMappingURL=LLMAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/services/llmAnalyzer/LLMAnalyzer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAEV,UAAU,EAIV,aAAa,EACb,iBAAiB,EACjB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBADL,kBAAkB,EAAE,kBAAkB,EACtC,KAAK,EAAE,KAAK;IAG/B;;;;;OAKG;IACG,OAAO,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoChE;;;OAGG;IACG,MAAM,CACV,cAAc,EAAE,aAAa,EAAE,EAC/B,WAAW,EAAE,UAAU,EAAE,EACzB,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,GAAG,SAAS,CAAC,GACrD,OAAO,CAAC,aAAa,EAAE,CAAC;CAI5B"}
@@ -59,3 +59,4 @@ export class LLMAnalyzer {
59
59
  return refineSegments(rankedSegments, microBlocks, opts.maxParallel, opts.noCache);
60
60
  }
61
61
  }
62
+ //# sourceMappingURL=LLMAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMAnalyzer.js","sourceRoot":"","sources":["../../../src/services/llmAnalyzer/LLMAnalyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAc/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,WAAW;IAEH;IACA;IAFnB,YACmB,kBAAsC,EACtC,KAAY;QADZ,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,UAAK,GAAL,KAAK,CAAO;IAC5B,CAAC;IAEJ;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CAAC,IAAqB;QACjC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CACzE,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CACX,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC;QACvD,MAAM,eAAe,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAExF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CACN,0BAA0B,eAAe,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,yBAAyB,UAAU,GAAG,CAC3G,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CACN,yBAAyB,MAAM,CAAC,SAAS,KAAK,eAAe,CAAC,MAAM,gBAAgB,IAAI,CAAC,WAAW,eAAe,CACpH,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,aAAa,CACpC,eAAe,EACf,KAAK,EACL,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,CACb,CAAC;QAEF,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC/E,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CACV,cAA+B,EAC/B,WAAyB,EACzB,IAAsD;QAEtD,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACxC,OAAO,cAAc,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACrF,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { LLMChunk, TranscriptLine, ChunkEvaluation, AudioEvent } from '../../types/index.js';
2
+ /**
3
+ * Analyzes all LLM chunks via Promise.allSettled — one failure never aborts the rest.
4
+ * Each chunk receives only the transcript lines and audio events within its window.
5
+ * Pass noCache=true to bypass the on-disk chunk cache.
6
+ */
7
+ export declare function analyzeChunks(chunks: LLMChunk[], lines: TranscriptLine[], audioEvents: AudioEvent[], concurrency: number, noCache?: boolean): Promise<ChunkEvaluation[]>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/llmAnalyzer/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EAEd,eAAe,EACf,UAAU,EACX,MAAM,sBAAsB,CAAC;AAyJ9B;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,QAAQ,EAAE,EAClB,KAAK,EAAE,cAAc,EAAE,EACvB,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,EAAE,MAAM,EACnB,OAAO,UAAQ,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAoD5B"}
@@ -171,3 +171,4 @@ export async function analyzeChunks(chunks, lines, audioEvents, concurrency, noC
171
171
  log.info(`Analysis complete: ${succeeded}/${chunks.length} chunks succeeded`);
172
172
  return evaluations;
173
173
  }
174
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/llmAnalyzer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { VideoMetadata } from '../../types/index.js';
2
+ /**
3
+ * Extracts video metadata (title, duration) for a given YouTube video ID.
4
+ *
5
+ * Strategy:
6
+ * 1. Try yt-dlp --dump-json (full metadata, requires yt-dlp installed)
7
+ * 2. Fall back to YouTube oEmbed API (title only, duration = 0)
8
+ *
9
+ * @throws {Error} if both strategies fail
10
+ */
11
+ export declare function extractMetadata(videoId: string): Promise<VideoMetadata>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/metadataExtractor/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA8D1D;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAQ7E"}
@@ -64,3 +64,4 @@ export async function extractMetadata(videoId) {
64
64
  log.warn(`yt-dlp failed for "${videoId}", falling back to oEmbed...`);
65
65
  return extractViaOEmbed(videoId);
66
66
  }
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/metadataExtractor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAG5C,MAAM,UAAU,GAAG,gCAAgC,CAAC;AAWpD;;;GAGG;AACH,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,mCAAmC,OAAO,EAAE,CAAC,CAAC;QAE5F,IAAI,MAAM,CAAC,2BAA2B,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAC7E,CAAC;aAAM,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAc,CAAC;QAC7C,OAAO;YACL,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,sBAAsB,OAAO,MAAM,OAAO,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAC7C,MAAM,GAAG,GAAG,GAAG,UAAU,wCAAwC,OAAO,cAAc,CAAC;IACvF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;IAClD,GAAG,CAAC,IAAI,CACN,8CAA8C,OAAO,sCAAsC,CAC5F,CAAC;IACF,OAAO;QACL,OAAO;QACP,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe;IACnD,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,sBAAsB,OAAO,8BAA8B,CAAC,CAAC;IACtE,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MergedCandidate, RankedSegment } from '../../types/index.js';
2
+ export declare function rankSegments(segments: MergedCandidate[], threshold: number, topN: number): RankedSegment[];
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/segmentRanker/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAqE3E,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,aAAa,EAAE,CAcjB"}
@@ -38,3 +38,4 @@ export function rankSegments(segments, threshold, topN) {
38
38
  audio_event: s.audio_event,
39
39
  }));
40
40
  }
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/segmentRanker/index.ts"],"names":[],"mappings":"AAEA,SAAS,cAAc,CAAC,MAAc,EAAE,IAAY,EAAE,MAAc,EAAE,IAAY;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,qBAAqB,CAC5B,MAAc,EACd,IAAY,EACZ,MAAc,EACd,IAAY,EACZ,OAAe,EACf,OAAe;IAEf,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEhC,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC;IAEhC,MAAM,aAAa,GAAG,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC;IAEjE,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,OAAO,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,GAAG,SAAS,GAAG,GAAG,IAAI,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;AAChE,CAAC;AAED,SAAS,mBAAmB,CAC1B,QAOE;IASF,MAAM,IAAI,GAAoB,EAAE,CAAC;IAEjC,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CACvC,qBAAqB,CACnB,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,GAAG,EACZ,SAAS,CAAC,KAAK,EACf,SAAS,CAAC,GAAG,EACb,QAAQ,CAAC,MAAM,EACf,SAAS,CAAC,MAAM,CACjB,CACF,CAAC;QACF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAA2B,EAC3B,SAAiB,EACjB,IAAY;IAEZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAEhG,MAAM,OAAO,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAE9C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,IAAI,EAAE,CAAC,GAAG,CAAC;QACX,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAyC;QACnD,WAAW,EAAE,CAAC,CAAC,WAAW;KAC3B,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { MergedCandidate } from '../../types/index.js';
2
+ import type { ChunkEvaluation } from '../../types/index.js';
3
+ import type { AudioEvent } from '../../types/index.js';
4
+ export declare function mergeSignals(llmSegments: ChunkEvaluation[], audioEvents: AudioEvent[], boostWindow?: number, scoreBoost?: number, preRoll?: number, postRoll?: number): MergedCandidate[];
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/signalMerger/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,wBAAgB,YAAY,CAC1B,WAAW,EAAE,eAAe,EAAE,EAC9B,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,CAAC,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,EAAE,CAwCnB"}
@@ -34,3 +34,4 @@ export function mergeSignals(llmSegments, audioEvents, boostWindow, scoreBoost,
34
34
  }
35
35
  return candidates;
36
36
  }
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/signalMerger/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,UAAU,YAAY,CAC1B,WAA8B,EAC9B,WAAyB,EACzB,WAAoB,EACpB,UAAmB,EACnB,OAAgB,EAChB,QAAiB;IAEjB,MAAM,UAAU,GAAsB,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,WAAW,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAC/D,MAAM,KAAK,GAAG,UAAU,IAAI,MAAM,CAAC,qBAAqB,CAAC;IACzD,MAAM,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,mBAAmB,CAAC;IAClD,MAAM,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC,oBAAoB,CAAC;IAErD,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAE7E,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,SAAS;QAE/B,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC;QAExF,UAAU,CAAC,IAAI,CAAC;YACd,KAAK,EAAE,GAAG,CAAC,UAAU;YACrB,GAAG,EAAE,GAAG,CAAC,QAAQ;YACjB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY;YACjD,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,WAAW,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAE7F,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;gBAClC,GAAG,EAAE,GAAG,CAAC,IAAI,GAAG,IAAI;gBACpB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;gBACtC,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,gBAAgB,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBACtF,WAAW,EAAE,GAAG,CAAC,KAAK;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { TranscriptLine } from '../../types/index.js';
2
+ /**
3
+ * Contract every transcript analyzer implementation must satisfy.
4
+ *
5
+ * Each concrete analyzer (YtDlp, Whisper, Gemini) extends this class and
6
+ * implements `detect()`. The `source` property tags the lines it returns so
7
+ * downstream logging knows which backend produced them.
8
+ *
9
+ * Usage:
10
+ * const analyzer = new YtDlpTranscriptAnalyzer();
11
+ * const lines = await analyzer.detect(videoId, null);
12
+ */
13
+ export declare abstract class TranscriptAnalyzer {
14
+ abstract readonly source: string;
15
+ /**
16
+ * Fetch transcript lines for the given video.
17
+ *
18
+ * @param videoId - YouTube video ID (no URL)
19
+ * @param audioPath - Path to the downloaded WAV on disk, or null if audio
20
+ * is not yet available (e.g. ytdlp path has no audio dep)
21
+ * @returns Array of transcript lines sorted by start time
22
+ */
23
+ abstract detect(videoId: string, audioPath: string | null): Promise<TranscriptLine[]>;
24
+ }
25
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/services/transcriptAnalyzers/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,8BAAsB,kBAAkB;IACtC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAEjC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CACtF"}
@@ -11,3 +11,4 @@
11
11
  */
12
12
  export class TranscriptAnalyzer {
13
13
  }
14
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/services/transcriptAnalyzers/base.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,OAAgB,kBAAkB;CAYvC"}
@@ -0,0 +1,21 @@
1
+ import { TranscriptAnalyzer } from './base.js';
2
+ import type { TranscriptProviderName } from '../../types/index.js';
3
+ /**
4
+ * Parses the TRANSCRIPT_PROVIDER config string into an ordered list of provider names.
5
+ *
6
+ * Accepts a comma-separated list: "ytdlp,whisper" → ['ytdlp', 'whisper']
7
+ * Single values still work: "ytdlp" → ['ytdlp']
8
+ */
9
+ export declare function parseTranscriptProviderChain(providerString: string): TranscriptProviderName[];
10
+ /**
11
+ * Builds an ordered array of TranscriptAnalyzer instances from a provider chain string.
12
+ *
13
+ * The TranscriptDetector will walk this array in order — if the first analyzer
14
+ * fails, it falls back to the next, and so on.
15
+ *
16
+ * @example
17
+ * // TRANSCRIPT_PROVIDER=ytdlp,whisper → [YtDlpTranscriptAnalyzer, WhisperTranscriptAnalyzer]
18
+ * const chain = createTranscriptChain(config.TRANSCRIPT_PROVIDER);
19
+ */
20
+ export declare function createTranscriptChain(providerString: string): TranscriptAnalyzer[];
21
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/services/transcriptAnalyzers/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAI/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAInE;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAqB7F;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAiBlF"}
@@ -49,3 +49,4 @@ export function createTranscriptChain(providerString) {
49
49
  }
50
50
  });
51
51
  }
52
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/services/transcriptAnalyzers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAGvD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;AAExF;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,cAAsB;IACjE,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;SAClC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAA8B,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,gCAAgC,IAAI,sEAAsE,CAC3G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAiC,CAAC;AAC3C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CAAC,cAAsB;IAC1D,MAAM,KAAK,GAAG,4BAA4B,CAAC,cAAc,CAAC,CAAC;IAE3D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,IAAI,uBAAuB,EAAE,CAAC;YACvC,KAAK,SAAS;gBACZ,OAAO,IAAI,yBAAyB,EAAE,CAAC;YACzC,KAAK,QAAQ;gBACX,GAAG,CAAC,IAAI,CACN,iEAAiE;oBAC/D,wCAAwC,CAC3C,CAAC;gBACF,OAAO,IAAI,wBAAwB,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { TranscriptLine } from '../../types/index.js';
2
+ import { TranscriptAnalyzer } from './base.js';
3
+ /**
4
+ * Transcribes a video using Google Gemini's multimodal audio understanding.
5
+ *
6
+ * @stub This implementation is not yet complete. It will:
7
+ * 1. Split the audio file into overlapping chunks
8
+ * 2. Send each chunk to the Gemini audio API for transcription
9
+ * 3. Stitch the returned text segments back into TranscriptLine[]
10
+ *
11
+ * Set TRANSCRIPT_PROVIDER=ytdlp or TRANSCRIPT_PROVIDER=whisper to use a
12
+ * working provider in the meantime.
13
+ */
14
+ export declare class GeminiTranscriptAnalyzer extends TranscriptAnalyzer {
15
+ readonly source: "gemini";
16
+ detect(_videoId: string, _audioPath: string | null): Promise<TranscriptLine[]>;
17
+ }
18
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/services/transcriptAnalyzers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,qBAAa,wBAAyB,SAAQ,kBAAkB;IAC9D,QAAQ,CAAC,MAAM,EAAG,QAAQ,CAAU;IAE9B,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAMrF"}
@@ -17,3 +17,4 @@ export class GeminiTranscriptAnalyzer extends TranscriptAnalyzer {
17
17
  'Use TRANSCRIPT_PROVIDER=ytdlp or TRANSCRIPT_PROVIDER=whisper instead.');
18
18
  }
19
19
  }
20
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/services/transcriptAnalyzers/gemini.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,OAAO,wBAAyB,SAAQ,kBAAkB;IACrD,MAAM,GAAG,QAAiB,CAAC;IAEpC,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,UAAyB;QACtD,MAAM,IAAI,KAAK,CACb,mDAAmD;YACjD,uEAAuE,CAC1E,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export { TranscriptAnalyzer } from './base.js';
2
+ export { YtDlpTranscriptAnalyzer } from './ytdlp.js';
3
+ export { WhisperTranscriptAnalyzer } from './whisper.js';
4
+ export { GeminiTranscriptAnalyzer } from './gemini.js';
5
+ export { createTranscriptChain, parseTranscriptProviderChain } from './factory.js';
6
+ export type { TranscriptProviderName } from '../../types/index.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/transcriptAnalyzers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACnF,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -3,3 +3,4 @@ export { YtDlpTranscriptAnalyzer } from './ytdlp.js';
3
3
  export { WhisperTranscriptAnalyzer } from './whisper.js';
4
4
  export { GeminiTranscriptAnalyzer } from './gemini.js';
5
5
  export { createTranscriptChain, parseTranscriptProviderChain } from './factory.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/transcriptAnalyzers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC"}