#!/usr/bin/env node/** * split-exec — Execute a split plan produced by split-plan. * * Reads a .split-plan.md file, clones the source branch, then for each split * (in order): checkout the target branch (existing PR or new branch from base), * cherry-pick the listed commits, push, and create a new PR when the plan says * "New PR". Processes one split at a time so the user can fix conflicts or stop. * * WHY initOutputLog({ prefix: 'split-exec' }): Separate logs from split-plan/prr/story. */import chalk from 'chalk';import { loadConfig } from '../../shared/config.js';import { initOutputLog, closeOutputLog, setVerbose, setPillEnabled } from '../../shared/logger.js';import { runPillAfterClosedLogs } from '../pill/after-close-logs.js';import { createCLI, parseArgs, type SplitExecParsedArgs } from './cli.js';import { runSplitExec } from './run.js'; async function closeOutputLogAndPill(): Promise<void> { await closeOutputLog(); await runPillAfterClosedLogs();} try { initOutputLog({ prefix: 'split-exec' });} catch (err) { console.warn('Warning: Could not initialize output log:', err);} async function main(): Promise<void> { const program = createCLI(); let parsed: SplitExecParsedArgs; try { parsed = parseArgs(program); } catch (err) { const msg = err instanceof Error ? err.message : String(err); console.error(chalk.red('Error:'), msg); await closeOutputLogAndPill(); process.exit(1); } setVerbose(parsed.options.verbose); setPillEnabled(parsed.options.pill); let config; try { config = loadConfig(); } catch (err) { const msg = err instanceof Error ? err.message : String(err); console.error(chalk.red('Error:'), msg); await closeOutputLogAndPill(); process.exit(1); } console.log(chalk.cyan('\nsplit-exec') + chalk.gray(' — execute split plan\n')); try { await runSplitExec(parsed.planPath, config, parsed.options); await closeOutputLogAndPill(); } catch (err) { const msg = err instanceof Error ? err.message : String(err); console.error(chalk.red('Error:'), msg); await closeOutputLogAndPill(); process.exit(1); }} main();
#!/usr/bin/env node
/**
* split-exec — Execute a split plan produced by split-plan.
*
* Reads a .split-plan.md file, clones the source branch, then for each split
* (in order): checkout the target branch (existing PR or new branch from base),
* cherry-pick the listed commits, push, and create a new PR when the plan says
* "New PR". Processes one split at a time so the user can fix conflicts or stop.
*
* WHY initOutputLog({ prefix: 'split-exec' }): Separate logs from split-plan/prr/story.
*/
import chalk from 'chalk';
import { loadConfig } from '../../shared/config.js';
import { initOutputLog, closeOutputLog, setVerbose, setPillEnabled } from '../../shared/logger.js';
import { runPillAfterClosedLogs } from '../pill/after-close-logs.js';
import { createCLI, parseArgs, type SplitExecParsedArgs } from './cli.js';
import { runSplitExec } from './run.js';
async function closeOutputLogAndPill(): Promise<void> {
await closeOutputLog();
await runPillAfterClosedLogs();
}
try {
initOutputLog({ prefix: 'split-exec' });
} catch (err) {
console.warn('Warning: Could not initialize output log:', err);
}
async function main(): Promise<void> {
const program = createCLI();
let parsed: SplitExecParsedArgs;
try {
parsed = parseArgs(program);
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
console.error(chalk.red('Error:'), msg);
await closeOutputLogAndPill();
process.exit(1);
}
setVerbose(parsed.options.verbose);
setPillEnabled(parsed.options.pill);
let config;
try {
config = loadConfig();
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
console.error(chalk.red('Error:'), msg);
await closeOutputLogAndPill();
process.exit(1);
}
console.log(chalk.cyan('\nsplit-exec') + chalk.gray(' — execute split plan\n'));
try {
await runSplitExec(parsed.planPath, config, parsed.options);
await closeOutputLogAndPill();
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
console.error(chalk.red('Error:'), msg);
await closeOutputLogAndPill();
process.exit(1);
}
}
main();