vidpipe 1.2.2 ā 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4766 -123
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
- package/dist/agents/BaseAgent.d.ts +0 -52
- package/dist/agents/BaseAgent.d.ts.map +0 -1
- package/dist/agents/BaseAgent.js +0 -102
- package/dist/agents/BaseAgent.js.map +0 -1
- package/dist/agents/BlogAgent.d.ts +0 -3
- package/dist/agents/BlogAgent.d.ts.map +0 -1
- package/dist/agents/BlogAgent.js +0 -163
- package/dist/agents/BlogAgent.js.map +0 -1
- package/dist/agents/ChapterAgent.d.ts +0 -11
- package/dist/agents/ChapterAgent.d.ts.map +0 -1
- package/dist/agents/ChapterAgent.js +0 -191
- package/dist/agents/ChapterAgent.js.map +0 -1
- package/dist/agents/MediumVideoAgent.d.ts +0 -3
- package/dist/agents/MediumVideoAgent.d.ts.map +0 -1
- package/dist/agents/MediumVideoAgent.js +0 -219
- package/dist/agents/MediumVideoAgent.js.map +0 -1
- package/dist/agents/ShortsAgent.d.ts +0 -3
- package/dist/agents/ShortsAgent.d.ts.map +0 -1
- package/dist/agents/ShortsAgent.js +0 -243
- package/dist/agents/ShortsAgent.js.map +0 -1
- package/dist/agents/SilenceRemovalAgent.d.ts +0 -9
- package/dist/agents/SilenceRemovalAgent.d.ts.map +0 -1
- package/dist/agents/SilenceRemovalAgent.js +0 -209
- package/dist/agents/SilenceRemovalAgent.js.map +0 -1
- package/dist/agents/SocialMediaAgent.d.ts +0 -4
- package/dist/agents/SocialMediaAgent.d.ts.map +0 -1
- package/dist/agents/SocialMediaAgent.js +0 -248
- package/dist/agents/SocialMediaAgent.js.map +0 -1
- package/dist/agents/SummaryAgent.d.ts +0 -11
- package/dist/agents/SummaryAgent.d.ts.map +0 -1
- package/dist/agents/SummaryAgent.js +0 -333
- package/dist/agents/SummaryAgent.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -4
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -230
- package/dist/commands/doctor.js.map +0 -1
- package/dist/config/brand.d.ts +0 -29
- package/dist/config/brand.d.ts.map +0 -1
- package/dist/config/brand.js +0 -83
- package/dist/config/brand.js.map +0 -1
- package/dist/config/environment.d.ts +0 -39
- package/dist/config/environment.d.ts.map +0 -1
- package/dist/config/environment.js +0 -47
- package/dist/config/environment.js.map +0 -1
- package/dist/config/ffmpegResolver.d.ts +0 -3
- package/dist/config/ffmpegResolver.d.ts.map +0 -1
- package/dist/config/ffmpegResolver.js +0 -37
- package/dist/config/ffmpegResolver.js.map +0 -1
- package/dist/config/logger.d.ts +0 -5
- package/dist/config/logger.d.ts.map +0 -1
- package/dist/config/logger.js +0 -13
- package/dist/config/logger.js.map +0 -1
- package/dist/config/pricing.d.ts +0 -34
- package/dist/config/pricing.d.ts.map +0 -1
- package/dist/config/pricing.js +0 -71
- package/dist/config/pricing.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/pipeline.d.ts +0 -57
- package/dist/pipeline.d.ts.map +0 -1
- package/dist/pipeline.js +0 -324
- package/dist/pipeline.js.map +0 -1
- package/dist/providers/ClaudeProvider.d.ts +0 -14
- package/dist/providers/ClaudeProvider.d.ts.map +0 -1
- package/dist/providers/ClaudeProvider.js +0 -182
- package/dist/providers/ClaudeProvider.js.map +0 -1
- package/dist/providers/CopilotProvider.d.ts +0 -17
- package/dist/providers/CopilotProvider.d.ts.map +0 -1
- package/dist/providers/CopilotProvider.js +0 -149
- package/dist/providers/CopilotProvider.js.map +0 -1
- package/dist/providers/OpenAIProvider.d.ts +0 -14
- package/dist/providers/OpenAIProvider.d.ts.map +0 -1
- package/dist/providers/OpenAIProvider.js +0 -175
- package/dist/providers/OpenAIProvider.js.map +0 -1
- package/dist/providers/index.d.ts +0 -18
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -61
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/types.d.ts +0 -112
- package/dist/providers/types.d.ts.map +0 -1
- package/dist/providers/types.js +0 -8
- package/dist/providers/types.js.map +0 -1
- package/dist/services/captionGeneration.d.ts +0 -7
- package/dist/services/captionGeneration.d.ts.map +0 -1
- package/dist/services/captionGeneration.js +0 -29
- package/dist/services/captionGeneration.js.map +0 -1
- package/dist/services/costTracker.d.ts +0 -63
- package/dist/services/costTracker.d.ts.map +0 -1
- package/dist/services/costTracker.js +0 -137
- package/dist/services/costTracker.js.map +0 -1
- package/dist/services/fileWatcher.d.ts +0 -19
- package/dist/services/fileWatcher.d.ts.map +0 -1
- package/dist/services/fileWatcher.js +0 -120
- package/dist/services/fileWatcher.js.map +0 -1
- package/dist/services/gitOperations.d.ts +0 -3
- package/dist/services/gitOperations.d.ts.map +0 -1
- package/dist/services/gitOperations.js +0 -43
- package/dist/services/gitOperations.js.map +0 -1
- package/dist/services/socialPosting.d.ts +0 -38
- package/dist/services/socialPosting.d.ts.map +0 -1
- package/dist/services/socialPosting.js +0 -102
- package/dist/services/socialPosting.js.map +0 -1
- package/dist/services/transcription.d.ts +0 -3
- package/dist/services/transcription.d.ts.map +0 -1
- package/dist/services/transcription.js +0 -100
- package/dist/services/transcription.js.map +0 -1
- package/dist/services/videoIngestion.d.ts +0 -3
- package/dist/services/videoIngestion.d.ts.map +0 -1
- package/dist/services/videoIngestion.js +0 -104
- package/dist/services/videoIngestion.js.map +0 -1
- package/dist/tools/captions/captionGenerator.d.ts +0 -84
- package/dist/tools/captions/captionGenerator.d.ts.map +0 -1
- package/dist/tools/captions/captionGenerator.js +0 -390
- package/dist/tools/captions/captionGenerator.js.map +0 -1
- package/dist/tools/ffmpeg/aspectRatio.d.ts +0 -101
- package/dist/tools/ffmpeg/aspectRatio.d.ts.map +0 -1
- package/dist/tools/ffmpeg/aspectRatio.js +0 -339
- package/dist/tools/ffmpeg/aspectRatio.js.map +0 -1
- package/dist/tools/ffmpeg/audioExtraction.d.ts +0 -16
- package/dist/tools/ffmpeg/audioExtraction.d.ts.map +0 -1
- package/dist/tools/ffmpeg/audioExtraction.js +0 -87
- package/dist/tools/ffmpeg/audioExtraction.js.map +0 -1
- package/dist/tools/ffmpeg/captionBurning.d.ts +0 -8
- package/dist/tools/ffmpeg/captionBurning.d.ts.map +0 -1
- package/dist/tools/ffmpeg/captionBurning.js +0 -72
- package/dist/tools/ffmpeg/captionBurning.js.map +0 -1
- package/dist/tools/ffmpeg/clipExtraction.d.ts +0 -38
- package/dist/tools/ffmpeg/clipExtraction.d.ts.map +0 -1
- package/dist/tools/ffmpeg/clipExtraction.js +0 -215
- package/dist/tools/ffmpeg/clipExtraction.js.map +0 -1
- package/dist/tools/ffmpeg/faceDetection.d.ts +0 -127
- package/dist/tools/ffmpeg/faceDetection.d.ts.map +0 -1
- package/dist/tools/ffmpeg/faceDetection.js +0 -501
- package/dist/tools/ffmpeg/faceDetection.js.map +0 -1
- package/dist/tools/ffmpeg/frameCapture.d.ts +0 -10
- package/dist/tools/ffmpeg/frameCapture.d.ts.map +0 -1
- package/dist/tools/ffmpeg/frameCapture.js +0 -49
- package/dist/tools/ffmpeg/frameCapture.js.map +0 -1
- package/dist/tools/ffmpeg/silenceDetection.d.ts +0 -10
- package/dist/tools/ffmpeg/silenceDetection.d.ts.map +0 -1
- package/dist/tools/ffmpeg/silenceDetection.js +0 -56
- package/dist/tools/ffmpeg/silenceDetection.js.map +0 -1
- package/dist/tools/ffmpeg/singlePassEdit.d.ts +0 -25
- package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +0 -1
- package/dist/tools/ffmpeg/singlePassEdit.js +0 -124
- package/dist/tools/ffmpeg/singlePassEdit.js.map +0 -1
- package/dist/tools/search/exaClient.d.ts +0 -8
- package/dist/tools/search/exaClient.d.ts.map +0 -1
- package/dist/tools/search/exaClient.js +0 -38
- package/dist/tools/search/exaClient.js.map +0 -1
- package/dist/tools/whisper/whisperClient.d.ts +0 -3
- package/dist/tools/whisper/whisperClient.d.ts.map +0 -1
- package/dist/tools/whisper/whisperClient.js +0 -77
- package/dist/tools/whisper/whisperClient.js.map +0 -1
- package/dist/types/index.d.ts +0 -305
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -44
- package/dist/types/index.js.map +0 -1
|
@@ -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
|
-

