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,333 +0,0 @@
1
- import { promises as fs } from 'fs';
2
- import path from 'path';
3
- import { BaseAgent } from './BaseAgent';
4
- import { captureFrame } from '../tools/ffmpeg/frameCapture';
5
- import logger from '../config/logger';
6
- import { getBrandConfig } from '../config/brand';
7
- import { getConfig } from '../config/environment';
8
- // ── Helpers ──────────────────────────────────────────────────────────────────
9
- /** Format seconds → "MM:SS" */
10
- function fmtTime(seconds) {
11
- const m = Math.floor(seconds / 60);
12
- const s = Math.floor(seconds % 60);
13
- return `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
14
- }
15
- /** Build a compact transcript block with timestamps for the LLM prompt. */
16
- function buildTranscriptBlock(transcript) {
17
- return transcript.segments
18
- .map((seg) => `[${fmtTime(seg.start)} → ${fmtTime(seg.end)}] ${seg.text.trim()}`)
19
- .join('\n');
20
- }
21
- // ── System prompt ────────────────────────────────────────────────────────────
22
- function buildSystemPrompt(shortsInfo, socialPostsInfo, captionsInfo, chaptersInfo) {
23
- const brand = getBrandConfig();
24
- return `You are a Video Summary Agent writing from the perspective of ${brand.name} (${brand.handle}).
25
- Brand voice: ${brand.voice.tone}. ${brand.voice.personality} ${brand.voice.style}
26
-
27
- Your job is to analyse a video transcript and produce a beautiful, narrative-style Markdown README.
28
-
29
- **Workflow**
30
- 1. Read the transcript carefully.
31
- 2. Identify 3-8 key topics, decisions, highlights, or memorable moments.
32
- 3. For each highlight, decide on a representative timestamp and call the "capture_frame" tool to grab a screenshot.
33
- 4. Once all frames are captured, call the "write_summary" tool with the final Markdown.
34
-
35
- **Markdown structure — follow this layout exactly:**
36
-
37
- \`\`\`
38
- # [Video Title]
39
-
40
- > [Compelling one-line hook/tagline that captures the video's value]
41
-
42
- [2-3 paragraph natural summary that reads like a blog post, NOT a timeline.
43
- Weave in key insights naturally. Write in the brand voice: ${brand.voice.tone}.
44
- ${brand.contentGuidelines.blogFocus}]
45
-
46
- ---
47
-
48
- ## Key Moments
49
-
50
- [For each key topic: write a narrative paragraph (not bullet points).
51
- Embed the timestamp as an inline badge like \`[0:12]\` within the text, NOT as a section header.
52
- Embed the screenshot naturally within or after the paragraph.
53
- Use blockquotes (>) for standout quotes or insights.]
54
-
55
- ![Description](thumbnails/snapshot-001.png)
56
-
57
- [Continue with next topic paragraph...]
58
-
59
- ---
60
-
61
- ## šŸ“Š Quick Reference
62
-
63
- | Topic | Timestamp |
64
- |-------|-----------|
65
- | Topic name | \`M:SS\` |
66
- | ... | ... |
67
-
68
- ---
69
- ${chaptersInfo}
70
- ${shortsInfo}
71
- ${socialPostsInfo}
72
- ${captionsInfo}
73
-
74
- ---
75
-
76
- *Generated on [DATE] • Duration: [DURATION] • Tags: [relevant tags]*
77
- \`\`\`
78
-
79
- **Writing style rules**
80
- - Write in a narrative, blog-post style — NOT a timestamp-driven timeline.
81
- - Timestamps appear as subtle inline badges like \`[0:12]\` or \`[1:30]\` within sentences, never as section headers.
82
- - The summary paragraphs should flow naturally and be enjoyable to read.
83
- - Use the brand perspective: ${brand.voice.personality}
84
- - Topics to emphasize: ${brand.advocacy.interests.join(', ')}
85
- - Avoid: ${brand.advocacy.avoids.join(', ')}
86
-
87
- **Screenshot distribution rules — CRITICAL**
88
- - You MUST spread screenshots across the ENTIRE video duration, from beginning to end.
89
- - Divide the video into equal segments based on the number of screenshots you plan to capture, and pick one timestamp from each segment.
90
- - NO MORE than 2 screenshots should fall within the same 60-second window.
91
- - If the video is longer than 2 minutes, your first screenshot must NOT be in the first 10% and your last screenshot must be in the final 30% of the video.
92
- - Use the suggested timestamp ranges provided in the user message as guidance, but pick the exact moment within each range that best matches a key topic in the transcript.
93
-
94
- **Tool rules**
95
- - Always call "capture_frame" BEFORE "write_summary".
96
- - The snapshot index must be a 1-based integer; the filename will be snapshot-001.png, etc.
97
- - In the Markdown, reference screenshots as \`thumbnails/snapshot-001.png\` (relative path).
98
- - Call "write_summary" exactly once with the complete Markdown string.`;
99
- }
100
- // ── SummaryAgent ─────────────────────────────────────────────────────────────
101
- class SummaryAgent extends BaseAgent {
102
- videoPath;
103
- outputDir;
104
- snapshots = [];
105
- constructor(videoPath, outputDir, systemPrompt) {
106
- super('SummaryAgent', systemPrompt);
107
- this.videoPath = videoPath;
108
- this.outputDir = outputDir;
109
- }
110
- // Resolved paths
111
- get thumbnailDir() {
112
- return path.join(this.outputDir, 'thumbnails');
113
- }
114
- get markdownPath() {
115
- return path.join(this.outputDir, 'README.md');
116
- }
117
- /* ── Tools exposed to the LLM ─────────────────────────────────────────── */
118
- getTools() {
119
- return [
120
- {
121
- name: 'capture_frame',
122
- description: 'Capture a screenshot from the video at a specific timestamp. ' +
123
- 'Provide: timestamp (seconds), description (what is shown), index (1-based integer for filename).',
124
- parameters: {
125
- type: 'object',
126
- properties: {
127
- timestamp: { type: 'number', description: 'Timestamp in seconds to capture' },
128
- description: { type: 'string', description: 'Brief description of the visual moment' },
129
- index: { type: 'integer', description: '1-based snapshot index (used for filename)' },
130
- },
131
- required: ['timestamp', 'description', 'index'],
132
- },
133
- handler: async (rawArgs) => {
134
- const args = rawArgs;
135
- return this.handleCaptureFrame(args);
136
- },
137
- },
138
- {
139
- name: 'write_summary',
140
- description: 'Write the final Markdown summary to disk. ' +
141
- 'Provide: markdown (full README content), title, overview, and keyTopics array.',
142
- parameters: {
143
- type: 'object',
144
- properties: {
145
- markdown: { type: 'string', description: 'Complete Markdown content for README.md' },
146
- title: { type: 'string', description: 'Video title' },
147
- overview: { type: 'string', description: 'Short overview paragraph' },
148
- keyTopics: {
149
- type: 'array',
150
- items: { type: 'string' },
151
- description: 'List of key topic names',
152
- },
153
- },
154
- required: ['markdown', 'title', 'overview', 'keyTopics'],
155
- },
156
- handler: async (rawArgs) => {
157
- const args = rawArgs;
158
- return this.handleWriteSummary(args);
159
- },
160
- },
161
- ];
162
- }
163
- /* ── Tool dispatch (required by BaseAgent) ─────────────────────────────── */
164
- async handleToolCall(toolName, args) {
165
- switch (toolName) {
166
- case 'capture_frame':
167
- return this.handleCaptureFrame(args);
168
- case 'write_summary':
169
- return this.handleWriteSummary(args);
170
- default:
171
- throw new Error(`Unknown tool: ${toolName}`);
172
- }
173
- }
174
- /* ── Tool implementations ──────────────────────────────────────────────── */
175
- async handleCaptureFrame(args) {
176
- const idx = String(args.index).padStart(3, '0');
177
- const filename = `snapshot-${idx}.png`;
178
- const outputPath = path.join(this.thumbnailDir, filename);
179
- await captureFrame(this.videoPath, args.timestamp, outputPath);
180
- const snapshot = {
181
- timestamp: args.timestamp,
182
- description: args.description,
183
- outputPath,
184
- };
185
- this.snapshots.push(snapshot);
186
- logger.info(`[SummaryAgent] Captured snapshot ${idx} at ${fmtTime(args.timestamp)}`);
187
- return `Frame captured: thumbnails/${filename}`;
188
- }
189
- async handleWriteSummary(args) {
190
- await fs.mkdir(this.outputDir, { recursive: true });
191
- await fs.writeFile(this.markdownPath, args.markdown, 'utf-8');
192
- logger.info(`[SummaryAgent] Wrote summary → ${this.markdownPath}`);
193
- return `Summary written to ${this.markdownPath}`;
194
- }
195
- /** Expose collected data after the run. */
196
- getResult(args) {
197
- return {
198
- title: args.title,
199
- overview: args.overview,
200
- keyTopics: args.keyTopics,
201
- snapshots: this.snapshots,
202
- markdownPath: this.markdownPath,
203
- };
204
- }
205
- }
206
- // ── Public API ───────────────────────────────────────────────────────────────
207
- /** Build the Shorts section for the README template. */
208
- function buildShortsSection(shorts) {
209
- if (!shorts || shorts.length === 0) {
210
- return `
211
- ## āœ‚ļø Shorts
212
-
213
- | Short | Duration | Description |
214
- |-------|----------|-------------|
215
- | *Shorts will appear here once generated* | | |`;
216
- }
217
- const rows = shorts
218
- .map((s) => `| [${s.title}](shorts/${s.slug}.mp4) | ${Math.round(s.totalDuration)}s | ${s.description} |`)
219
- .join('\n');
220
- return `
221
- ## āœ‚ļø Shorts
222
-
223
- | Short | Duration | Description |
224
- |-------|----------|-------------|
225
- ${rows}`;
226
- }
227
- /** Build the Social Media Posts section for the README template. */
228
- function buildSocialPostsSection() {
229
- return `
230
- ## šŸ“± Social Media Posts
231
-
232
- - [TikTok](social-posts/tiktok.md)
233
- - [YouTube](social-posts/youtube.md)
234
- - [Instagram](social-posts/instagram.md)
235
- - [LinkedIn](social-posts/linkedin.md)
236
- - [X / Twitter](social-posts/x.md)
237
- - [Dev.to Blog](social-posts/devto.md)`;
238
- }
239
- /** Build the Captions section for the README template. */
240
- function buildCaptionsSection() {
241
- return `
242
- ## šŸŽ¬ Captions
243
-
244
- - [SRT](captions/captions.srt) | [VTT](captions/captions.vtt) | [ASS (Styled)](captions/captions.ass)`;
245
- }
246
- /** Format seconds → YouTube-style timestamp for chapters display */
247
- function toYouTubeTimestamp(seconds) {
248
- const h = Math.floor(seconds / 3600);
249
- const m = Math.floor((seconds % 3600) / 60);
250
- const s = Math.floor(seconds % 60);
251
- return h > 0
252
- ? `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`
253
- : `${m}:${String(s).padStart(2, '0')}`;
254
- }
255
- /** Build the Chapters section for the README template. */
256
- function buildChaptersSection(chapters) {
257
- if (!chapters || chapters.length === 0) {
258
- return '';
259
- }
260
- const rows = chapters
261
- .map((ch) => `| \`${toYouTubeTimestamp(ch.timestamp)}\` | ${ch.title} | ${ch.description} |`)
262
- .join('\n');
263
- return `
264
- ## šŸ“‘ Chapters
265
-
266
- | Time | Chapter | Description |
267
- |------|---------|-------------|
268
- ${rows}
269
-
270
- > šŸ“‹ [YouTube Timestamps](chapters/chapters-youtube.txt) • [Markdown](chapters/chapters.md) • [JSON](chapters/chapters.json)`;
271
- }
272
- /**
273
- * Generate a beautiful Markdown summary for a video recording.
274
- *
275
- * 1. Creates a SummaryAgent with `capture_frame` and `write_summary` tools
276
- * 2. Builds a prompt containing the full transcript with timestamps
277
- * 3. Lets the agent analyse the transcript, capture key frames, and write Markdown
278
- * 4. Returns a {@link VideoSummary} with metadata and snapshot paths
279
- */
280
- export async function generateSummary(video, transcript, shorts, chapters) {
281
- const config = getConfig();
282
- const outputDir = path.join(config.OUTPUT_DIR, video.slug);
283
- // Build content-section snippets for the system prompt
284
- const shortsInfo = buildShortsSection(shorts);
285
- const socialPostsInfo = buildSocialPostsSection();
286
- const captionsInfo = buildCaptionsSection();
287
- const chaptersInfo = buildChaptersSection(chapters);
288
- const systemPrompt = buildSystemPrompt(shortsInfo, socialPostsInfo, captionsInfo, chaptersInfo);
289
- const agent = new SummaryAgent(video.repoPath, outputDir, systemPrompt);
290
- const transcriptBlock = buildTranscriptBlock(transcript);
291
- // Pre-calculate suggested screenshot time ranges spread across the full video
292
- const screenshotCount = Math.min(8, Math.max(3, Math.round(video.duration / 120)));
293
- const interval = video.duration / screenshotCount;
294
- const suggestedRanges = Array.from({ length: screenshotCount }, (_, i) => {
295
- const center = Math.round(interval * (i + 0.5));
296
- const lo = Math.max(0, Math.round(center - interval / 2));
297
- const hi = Math.min(Math.round(video.duration), Math.round(center + interval / 2));
298
- return `${fmtTime(lo)}–${fmtTime(hi)} (${lo}s–${hi}s)`;
299
- }).join(', ');
300
- const userPrompt = [
301
- `**Video:** ${video.filename}`,
302
- `**Duration:** ${fmtTime(video.duration)} (${Math.round(video.duration)} seconds)`,
303
- `**Date:** ${video.createdAt.toISOString().slice(0, 10)}`,
304
- '',
305
- `**Suggested screenshot time ranges (one screenshot per range):**`,
306
- suggestedRanges,
307
- '',
308
- '---',
309
- '',
310
- '**Transcript:**',
311
- '',
312
- transcriptBlock,
313
- ].join('\n');
314
- let lastWriteArgs;
315
- // Intercept write_summary args so we can build the return value
316
- // Uses `as any` to access private method — required by the intercept-and-capture pattern
317
- const origHandleWrite = agent.handleWriteSummary.bind(agent);
318
- agent.handleWriteSummary = async (args) => {
319
- lastWriteArgs = args;
320
- return origHandleWrite(args);
321
- };
322
- try {
323
- await agent.run(userPrompt);
324
- if (!lastWriteArgs) {
325
- throw new Error('SummaryAgent did not call write_summary');
326
- }
327
- return agent.getResult(lastWriteArgs);
328
- }
329
- finally {
330
- await agent.destroy();
331
- }
332
- }
333
- //# sourceMappingURL=SummaryAgent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SummaryAgent.js","sourceRoot":"","sources":["../../src/agents/SummaryAgent.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- /** Normalize LLM_PROVIDER the same way the provider factory does. */
2
- export declare function normalizeProviderName(raw: string | undefined): string;
3
- export declare function runDoctor(): void;
4
- //# sourceMappingURL=doctor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAeA,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAErE;AAuJD,wBAAgB,SAAS,IAAI,IAAI,CA0EhC"}
@@ -1,230 +0,0 @@
1
- import { spawnSync } from 'child_process';
2
- import { existsSync } from 'fs';
3
- import { createRequire } from 'module';
4
- import path from 'path';
5
- const require = createRequire(import.meta.url);
6
- /** Normalize LLM_PROVIDER the same way the provider factory does. */
7
- export function normalizeProviderName(raw) {
8
- return (raw || 'copilot').trim().toLowerCase();
9
- }
10
- function resolveFFmpegPath() {
11
- if (process.env.FFMPEG_PATH) {
12
- return { path: process.env.FFMPEG_PATH, source: 'FFMPEG_PATH env' };
13
- }
14
- try {
15
- const staticPath = require('ffmpeg-static');
16
- if (staticPath && existsSync(staticPath)) {
17
- return { path: staticPath, source: 'ffmpeg-static' };
18
- }
19
- }
20
- catch { /* not available */ }
21
- return { path: 'ffmpeg', source: 'system PATH' };
22
- }
23
- function resolveFFprobePath() {
24
- if (process.env.FFPROBE_PATH) {
25
- return { path: process.env.FFPROBE_PATH, source: 'FFPROBE_PATH env' };
26
- }
27
- try {
28
- const { path: probePath } = require('@ffprobe-installer/ffprobe');
29
- if (probePath && existsSync(probePath)) {
30
- return { path: probePath, source: '@ffprobe-installer/ffprobe' };
31
- }
32
- }
33
- catch { /* not available */ }
34
- return { path: 'ffprobe', source: 'system PATH' };
35
- }
36
- function parseVersionFromOutput(output) {
37
- const match = output.match(/(\d+\.\d+(?:\.\d+)?)/);
38
- return match ? match[1] : 'unknown';
39
- }
40
- function getFFmpegInstallHint() {
41
- const platform = process.platform;
42
- const lines = ['Install FFmpeg:'];
43
- if (platform === 'win32') {
44
- lines.push(' winget install Gyan.FFmpeg');
45
- lines.push(' choco install ffmpeg (alternative)');
46
- }
47
- else if (platform === 'darwin') {
48
- lines.push(' brew install ffmpeg');
49
- }
50
- else {
51
- lines.push(' sudo apt install ffmpeg (Debian/Ubuntu)');
52
- lines.push(' sudo dnf install ffmpeg (Fedora)');
53
- lines.push(' sudo pacman -S ffmpeg (Arch)');
54
- }
55
- lines.push(' Or set FFMPEG_PATH to a custom binary location');
56
- return lines.join('\n ');
57
- }
58
- function checkNode() {
59
- const raw = process.version; // e.g. "v20.11.1"
60
- const major = parseInt(raw.slice(1), 10);
61
- const ok = major >= 20;
62
- return {
63
- label: 'Node.js',
64
- ok,
65
- required: true,
66
- message: ok
67
- ? `Node.js ${raw} (required: ≄20)`
68
- : `Node.js ${raw} — version ≄20 required`,
69
- };
70
- }
71
- function checkFFmpeg() {
72
- const { path: binPath, source } = resolveFFmpegPath();
73
- try {
74
- const result = spawnSync(binPath, ['-version'], { encoding: 'utf-8', timeout: 10_000 });
75
- if (result.status === 0 && result.stdout) {
76
- const ver = parseVersionFromOutput(result.stdout);
77
- return { label: 'FFmpeg', ok: true, required: true, message: `FFmpeg ${ver} (source: ${source})` };
78
- }
79
- }
80
- catch { /* spawn failed */ }
81
- return {
82
- label: 'FFmpeg',
83
- ok: false,
84
- required: true,
85
- message: `FFmpeg not found — ${getFFmpegInstallHint()}`,
86
- };
87
- }
88
- function checkFFprobe() {
89
- const { path: binPath, source } = resolveFFprobePath();
90
- try {
91
- const result = spawnSync(binPath, ['-version'], { encoding: 'utf-8', timeout: 10_000 });
92
- if (result.status === 0 && result.stdout) {
93
- const ver = parseVersionFromOutput(result.stdout);
94
- return { label: 'FFprobe', ok: true, required: true, message: `FFprobe ${ver} (source: ${source})` };
95
- }
96
- }
97
- catch { /* spawn failed */ }
98
- return {
99
- label: 'FFprobe',
100
- ok: false,
101
- required: true,
102
- message: `FFprobe not found — usually included with FFmpeg.\n ${getFFmpegInstallHint()}`,
103
- };
104
- }
105
- function checkOpenAIKey() {
106
- const set = !!process.env.OPENAI_API_KEY;
107
- return {
108
- label: 'OPENAI_API_KEY',
109
- ok: set,
110
- required: true,
111
- message: set
112
- ? 'OPENAI_API_KEY is set'
113
- : 'OPENAI_API_KEY not set — get one at https://platform.openai.com/api-keys',
114
- };
115
- }
116
- function checkExaKey() {
117
- const set = !!process.env.EXA_API_KEY;
118
- return {
119
- label: 'EXA_API_KEY',
120
- ok: set,
121
- required: false,
122
- message: set
123
- ? 'EXA_API_KEY is set'
124
- : 'EXA_API_KEY not set (optional — web search in social posts)',
125
- };
126
- }
127
- function checkGit() {
128
- try {
129
- const result = spawnSync('git', ['--version'], { encoding: 'utf-8', timeout: 10_000 });
130
- if (result.status === 0 && result.stdout) {
131
- const ver = parseVersionFromOutput(result.stdout);
132
- return { label: 'Git', ok: true, required: false, message: `Git ${ver}` };
133
- }
134
- }
135
- catch { /* spawn failed */ }
136
- return {
137
- label: 'Git',
138
- ok: false,
139
- required: false,
140
- message: 'Git not found (optional — needed for auto-commit stage)',
141
- };
142
- }
143
- function checkWatchFolder() {
144
- const watchDir = process.env.WATCH_FOLDER || path.join(process.cwd(), 'watch');
145
- const exists = existsSync(watchDir);
146
- return {
147
- label: 'Watch folder',
148
- ok: exists,
149
- required: false,
150
- message: exists
151
- ? `Watch folder exists: ${watchDir}`
152
- : `Watch folder missing: ${watchDir}`,
153
- };
154
- }
155
- export function runDoctor() {
156
- console.log('\nšŸ” VidPipe Doctor — Checking prerequisites...\n');
157
- const results = [
158
- checkNode(),
159
- checkFFmpeg(),
160
- checkFFprobe(),
161
- checkOpenAIKey(),
162
- checkExaKey(),
163
- checkGit(),
164
- checkWatchFolder(),
165
- ];
166
- for (const r of results) {
167
- const icon = r.ok ? 'āœ…' : r.required ? 'āŒ' : '⬚';
168
- console.log(` ${icon} ${r.message}`);
169
- }
170
- // LLM Provider section — check env vars directly to avoid silent fallback
171
- console.log('\nLLM Provider');
172
- const providerName = normalizeProviderName(process.env.LLM_PROVIDER);
173
- const isDefault = !process.env.LLM_PROVIDER;
174
- const providerLabel = isDefault ? `${providerName} (default)` : providerName;
175
- const validProviders = ['copilot', 'openai', 'claude'];
176
- if (!validProviders.includes(providerName)) {
177
- console.log(` āŒ Provider: ${providerLabel} — unknown provider`);
178
- results.push({ label: 'LLM Provider', ok: false, required: true, message: `Unknown provider: ${providerName}` });
179
- }
180
- else if (providerName === 'copilot') {
181
- console.log(` āœ… Provider: ${providerLabel}`);
182
- console.log(' āœ… Copilot — uses GitHub auth');
183
- }
184
- else if (providerName === 'openai') {
185
- console.log(` āœ… Provider: ${providerLabel}`);
186
- if (process.env.OPENAI_API_KEY) {
187
- console.log(' āœ… OPENAI_API_KEY is set (also used for Whisper)');
188
- }
189
- else {
190
- console.log(' āŒ OPENAI_API_KEY not set (required for openai provider)');
191
- results.push({ label: 'LLM Provider', ok: false, required: true, message: 'OPENAI_API_KEY not set for OpenAI LLM' });
192
- }
193
- }
194
- else if (providerName === 'claude') {
195
- console.log(` āœ… Provider: ${providerLabel}`);
196
- if (process.env.ANTHROPIC_API_KEY) {
197
- console.log(' āœ… ANTHROPIC_API_KEY is set');
198
- }
199
- else {
200
- console.log(' āŒ ANTHROPIC_API_KEY not set (required for claude provider)');
201
- results.push({ label: 'LLM Provider', ok: false, required: true, message: 'ANTHROPIC_API_KEY not set for Claude LLM' });
202
- }
203
- }
204
- const defaultModels = {
205
- copilot: 'Claude Opus 4.6',
206
- openai: 'gpt-4o',
207
- claude: 'claude-opus-4.6',
208
- };
209
- if (validProviders.includes(providerName)) {
210
- const defaultModel = defaultModels[providerName];
211
- const modelOverride = process.env.LLM_MODEL;
212
- if (modelOverride) {
213
- console.log(` ā„¹ļø Model override: ${modelOverride} (default: ${defaultModel})`);
214
- }
215
- else {
216
- console.log(` ā„¹ļø Default model: ${defaultModel}`);
217
- }
218
- }
219
- const failedRequired = results.filter(r => r.required && !r.ok);
220
- console.log();
221
- if (failedRequired.length === 0) {
222
- console.log(' All required checks passed! āœ…\n');
223
- process.exit(0);
224
- }
225
- else {
226
- console.log(` ${failedRequired.length} required check${failedRequired.length > 1 ? 's' : ''} failed āŒ\n`);
227
- process.exit(1);
228
- }
229
- }
230
- //# sourceMappingURL=doctor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- export interface BrandConfig {
2
- name: string;
3
- handle: string;
4
- tagline: string;
5
- voice: {
6
- tone: string;
7
- personality: string;
8
- style: string;
9
- };
10
- advocacy: {
11
- primary: string[];
12
- interests: string[];
13
- avoids: string[];
14
- };
15
- customVocabulary: string[];
16
- hashtags: {
17
- always: string[];
18
- preferred: string[];
19
- platforms: Record<string, string[]>;
20
- };
21
- contentGuidelines: {
22
- shortsFocus: string;
23
- blogFocus: string;
24
- socialFocus: string;
25
- };
26
- }
27
- export declare function getBrandConfig(): BrandConfig;
28
- export declare function getWhisperPrompt(): string;
29
- //# sourceMappingURL=brand.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/config/brand.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,CAAA;QACnB,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,EAAE,CAAA;QACjB,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,MAAM,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;IACD,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,EAAE,CAAA;QAChB,SAAS,EAAE,MAAM,EAAE,CAAA;QACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;KACpC,CAAA;IACD,iBAAiB,EAAE;QACjB,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAiED,wBAAgB,cAAc,IAAI,WAAW,CAiB5C;AAGD,wBAAgB,gBAAgB,IAAI,MAAM,CAGzC"}