vidpipe 1.0.0
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/README.md +243 -0
- package/assets/fonts/Montserrat-Bold.ttf +0 -0
- package/assets/fonts/Montserrat-Regular.ttf +0 -0
- package/assets/fonts/OFL.txt +93 -0
- package/dist/__tests__/agents.test.d.ts +2 -0
- package/dist/__tests__/agents.test.d.ts.map +1 -0
- package/dist/__tests__/agents.test.js +434 -0
- package/dist/__tests__/agents.test.js.map +1 -0
- package/dist/__tests__/aspectRatio.test.d.ts +2 -0
- package/dist/__tests__/aspectRatio.test.d.ts.map +1 -0
- package/dist/__tests__/aspectRatio.test.js +406 -0
- package/dist/__tests__/aspectRatio.test.js.map +1 -0
- package/dist/__tests__/captionGenerator.test.d.ts +2 -0
- package/dist/__tests__/captionGenerator.test.d.ts.map +1 -0
- package/dist/__tests__/captionGenerator.test.js +435 -0
- package/dist/__tests__/captionGenerator.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +81 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/faceDetection.test.d.ts +2 -0
- package/dist/__tests__/faceDetection.test.d.ts.map +1 -0
- package/dist/__tests__/faceDetection.test.js +372 -0
- package/dist/__tests__/faceDetection.test.js.map +1 -0
- package/dist/__tests__/ffmpegTools.test.d.ts +2 -0
- package/dist/__tests__/ffmpegTools.test.d.ts.map +1 -0
- package/dist/__tests__/ffmpegTools.test.js +464 -0
- package/dist/__tests__/ffmpegTools.test.js.map +1 -0
- package/dist/__tests__/integration/captionBurn.test.d.ts +2 -0
- package/dist/__tests__/integration/captionBurn.test.d.ts.map +1 -0
- package/dist/__tests__/integration/captionBurn.test.js +103 -0
- package/dist/__tests__/integration/captionBurn.test.js.map +1 -0
- package/dist/__tests__/integration/clipComposite.test.d.ts +2 -0
- package/dist/__tests__/integration/clipComposite.test.d.ts.map +1 -0
- package/dist/__tests__/integration/clipComposite.test.js +56 -0
- package/dist/__tests__/integration/clipComposite.test.js.map +1 -0
- package/dist/__tests__/integration/faceDetection.test.d.ts +2 -0
- package/dist/__tests__/integration/faceDetection.test.d.ts.map +1 -0
- package/dist/__tests__/integration/faceDetection.test.js +85 -0
- package/dist/__tests__/integration/faceDetection.test.js.map +1 -0
- package/dist/__tests__/integration/ffmpegPipeline.test.d.ts +2 -0
- package/dist/__tests__/integration/ffmpegPipeline.test.d.ts.map +1 -0
- package/dist/__tests__/integration/ffmpegPipeline.test.js +88 -0
- package/dist/__tests__/integration/ffmpegPipeline.test.js.map +1 -0
- package/dist/__tests__/integration/fixture.d.ts +19 -0
- package/dist/__tests__/integration/fixture.d.ts.map +1 -0
- package/dist/__tests__/integration/fixture.js +112 -0
- package/dist/__tests__/integration/fixture.js.map +1 -0
- package/dist/__tests__/integration/fixture.test.d.ts +2 -0
- package/dist/__tests__/integration/fixture.test.d.ts.map +1 -0
- package/dist/__tests__/integration/fixture.test.js +27 -0
- package/dist/__tests__/integration/fixture.test.js.map +1 -0
- package/dist/__tests__/integration/realCaptions.test.d.ts +2 -0
- package/dist/__tests__/integration/realCaptions.test.d.ts.map +1 -0
- package/dist/__tests__/integration/realCaptions.test.js +226 -0
- package/dist/__tests__/integration/realCaptions.test.js.map +1 -0
- package/dist/__tests__/integration/realPipeline.test.d.ts +2 -0
- package/dist/__tests__/integration/realPipeline.test.d.ts.map +1 -0
- package/dist/__tests__/integration/realPipeline.test.js +210 -0
- package/dist/__tests__/integration/realPipeline.test.js.map +1 -0
- package/dist/__tests__/integration/silenceRemoval.test.d.ts +2 -0
- package/dist/__tests__/integration/silenceRemoval.test.d.ts.map +1 -0
- package/dist/__tests__/integration/silenceRemoval.test.js +93 -0
- package/dist/__tests__/integration/silenceRemoval.test.js.map +1 -0
- package/dist/__tests__/pipeline.test.d.ts +2 -0
- package/dist/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline.test.js +434 -0
- package/dist/__tests__/pipeline.test.js.map +1 -0
- package/dist/__tests__/services.test.d.ts +2 -0
- package/dist/__tests__/services.test.d.ts.map +1 -0
- package/dist/__tests__/services.test.js +655 -0
- package/dist/__tests__/services.test.js.map +1 -0
- package/dist/__tests__/silenceRemoval.test.d.ts +2 -0
- package/dist/__tests__/silenceRemoval.test.d.ts.map +1 -0
- package/dist/__tests__/silenceRemoval.test.js +266 -0
- package/dist/__tests__/silenceRemoval.test.js.map +1 -0
- package/dist/__tests__/singlePassEdit.test.d.ts +2 -0
- package/dist/__tests__/singlePassEdit.test.d.ts.map +1 -0
- package/dist/__tests__/singlePassEdit.test.js +321 -0
- package/dist/__tests__/singlePassEdit.test.js.map +1 -0
- package/dist/__tests__/smoke.test.d.ts +2 -0
- package/dist/__tests__/smoke.test.d.ts.map +1 -0
- package/dist/__tests__/smoke.test.js +8 -0
- package/dist/__tests__/smoke.test.js.map +1 -0
- package/dist/__tests__/utilities.test.d.ts +2 -0
- package/dist/__tests__/utilities.test.d.ts.map +1 -0
- package/dist/__tests__/utilities.test.js +268 -0
- package/dist/__tests__/utilities.test.js.map +1 -0
- package/dist/agents/BaseAgent.d.ts +52 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -0
- package/dist/agents/BaseAgent.js +108 -0
- package/dist/agents/BaseAgent.js.map +1 -0
- package/dist/agents/BlogAgent.d.ts +3 -0
- package/dist/agents/BlogAgent.d.ts.map +1 -0
- package/dist/agents/BlogAgent.js +163 -0
- package/dist/agents/BlogAgent.js.map +1 -0
- package/dist/agents/ChapterAgent.d.ts +11 -0
- package/dist/agents/ChapterAgent.d.ts.map +1 -0
- package/dist/agents/ChapterAgent.js +191 -0
- package/dist/agents/ChapterAgent.js.map +1 -0
- package/dist/agents/MediumVideoAgent.d.ts +3 -0
- package/dist/agents/MediumVideoAgent.d.ts.map +1 -0
- package/dist/agents/MediumVideoAgent.js +219 -0
- package/dist/agents/MediumVideoAgent.js.map +1 -0
- package/dist/agents/ShortsAgent.d.ts +3 -0
- package/dist/agents/ShortsAgent.d.ts.map +1 -0
- package/dist/agents/ShortsAgent.js +243 -0
- package/dist/agents/ShortsAgent.js.map +1 -0
- package/dist/agents/SilenceRemovalAgent.d.ts +9 -0
- package/dist/agents/SilenceRemovalAgent.d.ts.map +1 -0
- package/dist/agents/SilenceRemovalAgent.js +208 -0
- package/dist/agents/SilenceRemovalAgent.js.map +1 -0
- package/dist/agents/SocialMediaAgent.d.ts +4 -0
- package/dist/agents/SocialMediaAgent.d.ts.map +1 -0
- package/dist/agents/SocialMediaAgent.js +248 -0
- package/dist/agents/SocialMediaAgent.js.map +1 -0
- package/dist/agents/SummaryAgent.d.ts +11 -0
- package/dist/agents/SummaryAgent.d.ts.map +1 -0
- package/dist/agents/SummaryAgent.js +333 -0
- package/dist/agents/SummaryAgent.js.map +1 -0
- package/dist/config/brand.d.ts +29 -0
- package/dist/config/brand.d.ts.map +1 -0
- package/dist/config/brand.js +83 -0
- package/dist/config/brand.js.map +1 -0
- package/dist/config/environment.d.ts +36 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +44 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/logger.d.ts +5 -0
- package/dist/config/logger.d.ts.map +1 -0
- package/dist/config/logger.js +13 -0
- package/dist/config/logger.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +135 -0
- package/dist/index.js.map +1 -0
- package/dist/pipeline.d.ts +57 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +287 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/services/captionGeneration.d.ts +7 -0
- package/dist/services/captionGeneration.d.ts.map +1 -0
- package/dist/services/captionGeneration.js +29 -0
- package/dist/services/captionGeneration.js.map +1 -0
- package/dist/services/fileWatcher.d.ts +19 -0
- package/dist/services/fileWatcher.d.ts.map +1 -0
- package/dist/services/fileWatcher.js +120 -0
- package/dist/services/fileWatcher.js.map +1 -0
- package/dist/services/gitOperations.d.ts +3 -0
- package/dist/services/gitOperations.d.ts.map +1 -0
- package/dist/services/gitOperations.js +43 -0
- package/dist/services/gitOperations.js.map +1 -0
- package/dist/services/socialPosting.d.ts +38 -0
- package/dist/services/socialPosting.d.ts.map +1 -0
- package/dist/services/socialPosting.js +102 -0
- package/dist/services/socialPosting.js.map +1 -0
- package/dist/services/transcription.d.ts +3 -0
- package/dist/services/transcription.d.ts.map +1 -0
- package/dist/services/transcription.js +100 -0
- package/dist/services/transcription.js.map +1 -0
- package/dist/services/videoIngestion.d.ts +3 -0
- package/dist/services/videoIngestion.d.ts.map +1 -0
- package/dist/services/videoIngestion.js +103 -0
- package/dist/services/videoIngestion.js.map +1 -0
- package/dist/tools/captions/captionGenerator.d.ts +84 -0
- package/dist/tools/captions/captionGenerator.d.ts.map +1 -0
- package/dist/tools/captions/captionGenerator.js +390 -0
- package/dist/tools/captions/captionGenerator.js.map +1 -0
- package/dist/tools/ffmpeg/aspectRatio.d.ts +101 -0
- package/dist/tools/ffmpeg/aspectRatio.d.ts.map +1 -0
- package/dist/tools/ffmpeg/aspectRatio.js +338 -0
- package/dist/tools/ffmpeg/aspectRatio.js.map +1 -0
- package/dist/tools/ffmpeg/audioExtraction.d.ts +16 -0
- package/dist/tools/ffmpeg/audioExtraction.d.ts.map +1 -0
- package/dist/tools/ffmpeg/audioExtraction.js +86 -0
- package/dist/tools/ffmpeg/audioExtraction.js.map +1 -0
- package/dist/tools/ffmpeg/captionBurning.d.ts +8 -0
- package/dist/tools/ffmpeg/captionBurning.d.ts.map +1 -0
- package/dist/tools/ffmpeg/captionBurning.js +71 -0
- package/dist/tools/ffmpeg/captionBurning.js.map +1 -0
- package/dist/tools/ffmpeg/clipExtraction.d.ts +23 -0
- package/dist/tools/ffmpeg/clipExtraction.d.ts.map +1 -0
- package/dist/tools/ffmpeg/clipExtraction.js +178 -0
- package/dist/tools/ffmpeg/clipExtraction.js.map +1 -0
- package/dist/tools/ffmpeg/faceDetection.d.ts +127 -0
- package/dist/tools/ffmpeg/faceDetection.d.ts.map +1 -0
- package/dist/tools/ffmpeg/faceDetection.js +500 -0
- package/dist/tools/ffmpeg/faceDetection.js.map +1 -0
- package/dist/tools/ffmpeg/frameCapture.d.ts +10 -0
- package/dist/tools/ffmpeg/frameCapture.d.ts.map +1 -0
- package/dist/tools/ffmpeg/frameCapture.js +48 -0
- package/dist/tools/ffmpeg/frameCapture.js.map +1 -0
- package/dist/tools/ffmpeg/silenceDetection.d.ts +10 -0
- package/dist/tools/ffmpeg/silenceDetection.d.ts.map +1 -0
- package/dist/tools/ffmpeg/silenceDetection.js +55 -0
- package/dist/tools/ffmpeg/silenceDetection.js.map +1 -0
- package/dist/tools/ffmpeg/singlePassEdit.d.ts +25 -0
- package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +1 -0
- package/dist/tools/ffmpeg/singlePassEdit.js +123 -0
- package/dist/tools/ffmpeg/singlePassEdit.js.map +1 -0
- package/dist/tools/search/exaClient.d.ts +8 -0
- package/dist/tools/search/exaClient.d.ts.map +1 -0
- package/dist/tools/search/exaClient.js +38 -0
- package/dist/tools/search/exaClient.js.map +1 -0
- package/dist/tools/whisper/whisperClient.d.ts +3 -0
- package/dist/tools/whisper/whisperClient.d.ts.map +1 -0
- package/dist/tools/whisper/whisperClient.js +77 -0
- package/dist/tools/whisper/whisperClient.js.map +1 -0
- package/dist/types/index.d.ts +305 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +44 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utilities.test.js","sourceRoot":"","sources":["../../src/__tests__/utilities.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CopilotClient, CopilotSession, Tool } from '@github/copilot-sdk';
|
|
2
|
+
/**
|
|
3
|
+
* BaseAgent — abstract foundation for all Copilot SDK agents.
|
|
4
|
+
*
|
|
5
|
+
* ### Agent pattern
|
|
6
|
+
* Each agent in the pipeline (SummaryAgent, ShortsAgent, BlogAgent, etc.)
|
|
7
|
+
* extends BaseAgent and implements two methods:
|
|
8
|
+
* - `getTools()` — declares the tools (functions) the LLM can call
|
|
9
|
+
* - `handleToolCall()` — dispatches tool invocations to concrete implementations
|
|
10
|
+
*
|
|
11
|
+
* ### Tool registration
|
|
12
|
+
* Tools are declared as JSON Schema objects and passed to the CopilotSession
|
|
13
|
+
* at creation time. When the LLM decides to call a tool, the SDK routes the
|
|
14
|
+
* call through `handleToolCall()` where the subclass executes the actual logic
|
|
15
|
+
* (e.g. reading files, running FFmpeg, querying APIs).
|
|
16
|
+
*
|
|
17
|
+
* ### Message flow
|
|
18
|
+
* 1. `run(userMessage)` lazily creates a CopilotClient (starts the Copilot
|
|
19
|
+
* backend process) and a CopilotSession (with system prompt + tools).
|
|
20
|
+
* 2. The user message is sent via `sendAndWait()`, which blocks until the
|
|
21
|
+
* LLM produces a final response (with a 5-minute timeout).
|
|
22
|
+
* 3. During processing, the LLM may invoke tools multiple times — each call
|
|
23
|
+
* is logged via session event handlers.
|
|
24
|
+
* 4. The final assistant message text is returned to the caller.
|
|
25
|
+
*
|
|
26
|
+
* Sessions are reusable: calling `run()` multiple times on the same agent
|
|
27
|
+
* sends additional messages within the same conversation context.
|
|
28
|
+
*/
|
|
29
|
+
export declare abstract class BaseAgent {
|
|
30
|
+
protected readonly agentName: string;
|
|
31
|
+
protected readonly systemPrompt: string;
|
|
32
|
+
protected client: CopilotClient | null;
|
|
33
|
+
protected session: CopilotSession | null;
|
|
34
|
+
constructor(agentName: string, systemPrompt: string);
|
|
35
|
+
/** Tools this agent exposes to the LLM. Override in subclasses. */
|
|
36
|
+
protected getTools(): Tool<unknown>[];
|
|
37
|
+
/** Dispatch a tool call to the concrete agent. Override in subclasses. */
|
|
38
|
+
protected abstract handleToolCall(toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
39
|
+
/**
|
|
40
|
+
* Send a user message to the agent and return the final response text.
|
|
41
|
+
*
|
|
42
|
+
* 1. Lazily creates a CopilotClient + CopilotSession
|
|
43
|
+
* 2. Registers an event listener to accumulate the response
|
|
44
|
+
* 3. Calls sendAndWait and returns the completed message
|
|
45
|
+
*/
|
|
46
|
+
run(userMessage: string): Promise<string>;
|
|
47
|
+
/** Wire up session event listeners for logging / streaming. */
|
|
48
|
+
private setupEventHandlers;
|
|
49
|
+
/** Tear down the client + session. */
|
|
50
|
+
destroy(): Promise<void>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=BaseAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,IAAI,EAAgB,MAAM,qBAAqB,CAAA;AAGvF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,8BAAsB,SAAS;IAK3B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IACpC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM;IALzC,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAO;IAC7C,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAO;gBAG1B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM;IAGzC,mEAAmE;IACnE,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;IAIrC,0EAA0E;IAC1E,SAAS,CAAC,QAAQ,CAAC,cAAc,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC;IAEnB;;;;;;OAMG;IACG,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0B/C,+DAA+D;IAC/D,OAAO,CAAC,kBAAkB;IA6B1B,sCAAsC;IAChC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAc/B"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { CopilotClient } from '@github/copilot-sdk';
|
|
2
|
+
import logger from '../config/logger';
|
|
3
|
+
/**
|
|
4
|
+
* BaseAgent — abstract foundation for all Copilot SDK agents.
|
|
5
|
+
*
|
|
6
|
+
* ### Agent pattern
|
|
7
|
+
* Each agent in the pipeline (SummaryAgent, ShortsAgent, BlogAgent, etc.)
|
|
8
|
+
* extends BaseAgent and implements two methods:
|
|
9
|
+
* - `getTools()` — declares the tools (functions) the LLM can call
|
|
10
|
+
* - `handleToolCall()` — dispatches tool invocations to concrete implementations
|
|
11
|
+
*
|
|
12
|
+
* ### Tool registration
|
|
13
|
+
* Tools are declared as JSON Schema objects and passed to the CopilotSession
|
|
14
|
+
* at creation time. When the LLM decides to call a tool, the SDK routes the
|
|
15
|
+
* call through `handleToolCall()` where the subclass executes the actual logic
|
|
16
|
+
* (e.g. reading files, running FFmpeg, querying APIs).
|
|
17
|
+
*
|
|
18
|
+
* ### Message flow
|
|
19
|
+
* 1. `run(userMessage)` lazily creates a CopilotClient (starts the Copilot
|
|
20
|
+
* backend process) and a CopilotSession (with system prompt + tools).
|
|
21
|
+
* 2. The user message is sent via `sendAndWait()`, which blocks until the
|
|
22
|
+
* LLM produces a final response (with a 5-minute timeout).
|
|
23
|
+
* 3. During processing, the LLM may invoke tools multiple times — each call
|
|
24
|
+
* is logged via session event handlers.
|
|
25
|
+
* 4. The final assistant message text is returned to the caller.
|
|
26
|
+
*
|
|
27
|
+
* Sessions are reusable: calling `run()` multiple times on the same agent
|
|
28
|
+
* sends additional messages within the same conversation context.
|
|
29
|
+
*/
|
|
30
|
+
export class BaseAgent {
|
|
31
|
+
agentName;
|
|
32
|
+
systemPrompt;
|
|
33
|
+
client = null;
|
|
34
|
+
session = null;
|
|
35
|
+
constructor(agentName, systemPrompt) {
|
|
36
|
+
this.agentName = agentName;
|
|
37
|
+
this.systemPrompt = systemPrompt;
|
|
38
|
+
}
|
|
39
|
+
/** Tools this agent exposes to the LLM. Override in subclasses. */
|
|
40
|
+
getTools() {
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Send a user message to the agent and return the final response text.
|
|
45
|
+
*
|
|
46
|
+
* 1. Lazily creates a CopilotClient + CopilotSession
|
|
47
|
+
* 2. Registers an event listener to accumulate the response
|
|
48
|
+
* 3. Calls sendAndWait and returns the completed message
|
|
49
|
+
*/
|
|
50
|
+
async run(userMessage) {
|
|
51
|
+
if (!this.client) {
|
|
52
|
+
this.client = new CopilotClient({ autoStart: true, logLevel: 'error' });
|
|
53
|
+
}
|
|
54
|
+
if (!this.session) {
|
|
55
|
+
this.session = await this.client.createSession({
|
|
56
|
+
systemMessage: { mode: 'replace', content: this.systemPrompt },
|
|
57
|
+
tools: this.getTools(),
|
|
58
|
+
streaming: true,
|
|
59
|
+
});
|
|
60
|
+
this.setupEventHandlers(this.session);
|
|
61
|
+
}
|
|
62
|
+
logger.info(`[${this.agentName}] Sending message: ${userMessage.substring(0, 80)}…`);
|
|
63
|
+
const response = await this.session.sendAndWait({ prompt: userMessage }, 300_000);
|
|
64
|
+
const content = response?.data?.content ?? '';
|
|
65
|
+
logger.info(`[${this.agentName}] Response received (${content.length} chars)`);
|
|
66
|
+
return content;
|
|
67
|
+
}
|
|
68
|
+
/** Wire up session event listeners for logging / streaming. */
|
|
69
|
+
setupEventHandlers(session) {
|
|
70
|
+
session.on((event) => {
|
|
71
|
+
switch (event.type) {
|
|
72
|
+
case 'assistant.message_delta':
|
|
73
|
+
// Streaming delta — log at debug level to avoid noise
|
|
74
|
+
logger.debug(`[${this.agentName}] delta: ${event.data.deltaContent}`);
|
|
75
|
+
break;
|
|
76
|
+
case 'assistant.message':
|
|
77
|
+
logger.debug(`[${this.agentName}] message complete`);
|
|
78
|
+
break;
|
|
79
|
+
case 'tool.execution_start':
|
|
80
|
+
logger.info(`[${this.agentName}] tool start: ${event.data.toolName}`);
|
|
81
|
+
break;
|
|
82
|
+
case 'tool.execution_complete':
|
|
83
|
+
logger.info(`[${this.agentName}] tool done: ${event.data.toolCallId} success=${event.data.success}`);
|
|
84
|
+
break;
|
|
85
|
+
case 'session.error':
|
|
86
|
+
logger.error(`[${this.agentName}] error: ${event.data.message}`);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/** Tear down the client + session. */
|
|
92
|
+
async destroy() {
|
|
93
|
+
try {
|
|
94
|
+
if (this.session) {
|
|
95
|
+
await this.session.destroy();
|
|
96
|
+
this.session = null;
|
|
97
|
+
}
|
|
98
|
+
if (this.client) {
|
|
99
|
+
await this.client.stop();
|
|
100
|
+
this.client = null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
logger.error(`[${this.agentName}] Error during destroy: ${err}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=BaseAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseAgent.js","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BlogAgent.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AA8JnE,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,MAAM,CAAC,CAuCjB"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { BaseAgent } from './BaseAgent';
|
|
4
|
+
import logger from '../config/logger';
|
|
5
|
+
import { getBrandConfig } from '../config/brand';
|
|
6
|
+
import { searchWeb } from '../tools/search/exaClient';
|
|
7
|
+
// ── Build system prompt from brand config ───────────────────────────────────
|
|
8
|
+
function buildSystemPrompt() {
|
|
9
|
+
const brand = getBrandConfig();
|
|
10
|
+
return `You are a technical blog writer for dev.to, writing from the perspective of ${brand.name} (${brand.handle}).
|
|
11
|
+
|
|
12
|
+
Voice & style:
|
|
13
|
+
- Tone: ${brand.voice.tone}
|
|
14
|
+
- Personality: ${brand.voice.personality}
|
|
15
|
+
- Style: ${brand.voice.style}
|
|
16
|
+
|
|
17
|
+
Content guidelines: ${brand.contentGuidelines.blogFocus}
|
|
18
|
+
|
|
19
|
+
Your task is to generate a full dev.to-style technical blog post (800-1500 words) based on a video transcript and summary.
|
|
20
|
+
|
|
21
|
+
The blog post MUST include:
|
|
22
|
+
1. dev.to frontmatter (title, published: false, description, tags, cover_image placeholder)
|
|
23
|
+
2. An engaging introduction with a hook
|
|
24
|
+
3. Clear sections covering the main content (e.g. The Problem, The Solution, How It Works)
|
|
25
|
+
4. Code snippets where the video content discusses code — use fenced code blocks with language tags
|
|
26
|
+
5. Key Takeaways section
|
|
27
|
+
6. A conclusion
|
|
28
|
+
7. A footer referencing the original video
|
|
29
|
+
|
|
30
|
+
Workflow:
|
|
31
|
+
1. First call "search_web" with key topics to find relevant articles/resources to link to.
|
|
32
|
+
2. Then call "write_blog" with the complete blog post including frontmatter and body.
|
|
33
|
+
- Weave the search result links organically into the post text (don't dump them at the end).
|
|
34
|
+
- Reference the video and any shorts naturally.
|
|
35
|
+
|
|
36
|
+
Always call "write_blog" exactly once with the complete post.`;
|
|
37
|
+
}
|
|
38
|
+
// ── Agent ────────────────────────────────────────────────────────────────────
|
|
39
|
+
class BlogAgent extends BaseAgent {
|
|
40
|
+
blogContent = null;
|
|
41
|
+
constructor() {
|
|
42
|
+
super('BlogAgent', buildSystemPrompt());
|
|
43
|
+
}
|
|
44
|
+
getTools() {
|
|
45
|
+
return [
|
|
46
|
+
{
|
|
47
|
+
name: 'search_web',
|
|
48
|
+
description: 'Search the web for relevant articles and resources to link in the blog post.',
|
|
49
|
+
parameters: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
properties: {
|
|
52
|
+
queries: {
|
|
53
|
+
type: 'array',
|
|
54
|
+
items: { type: 'string' },
|
|
55
|
+
description: 'List of search queries for finding relevant links',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
required: ['queries'],
|
|
59
|
+
},
|
|
60
|
+
handler: async (args) => {
|
|
61
|
+
const { queries } = args;
|
|
62
|
+
logger.info(`[BlogAgent] search_web called with ${queries.length} queries`);
|
|
63
|
+
const allResults = {};
|
|
64
|
+
for (const query of queries) {
|
|
65
|
+
allResults[query] = await searchWeb(query, 3);
|
|
66
|
+
}
|
|
67
|
+
return JSON.stringify({ results: allResults });
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'write_blog',
|
|
72
|
+
description: 'Submit the complete dev.to blog post with frontmatter and markdown body.',
|
|
73
|
+
parameters: {
|
|
74
|
+
type: 'object',
|
|
75
|
+
properties: {
|
|
76
|
+
frontmatter: {
|
|
77
|
+
type: 'object',
|
|
78
|
+
properties: {
|
|
79
|
+
title: { type: 'string' },
|
|
80
|
+
description: { type: 'string' },
|
|
81
|
+
tags: { type: 'array', items: { type: 'string' } },
|
|
82
|
+
cover_image: { type: 'string' },
|
|
83
|
+
},
|
|
84
|
+
required: ['title', 'description', 'tags'],
|
|
85
|
+
},
|
|
86
|
+
body: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
description: 'The full markdown body of the blog post (excluding frontmatter)',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
required: ['frontmatter', 'body'],
|
|
92
|
+
},
|
|
93
|
+
handler: async (args) => {
|
|
94
|
+
const blogArgs = args;
|
|
95
|
+
this.blogContent = blogArgs;
|
|
96
|
+
logger.info(`[BlogAgent] write_blog received post: "${blogArgs.frontmatter.title}"`);
|
|
97
|
+
return JSON.stringify({ success: true });
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
async handleToolCall(toolName, _args) {
|
|
103
|
+
logger.warn(`[BlogAgent] Unexpected handleToolCall for "${toolName}"`);
|
|
104
|
+
return { error: `Unknown tool: ${toolName}` };
|
|
105
|
+
}
|
|
106
|
+
getBlogContent() {
|
|
107
|
+
return this.blogContent;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// ── Render the final markdown ───────────────────────────────────────────────
|
|
111
|
+
function renderBlogMarkdown(blog) {
|
|
112
|
+
const fm = blog.frontmatter;
|
|
113
|
+
const tags = fm.tags.map((t) => t.toLowerCase().replace(/[^a-z0-9]/g, '')).join(', ');
|
|
114
|
+
const lines = [
|
|
115
|
+
'---',
|
|
116
|
+
`title: "${fm.title}"`,
|
|
117
|
+
'published: false',
|
|
118
|
+
`description: "${fm.description}"`,
|
|
119
|
+
`tags: ${tags}`,
|
|
120
|
+
`cover_image: ${fm.cover_image || ''}`,
|
|
121
|
+
'---',
|
|
122
|
+
'',
|
|
123
|
+
blog.body,
|
|
124
|
+
];
|
|
125
|
+
return lines.join('\n');
|
|
126
|
+
}
|
|
127
|
+
// ── Public API ──────────────────────────────────────────────────────────────
|
|
128
|
+
export async function generateBlogPost(video, transcript, summary) {
|
|
129
|
+
const agent = new BlogAgent();
|
|
130
|
+
try {
|
|
131
|
+
const userMessage = [
|
|
132
|
+
'## Video Metadata',
|
|
133
|
+
`- **Title:** ${summary.title}`,
|
|
134
|
+
`- **Slug:** ${video.slug}`,
|
|
135
|
+
`- **Duration:** ${video.duration}s`,
|
|
136
|
+
`- **Recorded:** ${video.createdAt.toISOString().split('T')[0]}`,
|
|
137
|
+
'',
|
|
138
|
+
'## Summary',
|
|
139
|
+
summary.overview,
|
|
140
|
+
'',
|
|
141
|
+
'## Key Topics',
|
|
142
|
+
summary.keyTopics.map((t) => `- ${t}`).join('\n'),
|
|
143
|
+
'',
|
|
144
|
+
'## Transcript (first 6000 chars)',
|
|
145
|
+
transcript.text.slice(0, 6000),
|
|
146
|
+
].join('\n');
|
|
147
|
+
await agent.run(userMessage);
|
|
148
|
+
const blogContent = agent.getBlogContent();
|
|
149
|
+
if (!blogContent) {
|
|
150
|
+
throw new Error('BlogAgent did not produce any blog content');
|
|
151
|
+
}
|
|
152
|
+
const outDir = path.join(video.videoDir, 'social-posts');
|
|
153
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
154
|
+
const outputPath = path.join(outDir, 'devto.md');
|
|
155
|
+
fs.writeFileSync(outputPath, renderBlogMarkdown(blogContent), 'utf-8');
|
|
156
|
+
logger.info(`[BlogAgent] Wrote blog post to ${outputPath}`);
|
|
157
|
+
return outputPath;
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
await agent.destroy();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=BlogAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogAgent.js","sourceRoot":"","sources":["../../src/agents/BlogAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { VideoFile, Transcript, Chapter } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Generate chapters for a video recording.
|
|
4
|
+
*
|
|
5
|
+
* 1. Creates a ChapterAgent with a `generate_chapters` tool
|
|
6
|
+
* 2. Builds a prompt containing the full transcript with timestamps
|
|
7
|
+
* 3. Lets the agent analyse the transcript and identify chapter boundaries
|
|
8
|
+
* 4. Returns the array of {@link Chapter} objects
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateChapters(video: VideoFile, transcript: Transcript): Promise<Chapter[]>;
|
|
11
|
+
//# sourceMappingURL=ChapterAgent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChapterAgent.d.ts","sourceRoot":"","sources":["../../src/agents/ChapterAgent.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAiM9D;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,OAAO,EAAE,CAAC,CAyCpB"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { BaseAgent } from './BaseAgent';
|
|
4
|
+
import logger from '../config/logger';
|
|
5
|
+
import { getConfig } from '../config/environment';
|
|
6
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
7
|
+
/** Format seconds → "M:SS" or "H:MM:SS" for YouTube timestamps */
|
|
8
|
+
function toYouTubeTimestamp(seconds) {
|
|
9
|
+
const h = Math.floor(seconds / 3600);
|
|
10
|
+
const m = Math.floor((seconds % 3600) / 60);
|
|
11
|
+
const s = Math.floor(seconds % 60);
|
|
12
|
+
return h > 0
|
|
13
|
+
? `${h}:${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`
|
|
14
|
+
: `${m}:${String(s).padStart(2, '0')}`;
|
|
15
|
+
}
|
|
16
|
+
/** Format seconds → "MM:SS" for table display */
|
|
17
|
+
function fmtTime(seconds) {
|
|
18
|
+
const m = Math.floor(seconds / 60);
|
|
19
|
+
const s = Math.floor(seconds % 60);
|
|
20
|
+
return `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
|
|
21
|
+
}
|
|
22
|
+
/** Build a compact transcript block with timestamps for the LLM prompt. */
|
|
23
|
+
function buildTranscriptBlock(transcript) {
|
|
24
|
+
return transcript.segments
|
|
25
|
+
.map((seg) => `[${fmtTime(seg.start)} → ${fmtTime(seg.end)}] ${seg.text.trim()}`)
|
|
26
|
+
.join('\n');
|
|
27
|
+
}
|
|
28
|
+
// ── Output format generators ─────────────────────────────────────────────────
|
|
29
|
+
function generateChaptersJSON(chapters) {
|
|
30
|
+
return JSON.stringify({ chapters }, null, 2);
|
|
31
|
+
}
|
|
32
|
+
function generateYouTubeTimestamps(chapters) {
|
|
33
|
+
return chapters
|
|
34
|
+
.map((ch) => `${toYouTubeTimestamp(ch.timestamp)} ${ch.title}`)
|
|
35
|
+
.join('\n');
|
|
36
|
+
}
|
|
37
|
+
function generateChaptersMarkdown(chapters) {
|
|
38
|
+
const rows = chapters
|
|
39
|
+
.map((ch) => `| ${toYouTubeTimestamp(ch.timestamp)} | ${ch.title} | ${ch.description} |`)
|
|
40
|
+
.join('\n');
|
|
41
|
+
return `## Chapters
|
|
42
|
+
|
|
43
|
+
| Time | Chapter | Description |
|
|
44
|
+
|------|---------|-------------|
|
|
45
|
+
${rows}
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
function generateFFMetadata(chapters, totalDuration) {
|
|
49
|
+
let meta = ';FFMETADATA1\n\n';
|
|
50
|
+
for (let i = 0; i < chapters.length; i++) {
|
|
51
|
+
const ch = chapters[i];
|
|
52
|
+
const startMs = Math.round(ch.timestamp * 1000);
|
|
53
|
+
const endMs = i < chapters.length - 1
|
|
54
|
+
? Math.round(chapters[i + 1].timestamp * 1000)
|
|
55
|
+
: Math.round(totalDuration * 1000);
|
|
56
|
+
const escapedTitle = ch.title.replace(/[=;#\\]/g, '\\$&');
|
|
57
|
+
meta += `[CHAPTER]\nTIMEBASE=1/1000\nSTART=${startMs}\nEND=${endMs}\ntitle=${escapedTitle}\n\n`;
|
|
58
|
+
}
|
|
59
|
+
return meta;
|
|
60
|
+
}
|
|
61
|
+
// ── System prompt ────────────────────────────────────────────────────────────
|
|
62
|
+
function buildChapterSystemPrompt() {
|
|
63
|
+
return `You are a video chapter generator. Analyze the transcript and identify distinct topic segments.
|
|
64
|
+
|
|
65
|
+
Rules:
|
|
66
|
+
- First chapter MUST start at 0:00
|
|
67
|
+
- Minimum 3 chapters, maximum 10
|
|
68
|
+
- Each chapter should be 2-5 minutes long
|
|
69
|
+
- Chapter titles should be concise (3-7 words)
|
|
70
|
+
- Look for topic transitions, "moving on", "next", "now let's", etc.
|
|
71
|
+
- Include a brief 1-sentence description per chapter
|
|
72
|
+
|
|
73
|
+
**Output format:**
|
|
74
|
+
Call the "generate_chapters" tool with an array of chapter objects.
|
|
75
|
+
Each chapter: { timestamp (seconds from start), title (short, 3-7 words), description (1-sentence summary) }
|
|
76
|
+
|
|
77
|
+
**Title style:**
|
|
78
|
+
- Use title case: "Setting Up the Database"
|
|
79
|
+
- Be specific: "Configuring PostgreSQL" not "Database Stuff"
|
|
80
|
+
- Include the action when relevant: "Building the API Routes"
|
|
81
|
+
- Keep under 50 characters`;
|
|
82
|
+
}
|
|
83
|
+
// ── ChapterAgent ─────────────────────────────────────────────────────────────
|
|
84
|
+
class ChapterAgent extends BaseAgent {
|
|
85
|
+
outputDir;
|
|
86
|
+
totalDuration;
|
|
87
|
+
constructor(outputDir, totalDuration) {
|
|
88
|
+
super('ChapterAgent', buildChapterSystemPrompt());
|
|
89
|
+
this.outputDir = outputDir;
|
|
90
|
+
this.totalDuration = totalDuration;
|
|
91
|
+
}
|
|
92
|
+
get chaptersDir() {
|
|
93
|
+
return path.join(this.outputDir, 'chapters');
|
|
94
|
+
}
|
|
95
|
+
getTools() {
|
|
96
|
+
return [
|
|
97
|
+
{
|
|
98
|
+
name: 'generate_chapters',
|
|
99
|
+
description: 'Write the identified chapters to disk in all formats. ' +
|
|
100
|
+
'Provide: chapters (array of { timestamp, title, description }).',
|
|
101
|
+
parameters: {
|
|
102
|
+
type: 'object',
|
|
103
|
+
properties: {
|
|
104
|
+
chapters: {
|
|
105
|
+
type: 'array',
|
|
106
|
+
items: {
|
|
107
|
+
type: 'object',
|
|
108
|
+
properties: {
|
|
109
|
+
timestamp: { type: 'number', description: 'Seconds from video start' },
|
|
110
|
+
title: { type: 'string', description: 'Short chapter title (3-7 words)' },
|
|
111
|
+
description: { type: 'string', description: '1-sentence summary' },
|
|
112
|
+
},
|
|
113
|
+
required: ['timestamp', 'title', 'description'],
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
required: ['chapters'],
|
|
118
|
+
},
|
|
119
|
+
handler: async (rawArgs) => {
|
|
120
|
+
const args = rawArgs;
|
|
121
|
+
return this.handleGenerateChapters(args);
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
];
|
|
125
|
+
}
|
|
126
|
+
async handleToolCall(toolName, args) {
|
|
127
|
+
switch (toolName) {
|
|
128
|
+
case 'generate_chapters':
|
|
129
|
+
return this.handleGenerateChapters(args);
|
|
130
|
+
default:
|
|
131
|
+
throw new Error(`Unknown tool: ${toolName}`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async handleGenerateChapters(args) {
|
|
135
|
+
const { chapters } = args;
|
|
136
|
+
await fs.mkdir(this.chaptersDir, { recursive: true });
|
|
137
|
+
// Write all 4 formats in parallel
|
|
138
|
+
await Promise.all([
|
|
139
|
+
fs.writeFile(path.join(this.chaptersDir, 'chapters.json'), generateChaptersJSON(chapters), 'utf-8'),
|
|
140
|
+
fs.writeFile(path.join(this.chaptersDir, 'chapters-youtube.txt'), generateYouTubeTimestamps(chapters), 'utf-8'),
|
|
141
|
+
fs.writeFile(path.join(this.chaptersDir, 'chapters.md'), generateChaptersMarkdown(chapters), 'utf-8'),
|
|
142
|
+
fs.writeFile(path.join(this.chaptersDir, 'chapters.ffmetadata'), generateFFMetadata(chapters, this.totalDuration), 'utf-8'),
|
|
143
|
+
]);
|
|
144
|
+
logger.info(`[ChapterAgent] Wrote ${chapters.length} chapters in 4 formats → ${this.chaptersDir}`);
|
|
145
|
+
return `Chapters written: ${chapters.length} chapters in 4 formats to ${this.chaptersDir}`;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// ── Public API ───────────────────────────────────────────────────────────────
|
|
149
|
+
/**
|
|
150
|
+
* Generate chapters for a video recording.
|
|
151
|
+
*
|
|
152
|
+
* 1. Creates a ChapterAgent with a `generate_chapters` tool
|
|
153
|
+
* 2. Builds a prompt containing the full transcript with timestamps
|
|
154
|
+
* 3. Lets the agent analyse the transcript and identify chapter boundaries
|
|
155
|
+
* 4. Returns the array of {@link Chapter} objects
|
|
156
|
+
*/
|
|
157
|
+
export async function generateChapters(video, transcript) {
|
|
158
|
+
const config = getConfig();
|
|
159
|
+
const outputDir = path.join(config.OUTPUT_DIR, video.slug);
|
|
160
|
+
const agent = new ChapterAgent(outputDir, video.duration);
|
|
161
|
+
const transcriptBlock = buildTranscriptBlock(transcript);
|
|
162
|
+
const userPrompt = [
|
|
163
|
+
`**Video:** ${video.filename}`,
|
|
164
|
+
`**Duration:** ${fmtTime(video.duration)} (${Math.round(video.duration)} seconds)`,
|
|
165
|
+
'',
|
|
166
|
+
'---',
|
|
167
|
+
'',
|
|
168
|
+
'**Transcript:**',
|
|
169
|
+
'',
|
|
170
|
+
transcriptBlock,
|
|
171
|
+
].join('\n');
|
|
172
|
+
let capturedChapters;
|
|
173
|
+
// Intercept generate_chapters args to capture the result
|
|
174
|
+
// Uses `as any` to access private method — required by the intercept-and-capture pattern
|
|
175
|
+
const origHandler = agent.handleGenerateChapters.bind(agent);
|
|
176
|
+
agent.handleGenerateChapters = async (args) => {
|
|
177
|
+
capturedChapters = args.chapters;
|
|
178
|
+
return origHandler(args);
|
|
179
|
+
};
|
|
180
|
+
try {
|
|
181
|
+
await agent.run(userPrompt);
|
|
182
|
+
if (!capturedChapters) {
|
|
183
|
+
throw new Error('ChapterAgent did not call generate_chapters');
|
|
184
|
+
}
|
|
185
|
+
return capturedChapters;
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
await agent.destroy();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=ChapterAgent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChapterAgent.js","sourceRoot":"","sources":["../../src/agents/ChapterAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediumVideoAgent.d.ts","sourceRoot":"","sources":["../../src/agents/MediumVideoAgent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAA;AAyJ3E,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,UAAU,EAAE,CAAC,CAiHvB"}
|