diff --git a/src/cli/actions/remoteAction.ts b/src/cli/actions/remoteAction.ts index b80da0c93..bb9628d2a 100644 --- a/src/cli/actions/remoteAction.ts +++ b/src/cli/actions/remoteAction.ts @@ -157,6 +157,10 @@ export const copyOutputToCurrentDirectory = async ( try { logger.trace(`Copying output file from: ${sourcePath} to: ${targetPath}`); + + // Create target directory if it doesn't exist + await fs.mkdir(path.dirname(targetPath), { recursive: true }); + await fs.copyFile(sourcePath, targetPath); } catch (error) { throw new RepomixError(`Failed to copy output file: ${(error as Error).message}`); diff --git a/src/core/packager/writeOutputToDisk.ts b/src/core/packager/writeOutputToDisk.ts index dbb54882e..3ca3de968 100644 --- a/src/core/packager/writeOutputToDisk.ts +++ b/src/core/packager/writeOutputToDisk.ts @@ -7,5 +7,9 @@ import { logger } from '../../shared/logger.js'; export const writeOutputToDisk = async (output: string, config: RepomixConfigMerged): Promise => { const outputPath = path.resolve(config.cwd, config.output.filePath); logger.trace(`Writing output to: ${outputPath}`); + + // Create output directory if it doesn't exist + await fs.mkdir(path.dirname(outputPath), { recursive: true }); + await fs.writeFile(outputPath, output); }; diff --git a/tests/cli/actions/remoteAction.test.ts b/tests/cli/actions/remoteAction.test.ts index 10001d4ea..4cdf897b2 100644 --- a/tests/cli/actions/remoteAction.test.ts +++ b/tests/cli/actions/remoteAction.test.ts @@ -15,6 +15,7 @@ vi.mock('node:fs/promises', async (importOriginal) => { return { ...actual, copyFile: vi.fn(), + mkdir: vi.fn(), }; }); vi.mock('../../../src/shared/logger');