vidpipe 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.js +4766 -123
  3. package/dist/index.js.map +1 -1
  4. package/package.json +4 -2
  5. package/dist/agents/BaseAgent.d.ts +0 -52
  6. package/dist/agents/BaseAgent.d.ts.map +0 -1
  7. package/dist/agents/BaseAgent.js +0 -102
  8. package/dist/agents/BaseAgent.js.map +0 -1
  9. package/dist/agents/BlogAgent.d.ts +0 -3
  10. package/dist/agents/BlogAgent.d.ts.map +0 -1
  11. package/dist/agents/BlogAgent.js +0 -163
  12. package/dist/agents/BlogAgent.js.map +0 -1
  13. package/dist/agents/ChapterAgent.d.ts +0 -11
  14. package/dist/agents/ChapterAgent.d.ts.map +0 -1
  15. package/dist/agents/ChapterAgent.js +0 -191
  16. package/dist/agents/ChapterAgent.js.map +0 -1
  17. package/dist/agents/MediumVideoAgent.d.ts +0 -3
  18. package/dist/agents/MediumVideoAgent.d.ts.map +0 -1
  19. package/dist/agents/MediumVideoAgent.js +0 -219
  20. package/dist/agents/MediumVideoAgent.js.map +0 -1
  21. package/dist/agents/ShortsAgent.d.ts +0 -3
  22. package/dist/agents/ShortsAgent.d.ts.map +0 -1
  23. package/dist/agents/ShortsAgent.js +0 -243
  24. package/dist/agents/ShortsAgent.js.map +0 -1
  25. package/dist/agents/SilenceRemovalAgent.d.ts +0 -9
  26. package/dist/agents/SilenceRemovalAgent.d.ts.map +0 -1
  27. package/dist/agents/SilenceRemovalAgent.js +0 -209
  28. package/dist/agents/SilenceRemovalAgent.js.map +0 -1
  29. package/dist/agents/SocialMediaAgent.d.ts +0 -4
  30. package/dist/agents/SocialMediaAgent.d.ts.map +0 -1
  31. package/dist/agents/SocialMediaAgent.js +0 -248
  32. package/dist/agents/SocialMediaAgent.js.map +0 -1
  33. package/dist/agents/SummaryAgent.d.ts +0 -11
  34. package/dist/agents/SummaryAgent.d.ts.map +0 -1
  35. package/dist/agents/SummaryAgent.js +0 -333
  36. package/dist/agents/SummaryAgent.js.map +0 -1
  37. package/dist/commands/doctor.d.ts +0 -4
  38. package/dist/commands/doctor.d.ts.map +0 -1
  39. package/dist/commands/doctor.js +0 -230
  40. package/dist/commands/doctor.js.map +0 -1
  41. package/dist/config/brand.d.ts +0 -29
  42. package/dist/config/brand.d.ts.map +0 -1
  43. package/dist/config/brand.js +0 -83
  44. package/dist/config/brand.js.map +0 -1
  45. package/dist/config/environment.d.ts +0 -39
  46. package/dist/config/environment.d.ts.map +0 -1
  47. package/dist/config/environment.js +0 -47
  48. package/dist/config/environment.js.map +0 -1
  49. package/dist/config/ffmpegResolver.d.ts +0 -3
  50. package/dist/config/ffmpegResolver.d.ts.map +0 -1
  51. package/dist/config/ffmpegResolver.js +0 -37
  52. package/dist/config/ffmpegResolver.js.map +0 -1
  53. package/dist/config/logger.d.ts +0 -5
  54. package/dist/config/logger.d.ts.map +0 -1
  55. package/dist/config/logger.js +0 -13
  56. package/dist/config/logger.js.map +0 -1
  57. package/dist/config/pricing.d.ts +0 -34
  58. package/dist/config/pricing.d.ts.map +0 -1
  59. package/dist/config/pricing.js +0 -71
  60. package/dist/config/pricing.js.map +0 -1
  61. package/dist/index.d.ts.map +0 -1
  62. package/dist/pipeline.d.ts +0 -57
  63. package/dist/pipeline.d.ts.map +0 -1
  64. package/dist/pipeline.js +0 -324
  65. package/dist/pipeline.js.map +0 -1
  66. package/dist/providers/ClaudeProvider.d.ts +0 -14
  67. package/dist/providers/ClaudeProvider.d.ts.map +0 -1
  68. package/dist/providers/ClaudeProvider.js +0 -182
  69. package/dist/providers/ClaudeProvider.js.map +0 -1
  70. package/dist/providers/CopilotProvider.d.ts +0 -17
  71. package/dist/providers/CopilotProvider.d.ts.map +0 -1
  72. package/dist/providers/CopilotProvider.js +0 -149
  73. package/dist/providers/CopilotProvider.js.map +0 -1
  74. package/dist/providers/OpenAIProvider.d.ts +0 -14
  75. package/dist/providers/OpenAIProvider.d.ts.map +0 -1
  76. package/dist/providers/OpenAIProvider.js +0 -175
  77. package/dist/providers/OpenAIProvider.js.map +0 -1
  78. package/dist/providers/index.d.ts +0 -18
  79. package/dist/providers/index.d.ts.map +0 -1
  80. package/dist/providers/index.js +0 -61
  81. package/dist/providers/index.js.map +0 -1
  82. package/dist/providers/types.d.ts +0 -112
  83. package/dist/providers/types.d.ts.map +0 -1
  84. package/dist/providers/types.js +0 -8
  85. package/dist/providers/types.js.map +0 -1
  86. package/dist/services/captionGeneration.d.ts +0 -7
  87. package/dist/services/captionGeneration.d.ts.map +0 -1
  88. package/dist/services/captionGeneration.js +0 -29
  89. package/dist/services/captionGeneration.js.map +0 -1
  90. package/dist/services/costTracker.d.ts +0 -63
  91. package/dist/services/costTracker.d.ts.map +0 -1
  92. package/dist/services/costTracker.js +0 -137
  93. package/dist/services/costTracker.js.map +0 -1
  94. package/dist/services/fileWatcher.d.ts +0 -19
  95. package/dist/services/fileWatcher.d.ts.map +0 -1
  96. package/dist/services/fileWatcher.js +0 -120
  97. package/dist/services/fileWatcher.js.map +0 -1
  98. package/dist/services/gitOperations.d.ts +0 -3
  99. package/dist/services/gitOperations.d.ts.map +0 -1
  100. package/dist/services/gitOperations.js +0 -43
  101. package/dist/services/gitOperations.js.map +0 -1
  102. package/dist/services/socialPosting.d.ts +0 -38
  103. package/dist/services/socialPosting.d.ts.map +0 -1
  104. package/dist/services/socialPosting.js +0 -102
  105. package/dist/services/socialPosting.js.map +0 -1
  106. package/dist/services/transcription.d.ts +0 -3
  107. package/dist/services/transcription.d.ts.map +0 -1
  108. package/dist/services/transcription.js +0 -100
  109. package/dist/services/transcription.js.map +0 -1
  110. package/dist/services/videoIngestion.d.ts +0 -3
  111. package/dist/services/videoIngestion.d.ts.map +0 -1
  112. package/dist/services/videoIngestion.js +0 -104
  113. package/dist/services/videoIngestion.js.map +0 -1
  114. package/dist/tools/captions/captionGenerator.d.ts +0 -84
  115. package/dist/tools/captions/captionGenerator.d.ts.map +0 -1
  116. package/dist/tools/captions/captionGenerator.js +0 -390
  117. package/dist/tools/captions/captionGenerator.js.map +0 -1
  118. package/dist/tools/ffmpeg/aspectRatio.d.ts +0 -101
  119. package/dist/tools/ffmpeg/aspectRatio.d.ts.map +0 -1
  120. package/dist/tools/ffmpeg/aspectRatio.js +0 -339
  121. package/dist/tools/ffmpeg/aspectRatio.js.map +0 -1
  122. package/dist/tools/ffmpeg/audioExtraction.d.ts +0 -16
  123. package/dist/tools/ffmpeg/audioExtraction.d.ts.map +0 -1
  124. package/dist/tools/ffmpeg/audioExtraction.js +0 -87
  125. package/dist/tools/ffmpeg/audioExtraction.js.map +0 -1
  126. package/dist/tools/ffmpeg/captionBurning.d.ts +0 -8
  127. package/dist/tools/ffmpeg/captionBurning.d.ts.map +0 -1
  128. package/dist/tools/ffmpeg/captionBurning.js +0 -72
  129. package/dist/tools/ffmpeg/captionBurning.js.map +0 -1
  130. package/dist/tools/ffmpeg/clipExtraction.d.ts +0 -38
  131. package/dist/tools/ffmpeg/clipExtraction.d.ts.map +0 -1
  132. package/dist/tools/ffmpeg/clipExtraction.js +0 -215
  133. package/dist/tools/ffmpeg/clipExtraction.js.map +0 -1
  134. package/dist/tools/ffmpeg/faceDetection.d.ts +0 -127
  135. package/dist/tools/ffmpeg/faceDetection.d.ts.map +0 -1
  136. package/dist/tools/ffmpeg/faceDetection.js +0 -501
  137. package/dist/tools/ffmpeg/faceDetection.js.map +0 -1
  138. package/dist/tools/ffmpeg/frameCapture.d.ts +0 -10
  139. package/dist/tools/ffmpeg/frameCapture.d.ts.map +0 -1
  140. package/dist/tools/ffmpeg/frameCapture.js +0 -49
  141. package/dist/tools/ffmpeg/frameCapture.js.map +0 -1
  142. package/dist/tools/ffmpeg/silenceDetection.d.ts +0 -10
  143. package/dist/tools/ffmpeg/silenceDetection.d.ts.map +0 -1
  144. package/dist/tools/ffmpeg/silenceDetection.js +0 -56
  145. package/dist/tools/ffmpeg/silenceDetection.js.map +0 -1
  146. package/dist/tools/ffmpeg/singlePassEdit.d.ts +0 -25
  147. package/dist/tools/ffmpeg/singlePassEdit.d.ts.map +0 -1
  148. package/dist/tools/ffmpeg/singlePassEdit.js +0 -124
  149. package/dist/tools/ffmpeg/singlePassEdit.js.map +0 -1
  150. package/dist/tools/search/exaClient.d.ts +0 -8
  151. package/dist/tools/search/exaClient.d.ts.map +0 -1
  152. package/dist/tools/search/exaClient.js +0 -38
  153. package/dist/tools/search/exaClient.js.map +0 -1
  154. package/dist/tools/whisper/whisperClient.d.ts +0 -3
  155. package/dist/tools/whisper/whisperClient.d.ts.map +0 -1
  156. package/dist/tools/whisper/whisperClient.js +0 -77
  157. package/dist/tools/whisper/whisperClient.js.map +0 -1
  158. package/dist/types/index.d.ts +0 -305
  159. package/dist/types/index.d.ts.map +0 -1
  160. package/dist/types/index.js +0 -44
  161. package/dist/types/index.js.map +0 -1