|
|
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":"AACA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAA;AACnC,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,MAAM,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAGjD,gFAAgF;AAEhF,+BAA+B;AAC/B,SAAS,OAAO,CAAC,OAAe;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IAClC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AACtE,CAAC;AAED,2EAA2E;AAC3E,SAAS,oBAAoB,CAAC,UAAsB;IAClD,OAAO,UAAU,CAAC,QAAQ;SACvB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;SAChF,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,gFAAgF;AAEhF,SAAS,iBAAiB,CAAC,UAAkB,EAAE,eAAuB,EAAE,YAAoB,EAAE,YAAoB;IAChH,MAAM,KAAK,GAAG,cAAc,EAAE,CAAA;IAE9B,OAAO,iEAAiE,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;eACtF,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK;;;;;;;;;;;;;;;;;;6DAkBnB,KAAK,CAAC,KAAK,CAAC,IAAI;EAC3E,KAAK,CAAC,iBAAiB,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;EAyBjC,YAAY;EACZ,UAAU;EACV,eAAe;EACf,YAAY;;;;;;;;;;;+BAWiB,KAAK,CAAC,KAAK,CAAC,WAAW;yBAC7B,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;WACjD,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;uEAa4B,CAAA;AACvE,CAAC;AAiBD,gFAAgF;AAEhF,MAAM,YAAa,SAAQ,SAAS;IAC1B,SAAS,CAAQ;IACjB,SAAS,CAAQ;IACjB,SAAS,GAAoB,EAAE,CAAA;IAEvC,YAAY,SAAiB,EAAE,SAAiB,EAAE,YAAoB;QACpE,KAAK,CAAC,cAAc,EAAE,YAAY,CAAC,CAAA;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,iBAAiB;IACjB,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IAChD,CAAC;IAED,IAAY,YAAY;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IAC/C,CAAC;IAED,6EAA6E;IAEnE,QAAQ;QAChB,OAAO;YACL;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EACT,+DAA+D;oBAC/D,kGAAkG;gBACpG,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iCAAiC,EAAE;wBAC7E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wCAAwC,EAAE;wBACtF,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,4CAA4C,EAAE;qBACtF;oBACD,QAAQ,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC;iBAChD;gBACD,OAAO,EAAE,KAAK,EAAE,OAAgB,EAAE,EAAE;oBAClC,MAAM,IAAI,GAAG,OAA2B,CAAA;oBACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;gBACtC,CAAC;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EACT,4CAA4C;oBAC5C,gFAAgF;gBAClF,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;wBACpF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE;wBACrD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;wBACrE,SAAS,EAAE;4BACT,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACzB,WAAW,EAAE,yBAAyB;yBACvC;qBACF;oBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC;iBACzD;gBACD,OAAO,EAAE,KAAK,EAAE,OAAgB,EAAE,EAAE;oBAClC,MAAM,IAAI,GAAG,OAA2B,CAAA;oBACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;gBACtC,CAAC;aACF;SACF,CAAA;IACH,CAAC;IAED,8EAA8E;IAEpE,KAAK,CAAC,cAAc,CAC5B,QAAgB,EAChB,IAA6B;QAE7B,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAmC,CAAC,CAAA;YACrE,KAAK,eAAe;gBAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAmC,CAAC,CAAA;YACrE;gBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IAED,8EAA8E;IAEtE,KAAK,CAAC,kBAAkB,CAAC,IAAsB;QACrD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAA;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QAEzD,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAE9D,MAAM,QAAQ,GAAkB;YAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU;SACX,CAAA;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE7B,MAAM,CAAC,IAAI,CAAC,oCAAoC,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QACpF,OAAO,8BAA8B,QAAQ,EAAE,CAAA;IACjD,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAsB;QACrD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAE7D,MAAM,CAAC,IAAI,CAAC,kCAAkC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAA;QAClE,OAAO,sBAAsB,IAAI,CAAC,YAAY,EAAE,CAAA;IAClD,CAAC;IAED,2CAA2C;IAC3C,SAAS,CAAC,IAAsB;QAC9B,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAA;IACH,CAAC;CACF;AAED,gFAAgF;AAEhF,wDAAwD;AACxD,SAAS,kBAAkB,CAAC,MAAoB;IAC9C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO;;;;;iDAKsC,CAAA;IAC/C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,WAAW,IAAI,CAAC;SACzG,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO;;;;;EAKP,IAAI,EAAE,CAAA;AACR,CAAC;AAED,oEAAoE;AACpE,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;uCAQ8B,CAAA;AACvC,CAAC;AAED,0DAA0D;AAC1D,SAAS,oBAAoB;IAC3B,OAAO;;;sGAG6F,CAAA;AACtG,CAAC;AAED,oEAAoE;AACpE,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IAClC,OAAO,CAAC,GAAG,CAAC;QACV,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QACpE,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;AAC1C,CAAC;AAED,0DAA0D;AAC1D,SAAS,oBAAoB,CAAC,QAAoB;IAChD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ;SAClB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,kBAAkB,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,WAAW,IAAI,CAAC;SAC5F,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO;;;;;EAKP,IAAI;;6HAEuH,CAAA;AAC7H,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAgB,EAChB,UAAsB,EACtB,MAAoB,EACpB,QAAoB;IAEpB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAE1D,uDAAuD;IACvD,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,eAAe,GAAG,uBAAuB,EAAE,CAAA;IACjD,MAAM,YAAY,GAAG,oBAAoB,EAAE,CAAA;IAC3C,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAA;IAEnD,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,CAAC,CAAA;IAC/F,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;IAEvE,MAAM,eAAe,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAA;IAExD,8EAA8E;IAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IAClF,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAA;IACjD,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAA;QACzD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAA;QAClF,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAA;IACxD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,UAAU,GAAG;QACjB,cAAc,KAAK,CAAC,QAAQ,EAAE;QAC9B,iBAAiB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;QAClF,aAAa,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;QACzD,EAAE;QACF,kEAAkE;QAClE,eAAe;QACf,EAAE;QACF,KAAK;QACL,EAAE;QACF,iBAAiB;QACjB,EAAE;QACF,eAAe;KAChB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEZ,IAAI,aAA2C,CAAA;IAE/C,gEAAgE;IAChE,yFAAyF;IACzF,MAAM,eAAe,GAAI,KAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAEhD,CACnB;IAAC,KAAa,CAAC,kBAAkB,GAAG,KAAK,EAAE,IAAsB,EAAE,EAAE;QACpE,aAAa,GAAG,IAAI,CAAA;QACpB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC,CAAA;IAED,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,KAAK,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACvC,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,OAAO,EAAE,CAAA;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|
package/dist/commands/doctor.js
DELETED
|
@@ -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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"}
|
package/dist/config/brand.d.ts
DELETED
|
@@ -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"}
|