vidpipe 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +16 -0
  2. package/dist/agents/BaseAgent.d.ts +17 -17
  3. package/dist/agents/BaseAgent.d.ts.map +1 -1
  4. package/dist/agents/BaseAgent.js +41 -47
  5. package/dist/agents/BaseAgent.js.map +1 -1
  6. package/dist/commands/doctor.d.ts +2 -0
  7. package/dist/commands/doctor.d.ts.map +1 -1
  8. package/dist/commands/doctor.js +53 -0
  9. package/dist/commands/doctor.js.map +1 -1
  10. package/dist/config/environment.d.ts +3 -0
  11. package/dist/config/environment.d.ts.map +1 -1
  12. package/dist/config/environment.js +3 -0
  13. package/dist/config/environment.js.map +1 -1
  14. package/dist/config/pricing.d.ts +34 -0
  15. package/dist/config/pricing.d.ts.map +1 -0
  16. package/dist/config/pricing.js +71 -0
  17. package/dist/config/pricing.js.map +1 -0
  18. package/dist/pipeline.d.ts.map +1 -1
  19. package/dist/pipeline.js +37 -0
  20. package/dist/pipeline.js.map +1 -1
  21. package/dist/providers/ClaudeProvider.d.ts +14 -0
  22. package/dist/providers/ClaudeProvider.d.ts.map +1 -0
  23. package/dist/providers/ClaudeProvider.js +182 -0
  24. package/dist/providers/ClaudeProvider.js.map +1 -0
  25. package/dist/providers/CopilotProvider.d.ts +17 -0
  26. package/dist/providers/CopilotProvider.d.ts.map +1 -0
  27. package/dist/providers/CopilotProvider.js +149 -0
  28. package/dist/providers/CopilotProvider.js.map +1 -0
  29. package/dist/providers/OpenAIProvider.d.ts +14 -0
  30. package/dist/providers/OpenAIProvider.d.ts.map +1 -0
  31. package/dist/providers/OpenAIProvider.js +175 -0
  32. package/dist/providers/OpenAIProvider.js.map +1 -0
  33. package/dist/providers/index.d.ts +18 -0
  34. package/dist/providers/index.d.ts.map +1 -0
  35. package/dist/providers/index.js +61 -0
  36. package/dist/providers/index.js.map +1 -0
  37. package/dist/providers/types.d.ts +112 -0
  38. package/dist/providers/types.d.ts.map +1 -0
  39. package/dist/providers/types.js +8 -0
  40. package/dist/providers/types.js.map +1 -0
  41. package/dist/services/costTracker.d.ts +63 -0
  42. package/dist/services/costTracker.d.ts.map +1 -0
  43. package/dist/services/costTracker.js +137 -0
  44. package/dist/services/costTracker.js.map +1 -0
  45. package/dist/tools/ffmpeg/clipExtraction.d.ts.map +1 -1
  46. package/dist/tools/ffmpeg/clipExtraction.js +24 -2
  47. package/dist/tools/ffmpeg/clipExtraction.js.map +1 -1
  48. package/package.json +67 -66
package/README.md CHANGED
@@ -181,6 +181,22 @@ Each stage can be independently skipped with `--no-*` flags. A stage failure doe
181
181
 
182
182
  ---
183
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
+
184
200
  ## ⚙️ Configuration
185
201
 
186
202
  Configuration is loaded from CLI flags → environment variables → `.env` file → defaults.
@@ -1,6 +1,6 @@
1
- import { CopilotClient, CopilotSession, Tool } from '@github/copilot-sdk';
1
+ import type { LLMProvider, LLMSession, ToolWithHandler } from '../providers/types.js';
2
2
  /**
3
- * BaseAgent — abstract foundation for all Copilot SDK agents.
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 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).
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 a CopilotClient (starts the Copilot
19
- * backend process) and a CopilotSession (with system prompt + tools).
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 client: CopilotClient | null;
33
- protected session: CopilotSession | null;
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(): Tool<unknown>[];
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 a CopilotClient + CopilotSession
43
- * 2. Registers an event listener to accumulate the response
44
- * 3. Calls sendAndWait and returns the completed message
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 / streaming. */
47
+ /** Wire up session event listeners for logging. */
48
48
  private setupEventHandlers;
