vidpipe 1.0.0 ā 1.2.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 +35 -1
- package/dist/agents/BaseAgent.d.ts +17 -17
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +41 -47
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/SilenceRemovalAgent.d.ts.map +1 -1
- package/dist/agents/SilenceRemovalAgent.js +3 -2
- package/dist/agents/SilenceRemovalAgent.js.map +1 -1
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +212 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/config/environment.d.ts +3 -0
- package/dist/config/environment.d.ts.map +1 -1
- package/dist/config/environment.js +5 -2
- package/dist/config/environment.js.map +1 -1
- package/dist/config/ffmpegResolver.d.ts +3 -0
- package/dist/config/ffmpegResolver.d.ts.map +1 -0
- package/dist/config/ffmpegResolver.js +37 -0
- package/dist/config/ffmpegResolver.js.map +1 -0
- package/dist/config/pricing.d.ts +34 -0
- package/dist/config/pricing.d.ts.map +1 -0
- package/dist/config/pricing.js +71 -0
- package/dist/config/pricing.js.map +1 -0
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +37 -0
- package/dist/pipeline.js.map +1 -1
- package/dist/providers/ClaudeProvider.d.ts +14 -0
- package/dist/providers/ClaudeProvider.d.ts.map +1 -0
- package/dist/providers/ClaudeProvider.js +182 -0
- package/dist/providers/ClaudeProvider.js.map +1 -0
- package/dist/providers/CopilotProvider.d.ts +17 -0
- package/dist/providers/CopilotProvider.d.ts.map +1 -0
- package/dist/providers/CopilotProvider.js +149 -0
- package/dist/providers/CopilotProvider.js.map +1 -0
- package/dist/providers/OpenAIProvider.d.ts +14 -0
- package/dist/providers/OpenAIProvider.d.ts.map +1 -0
- package/dist/providers/OpenAIProvider.js +175 -0
- package/dist/providers/OpenAIProvider.js.map +1 -0
- package/dist/providers/index.d.ts +18 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +61 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/types.d.ts +112 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +8 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/services/costTracker.d.ts +63 -0
- package/dist/services/costTracker.d.ts.map +1 -0
- package/dist/services/costTracker.js +137 -0
- package/dist/services/costTracker.js.map +1 -0
- package/dist/services/videoIngestion.d.ts.map +1 -1
- package/dist/services/videoIngestion.js +4 -3
- package/dist/services/videoIngestion.js.map +1 -1
- package/dist/tools/ffmpeg/aspectRatio.d.ts.map +1 -1
- package/dist/tools/ffmpeg/aspectRatio.js +2 -1
- package/dist/tools/ffmpeg/aspectRatio.js.map +1 -1
- package/dist/tools/ffmpeg/audioExtraction.d.ts.map +1 -1
- package/dist/tools/ffmpeg/audioExtraction.js +3 -2
- package/dist/tools/ffmpeg/audioExtraction.js.map +1 -1
- package/dist/tools/ffmpeg/captionBurning.d.ts.map +1 -1
- package/dist/tools/ffmpeg/captionBurning.js +2 -1
- package/dist/tools/ffmpeg/captionBurning.js.map +1 -1
- package/dist/tools/ffmpeg/clipExtraction.d.ts +16 -1
- package/dist/tools/ffmpeg/clipExtraction.d.ts.map +1 -1
- package/dist/tools/ffmpeg/clipExtraction.js +44 -7
- package/dist/tools/ffmpeg/clipExtraction.js.map +1 -1
- package/dist/tools/ffmpeg/faceDetection.d.ts.map +1 -1
- package/dist/tools/ffmpeg/faceDetection.js +3 -2
- package/dist/tools/ffmpeg/faceDetection.js.map +1 -1
- package/dist/tools/ffmpeg/frameCapture.d.ts.map +1 -1
- package/dist/tools/ffmpeg/frameCapture.js +3 -2
- package/dist/tools/ffmpeg/frameCapture.js.map +1 -1
- package/dist/tools/ffmpeg/silenceDetection.d.ts.map +1 -1
- package/dist/tools/ffmpeg/silenceDetection.js +2 -1
- package/dist/tools/ffmpeg/silenceDetection.js.map +1 -1
- package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +1 -1
- package/dist/tools/ffmpeg/singlePassEdit.js +2 -1
- package/dist/tools/ffmpeg/singlePassEdit.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.js +1 -1
- package/package.json +67 -63
- package/dist/__tests__/agents.test.d.ts +0 -2
- package/dist/__tests__/agents.test.d.ts.map +0 -1
- package/dist/__tests__/agents.test.js +0 -434
- package/dist/__tests__/agents.test.js.map +0 -1
- package/dist/__tests__/aspectRatio.test.d.ts +0 -2
- package/dist/__tests__/aspectRatio.test.d.ts.map +0 -1
- package/dist/__tests__/aspectRatio.test.js +0 -406
- package/dist/__tests__/aspectRatio.test.js.map +0 -1
- package/dist/__tests__/captionGenerator.test.d.ts +0 -2
- package/dist/__tests__/captionGenerator.test.d.ts.map +0 -1
- package/dist/__tests__/captionGenerator.test.js +0 -435
- package/dist/__tests__/captionGenerator.test.js.map +0 -1
- package/dist/__tests__/config.test.d.ts +0 -2
- package/dist/__tests__/config.test.d.ts.map +0 -1
- package/dist/__tests__/config.test.js +0 -81
- package/dist/__tests__/config.test.js.map +0 -1
- package/dist/__tests__/faceDetection.test.d.ts +0 -2
- package/dist/__tests__/faceDetection.test.d.ts.map +0 -1
- package/dist/__tests__/faceDetection.test.js +0 -372
- package/dist/__tests__/faceDetection.test.js.map +0 -1
- package/dist/__tests__/ffmpegTools.test.d.ts +0 -2
- package/dist/__tests__/ffmpegTools.test.d.ts.map +0 -1
- package/dist/__tests__/ffmpegTools.test.js +0 -464
- package/dist/__tests__/ffmpegTools.test.js.map +0 -1
- package/dist/__tests__/integration/captionBurn.test.d.ts +0 -2
- package/dist/__tests__/integration/captionBurn.test.d.ts.map +0 -1
- package/dist/__tests__/integration/captionBurn.test.js +0 -103
- package/dist/__tests__/integration/captionBurn.test.js.map +0 -1
- package/dist/__tests__/integration/clipComposite.test.d.ts +0 -2
- package/dist/__tests__/integration/clipComposite.test.d.ts.map +0 -1
- package/dist/__tests__/integration/clipComposite.test.js +0 -56
- package/dist/__tests__/integration/clipComposite.test.js.map +0 -1
- package/dist/__tests__/integration/faceDetection.test.d.ts +0 -2
- package/dist/__tests__/integration/faceDetection.test.d.ts.map +0 -1
- package/dist/__tests__/integration/faceDetection.test.js +0 -85
- package/dist/__tests__/integration/faceDetection.test.js.map +0 -1
- package/dist/__tests__/integration/ffmpegPipeline.test.d.ts +0 -2
- package/dist/__tests__/integration/ffmpegPipeline.test.d.ts.map +0 -1
- package/dist/__tests__/integration/ffmpegPipeline.test.js +0 -88
- package/dist/__tests__/integration/ffmpegPipeline.test.js.map +0 -1
- package/dist/__tests__/integration/fixture.d.ts +0 -19
- package/dist/__tests__/integration/fixture.d.ts.map +0 -1
- package/dist/__tests__/integration/fixture.js +0 -112
- package/dist/__tests__/integration/fixture.js.map +0 -1
- package/dist/__tests__/integration/fixture.test.d.ts +0 -2
- package/dist/__tests__/integration/fixture.test.d.ts.map +0 -1
- package/dist/__tests__/integration/fixture.test.js +0 -27
- package/dist/__tests__/integration/fixture.test.js.map +0 -1
- package/dist/__tests__/integration/realCaptions.test.d.ts +0 -2
- package/dist/__tests__/integration/realCaptions.test.d.ts.map +0 -1
- package/dist/__tests__/integration/realCaptions.test.js +0 -226
- package/dist/__tests__/integration/realCaptions.test.js.map +0 -1
- package/dist/__tests__/integration/realPipeline.test.d.ts +0 -2
- package/dist/__tests__/integration/realPipeline.test.d.ts.map +0 -1
- package/dist/__tests__/integration/realPipeline.test.js +0 -210
- package/dist/__tests__/integration/realPipeline.test.js.map +0 -1
- package/dist/__tests__/integration/silenceRemoval.test.d.ts +0 -2
- package/dist/__tests__/integration/silenceRemoval.test.d.ts.map +0 -1
- package/dist/__tests__/integration/silenceRemoval.test.js +0 -93
- package/dist/__tests__/integration/silenceRemoval.test.js.map +0 -1
- package/dist/__tests__/pipeline.test.d.ts +0 -2
- package/dist/__tests__/pipeline.test.d.ts.map +0 -1
- package/dist/__tests__/pipeline.test.js +0 -434
- package/dist/__tests__/pipeline.test.js.map +0 -1
- package/dist/__tests__/services.test.d.ts +0 -2
- package/dist/__tests__/services.test.d.ts.map +0 -1
- package/dist/__tests__/services.test.js +0 -655
- package/dist/__tests__/services.test.js.map +0 -1
- package/dist/__tests__/silenceRemoval.test.d.ts +0 -2
- package/dist/__tests__/silenceRemoval.test.d.ts.map +0 -1
- package/dist/__tests__/silenceRemoval.test.js +0 -266
- package/dist/__tests__/silenceRemoval.test.js.map +0 -1
- package/dist/__tests__/singlePassEdit.test.d.ts +0 -2
- package/dist/__tests__/singlePassEdit.test.d.ts.map +0 -1
- package/dist/__tests__/singlePassEdit.test.js +0 -321
- package/dist/__tests__/singlePassEdit.test.js.map +0 -1
- package/dist/__tests__/smoke.test.d.ts +0 -2
- package/dist/__tests__/smoke.test.d.ts.map +0 -1
- package/dist/__tests__/smoke.test.js +0 -8
- package/dist/__tests__/smoke.test.js.map +0 -1
- package/dist/__tests__/utilities.test.d.ts +0 -2
- package/dist/__tests__/utilities.test.d.ts.map +0 -1
- package/dist/__tests__/utilities.test.js +0 -268
- package/dist/__tests__/utilities.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -44,6 +44,18 @@ npm install -g vidpipe
|
|
|
44
44
|
# Install globally
|
|
45
45
|
npm install -g vidpipe
|
|
46
46
|
|
|
47
|
+
# Set up your environment
|
|
48
|
+
# Unix/Mac
|
|
49
|
+
cp .env.example .env
|
|
50
|
+
# Windows (PowerShell)
|
|
51
|
+
Copy-Item .env.example .env
|
|
52
|
+
|
|
53
|
+
# Then edit .env and add your OpenAI API key (REQUIRED):
|
|
54
|
+
# OPENAI_API_KEY=sk-your-key-here
|
|
55
|
+
|
|
56
|
+
# Verify all prerequisites are met
|
|
57
|
+
vidpipe --doctor
|
|
58
|
+
|
|
47
59
|
# Process a single video
|
|
48
60
|
vidpipe /path/to/video.mp4
|
|
49
61
|
|
|
@@ -59,7 +71,12 @@ vidpipe \
|
|
|
59
71
|
--verbose
|
|
60
72
|
```
|
|
61
73
|
|
|
62
|
-
> **Prerequisites:**
|
|
74
|
+
> **Prerequisites:**
|
|
75
|
+
> - **Node.js 20+**
|
|
76
|
+
> - **FFmpeg 6.0+** ā Automatically included via `npm install` (bundled by [`ffmpeg-static`](https://www.npmjs.com/package/ffmpeg-static)). Override with `FFMPEG_PATH` env var if you need a specific build.
|
|
77
|
+
> - **OpenAI API key** (**required**) ā Get one at [platform.openai.com/api-keys](https://platform.openai.com/api-keys). Needed for Whisper transcription and all AI features.
|
|
78
|
+
> - **GitHub Copilot subscription** ā Required for AI agent features (shorts generation, social media posts, summaries, blog posts). See [GitHub Copilot](https://github.com/features/copilot).
|
|
79
|
+
>
|
|
63
80
|
> See [Getting Started](./docs/getting-started.md) for full setup instructions.
|
|
64
81
|
|
|
65
82
|
---
|
|
@@ -72,6 +89,7 @@ vidpipe [options] [video-path]
|
|
|
72
89
|
|
|
73
90
|
| Option | Description |
|
|
74
91
|
|--------|-------------|
|
|
92
|
+
| `--doctor` | Check that all prerequisites (FFmpeg, API keys, etc.) are installed and configured |
|
|
75
93
|
| `[video-path]` | Process a specific video file (implies `--once`) |
|
|
76
94
|
| `--watch-dir <path>` | Folder to watch for new recordings |
|
|
77
95
|
| `--output-dir <path>` | Output directory (default: `./recordings`) |
|
|
@@ -163,6 +181,22 @@ Each stage can be independently skipped with `--no-*` flags. A stage failure doe
|
|
|
163
181
|
|
|
164
182
|
---
|
|
165
183
|
|
|
184
|
+
## š¤ LLM Providers
|
|
185
|
+
|
|
186
|
+
VidPipe supports multiple LLM providers:
|
|
187
|
+
|
|
188
|
+
| Provider | Env Var | Default Model | Notes |
|
|
189
|
+
|----------|---------|---------------|-------|
|
|
190
|
+
| `copilot` (default) | ā | Claude Opus 4.6 | Uses GitHub Copilot auth |
|
|
191
|
+
| `openai` | `OPENAI_API_KEY` | gpt-4o | Direct OpenAI API |
|
|
192
|
+
| `claude` | `ANTHROPIC_API_KEY` | claude-opus-4.6 | Direct Anthropic API |
|
|
193
|
+
|
|
194
|
+
Set `LLM_PROVIDER` in your `.env` or pass via CLI. Override model with `LLM_MODEL`.
|
|
195
|
+
|
|
196
|
+
The pipeline tracks token usage and estimated cost across all providers, displaying a summary at the end of each run.
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
166
200
|
## āļø Configuration
|
|
167
201
|
|
|
168
202
|
Configuration is loaded from CLI flags ā environment variables ā `.env` file ā defaults.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { LLMProvider, LLMSession, ToolWithHandler } from '../providers/types.js';
|
|
2
2
|
/**
|
|
3
|
-
* BaseAgent ā abstract foundation for all
|
|
3
|
+
* BaseAgent ā abstract foundation for all LLM-powered agents.
|
|
4
4
|
*
|
|
5
5
|
* ### Agent pattern
|
|
6
6
|
* Each agent in the pipeline (SummaryAgent, ShortsAgent, BlogAgent, etc.)
|
|
@@ -9,14 +9,14 @@ import { CopilotClient, CopilotSession, Tool } from '@github/copilot-sdk';
|
|
|
9
9
|
* - `handleToolCall()` ā dispatches tool invocations to concrete implementations
|
|
10
10
|
*
|
|
11
11
|
* ### Tool registration
|
|
12
|
-
* Tools are declared as JSON Schema objects and passed to the
|
|
13
|
-
* at creation time. When the LLM decides to call a tool, the
|
|
14
|
-
* call through
|
|
15
|
-
* (e.g. reading files, running FFmpeg, querying APIs).
|
|
12
|
+
* Tools are declared as JSON Schema objects and passed to the LLMSession
|
|
13
|
+
* at creation time. When the LLM decides to call a tool, the provider routes
|
|
14
|
+
* the call through the tool handler where the subclass executes the actual
|
|
15
|
+
* logic (e.g. reading files, running FFmpeg, querying APIs).
|
|
16
16
|
*
|
|
17
17
|
* ### Message flow
|
|
18
|
-
* 1. `run(userMessage)` lazily creates
|
|
19
|
-
*
|
|
18
|
+
* 1. `run(userMessage)` lazily creates an LLMSession via the configured
|
|
19
|
+
* provider (Copilot, OpenAI, or Claude).
|
|
20
20
|
* 2. The user message is sent via `sendAndWait()`, which blocks until the
|
|
21
21
|
* LLM produces a final response (with a 5-minute timeout).
|
|
22
22
|
* 3. During processing, the LLM may invoke tools multiple times ā each call
|
|
@@ -29,24 +29,24 @@ import { CopilotClient, CopilotSession, Tool } from '@github/copilot-sdk';
|
|
|
29
29
|
export declare abstract class BaseAgent {
|
|
30
30
|
protected readonly agentName: string;
|
|
31
31
|
protected readonly systemPrompt: string;
|
|
32
|
-
protected
|
|
33
|
-
protected session:
|
|
34
|
-
constructor(agentName: string, systemPrompt: string);
|
|
32
|
+
protected provider: LLMProvider;
|
|
33
|
+
protected session: LLMSession | null;
|
|
34
|
+
constructor(agentName: string, systemPrompt: string, provider?: LLMProvider);
|
|
35
35
|
/** Tools this agent exposes to the LLM. Override in subclasses. */
|
|
36
|
-
protected getTools():
|
|
36
|
+
protected getTools(): ToolWithHandler[];
|
|
37
37
|
/** Dispatch a tool call to the concrete agent. Override in subclasses. */
|
|
38
38
|
protected abstract handleToolCall(toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
39
39
|
/**
|
|
40
40
|
* Send a user message to the agent and return the final response text.
|
|
41
41
|
*
|
|
42
|
-
* 1. Lazily creates
|
|
43
|
-
* 2. Registers
|
|
44
|
-
* 3. Calls sendAndWait and
|
|
42
|
+
* 1. Lazily creates an LLMSession via the provider
|
|
43
|
+
* 2. Registers event listeners for logging
|
|
44
|
+
* 3. Calls sendAndWait and records usage via CostTracker
|
|
45
45
|
*/
|
|
46
46
|
run(userMessage: string): Promise<string>;
|
|
47
|
-
/** Wire up session event listeners for logging
|
|
47
|
+
/** Wire up session event listeners for logging. */
|
|
48
48
|
private setupEventHandlers;
|
|
49
|
-
/** Tear down the
|
|
49
|
+
/** Tear down the session. */
|
|
50
50
|
destroy(): Promise<void>;
|
|
51
51
|
}
|
|
52
52
|
//# sourceMappingURL=BaseAgent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BaseAgent.d.ts","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAKrF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,8BAAsB,SAAS;IAK3B,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IACpC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM;IALzC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC/B,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAO;gBAGtB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACvC,QAAQ,CAAC,EAAE,WAAW;IAKxB,mEAAmE;IACnE,SAAS,CAAC,QAAQ,IAAI,eAAe,EAAE;IAIvC,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;IAkC/C,mDAAmD;IACnD,OAAO,CAAC,kBAAkB;IAkB1B,6BAA6B;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAU/B"}
|
package/dist/agents/BaseAgent.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { getProvider } from '../providers/index.js';
|
|
2
|
+
import { costTracker } from '../services/costTracker.js';
|
|
3
|
+
import logger from '../config/logger.js';
|
|
3
4
|
/**
|
|
4
|
-
* BaseAgent ā abstract foundation for all
|
|
5
|
+
* BaseAgent ā abstract foundation for all LLM-powered agents.
|
|
5
6
|
*
|
|
6
7
|
* ### Agent pattern
|
|
7
8
|
* Each agent in the pipeline (SummaryAgent, ShortsAgent, BlogAgent, etc.)
|
|
@@ -10,14 +11,14 @@ import logger from '../config/logger';
|
|
|
10
11
|
* - `handleToolCall()` ā dispatches tool invocations to concrete implementations
|
|
11
12
|
*
|
|
12
13
|
* ### Tool registration
|
|
13
|
-
* Tools are declared as JSON Schema objects and passed to the
|
|
14
|
-
* at creation time. When the LLM decides to call a tool, the
|
|
15
|
-
* call through
|
|
16
|
-
* (e.g. reading files, running FFmpeg, querying APIs).
|
|
14
|
+
* Tools are declared as JSON Schema objects and passed to the LLMSession
|
|
15
|
+
* at creation time. When the LLM decides to call a tool, the provider routes
|
|
16
|
+
* the call through the tool handler where the subclass executes the actual
|
|
17
|
+
* logic (e.g. reading files, running FFmpeg, querying APIs).
|
|
17
18
|
*
|
|
18
19
|
* ### Message flow
|
|
19
|
-
* 1. `run(userMessage)` lazily creates
|
|
20
|
-
*
|
|
20
|
+
* 1. `run(userMessage)` lazily creates an LLMSession via the configured
|
|
21
|
+
* provider (Copilot, OpenAI, or Claude).
|
|
21
22
|
* 2. The user message is sent via `sendAndWait()`, which blocks until the
|
|
22
23
|
* LLM produces a final response (with a 5-minute timeout).
|
|
23
24
|
* 3. During processing, the LLM may invoke tools multiple times ā each call
|
|
@@ -30,11 +31,12 @@ import logger from '../config/logger';
|
|
|
30
31
|
export class BaseAgent {
|
|
31
32
|
agentName;
|
|
32
33
|
systemPrompt;
|
|
33
|
-
|
|
34
|
+
provider;
|
|
34
35
|
session = null;
|
|
35
|
-
constructor(agentName, systemPrompt) {
|
|
36
|
+
constructor(agentName, systemPrompt, provider) {
|
|
36
37
|
this.agentName = agentName;
|
|
37
38
|
this.systemPrompt = systemPrompt;
|
|
39
|
+
this.provider = provider ?? getProvider();
|
|
38
40
|
}
|
|
39
41
|
/** Tools this agent exposes to the LLM. Override in subclasses. */
|
|
40
42
|
getTools() {
|
|
@@ -43,62 +45,54 @@ export class BaseAgent {
|
|
|
43
45
|
/**
|
|
44
46
|
* Send a user message to the agent and return the final response text.
|
|
45
47
|
*
|
|
46
|
-
* 1. Lazily creates
|
|
47
|
-
* 2. Registers
|
|
48
|
-
* 3. Calls sendAndWait and
|
|
48
|
+
* 1. Lazily creates an LLMSession via the provider
|
|
49
|
+
* 2. Registers event listeners for logging
|
|
50
|
+
* 3. Calls sendAndWait and records usage via CostTracker
|
|
49
51
|
*/
|
|
50
52
|
async run(userMessage) {
|
|
51
|
-
if (!this.client) {
|
|
52
|
-
this.client = new CopilotClient({ autoStart: true, logLevel: 'error' });
|
|
53
|
-
}
|
|
54
53
|
if (!this.session) {
|
|
55
|
-
this.session = await this.
|
|
56
|
-
|
|
54
|
+
this.session = await this.provider.createSession({
|
|
55
|
+
systemPrompt: this.systemPrompt,
|
|
57
56
|
tools: this.getTools(),
|
|
58
57
|
streaming: true,
|
|
58
|
+
model: process.env.LLM_MODEL || undefined,
|
|
59
|
+
timeoutMs: 300_000, // 5 min timeout
|
|
59
60
|
});
|
|
60
61
|
this.setupEventHandlers(this.session);
|
|
61
62
|
}
|
|
62
63
|
logger.info(`[${this.agentName}] Sending message: ${userMessage.substring(0, 80)}ā¦`);
|
|
63
|
-
|
|
64
|
-
const
|
|
64
|
+
costTracker.setAgent(this.agentName);
|
|
65
|
+
const response = await this.session.sendAndWait(userMessage);
|
|
66
|
+
// Record usage via CostTracker
|
|
67
|
+
costTracker.recordUsage(this.provider.name, response.cost?.model ?? this.provider.getDefaultModel(), response.usage, response.cost, response.durationMs, response.quotaSnapshots
|
|
68
|
+
? Object.values(response.quotaSnapshots)[0]
|
|
69
|
+
: undefined);
|
|
70
|
+
const content = response.content;
|
|
65
71
|
logger.info(`[${this.agentName}] Response received (${content.length} chars)`);
|
|
66
72
|
return content;
|
|
67
73
|
}
|
|
68
|
-
/** Wire up session event listeners for logging
|
|
74
|
+
/** Wire up session event listeners for logging. */
|
|
69
75
|
setupEventHandlers(session) {
|
|
70
|
-
session.on((event) => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
}
|
|
76
|
+
session.on('delta', (event) => {
|
|
77
|
+
logger.debug(`[${this.agentName}] delta: ${JSON.stringify(event.data)}`);
|
|
78
|
+
});
|
|
79
|
+
session.on('tool_start', (event) => {
|
|
80
|
+
logger.info(`[${this.agentName}] tool start: ${JSON.stringify(event.data)}`);
|
|
81
|
+
});
|
|
82
|
+
session.on('tool_end', (event) => {
|
|
83
|
+
logger.info(`[${this.agentName}] tool done: ${JSON.stringify(event.data)}`);
|
|
84
|
+
});
|
|
85
|
+
session.on('error', (event) => {
|
|
86
|
+
logger.error(`[${this.agentName}] error: ${JSON.stringify(event.data)}`);
|
|
89
87
|
});
|
|
90
88
|
}
|
|
91
|
-
/** Tear down the
|
|
89
|
+
/** Tear down the session. */
|
|
92
90
|
async destroy() {
|
|
93
91
|
try {
|
|
94
92
|
if (this.session) {
|
|
95
|
-
await this.session.
|
|
93
|
+
await this.session.close();
|
|
96
94
|
this.session = null;
|
|
97
95
|
}
|
|
98
|
-
if (this.client) {
|
|
99
|
-
await this.client.stop();
|
|
100
|
-
this.client = null;
|
|
101
|
-
}
|
|
102
96
|
}
|
|
103
97
|
catch (err) {
|
|
104
98
|
logger.error(`[${this.agentName}] Error during destroy: ${err}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAgent.js","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseAgent.js","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SilenceRemovalAgent.d.ts","sourceRoot":"","sources":["../../src/agents/SilenceRemovalAgent.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"SilenceRemovalAgent.d.ts","sourceRoot":"","sources":["../../src/agents/SilenceRemovalAgent.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAoH3E;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,oBAAoB,CAAC,CAsI/B"}
|
|
@@ -4,8 +4,9 @@ import { BaseAgent } from './BaseAgent';
|
|
|
4
4
|
import { detectSilence } from '../tools/ffmpeg/silenceDetection';
|
|
5
5
|
import { singlePassEdit } from '../tools/ffmpeg/singlePassEdit';
|
|
6
6
|
import logger from '../config/logger';
|
|
7
|
-
|
|
8
|
-
const
|
|
7
|
+
import { getFFmpegPath, getFFprobePath } from '../config/ffmpegResolver.js';
|
|
8
|
+
const ffmpegPath = getFFmpegPath();
|
|
9
|
+
const ffprobePath = getFFprobePath();
|
|
9
10
|
ffmpeg.setFfmpegPath(ffmpegPath);
|
|
10
11
|
ffmpeg.setFfprobePath(ffprobePath);
|
|
11
12
|
// āā System prompt āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SilenceRemovalAgent.js","sourceRoot":"","sources":["../../src/agents/SilenceRemovalAgent.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,eAAe,CAAA;AAElC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,aAAa,EAAiB,MAAM,kCAAkC,CAAA;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,MAAM,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"SilenceRemovalAgent.js","sourceRoot":"","sources":["../../src/agents/SilenceRemovalAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
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;AAsID,wBAAgB,SAAS,IAAI,IAAI,CA0EhC"}
|
|
@@ -0,0 +1,212 @@
|
|
|
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 checkNode() {
|
|
41
|
+
const raw = process.version; // e.g. "v20.11.1"
|
|
42
|
+
const major = parseInt(raw.slice(1), 10);
|
|
43
|
+
const ok = major >= 20;
|
|
44
|
+
return {
|
|
45
|
+
label: 'Node.js',
|
|
46
|
+
ok,
|
|
47
|
+
required: true,
|
|
48
|
+
message: ok
|
|
49
|
+
? `Node.js ${raw} (required: ā„20)`
|
|
50
|
+
: `Node.js ${raw} ā version ā„20 required`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function checkFFmpeg() {
|
|
54
|
+
const { path: binPath, source } = resolveFFmpegPath();
|
|
55
|
+
try {
|
|
56
|
+
const result = spawnSync(binPath, ['-version'], { encoding: 'utf-8', timeout: 10_000 });
|
|
57
|
+
if (result.status === 0 && result.stdout) {
|
|
58
|
+
const ver = parseVersionFromOutput(result.stdout);
|
|
59
|
+
return { label: 'FFmpeg', ok: true, required: true, message: `FFmpeg ${ver} (source: ${source})` };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch { /* spawn failed */ }
|
|
63
|
+
return {
|
|
64
|
+
label: 'FFmpeg',
|
|
65
|
+
ok: false,
|
|
66
|
+
required: true,
|
|
67
|
+
message: 'FFmpeg not found ā install with: winget install Gyan.FFmpeg (Windows) / brew install ffmpeg (macOS)',
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function checkFFprobe() {
|
|
71
|
+
const { path: binPath, source } = resolveFFprobePath();
|
|
72
|
+
try {
|
|
73
|
+
const result = spawnSync(binPath, ['-version'], { encoding: 'utf-8', timeout: 10_000 });
|
|
74
|
+
if (result.status === 0 && result.stdout) {
|
|
75
|
+
const ver = parseVersionFromOutput(result.stdout);
|
|
76
|
+
return { label: 'FFprobe', ok: true, required: true, message: `FFprobe ${ver} (source: ${source})` };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch { /* spawn failed */ }
|
|
80
|
+
return {
|
|
81
|
+
label: 'FFprobe',
|
|
82
|
+
ok: false,
|
|
83
|
+
required: true,
|
|
84
|
+
message: 'FFprobe not found ā install with: winget install Gyan.FFmpeg (Windows) / brew install ffmpeg (macOS)',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function checkOpenAIKey() {
|
|
88
|
+
const set = !!process.env.OPENAI_API_KEY;
|
|
89
|
+
return {
|
|
90
|
+
label: 'OPENAI_API_KEY',
|
|
91
|
+
ok: set,
|
|
92
|
+
required: true,
|
|
93
|
+
message: set
|
|
94
|
+
? 'OPENAI_API_KEY is set'
|
|
95
|
+
: 'OPENAI_API_KEY not set ā get one at https://platform.openai.com/api-keys',
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function checkExaKey() {
|
|
99
|
+
const set = !!process.env.EXA_API_KEY;
|
|
100
|
+
return {
|
|
101
|
+
label: 'EXA_API_KEY',
|
|
102
|
+
ok: set,
|
|
103
|
+
required: false,
|
|
104
|
+
message: set
|
|
105
|
+
? 'EXA_API_KEY is set'
|
|
106
|
+
: 'EXA_API_KEY not set (optional ā web search in social posts)',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function checkGit() {
|
|
110
|
+
try {
|
|
111
|
+
const result = spawnSync('git', ['--version'], { encoding: 'utf-8', timeout: 10_000 });
|
|
112
|
+
if (result.status === 0 && result.stdout) {
|
|
113
|
+
const ver = parseVersionFromOutput(result.stdout);
|
|
114
|
+
return { label: 'Git', ok: true, required: false, message: `Git ${ver}` };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
catch { /* spawn failed */ }
|
|
118
|
+
return {
|
|
119
|
+
label: 'Git',
|
|
120
|
+
ok: false,
|
|
121
|
+
required: false,
|
|
122
|
+
message: 'Git not found (optional ā needed for auto-commit stage)',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function checkWatchFolder() {
|
|
126
|
+
const watchDir = process.env.WATCH_FOLDER || path.join(process.cwd(), 'watch');
|
|
127
|
+
const exists = existsSync(watchDir);
|
|
128
|
+
return {
|
|
129
|
+
label: 'Watch folder',
|
|
130
|
+
ok: exists,
|
|
131
|
+
required: false,
|
|
132
|
+
message: exists
|
|
133
|
+
? `Watch folder exists: ${watchDir}`
|
|
134
|
+
: `Watch folder missing: ${watchDir}`,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
export function runDoctor() {
|
|
138
|
+
console.log('\nš VidPipe Doctor ā Checking prerequisites...\n');
|
|
139
|
+
const results = [
|
|
140
|
+
checkNode(),
|
|
141
|
+
checkFFmpeg(),
|
|
142
|
+
checkFFprobe(),
|
|
143
|
+
checkOpenAIKey(),
|
|
144
|
+
checkExaKey(),
|
|
145
|
+
checkGit(),
|
|
146
|
+
checkWatchFolder(),
|
|
147
|
+
];
|
|
148
|
+
for (const r of results) {
|
|
149
|
+
const icon = r.ok ? 'ā
' : r.required ? 'ā' : 'ā¬';
|
|
150
|
+
console.log(` ${icon} ${r.message}`);
|
|
151
|
+
}
|
|
152
|
+
// LLM Provider section ā check env vars directly to avoid silent fallback
|
|
153
|
+
console.log('\nLLM Provider');
|
|
154
|
+
const providerName = normalizeProviderName(process.env.LLM_PROVIDER);
|
|
155
|
+
const isDefault = !process.env.LLM_PROVIDER;
|
|
156
|
+
const providerLabel = isDefault ? `${providerName} (default)` : providerName;
|
|
157
|
+
const validProviders = ['copilot', 'openai', 'claude'];
|
|
158
|
+
if (!validProviders.includes(providerName)) {
|
|
159
|
+
console.log(` ā Provider: ${providerLabel} ā unknown provider`);
|
|
160
|
+
results.push({ label: 'LLM Provider', ok: false, required: true, message: `Unknown provider: ${providerName}` });
|
|
161
|
+
}
|
|
162
|
+
else if (providerName === 'copilot') {
|
|
163
|
+
console.log(` ā
Provider: ${providerLabel}`);
|
|
164
|
+
console.log(' ā
Copilot ā uses GitHub auth');
|
|
165
|
+
}
|
|
166
|
+
else if (providerName === 'openai') {
|
|
167
|
+
console.log(` ā
Provider: ${providerLabel}`);
|
|
168
|
+
if (process.env.OPENAI_API_KEY) {
|
|
169
|
+
console.log(' ā
OPENAI_API_KEY is set (also used for Whisper)');
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.log(' ā OPENAI_API_KEY not set (required for openai provider)');
|
|
173
|
+
results.push({ label: 'LLM Provider', ok: false, required: true, message: 'OPENAI_API_KEY not set for OpenAI LLM' });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
else if (providerName === 'claude') {
|
|
177
|
+
console.log(` ā
Provider: ${providerLabel}`);
|
|
178
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
179
|
+
console.log(' ā
ANTHROPIC_API_KEY is set');
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
console.log(' ā ANTHROPIC_API_KEY not set (required for claude provider)');
|
|
183
|
+
results.push({ label: 'LLM Provider', ok: false, required: true, message: 'ANTHROPIC_API_KEY not set for Claude LLM' });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const defaultModels = {
|
|
187
|
+
copilot: 'Claude Opus 4.6',
|
|
188
|
+
openai: 'gpt-4o',
|
|
189
|
+
claude: 'claude-opus-4.6',
|
|
190
|
+
};
|
|
191
|
+
if (validProviders.includes(providerName)) {
|
|
192
|
+
const defaultModel = defaultModels[providerName];
|
|
193
|
+
const modelOverride = process.env.LLM_MODEL;
|
|
194
|
+
if (modelOverride) {
|
|
195
|
+
console.log(` ā¹ļø Model override: ${modelOverride} (default: ${defaultModel})`);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
console.log(` ā¹ļø Default model: ${defaultModel}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const failedRequired = results.filter(r => r.required && !r.ok);
|
|
202
|
+
console.log();
|
|
203
|
+
if (failedRequired.length === 0) {
|
|
204
|
+
console.log(' All required checks passed! ā
\n');
|
|
205
|
+
process.exit(0);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
console.log(` ${failedRequired.length} required check${failedRequired.length > 1 ? 's' : ''} failed ā\n`);
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAID,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,GAAG,GAAE,UAAe,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,oBAAoB,EAAE,OAAO,CAAA;IAC7B,WAAW,EAAE,OAAO,CAAA;IACpB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,WAAW,EAAE,OAAO,CAAA;IACpB,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAID,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,GAAG,GAAE,UAAe,GAAG,cAAc,CAyB/D;AAED,wBAAgB,SAAS,IAAI,cAAc,CAO1C"}
|
|
@@ -19,9 +19,12 @@ export function initConfig(cli = {}) {
|
|
|
19
19
|
OPENAI_API_KEY: cli.openaiKey || process.env.OPENAI_API_KEY || '',
|
|
20
20
|
WATCH_FOLDER: cli.watchDir || process.env.WATCH_FOLDER || path.join(repoRoot, 'watch'),
|
|
21
21
|
REPO_ROOT: repoRoot,
|
|
22
|
-
FFMPEG_PATH: process.env.FFMPEG_PATH || 'ffmpeg',
|
|
23
|
-
FFPROBE_PATH: process.env.FFPROBE_PATH || 'ffprobe',
|
|
22
|
+
FFMPEG_PATH: process.env.FFMPEG_PATH || 'ffmpeg', // legacy; prefer ffmpegResolver
|
|
23
|
+
FFPROBE_PATH: process.env.FFPROBE_PATH || 'ffprobe', // legacy; prefer ffmpegResolver
|
|
24
24
|
EXA_API_KEY: cli.exaKey || process.env.EXA_API_KEY || '',
|
|
25
|
+
LLM_PROVIDER: process.env.LLM_PROVIDER || 'copilot',
|
|
26
|
+
LLM_MODEL: process.env.LLM_MODEL || '',
|
|
27
|
+
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY || '',
|
|
25
28
|
OUTPUT_DIR: cli.outputDir || process.env.OUTPUT_DIR || path.join(repoRoot, 'recordings'),
|
|
26
29
|
BRAND_PATH: cli.brand || process.env.BRAND_PATH || path.join(repoRoot, 'brand.json'),
|
|
27
30
|
VERBOSE: cli.verbose ?? false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,gCAAgC;AAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;AAChD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAClC,CAAC;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B,gCAAgC;AAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;AAChD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAClC,CAAC;AAsCD,IAAI,MAAM,GAA0B,IAAI,CAAA;AAExC,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,MAAM,EAAE,cAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAA;IACvF,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,MAAkB,EAAE;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IAEvD,MAAM,GAAG;QACP,cAAc,EAAE,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;QACjE,YAAY,EAAE,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;QACtF,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,QAAQ,EAAI,gCAAgC;QACpF,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS,EAAE,gCAAgC;QACrF,WAAW,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QACxD,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS;QACnD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;QACtC,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;QACtD,UAAU,EAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;QACvF,UAAU,EAAE,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;QACpF,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,KAAK;QAC7B,QAAQ,EAAE,GAAG,CAAC,GAAG,KAAK,KAAK;QAC3B,oBAAoB,EAAE,GAAG,CAAC,cAAc,KAAK,KAAK;QAClD,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK;QACjC,iBAAiB,EAAE,GAAG,CAAC,WAAW,KAAK,KAAK;QAC5C,WAAW,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK;QACjC,aAAa,EAAE,GAAG,CAAC,QAAQ,KAAK,KAAK;KACtC,CAAA;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAA;IACf,CAAC;IAED,yDAAyD;IACzD,OAAO,UAAU,EAAE,CAAA;AACrB,CAAC"}
|