mediacript 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/cli.mjs +6 -1
- package/dist/config/index.d.ts +5 -5
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +43 -14
- package/dist/config/index.js.map +1 -1
- package/dist/index.js +57 -57
- package/dist/index.js.map +1 -1
- package/dist/transcript/groq.d.ts +4 -4
- package/dist/transcript/groq.js +6 -6
- package/dist/transcript/groq.js.map +1 -1
- package/dist/transcript/index.d.ts +5 -5
- package/dist/transcript/index.js +16 -16
- package/dist/transcript/index.js.map +1 -1
- package/dist/transcript/openai.d.ts +4 -4
- package/dist/transcript/openai.js +6 -6
- package/dist/transcript/openai.js.map +1 -1
- package/dist/utils/ffmpegCheck.d.ts +4 -4
- package/dist/utils/ffmpegCheck.js +15 -15
- package/dist/utils/ffmpegCheck.js.map +1 -1
- package/dist/utils/ffmpegOperations.d.ts +5 -5
- package/dist/utils/ffmpegOperations.js +15 -15
- package/dist/utils/ffmpegOperations.js.map +1 -1
- package/dist/utils/fileHelpers.d.ts +3 -3
- package/dist/utils/fileHelpers.js +4 -4
- package/dist/utils/fileHelpers.js.map +1 -1
- package/dist/workflow/state.d.ts +9 -9
- package/dist/workflow/state.js +12 -12
- package/dist/workflow/state.js.map +1 -1
- package/package.json +9 -1
package/dist/transcript/index.js
CHANGED
|
@@ -3,43 +3,43 @@ import fs from 'fs';
|
|
|
3
3
|
import { groqTranscriptAudio } from './groq.js';
|
|
4
4
|
import { openaiTranscriptAudio } from './openai.js';
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* @param audioFilePath -
|
|
8
|
-
* @param config -
|
|
9
|
-
* @returns
|
|
6
|
+
* Transcribes an audio file trying Groq first, then OpenAI
|
|
7
|
+
* @param audioFilePath - Audio file path
|
|
8
|
+
* @param config - Configuration with API keys
|
|
9
|
+
* @returns Transcribed text or null
|
|
10
10
|
*/
|
|
11
11
|
export async function transcribeAudio(audioFilePath, config) {
|
|
12
|
-
console.log(`\n🎙️
|
|
13
|
-
//
|
|
12
|
+
console.log(`\n🎙️ Transcribing: ${path.basename(audioFilePath)}`);
|
|
13
|
+
// Try Groq first (faster and cheaper)
|
|
14
14
|
if (config.groqApiKey) {
|
|
15
|
-
console.log('📡
|
|
15
|
+
console.log('📡 Trying Groq Whisper (fast)...');
|
|
16
16
|
const result = await groqTranscriptAudio(audioFilePath, config.groqApiKey);
|
|
17
17
|
if (result) {
|
|
18
|
-
console.log('✓
|
|
18
|
+
console.log('✓ Transcription completed with Groq');
|
|
19
19
|
return result;
|
|
20
20
|
}
|
|
21
|
-
console.log('⚠️
|
|
21
|
+
console.log('⚠️ Failed with Groq, trying OpenAI...');
|
|
22
22
|
}
|
|
23
|
-
//
|
|
23
|
+
// If Groq failed or is not configured, try OpenAI
|
|
24
24
|
if (config.openaiApiKey) {
|
|
25
|
-
console.log('📡
|
|
25
|
+
console.log('📡 Trying OpenAI Whisper...');
|
|
26
26
|
const result = await openaiTranscriptAudio(audioFilePath, config.openaiApiKey);
|
|
27
27
|
if (result) {
|
|
28
|
-
console.log('✓
|
|
28
|
+
console.log('✓ Transcription completed with OpenAI');
|
|
29
29
|
return result;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
//
|
|
32
|
+
// If we got here, no service worked
|
|
33
33
|
if (!config.groqApiKey && !config.openaiApiKey) {
|
|
34
|
-
console.error('❌
|
|
34
|
+
console.error('❌ No API key configured for transcription');
|
|
35
35
|
}
|
|
36
36
|
else {
|
|
37
|
-
console.error('❌
|
|
37
|
+
console.error('❌ Failed to transcribe with all available services');
|
|
38
38
|
}
|
|
39
39
|
return null;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* Saves transcription to file
|
|
43
43
|
*/
|
|
44
44
|
export function saveTranscription(audioPath, transcription) {
|
|
45
45
|
const outputFileName = path.basename(audioPath, path.extname(audioPath)) + '.txt';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transcript/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,MAAc;IAGd,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transcript/index.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,aAAqB,EACrB,MAAc;IAGd,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IAEnE,sCAAsC;IACtC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAC1E,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;YAClD,OAAO,MAAM,CAAA;QACf,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAA;IACvD,CAAC;IAED,kDAAkD;IAClD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAA;QAC9E,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;YACpD,OAAO,MAAM,CAAA;QACf,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAA;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAA;IACrE,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAiB,EAAE,aAAqB;IACxE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,MAAM,CAAA;IACjF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAA;IAErE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;IACpD,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* @param audioLocalFilePath -
|
|
4
|
-
* @param apiKey - API Key
|
|
5
|
-
* @returns
|
|
2
|
+
* Transcribes an audio file using OpenAI Whisper
|
|
3
|
+
* @param audioLocalFilePath - Local audio file path
|
|
4
|
+
* @param apiKey - OpenAI API Key
|
|
5
|
+
* @returns Transcribed text or null in case of error
|
|
6
6
|
*/
|
|
7
7
|
export declare const openaiTranscriptAudio: (audioLocalFilePath: string, apiKey: string) => Promise<string | null>;
|
|
8
8
|
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import OpenAI from 'openai';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @param audioLocalFilePath -
|
|
6
|
-
* @param apiKey - API Key
|
|
7
|
-
* @returns
|
|
4
|
+
* Transcribes an audio file using OpenAI Whisper
|
|
5
|
+
* @param audioLocalFilePath - Local audio file path
|
|
6
|
+
* @param apiKey - OpenAI API Key
|
|
7
|
+
* @returns Transcribed text or null in case of error
|
|
8
8
|
*/
|
|
9
9
|
export const openaiTranscriptAudio = async (audioLocalFilePath, apiKey) => {
|
|
10
10
|
if (!apiKey) {
|
|
11
|
-
console.error('❌ OpenAI API Key
|
|
11
|
+
console.error('❌ OpenAI API Key not provided');
|
|
12
12
|
return null;
|
|
13
13
|
}
|
|
14
14
|
try {
|
|
@@ -20,7 +20,7 @@ export const openaiTranscriptAudio = async (audioLocalFilePath, apiKey) => {
|
|
|
20
20
|
return transcription.text ?? null;
|
|
21
21
|
}
|
|
22
22
|
catch (error) {
|
|
23
|
-
console.error('
|
|
23
|
+
console.error('Error transcribing audio with OpenAI:', error.response?.data || error.message);
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/transcript/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,kBAA0B,EAC1B,MAAc,EACU,EAAE;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/transcript/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,MAAM,MAAM,QAAQ,CAAA;AAE3B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,kBAA0B,EAC1B,MAAc,EACU,EAAE;IAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAC9C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QAErC,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;YAC7D,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;YAC7C,KAAK,EAAE,WAAW;SACnB,CAAC,CAAA;QAEF,OAAO,aAAa,CAAC,IAAI,IAAI,IAAI,CAAA;IAEnC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;QAC7F,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Checks if ffmpeg is installed and available in PATH
|
|
3
3
|
*/
|
|
4
4
|
export declare function checkFfmpegInstalled(): {
|
|
5
5
|
installed: boolean;
|
|
@@ -7,12 +7,12 @@ export declare function checkFfmpegInstalled(): {
|
|
|
7
7
|
error?: string;
|
|
8
8
|
};
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Displays ffmpeg installation instructions based on operating system
|
|
11
11
|
*/
|
|
12
12
|
export declare function showFfmpegInstallInstructions(): void;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Checks and reports on ffmpeg installation
|
|
15
|
+
* Returns true if installed, false otherwise
|
|
16
16
|
*/
|
|
17
17
|
export declare function verifyFfmpeg(): boolean;
|
|
18
18
|
//# sourceMappingURL=ffmpegCheck.d.ts.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Checks if ffmpeg is installed and available in PATH
|
|
4
4
|
*/
|
|
5
5
|
export function checkFfmpegInstalled() {
|
|
6
6
|
try {
|
|
@@ -8,7 +8,7 @@ export function checkFfmpegInstalled() {
|
|
|
8
8
|
encoding: 'utf-8',
|
|
9
9
|
stdio: ['pipe', 'pipe', 'pipe']
|
|
10
10
|
});
|
|
11
|
-
//
|
|
11
|
+
// Extract version from first line
|
|
12
12
|
const versionMatch = output.match(/ffmpeg version ([^\s]+)/);
|
|
13
13
|
const version = versionMatch ? versionMatch[1] : 'unknown';
|
|
14
14
|
return {
|
|
@@ -24,25 +24,25 @@ export function checkFfmpegInstalled() {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Displays ffmpeg installation instructions based on operating system
|
|
28
28
|
*/
|
|
29
29
|
export function showFfmpegInstallInstructions() {
|
|
30
30
|
const platform = process.platform;
|
|
31
|
-
console.log('\n⚠️ FFmpeg
|
|
32
|
-
console.log('📦
|
|
31
|
+
console.log('\n⚠️ FFmpeg is not installed or not available in PATH\n');
|
|
32
|
+
console.log('📦 Installation instructions:\n');
|
|
33
33
|
if (platform === 'win32') {
|
|
34
34
|
console.log('Windows:');
|
|
35
|
-
console.log(' 1.
|
|
35
|
+
console.log(' 1. Using Chocolatey:');
|
|
36
36
|
console.log(' choco install ffmpeg');
|
|
37
|
-
console.log('\n 2.
|
|
37
|
+
console.log('\n 2. Using Scoop:');
|
|
38
38
|
console.log(' scoop install ffmpeg');
|
|
39
|
-
console.log('\n 3.
|
|
40
|
-
console.log(' -
|
|
41
|
-
console.log(' -
|
|
39
|
+
console.log('\n 3. Manual download:');
|
|
40
|
+
console.log(' - Download from: https://ffmpeg.org/download.html');
|
|
41
|
+
console.log(' - Extract and add to system PATH');
|
|
42
42
|
}
|
|
43
43
|
else if (platform === 'darwin') {
|
|
44
44
|
console.log('macOS:');
|
|
45
|
-
console.log('
|
|
45
|
+
console.log(' Using Homebrew:');
|
|
46
46
|
console.log(' brew install ffmpeg');
|
|
47
47
|
}
|
|
48
48
|
else {
|
|
@@ -54,16 +54,16 @@ export function showFfmpegInstallInstructions() {
|
|
|
54
54
|
console.log('\n Arch Linux:');
|
|
55
55
|
console.log(' sudo pacman -S ffmpeg');
|
|
56
56
|
}
|
|
57
|
-
console.log('\n💡
|
|
57
|
+
console.log('\n💡 After installation, restart the terminal and try again.\n');
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
60
|
+
* Checks and reports on ffmpeg installation
|
|
61
|
+
* Returns true if installed, false otherwise
|
|
62
62
|
*/
|
|
63
63
|
export function verifyFfmpeg() {
|
|
64
64
|
const result = checkFfmpegInstalled();
|
|
65
65
|
if (result.installed) {
|
|
66
|
-
console.log(`✓ FFmpeg
|
|
66
|
+
console.log(`✓ FFmpeg is installed (version: ${result.version})`);
|
|
67
67
|
return true;
|
|
68
68
|
}
|
|
69
69
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpegCheck.js","sourceRoot":"","sources":["../../src/utils/ffmpegCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,EAAE;YACzC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAA;QAEF,
|
|
1
|
+
{"version":3,"file":"ffmpegCheck.js","sourceRoot":"","sources":["../../src/utils/ffmpegCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,iBAAiB,EAAE;YACzC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAA;QAEF,kCAAkC;QAClC,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5D,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAE1D,OAAO;YACL,SAAS,EAAE,IAAI;YACf,OAAO;SACR,CAAA;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,KAAK,EAAE,KAAK,CAAC,OAAO;SACrB,CAAA;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;IAEjC,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;IACvE,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAA;IAE9C,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACvB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACrC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAClC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;QACrE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;IACtD,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACrB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;QAChC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACzC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACrB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;QAC9D,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC9B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;IAC3C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAA;IAErC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,mCAAmC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAA;QACjE,OAAO,IAAI,CAAA;IACb,CAAC;SAAM,CAAC;QACN,6BAA6B,EAAE,CAAA;QAC/B,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Generates unique output file path
|
|
3
3
|
*/
|
|
4
4
|
export declare function uniqueOutputPath(dir: string, baseName: string, extWithDot: string): string;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Executes an ffmpeg command
|
|
7
7
|
*/
|
|
8
8
|
export declare function runFfmpegCommand(args: string[]): Promise<string>;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Converts video to performant format (H.264/AAC)
|
|
11
11
|
*/
|
|
12
12
|
export declare function convertVideo(inputPath: string, outputDir?: string): Promise<string>;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Extracts audio from a video
|
|
15
15
|
*/
|
|
16
16
|
export declare function extractAudio(inputPath: string, outputDir?: string): Promise<string>;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Converts audio to performant format
|
|
19
19
|
*/
|
|
20
20
|
export declare function convertAudio(inputPath: string, outputDir?: string): Promise<string>;
|
|
21
21
|
//# sourceMappingURL=ffmpegOperations.d.ts.map
|
|
@@ -2,7 +2,7 @@ import { spawn } from 'child_process';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Generates unique output file path
|
|
6
6
|
*/
|
|
7
7
|
export function uniqueOutputPath(dir, baseName, extWithDot) {
|
|
8
8
|
let candidate = path.join(dir, `${baseName}${extWithDot}`);
|
|
@@ -13,10 +13,10 @@ export function uniqueOutputPath(dir, baseName, extWithDot) {
|
|
|
13
13
|
if (!fs.existsSync(candidate))
|
|
14
14
|
return candidate;
|
|
15
15
|
}
|
|
16
|
-
throw new Error('
|
|
16
|
+
throw new Error('Could not generate a unique output name.');
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Executes an ffmpeg command
|
|
20
20
|
*/
|
|
21
21
|
export function runFfmpegCommand(args) {
|
|
22
22
|
return new Promise((resolve, reject) => {
|
|
@@ -30,10 +30,10 @@ export function runFfmpegCommand(args) {
|
|
|
30
30
|
});
|
|
31
31
|
ffmpeg.stderr.on('data', (data) => {
|
|
32
32
|
stderr += data.toString();
|
|
33
|
-
// FFmpeg
|
|
33
|
+
// FFmpeg sends progress to stderr
|
|
34
34
|
const lines = stderr.split('\n');
|
|
35
35
|
const lastLine = lines[lines.length - 2] || '';
|
|
36
|
-
//
|
|
36
|
+
// Display progress if there is time information
|
|
37
37
|
if (lastLine.includes('time=')) {
|
|
38
38
|
process.stdout.write(`\r${lastLine.trim()}`);
|
|
39
39
|
}
|
|
@@ -44,7 +44,7 @@ export function runFfmpegCommand(args) {
|
|
|
44
44
|
resolve(stdout);
|
|
45
45
|
}
|
|
46
46
|
else {
|
|
47
|
-
reject(new Error(`FFmpeg
|
|
47
|
+
reject(new Error(`FFmpeg failed with code ${code}\n${stderr}`));
|
|
48
48
|
}
|
|
49
49
|
});
|
|
50
50
|
ffmpeg.on('error', (err) => {
|
|
@@ -53,13 +53,13 @@ export function runFfmpegCommand(args) {
|
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
/**
|
|
56
|
-
*
|
|
56
|
+
* Converts video to performant format (H.264/AAC)
|
|
57
57
|
*/
|
|
58
58
|
export async function convertVideo(inputPath, outputDir) {
|
|
59
59
|
const dir = outputDir || path.dirname(inputPath);
|
|
60
60
|
const baseName = path.basename(inputPath, path.extname(inputPath));
|
|
61
61
|
const outputPath = uniqueOutputPath(dir, `${baseName}_converted`, '.mp4');
|
|
62
|
-
console.log(`\n🎬
|
|
62
|
+
console.log(`\n🎬 Converting video to performant format...`);
|
|
63
63
|
const args = [
|
|
64
64
|
'-i', inputPath,
|
|
65
65
|
'-c:v', 'libx264',
|
|
@@ -72,17 +72,17 @@ export async function convertVideo(inputPath, outputDir) {
|
|
|
72
72
|
outputPath
|
|
73
73
|
];
|
|
74
74
|
await runFfmpegCommand(args);
|
|
75
|
-
console.log(`\n✓
|
|
75
|
+
console.log(`\n✓ Video converted: ${path.basename(outputPath)}`);
|
|
76
76
|
return outputPath;
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
|
-
*
|
|
79
|
+
* Extracts audio from a video
|
|
80
80
|
*/
|
|
81
81
|
export async function extractAudio(inputPath, outputDir) {
|
|
82
82
|
const dir = outputDir || path.dirname(inputPath);
|
|
83
83
|
const baseName = path.basename(inputPath, path.extname(inputPath));
|
|
84
84
|
const outputPath = uniqueOutputPath(dir, `${baseName}_audio`, '.mp3');
|
|
85
|
-
console.log(`\n🎵
|
|
85
|
+
console.log(`\n🎵 Extracting audio from video...`);
|
|
86
86
|
const args = [
|
|
87
87
|
'-i', inputPath,
|
|
88
88
|
'-vn',
|
|
@@ -92,17 +92,17 @@ export async function extractAudio(inputPath, outputDir) {
|
|
|
92
92
|
outputPath
|
|
93
93
|
];
|
|
94
94
|
await runFfmpegCommand(args);
|
|
95
|
-
console.log(`\n✓
|
|
95
|
+
console.log(`\n✓ Audio extracted: ${path.basename(outputPath)}`);
|
|
96
96
|
return outputPath;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* Converts audio to performant format
|
|
100
100
|
*/
|
|
101
101
|
export async function convertAudio(inputPath, outputDir) {
|
|
102
102
|
const dir = outputDir || path.dirname(inputPath);
|
|
103
103
|
const baseName = path.basename(inputPath, path.extname(inputPath));
|
|
104
104
|
const outputPath = uniqueOutputPath(dir, `${baseName}_converted`, '.mp3');
|
|
105
|
-
console.log(`\n🎵
|
|
105
|
+
console.log(`\n🎵 Converting audio to MP3...`);
|
|
106
106
|
const args = [
|
|
107
107
|
'-i', inputPath,
|
|
108
108
|
'-acodec', 'libmp3lame',
|
|
@@ -111,7 +111,7 @@ export async function convertAudio(inputPath, outputDir) {
|
|
|
111
111
|
outputPath
|
|
112
112
|
];
|
|
113
113
|
await runFfmpegCommand(args);
|
|
114
|
-
console.log(`\n✓
|
|
114
|
+
console.log(`\n✓ Audio converted: ${path.basename(outputPath)}`);
|
|
115
115
|
return outputPath;
|
|
116
116
|
}
|
|
117
117
|
//# sourceMappingURL=ffmpegOperations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpegOperations.js","sourceRoot":"","sources":["../../src/utils/ffmpegOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,QAAgB,EAAE,UAAkB;IAChF,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,UAAU,EAAE,CAAC,CAAA;IAC1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAA;IAE/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,CAAA;QAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;IACjD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"ffmpegOperations.js","sourceRoot":"","sources":["../../src/utils/ffmpegOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export type FileType = 'audio' | 'video' | 'unknown';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Detects file type by extension
|
|
4
4
|
*/
|
|
5
5
|
export declare function detectFileType(filePath: string): FileType;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Lists audio/video files in directory
|
|
8
8
|
*/
|
|
9
9
|
export declare function listMediaFiles(dir: string): Array<{
|
|
10
10
|
name: string;
|
|
@@ -12,7 +12,7 @@ export declare function listMediaFiles(dir: string): Array<{
|
|
|
12
12
|
type: FileType;
|
|
13
13
|
}>;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Checks if a file exists
|
|
16
16
|
*/
|
|
17
17
|
export declare function fileExists(filePath: string): boolean;
|
|
18
18
|
//# sourceMappingURL=fileHelpers.d.ts.map
|
|
@@ -3,7 +3,7 @@ import path from 'path';
|
|
|
3
3
|
const AUDIO_EXTS = new Set(['.ogg', '.wav', '.mp3', '.m4a', '.aac', '.flac']);
|
|
4
4
|
const VIDEO_EXTS = new Set(['.mp4', '.mov', '.mkv', '.webm', '.avi']);
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Detects file type by extension
|
|
7
7
|
*/
|
|
8
8
|
export function detectFileType(filePath) {
|
|
9
9
|
const ext = path.extname(filePath).toLowerCase();
|
|
@@ -14,7 +14,7 @@ export function detectFileType(filePath) {
|
|
|
14
14
|
return 'unknown';
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Lists audio/video files in directory
|
|
18
18
|
*/
|
|
19
19
|
export function listMediaFiles(dir) {
|
|
20
20
|
try {
|
|
@@ -41,12 +41,12 @@ export function listMediaFiles(dir) {
|
|
|
41
41
|
.sort((a, b) => a.name.localeCompare(b.name));
|
|
42
42
|
}
|
|
43
43
|
catch (error) {
|
|
44
|
-
console.error('
|
|
44
|
+
console.error('Error listing files:', error);
|
|
45
45
|
return [];
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* Checks if a file exists
|
|
50
50
|
*/
|
|
51
51
|
export function fileExists(filePath) {
|
|
52
52
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileHelpers.js","sourceRoot":"","sources":["../../src/utils/fileHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAIrE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IAEhD,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACvC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACvC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,EAAE;aACN,WAAW,CAAC,GAAG,CAAC;aAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACrC,OAAO;gBACL,IAAI;gBACJ,QAAQ;gBACR,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;aAC3B,CAAA;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;aACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"fileHelpers.js","sourceRoot":"","sources":["../../src/utils/fileHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAIrE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IAEhD,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACvC,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IACvC,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,OAAO,EAAE;aACN,WAAW,CAAC,GAAG,CAAC;aAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACrC,OAAO;gBACL,IAAI;gBACJ,QAAQ;gBACR,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;aAC3B,CAAA;QACH,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;aACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAA;QAC5C,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
package/dist/workflow/state.d.ts
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
import { WorkflowState, WorkflowStep } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Creates a new workflow state
|
|
4
4
|
*/
|
|
5
5
|
export declare function createWorkflowState(inputFile: string, stepNames: string[]): WorkflowState;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Updates step status
|
|
8
8
|
*/
|
|
9
9
|
export declare function updateStepStatus(state: WorkflowState, stepIndex: number, status: WorkflowStep['status'], result?: any, error?: string): void;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Gets current step
|
|
12
12
|
*/
|
|
13
13
|
export declare function getCurrentStep(state: WorkflowState): WorkflowStep | null;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Advances to next step
|
|
16
16
|
*/
|
|
17
17
|
export declare function nextStep(state: WorkflowState): boolean;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Checks if workflow is complete
|
|
20
20
|
*/
|
|
21
21
|
export declare function isWorkflowComplete(state: WorkflowState): boolean;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
23
|
+
* Checks if there were any workflow errors
|
|
24
24
|
*/
|
|
25
25
|
export declare function hasWorkflowErrors(state: WorkflowState): boolean;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Displays workflow progress
|
|
28
28
|
*/
|
|
29
29
|
export declare function printWorkflowProgress(state: WorkflowState): void;
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
31
|
+
* Saves workflow state to file
|
|
32
32
|
*/
|
|
33
33
|
export declare function saveWorkflowState(state: WorkflowState, outputDir: string): void;
|
|
34
34
|
/**
|
|
35
|
-
*
|
|
35
|
+
* Loads workflow state from file
|
|
36
36
|
*/
|
|
37
37
|
export declare function loadWorkflowState(outputDir: string): WorkflowState | null;
|
|
38
38
|
//# sourceMappingURL=state.d.ts.map
|
package/dist/workflow/state.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Creates a new workflow state
|
|
5
5
|
*/
|
|
6
6
|
export function createWorkflowState(inputFile, stepNames) {
|
|
7
7
|
return {
|
|
@@ -16,7 +16,7 @@ export function createWorkflowState(inputFile, stepNames) {
|
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Updates step status
|
|
20
20
|
*/
|
|
21
21
|
export function updateStepStatus(state, stepIndex, status, result, error) {
|
|
22
22
|
if (stepIndex >= 0 && stepIndex < state.steps.length) {
|
|
@@ -37,7 +37,7 @@ export function updateStepStatus(state, stepIndex, status, result, error) {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
*
|
|
40
|
+
* Gets current step
|
|
41
41
|
*/
|
|
42
42
|
export function getCurrentStep(state) {
|
|
43
43
|
if (state.currentStepIndex < state.steps.length) {
|
|
@@ -46,7 +46,7 @@ export function getCurrentStep(state) {
|
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* Advances to next step
|
|
50
50
|
*/
|
|
51
51
|
export function nextStep(state) {
|
|
52
52
|
if (state.currentStepIndex < state.steps.length - 1) {
|
|
@@ -56,22 +56,22 @@ export function nextStep(state) {
|
|
|
56
56
|
return false;
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
|
-
*
|
|
59
|
+
* Checks if workflow is complete
|
|
60
60
|
*/
|
|
61
61
|
export function isWorkflowComplete(state) {
|
|
62
62
|
return state.steps.every(step => step.status === 'completed' || step.status === 'skipped');
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
65
|
+
* Checks if there were any workflow errors
|
|
66
66
|
*/
|
|
67
67
|
export function hasWorkflowErrors(state) {
|
|
68
68
|
return state.steps.some(step => step.status === 'failed');
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
71
|
+
* Displays workflow progress
|
|
72
72
|
*/
|
|
73
73
|
export function printWorkflowProgress(state) {
|
|
74
|
-
console.log('\n📊
|
|
74
|
+
console.log('\n📊 Workflow Progress:');
|
|
75
75
|
console.log('━'.repeat(50));
|
|
76
76
|
state.steps.forEach((step, index) => {
|
|
77
77
|
let icon = '⏳';
|
|
@@ -88,20 +88,20 @@ export function printWorkflowProgress(state) {
|
|
|
88
88
|
: '';
|
|
89
89
|
console.log(`${icon} ${index + 1}. ${step.name}${duration}`);
|
|
90
90
|
if (step.error) {
|
|
91
|
-
console.log(` └─
|
|
91
|
+
console.log(` └─ Error: ${step.error}`);
|
|
92
92
|
}
|
|
93
93
|
});
|
|
94
94
|
console.log('━'.repeat(50));
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
97
|
+
* Saves workflow state to file
|
|
98
98
|
*/
|
|
99
99
|
export function saveWorkflowState(state, outputDir) {
|
|
100
100
|
const stateFile = path.join(outputDir, '.workflow-state.json');
|
|
101
101
|
fs.writeFileSync(stateFile, JSON.stringify(state, null, 2), 'utf-8');
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
104
|
-
*
|
|
104
|
+
* Loads workflow state from file
|
|
105
105
|
*/
|
|
106
106
|
export function loadWorkflowState(outputDir) {
|
|
107
107
|
const stateFile = path.join(outputDir, '.workflow-state.json');
|
|
@@ -112,7 +112,7 @@ export function loadWorkflowState(outputDir) {
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
catch (error) {
|
|
115
|
-
console.warn('
|
|
115
|
+
console.warn('Error loading workflow state:', error);
|
|
116
116
|
}
|
|
117
117
|
return null;
|
|
118
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,SAAmB;IACxE,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACrC,EAAE,EAAE,QAAQ,KAAK,EAAE;YACnB,IAAI;YACJ,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,gBAAgB,EAAE,CAAC;QACnB,SAAS;QACT,iBAAiB,EAAE,EAAE;KACtB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAoB,EACpB,SAAiB,EACjB,MAA8B,EAC9B,MAAY,EACZ,KAAc;IAEd,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7B,CAAC;aAAM,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACtB,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,IAAI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,IAAI,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,gBAAgB,EAAE,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAC9B,IAAI,CAAC,MAAM,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CACzD,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAoB;IACxD,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/workflow/state.ts"],"names":[],"mappings":"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"}
|