49
- /** Tear down the client + session. */
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,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"}
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"}
@@ -1,7 +1,8 @@
1
- import { CopilotClient } from '@github/copilot-sdk';
2
- import logger from '../config/logger';
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 Copilot SDK agents.
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 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).
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 a CopilotClient (starts the Copilot
20
- * backend process) and a CopilotSession (with system prompt + tools).
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
- client = null;
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 a CopilotClient + CopilotSession
47
- * 2. Registers an event listener to accumulate the response
48
- * 3. Calls sendAndWait and returns the completed message
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.client.createSession({
56
- systemMessage: { mode: 'replace', content: this.systemPrompt },
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
- const response = await this.session.sendAndWait({ prompt: userMessage }, 300_000);
64
- const content = response?.data?.content ?? '';
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 / streaming. */
74
+ /** Wire up session event listeners for logging. */
69
75
  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
- }
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 client + session. */
89
+ /** Tear down the session. */
92
90
  async destroy() {
93
91
  try {
94
92
  if (this.session) {
95
- await this.session.destroy();
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":"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"}
1
+ {"version":3,"file":"BaseAgent.js","sourceRoot":"","sources":["../../src/agents/BaseAgent.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
+ /** Normalize LLM_PROVIDER the same way the provider factory does. */
2
+ export declare function normalizeProviderName(raw: string | undefined): string;
1
3
  export declare function runDoctor(): void;
2
4
  //# sourceMappingURL=doctor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAkJA,wBAAgB,SAAS,IAAI,IAAI,CA4BhC"}
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"}
@@ -3,6 +3,10 @@ import { existsSync } from 'fs';
3
3
  import { createRequire } from 'module';
4
4
  import path from 'path';
5
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
+ }
6
10
  function resolveFFmpegPath() {
7
11
  if (process.env.FFMPEG_PATH) {
8
12
  return { path: process.env.FFMPEG_PATH, source: 'FFMPEG_PATH env' };
@@ -145,6 +149,55 @@ export function runDoctor() {
145
149
  const icon = r.ok ? '✅' : r.required ? '❌' : '⬚';
146
150
  console.log(` ${icon} ${r.message}`);
147
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
+ }
148
201
  const failedRequired = results.filter(r => r.required && !r.ok);
149
202
  console.log();
150
203
  if (failedRequired.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,9 @@ export interface AppEnvironment {
5
5
  FFMPEG_PATH: string;
6
6
  FFPROBE_PATH: string;
7
7
  EXA_API_KEY: string;
8
+ LLM_PROVIDER: string;
9
+ LLM_MODEL: string;
10
+ ANTHROPIC_API_KEY: string;
8
11
  OUTPUT_DIR: string;
9
12
  BRAND_PATH: string;
10
13
  VERBOSE: boolean;
@@ -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,CAsB/D;AAED,wBAAgB,SAAS,IAAI,cAAc,CAO1C"}
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"}
@@ -22,6 +22,9 @@ export function initConfig(cli = {}) {
22
22
  FFMPEG_PATH: process.env.FFMPEG_PATH || 'ffmpeg', // legacy; prefer ffmpegResolver
23
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;AAmCD,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,UAAU,EAAE,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;QACxF,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"}
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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * LLM Model Pricing Configuration
3
+ *
4
+ * Per-model pricing for cost calculation. Updated Feb 2026.
5
+ * Copilot uses Premium Request Units (PRUs), others use per-token pricing.
6
+ */
7
+ export interface ModelPricing {
8
+ /** Price per 1M input tokens (USD) — for OpenAI/Claude */
9
+ inputPer1M?: number;
10
+ /** Price per 1M output tokens (USD) — for OpenAI/Claude */
11
+ outputPer1M?: number;
12
+ /** Premium request multiplier — for Copilot */
13
+ pruMultiplier?: number;
14
+ /** Whether this model is included free on paid Copilot plans */
15
+ copilotIncluded?: boolean;
16
+ }
17
+ /** Overage rate for Copilot premium requests: $0.04 per PRU */
18
+ export declare const COPILOT_PRU_OVERAGE_RATE = 0.04;
19
+ export declare const MODEL_PRICING: Record<string, ModelPricing>;
20
+ /**
21
+ * Calculate cost for a single LLM call using per-token pricing.
22
+ * Returns USD amount.
23
+ */
24
+ export declare function calculateTokenCost(model: string, inputTokens: number, outputTokens: number): number;
25
+ /**
26
+ * Calculate PRU cost for a Copilot premium request.
27
+ * Returns PRU count consumed (multiply by $0.04 for overage cost).
28
+ */
29
+ export declare function calculatePRUCost(model: string): number;
30
+ /**
31
+ * Look up model pricing. Returns undefined if model is unknown.
32
+ */
33
+ export declare function getModelPricing(model: string): ModelPricing | undefined;
34
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/config/pricing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA8BtD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,CAOR;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAOvE"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * LLM Model Pricing Configuration
3
+ *
4
+ * Per-model pricing for cost calculation. Updated Feb 2026.
5
+ * Copilot uses Premium Request Units (PRUs), others use per-token pricing.
6
+ */
7
+ /** Overage rate for Copilot premium requests: $0.04 per PRU */
8
+ export const COPILOT_PRU_OVERAGE_RATE = 0.04;
9
+ export const MODEL_PRICING = {
10
+ // === OpenAI Models (from Copilot model picker) ===
11
+ 'gpt-4o': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 0, copilotIncluded: true },
12
+ 'gpt-4o-mini': { inputPer1M: 0.15, outputPer1M: 0.60, pruMultiplier: 0, copilotIncluded: true },
13
+ 'gpt-4.1': { inputPer1M: 2.00, outputPer1M: 8.00, pruMultiplier: 0, copilotIncluded: true },
14
+ 'gpt-4.1-mini': { inputPer1M: 0.40, outputPer1M: 1.60 },
15
+ 'gpt-5-mini': { inputPer1M: 0.15, outputPer1M: 0.60, pruMultiplier: 0, copilotIncluded: true },
16
+ 'gpt-5': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
17
+ 'gpt-5-codex': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
18
+ 'gpt-5.1': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
19
+ 'gpt-5.1-codex': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
20
+ 'gpt-5.1-codex-max': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
21
+ 'gpt-5.1-codex-mini': { inputPer1M: 0.15, outputPer1M: 0.60, pruMultiplier: 0.33 },
22
+ 'gpt-5.2': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
23
+ 'gpt-5.2-codex': { inputPer1M: 2.50, outputPer1M: 10.00, pruMultiplier: 1 },
24
+ 'o3': { inputPer1M: 10.00, outputPer1M: 40.00, pruMultiplier: 5 },
25
+ 'o4-mini-high': { inputPer1M: 1.10, outputPer1M: 4.40, pruMultiplier: 20 },
26
+ // === Anthropic Models (from Copilot model picker) ===
27
+ 'claude-haiku-4.5': { inputPer1M: 0.80, outputPer1M: 4.00, pruMultiplier: 0.33 },
28
+ 'claude-sonnet-4': { inputPer1M: 3.00, outputPer1M: 15.00, pruMultiplier: 1 },
29
+ 'claude-sonnet-4.5': { inputPer1M: 3.00, outputPer1M: 15.00, pruMultiplier: 1 },
30
+ 'claude-opus-4.5': { inputPer1M: 15.00, outputPer1M: 75.00, pruMultiplier: 3 },
31
+ 'claude-opus-4.6': { inputPer1M: 5.00, outputPer1M: 25.00, pruMultiplier: 3 },
32
+ 'claude-opus-4.6-fast': { inputPer1M: 5.00, outputPer1M: 25.00, pruMultiplier: 9 },
33
+ // === Google Models (from Copilot model picker) ===
34
+ 'gemini-2.5-pro': { inputPer1M: 1.25, outputPer1M: 5.00, pruMultiplier: 1 },
35
+ 'gemini-3-flash': { inputPer1M: 0.10, outputPer1M: 0.40, pruMultiplier: 0.33 },
36
+ 'gemini-3-pro': { inputPer1M: 1.25, outputPer1M: 5.00, pruMultiplier: 1 },
37
+ };
38
+ /**
39
+ * Calculate cost for a single LLM call using per-token pricing.
40
+ * Returns USD amount.
41
+ */
42
+ export function calculateTokenCost(model, inputTokens, outputTokens) {
43
+ const pricing = getModelPricing(model);
44
+ if (!pricing || (!pricing.inputPer1M && !pricing.outputPer1M))
45
+ return 0;
46
+ const inputCost = ((pricing.inputPer1M ?? 0) / 1_000_000) * inputTokens;
47
+ const outputCost = ((pricing.outputPer1M ?? 0) / 1_000_000) * outputTokens;
48
+ return inputCost + outputCost;
49
+ }
50
+ /**
51
+ * Calculate PRU cost for a Copilot premium request.
52
+ * Returns PRU count consumed (multiply by $0.04 for overage cost).
53
+ */
54
+ export function calculatePRUCost(model) {
55
+ const pricing = getModelPricing(model);
56
+ if (!pricing)
57
+ return 1; // Default 1 PRU for unknown models
58
+ if (pricing.copilotIncluded)
59
+ return 0; // Free on paid plans
60
+ return pricing.pruMultiplier ?? 1;
61
+ }
62
+ /**
63
+ * Look up model pricing. Returns undefined if model is unknown.
64
+ */
65
+ export function getModelPricing(model) {
66
+ // Try exact match first, then case-insensitive
67
+ return MODEL_PRICING[model] ??
68
+ MODEL_PRICING[model.toLowerCase()] ??
69
+ Object.entries(MODEL_PRICING).find(([key]) => model.toLowerCase().includes(key.toLowerCase()))?.[1];
70
+ }
71
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/config/pricing.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAEV,UAAU,EAKV,WAAW,EACX,cAAc,EACd,aAAa,EAGd,MAAM,SAAS,CAAA;AAGhB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,SAAS,EAAE,aAAa,EACxB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,YAAY,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAexB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,GACzC,UAAU,CAmCZ;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwM7E;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQxF"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAEV,UAAU,EAKV,WAAW,EACX,cAAc,EACd,aAAa,EAGd,MAAM,SAAS,CAAA;AAGhB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,SAAS,EAAE,aAAa,EACxB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,YAAY,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAgBxB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,GACzC,UAAU,CAmCZ;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAoN7E;AA8BD,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQxF"}
package/dist/pipeline.js CHANGED
@@ -15,6 +15,7 @@ import { commitAndPush } from './services/gitOperations';
15
15
  import { removeDeadSilence } from './agents/SilenceRemovalAgent';
16
16
  import { burnCaptions } from './tools/ffmpeg/captionBurning';
17
17
  import { singlePassEditAndCaption } from './tools/ffmpeg/singlePassEdit';
18
+ import { costTracker } from './services/costTracker.js';
18
19
  import { PipelineStage as Stage } from './types';
19
20
  /**
20
21
  * Execute a single pipeline stage with error isolation and timing.
@@ -36,6 +37,7 @@ import { PipelineStage as Stage } from './types';
36
37
  * @returns The stage result on success, or `undefined` on failure
37
38
  */
38
39
  export async function runStage(stageName, fn, stageResults) {
40
+ costTracker.setStage(stageName);
39
41
  const start = Date.now();
40
42
  try {
41
43
  const result = await fn();
@@ -121,6 +123,7 @@ export async function processVideo(videoPath) {
121
123
  const pipelineStart = Date.now();
122
124
  const stageResults = [];
123
125
  const cfg = getConfig();
126
+ costTracker.reset();
124
127
  logger.info(`Pipeline starting for: ${videoPath}`);
125
128
  // 1. Ingestion — required for all subsequent stages
126
129
  const video = await runStage(Stage.Ingestion, () => ingestVideo(videoPath), stageResults);
@@ -257,6 +260,15 @@ export async function processVideo(videoPath) {
257
260
  await runStage(Stage.GitPush, () => commitAndPush(video.slug), stageResults);
258
261
  }
259
262
  const totalDuration = Date.now() - pipelineStart;
263
+ // Cost tracking report
264
+ const report = costTracker.getReport();
265
+ if (report.records.length > 0) {
266
+ logger.info(costTracker.formatReport());
267
+ const costMd = generateCostMarkdown(report);
268
+ const costPath = path.join(video.videoDir, 'cost-report.md');
269
+ await fs.writeFile(costPath, costMd, 'utf-8');
270
+ logger.info(`Cost report saved: ${costPath}`);
271
+ }
260
272
  logger.info(`Pipeline completed in ${totalDuration}ms`);
261
273
  return {
262
274
  video,
@@ -274,6 +286,31 @@ export async function processVideo(videoPath) {
274
286
  totalDuration,
275
287
  };
276
288
  }
289
+ function generateCostMarkdown(report) {
290
+ let md = '# Pipeline Cost Report\n\n';
291
+ md += `| Metric | Value |\n|--------|-------|\n`;
292
+ md += `| Total Cost | $${report.totalCostUSD.toFixed(4)} USD |\n`;
293
+ if (report.totalPRUs > 0)
294
+ md += `| Total PRUs | ${report.totalPRUs} |\n`;
295
+ md += `| Input Tokens | ${report.totalTokens.input.toLocaleString()} |\n`;
296
+ md += `| Output Tokens | ${report.totalTokens.output.toLocaleString()} |\n`;
297
+ md += `| LLM Calls | ${report.records.length} |\n\n`;
298
+ if (Object.keys(report.byAgent).length > 0) {
299
+ md += '## By Agent\n\n| Agent | Cost | PRUs | Calls |\n|-------|------|------|-------|\n';
300
+ for (const [agent, data] of Object.entries(report.byAgent)) {
301
+ md += `| ${agent} | $${data.costUSD.toFixed(4)} | ${data.prus} | ${data.calls} |\n`;
302
+ }
303
+ md += '\n';
304
+ }
305
+ if (Object.keys(report.byModel).length > 1) {
306
+ md += '## By Model\n\n| Model | Cost | PRUs | Calls |\n|-------|------|------|-------|\n';
307
+ for (const [model, data] of Object.entries(report.byModel)) {
308
+ md += `| ${model} | $${data.costUSD.toFixed(4)} | ${data.prus} | ${data.calls} |\n`;
309
+ }
310
+ md += '\n';
311
+ }
312
+ return md;
313
+ }
277
314
  export async function processVideoSafe(videoPath) {
278
315
  try {
279
316
  return await processVideo(videoPath);