@@ -1,63 +0,0 @@
1
- import type { TokenUsage, CostInfo, QuotaSnapshot } from '../providers/types.js';
2
- /** Record of a single LLM usage event */
3
- export interface UsageRecord {
4
- timestamp: Date;
5
- provider: string;
6
- model: string;
7
- agent: string;
8
- stage: string;
9
- usage: TokenUsage;
10
- cost: CostInfo;
11
- durationMs?: number;
12
- }
13
- /** Aggregated cost report */
14
- export interface CostReport {
15
- totalCostUSD: number;
16
- totalPRUs: number;
17
- totalTokens: {
18
- input: number;
19
- output: number;
20
- total: number;
21
- };
22
- byProvider: Record<string, {
23
- costUSD: number;
24
- prus: number;
25
- calls: number;
26
- }>;
27
- byAgent: Record<string, {
28
- costUSD: number;
29
- prus: number;
30
- calls: number;
31
- }>;
32
- byModel: Record<string, {
33
- costUSD: number;
34
- prus: number;
35
- calls: number;
36
- }>;
37
- records: UsageRecord[];
38
- /** Copilot quota info (if available) */
39
- copilotQuota?: QuotaSnapshot;
40
- }
41
- /** Singleton cost tracker for a pipeline run */
42
- declare class CostTracker {
43
- private records;
44
- private latestQuota?;
45
- private currentAgent;
46
- private currentStage;
47
- /** Set the current agent name (called by BaseAgent before LLM calls) */
48
- setAgent(agent: string): void;
49
- /** Set the current pipeline stage */
50
- setStage(stage: string): void;
51
- /** Record a usage event from any provider */
52
- recordUsage(provider: string, model: string, usage: TokenUsage, cost?: CostInfo, durationMs?: number, quotaSnapshot?: QuotaSnapshot): void;
53
- /** Get the full cost report */
54
- getReport(): CostReport;
55
- /** Format report as human-readable string for console output */
56
- formatReport(): string;
57
- /** Reset all tracking (for new pipeline run) */
58
- reset(): void;
59
- }
60
- /** Global singleton instance */
61
- export declare const costTracker: CostTracker;
62
- export {};
63
- //# sourceMappingURL=costTracker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"costTracker.d.ts","sourceRoot":"","sources":["../../src/services/costTracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAIjF,yCAAyC;AACzC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,6BAA6B;AAC7B,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1E,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,wCAAwC;IACxC,YAAY,CAAC,EAAE,aAAa,CAAC;CAC9B;AAED,gDAAgD;AAChD,cAAM,WAAW;IACf,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,YAAY,CAAa;IAEjC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,qCAAqC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7B,6CAA6C;IAC7C,WAAW,CACT,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,IAAI,CAAC,EAAE,QAAQ,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,IAAI;IAkCP,+BAA+B;IAC/B,SAAS,IAAI,UAAU;IAgDvB,gEAAgE;IAChE,YAAY,IAAI,MAAM;IAmDtB,gDAAgD;IAChD,KAAK,IAAI,IAAI;CAMd;AAED,gCAAgC;AAChC,eAAO,MAAM,WAAW,aAAoB,CAAC"}
@@ -1,137 +0,0 @@
1
- import { calculateTokenCost, calculatePRUCost, COPILOT_PRU_OVERAGE_RATE } from '../config/pricing.js';
2
- import logger from '../config/logger.js';
3
- /** Singleton cost tracker for a pipeline run */
4
- class CostTracker {
5
- records = [];
6
- latestQuota;
7
- currentAgent = 'unknown';
8
- currentStage = 'unknown';
9
- /** Set the current agent name (called by BaseAgent before LLM calls) */
10
- setAgent(agent) {
11
- this.currentAgent = agent;
12
- }
13
- /** Set the current pipeline stage */
14
- setStage(stage) {
15
- this.currentStage = stage;
16
- }
17
- /** Record a usage event from any provider */
18
- recordUsage(provider, model, usage, cost, durationMs, quotaSnapshot) {
19
- // Calculate cost if not provided
20
- const finalCost = cost ?? {
21
- amount: provider === 'copilot'
22
- ? calculatePRUCost(model)
23
- : calculateTokenCost(model, usage.inputTokens, usage.outputTokens),
24
- unit: provider === 'copilot' ? 'premium_requests' : 'usd',
25
- model,
26
- };
27
- const record = {
28
- timestamp: new Date(),
29
- provider,
30
- model,
31
- agent: this.currentAgent,
32
- stage: this.currentStage,
33
- usage,
34
- cost: finalCost,
35
- durationMs,
36
- };
37
- this.records.push(record);
38
- if (quotaSnapshot) {
39
- this.latestQuota = quotaSnapshot;
40
- }
41
- logger.debug(`[CostTracker] ${provider}/${model} | ${this.currentAgent} | ` +
42
- `in=${usage.inputTokens} out=${usage.outputTokens} | ` +
43
- `cost=${finalCost.amount.toFixed(4)} ${finalCost.unit}`);
44
- }
45
- /** Get the full cost report */
46
- getReport() {
47
- const report = {
48
- totalCostUSD: 0,
49
- totalPRUs: 0,
50
- totalTokens: { input: 0, output: 0, total: 0 },
51
- byProvider: {},
52
- byAgent: {},
53
- byModel: {},
54
- records: [...this.records],
55
- copilotQuota: this.latestQuota,
56
- };
57
- for (const record of this.records) {
58
- const { provider, model, agent, usage, cost } = record;
59
- // Accumulate tokens
60
- report.totalTokens.input += usage.inputTokens;
61
- report.totalTokens.output += usage.outputTokens;
62
- report.totalTokens.total += usage.totalTokens;
63
- // Accumulate costs
64
- const usdCost = cost.unit === 'usd' ? cost.amount : cost.amount * COPILOT_PRU_OVERAGE_RATE;
65
- const prus = cost.unit === 'premium_requests' ? cost.amount : 0;
66
- report.totalCostUSD += usdCost;
67
- report.totalPRUs += prus;
68
- // By provider
69
- if (!report.byProvider[provider])
70
- report.byProvider[provider] = { costUSD: 0, prus: 0, calls: 0 };
71
- report.byProvider[provider].costUSD += usdCost;
72
- report.byProvider[provider].prus += prus;
73
- report.byProvider[provider].calls += 1;
74
- // By agent
75
- if (!report.byAgent[agent])
76
- report.byAgent[agent] = { costUSD: 0, prus: 0, calls: 0 };
77
- report.byAgent[agent].costUSD += usdCost;
78
- report.byAgent[agent].prus += prus;
79
- report.byAgent[agent].calls += 1;
80
- // By model
81
- if (!report.byModel[model])
82
- report.byModel[model] = { costUSD: 0, prus: 0, calls: 0 };
83
- report.byModel[model].costUSD += usdCost;
84
- report.byModel[model].prus += prus;
85
- report.byModel[model].calls += 1;
86
- }
87
- return report;
88
- }
89
- /** Format report as human-readable string for console output */
90
- formatReport() {
91
- const report = this.getReport();
92
- const lines = [
93
- '',
94
- '═══════════════════════════════════════════',
95
- ' 💰 Pipeline Cost Report',
96
- '═══════════════════════════════════════════',
97
- '',
98
- ` Total Cost: $${report.totalCostUSD.toFixed(4)} USD`,
99
- ];
100
- if (report.totalPRUs > 0) {
101
- lines.push(` Total PRUs: ${report.totalPRUs} premium requests`);
102
- }
103
- lines.push(` Total Tokens: ${report.totalTokens.total.toLocaleString()} (${report.totalTokens.input.toLocaleString()} in / ${report.totalTokens.output.toLocaleString()} out)`, ` LLM Calls: ${this.records.length}`);
104
- if (report.copilotQuota) {
105
- lines.push('', ` Copilot Quota: ${report.copilotQuota.remainingPercentage.toFixed(1)}% remaining`, ` Used/Total: ${report.copilotQuota.usedRequests}/${report.copilotQuota.entitlementRequests} PRUs`);
106
- if (report.copilotQuota.resetDate) {
107
- lines.push(` Resets: ${report.copilotQuota.resetDate}`);
108
- }
109
- }
110
- // By agent breakdown
111
- if (Object.keys(report.byAgent).length > 1) {
112
- lines.push('', ' By Agent:');
113
- for (const [agent, data] of Object.entries(report.byAgent)) {
114
- lines.push(` ${agent}: $${data.costUSD.toFixed(4)} (${data.calls} calls)`);
115
- }
116
- }
117
- // By model breakdown
118
- if (Object.keys(report.byModel).length > 1) {
119
- lines.push('', ' By Model:');
120
- for (const [model, data] of Object.entries(report.byModel)) {
121
- lines.push(` ${model}: $${data.costUSD.toFixed(4)} (${data.calls} calls)`);
122
- }
123
- }
124
- lines.push('', '═══════════════════════════════════════════', '');
125
- return lines.join('\n');
126
- }
127
- /** Reset all tracking (for new pipeline run) */
128
- reset() {
129
- this.records = [];
130
- this.latestQuota = undefined;
131
- this.currentAgent = 'unknown';
132
- this.currentStage = 'unknown';
133
- }
134
- }
135
- /** Global singleton instance */
136
- export const costTracker = new CostTracker();
137
- //# sourceMappingURL=costTracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"costTracker.js","sourceRoot":"","sources":["../../src/services/costTracker.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- import { EventEmitter } from 'events';
2
- export interface FileWatcherOptions {
3
- processExisting?: boolean;
4
- }
5
- export declare class FileWatcher extends EventEmitter {
6
- private watchFolder;
7
- private watcher;
8
- private processExisting;
9
- constructor(options?: FileWatcherOptions);
10
- private static readonly MIN_FILE_SIZE;
11
- private static readonly EXTRA_STABILITY_DELAY;
12
- /** Read file size, wait, read again — if it changed the file is still being written. */
13
- private isFileStable;
14
- private handleDetectedFile;
15
- private scanExistingFiles;
16
- start(): void;
17
- stop(): void;
18
- }
19
- //# sourceMappingURL=fileWatcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fileWatcher.d.ts","sourceRoot":"","sources":["../../src/services/fileWatcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAKrC,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,eAAe,CAAS;gBAEpB,OAAO,GAAE,kBAAuB;IAY5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAc;IACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAO;IAEpD,wFAAwF;YAC1E,YAAY;YAWZ,kBAAkB;IA8BhC,OAAO,CAAC,iBAAiB;IAYzB,KAAK,IAAI,IAAI;IAqDb,IAAI,IAAI,IAAI;CAOb"}
@@ -1,120 +0,0 @@
1
- import { watch } from 'chokidar';
2
- import { getConfig } from '../config/environment';
3
- import { EventEmitter } from 'events';
4
- import path from 'path';
5
- import fs from 'fs';
6
- import logger from '../config/logger';
7
- export class FileWatcher extends EventEmitter {
8
- watchFolder;
9
- watcher = null;
10
- processExisting;
11
- constructor(options = {}) {
12
- super();
13
- const config = getConfig();
14
- this.watchFolder = config.WATCH_FOLDER;
15
- this.processExisting = options.processExisting ?? false;
16
- if (!fs.existsSync(this.watchFolder)) {
17
- fs.mkdirSync(this.watchFolder, { recursive: true });
18
- logger.info(`Created watch folder: ${this.watchFolder}`);
19
- }
20
- }
21
- static MIN_FILE_SIZE = 1024 * 1024; // 1MB
22
- static EXTRA_STABILITY_DELAY = 3000;
23
- /** Read file size, wait, read again — if it changed the file is still being written. */
24
- async isFileStable(filePath) {
25
- try {
26
- const sizeBefore = fs.statSync(filePath).size;
27
- await new Promise((resolve) => setTimeout(resolve, FileWatcher.EXTRA_STABILITY_DELAY));
28
- const sizeAfter = fs.statSync(filePath).size;
29
- return sizeBefore === sizeAfter;
30
- }
31
- catch {
32
- return false;
33
- }
34
- }
35
- async handleDetectedFile(filePath) {
36
- if (path.extname(filePath).toLowerCase() !== '.mp4') {
37
- logger.debug(`[watcher] Ignoring non-mp4 file: ${filePath}`);
38
- return;
39
- }
40
- let fileSize;
41
- try {
42
- fileSize = fs.statSync(filePath).size;
43
- }
44
- catch (err) {
45
- logger.warn(`[watcher] Could not stat file (may have been removed): ${filePath}`);
46
- return;
47
- }
48
- logger.debug(`[watcher] File size: ${(fileSize / 1024 / 1024).toFixed(1)} MB — ${filePath}`);
49
- if (fileSize < FileWatcher.MIN_FILE_SIZE) {
50
- logger.warn(`Skipping small file (${fileSize} bytes), likely a failed recording: ${filePath}`);
51
- return;
52
- }
53
- const stable = await this.isFileStable(filePath);
54
- if (!stable) {
55
- logger.warn(`File is still being written, skipping for now: ${filePath}`);
56
- return;
57
- }
58
- logger.info(`New video detected: ${filePath}`);
59
- this.emit('new-video', filePath);
60
- }
61
- scanExistingFiles() {
62
- const files = fs.readdirSync(this.watchFolder);
63
- for (const file of files) {
64
- if (path.extname(file).toLowerCase() === '.mp4') {
65
- const filePath = path.join(this.watchFolder, file);
66
- this.handleDetectedFile(filePath).catch(err => logger.error(`Error processing ${filePath}: ${err instanceof Error ? err.message : String(err)}`));
67
- }
68
- }
69
- }
70
- start() {
71
- this.watcher = watch(this.watchFolder, {
72
- persistent: true,
73
- ignoreInitial: true,
74
- depth: 0,
75
- atomic: 100,
76
- // Polling is more reliable on Windows for detecting renames (e.g. Bandicam temp→final)
77
- usePolling: true,
78
- interval: 500,
79
- awaitWriteFinish: {
80
- stabilityThreshold: 3000,
81
- pollInterval: 200,
82
- },
83
- });
84
- this.watcher.on('add', (filePath) => {
85
- logger.debug(`[watcher] 'add' event: ${filePath}`);
86
- this.handleDetectedFile(filePath).catch(err => logger.error(`Error processing ${filePath}: ${err instanceof Error ? err.message : String(err)}`));
87
- });
88
- this.watcher.on('change', (filePath) => {
89
- logger.debug(`[watcher] 'change' event: ${filePath}`);
90
- if (path.extname(filePath).toLowerCase() !== '.mp4')
91
- return;
92
- logger.info(`Change detected on video file: ${filePath}`);
93
- this.handleDetectedFile(filePath).catch(err => logger.error(`Error processing ${filePath}: ${err instanceof Error ? err.message : String(err)}`));
94
- });
95
- this.watcher.on('unlink', (filePath) => {
96
- logger.debug(`[watcher] 'unlink' event: ${filePath}`);
97
- });
98
- this.watcher.on('raw', (event, rawPath, details) => {
99
- logger.debug(`[watcher] raw event=${event} path=${rawPath}`);
100
- });
101
- this.watcher.on('error', (error) => {
102
- logger.error(`File watcher error: ${error instanceof Error ? error.message : String(error)}`);
103
- });
104
- this.watcher.on('ready', () => {
105
- logger.info('File watcher is fully initialized and ready');
106
- if (this.processExisting) {
107
- this.scanExistingFiles();
108
- }
109
- });
110
- logger.info(`Watching for new .mp4 files in: ${this.watchFolder}`);
111
- }
112
- stop() {
113
- if (this.watcher) {
114
- this.watcher.close();
115
- this.watcher = null;
116
- logger.info('File watcher stopped');
117
- }
118
- }
119
- }
120
- //# sourceMappingURL=fileWatcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fileWatcher.js","sourceRoot":"","sources":["../../src/services/fileWatcher.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- export declare function commitAndPush(videoSlug: string, message?: string): Promise<void>;
2
- export declare function stageFiles(patterns: string[]): Promise<void>;
3
- //# sourceMappingURL=gitOperations.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gitOperations.d.ts","sourceRoot":"","sources":["../../src/services/gitOperations.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BtF;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAalE"}
@@ -1,43 +0,0 @@
1
- import { execSync } from 'child_process';
2
- import { getConfig } from '../config/environment';
3
- import logger from '../config/logger';
4
- export async function commitAndPush(videoSlug, message) {
5
- const { REPO_ROOT } = getConfig();
6
- const commitMessage = message || `Auto-processed video: ${videoSlug}`;
7
- try {
8
- logger.info(`Staging all changes in ${REPO_ROOT}`);
9
- execSync('git add -A', { cwd: REPO_ROOT, stdio: 'pipe' });
10
- logger.info(`Committing: ${commitMessage}`);
11
- execSync(`git commit -m "${commitMessage}"`, { cwd: REPO_ROOT, stdio: 'pipe' });
12
- const branch = execSync('git rev-parse --abbrev-ref HEAD', { cwd: REPO_ROOT, stdio: 'pipe' })
13
- .toString()
14
- .trim();
15
- logger.info(`Pushing to origin ${branch}`);
16
- execSync(`git push origin ${branch}`, { cwd: REPO_ROOT, stdio: 'pipe' });
17
- logger.info('Git commit and push completed successfully');
18
- }
19
- catch (error) {
20
- const msg = error instanceof Error ? error.message : String(error);
21
- if (msg.includes('nothing to commit')) {
22
- logger.info('Nothing to commit, working tree clean');
23
- return;
24
- }
25
- logger.error(`Git operation failed: ${msg}`);
26
- throw error;
27
- }
28
- }
29
- export async function stageFiles(patterns) {
30
- const { REPO_ROOT } = getConfig();
31
- for (const pattern of patterns) {
32
- try {
33
- logger.info(`Staging files matching: ${pattern}`);
34
- execSync(`git add ${pattern}`, { cwd: REPO_ROOT, stdio: 'pipe' });
35
- }
36
- catch (error) {
37
- const msg = error instanceof Error ? error.message : String(error);
38
- logger.error(`Failed to stage pattern "${pattern}": ${msg}`);
39
- throw error;
40
- }
41
- }
42
- }
43
- //# sourceMappingURL=gitOperations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gitOperations.js","sourceRoot":"","sources":["../../src/services/gitOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,MAAM,MAAM,kBAAkB,CAAA;AAErC,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,OAAgB;IACrE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;IACjC,MAAM,aAAa,GAAG,OAAO,IAAI,yBAAyB,SAAS,EAAE,CAAA;IAErE,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAA;QAClD,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAEzD,MAAM,CAAC,IAAI,CAAC,eAAe,aAAa,EAAE,CAAC,CAAA;QAC3C,QAAQ,CAAC,kBAAkB,aAAa,GAAG,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAE/E,MAAM,MAAM,GAAG,QAAQ,CAAC,iCAAiC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;aAC1F,QAAQ,EAAE;aACV,IAAI,EAAE,CAAA;QACT,MAAM,CAAC,IAAI,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAA;QAC1C,QAAQ,CAAC,mBAAmB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAExE,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IAC3D,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAClE,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;YACpD,OAAM;QACR,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAA;QAC5C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAkB;IACjD,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAAA;IAEjC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAA;YACjD,QAAQ,CAAC,WAAW,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QACnE,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClE,MAAM,CAAC,KAAK,CAAC,4BAA4B,OAAO,MAAM,GAAG,EAAE,CAAC,CAAA;YAC5D,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,38 +0,0 @@
1
- import { Platform, SocialPost } from '../types';
2
- export interface SocialPlatformClient {
3
- post(content: SocialPost): Promise<{
4
- success: boolean;
5
- url?: string;
6
- error?: string;
7
- }>;
8
- validate(content: SocialPost): boolean;
9
- }
10
- /**
11
- * Placeholder client used until real platform API integrations are wired up.
12
- * Each platform will eventually get its own client class.
13
- */
14
- export declare class PlaceholderPlatformClient implements SocialPlatformClient {
15
- private readonly platform;
16
- constructor(platform: Platform);
17
- post(content: SocialPost): Promise<{
18
- success: boolean;
19
- url?: string;
20
- error?: string;
21
- }>;
22
- validate(_content: SocialPost): boolean;
23
- }
24
- /**
25
- * Returns the appropriate SocialPlatformClient for a given platform.
26
- * Currently returns a PlaceholderPlatformClient for all platforms.
27
- */
28
- export declare function getPlatformClient(platform: Platform): SocialPlatformClient;
29
- /**
30
- * Publishes an array of SocialPost items to their respective platforms.
31
- * Returns a map of platform → result for each post.
32
- */
33
- export declare function publishToAllPlatforms(posts: SocialPost[]): Promise<Map<Platform, {
34
- success: boolean;
35
- url?: string;
36
- error?: string;
37
- }>>;
38
- //# sourceMappingURL=socialPosting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"socialPosting.d.ts","sourceRoot":"","sources":["../../src/services/socialPosting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAO/C,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtF,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAA;CACvC;AAMD;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,oBAAoB;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEzC,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAS5F,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO;CAWxC;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,oBAAoB,CAyC1E;AAMD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,UAAU,EAAE,GAClB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiB5E"}
@@ -1,102 +0,0 @@
1
- import { Platform } from '../types';
2
- import logger from '../config/logger';
3
- // ============================================================================
4
- // PLACEHOLDER CLIENT
5
- // ============================================================================
6
- /**
7
- * Placeholder client used until real platform API integrations are wired up.
8
- * Each platform will eventually get its own client class.
9
- */
10
- export class PlaceholderPlatformClient {
11
- platform;
12
- constructor(platform) {
13
- this.platform = platform;
14
- }
15
- async post(content) {
16
- logger.info(`Placeholder: Would post to ${this.platform}`, {
17
- platform: this.platform,
18
- contentLength: content.content.length,
19
- hashtags: content.hashtags,
20
- });
21
- return { success: true };
22
- }
23
- validate(_content) {
24
- // TODO: Implement platform-specific validation
25
- // Each platform has different limits:
26
- // - TikTok: 2200 char caption, video 15s-10min
27
- // - YouTube: 5000 char description, shorts ≤60s
28
- // - Instagram: 2200 char caption, reels ≤90s
29
- // - LinkedIn: 3000 char post, video ≤10min
30
- // - X (Twitter): 280 char tweet, video ≤140s
31
- logger.warn(`[${this.platform}] Content validation not yet implemented — accepting all content`);
32
- return true;
33
- }
34
- }
35
- // ============================================================================
36
- // PLATFORM CLIENT FACTORY
37
- // ============================================================================
38
- /**
39
- * Returns the appropriate SocialPlatformClient for a given platform.
40
- * Currently returns a PlaceholderPlatformClient for all platforms.
41
- */
42
- export function getPlatformClient(platform) {
43
- switch (platform) {
44
- case Platform.TikTok:
45
- // TODO: Replace with TikTokClient once TikTok API integration is implemented
46
- // Expected: TikTok Content Posting API (OAuth 2.0, video upload via URL or file)
47
- // Docs: https://developers.tiktok.com/doc/content-posting-api-get-started
48
- logger.warn('[TikTok] Using placeholder client — TikTok Content Posting API not yet integrated');
49
- return new PlaceholderPlatformClient(platform);
50
- case Platform.YouTube:
51
- // TODO: Replace with YouTubeClient once YouTube Data API integration is implemented
52
- // Expected: YouTube Data API v3 (OAuth 2.0, videos.insert for Shorts upload)
53
- // Docs: https://developers.google.com/youtube/v3/docs/videos/insert
54
- logger.warn('[YouTube] Using placeholder client — YouTube Data API v3 not yet integrated');
55
- return new PlaceholderPlatformClient(platform);
56
- case Platform.Instagram:
57
- // TODO: Replace with InstagramClient once Instagram Graph API integration is implemented
58
- // Expected: Instagram Graph API (OAuth 2.0, Reels publishing via container + publish)
59
- // Docs: https://developers.facebook.com/docs/instagram-api/guides/content-publishing
60
- logger.warn('[Instagram] Using placeholder client — Instagram Graph API not yet integrated');
61
- return new PlaceholderPlatformClient(platform);
62
- case Platform.LinkedIn:
63
- // TODO: Replace with LinkedInClient once LinkedIn API integration is implemented
64
- // Expected: LinkedIn Marketing API (OAuth 2.0, ugcPosts for video + text)
65
- // Docs: https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares
66
- logger.warn('[LinkedIn] Using placeholder client — LinkedIn Marketing API not yet integrated');
67
- return new PlaceholderPlatformClient(platform);
68
- case Platform.X:
69
- // TODO: Replace with XClient once X (Twitter) API v2 integration is implemented
70
- // Expected: X API v2 (OAuth 2.0, media upload + tweet creation)
71
- // Docs: https://developer.x.com/en/docs/x-api/tweets/manage-tweets
72
- logger.warn('[X] Using placeholder client — X API v2 not yet integrated');
73
- return new PlaceholderPlatformClient(platform);
74
- default:
75
- logger.warn(`Unknown platform: ${platform}, using placeholder client`);
76
- return new PlaceholderPlatformClient(platform);
77
- }
78
- }
79
- // ============================================================================
80
- // PUBLISH TO ALL PLATFORMS
81
- // ============================================================================
82
- /**
83
- * Publishes an array of SocialPost items to their respective platforms.
84
- * Returns a map of platform → result for each post.
85
- */
86
- export async function publishToAllPlatforms(posts) {
87
- const results = new Map();
88
- for (const post of posts) {
89
- const client = getPlatformClient(post.platform);
90
- try {
91
- const result = await client.post(post);
92
- results.set(post.platform, result);
93
- }
94
- catch (err) {
95
- const errorMessage = err instanceof Error ? err.message : String(err);
96
- logger.error(`Failed to publish to ${post.platform}`, { error: errorMessage });
97
- results.set(post.platform, { success: false, error: errorMessage });
98
- }
99
- }
100
- return results;
101
- }
102
- //# sourceMappingURL=socialPosting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"socialPosting.js","sourceRoot":"","sources":["../../src/services/socialPosting.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { VideoFile, Transcript } from '../types';
2
- export declare function transcribeVideo(video: VideoFile): Promise<Transcript>;
3
- //# sourceMappingURL=transcription.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transcription.d.ts","sourceRoot":"","sources":["../../src/services/transcription.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAA;AAM/D,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAuD3E"}