mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-20 10:14:45 +00:00
30 lines
1.0 KiB
TypeScript
30 lines
1.0 KiB
TypeScript
import process from "node:process";
|
|
import { Command } from "commander";
|
|
import { registerProgramCommands } from "./command-registry.js";
|
|
import { createProgramContext } from "./context.js";
|
|
import { configureProgramHelp } from "./help.js";
|
|
import { registerPreActionHooks } from "./preaction.js";
|
|
import { setProgramContext } from "./program-context.js";
|
|
|
|
export function buildProgram() {
|
|
const program = new Command();
|
|
program.enablePositionalOptions();
|
|
// Preserve Commander-computed exit codes while still aborting parse flow.
|
|
// Without this, unknown nested commands can print an error
|
|
// but still report success when exits are intercepted.
|
|
program.exitOverride((err) => {
|
|
process.exitCode = typeof err.exitCode === "number" ? err.exitCode : 1;
|
|
throw err;
|
|
});
|
|
const ctx = createProgramContext();
|
|
const argv = process.argv;
|
|
|
|
setProgramContext(program, ctx);
|
|
configureProgramHelp(program, ctx);
|
|
registerPreActionHooks(program, ctx.programVersion);
|
|
|
|
registerProgramCommands(program, ctx, argv);
|
|
|
|
return program;
|
|
}
|