@alavida/agentpack
Version:
Compiler-driven lifecycle CLI for source-backed agent skills
85 lines (71 loc) • 2.42 kB
JavaScript
import { Command } from 'commander';
import { createRequire } from 'node:module';
import { formatError, AgentpackError, EXIT_CODES } from './utils/errors.js';
import { output } from './utils/output.js';
import { authorCommand } from './commands/author.js';
import { publishCommand } from './commands/publish.js';
import { skillsCommand } from './commands/skills.js';
const require = createRequire(import.meta.url);
const pkg = require('../package.json');
export function createProgram() {
const program = new Command();
program
.name('agentpack')
.description('agentpack skills lifecycle CLI')
.version(pkg.version, '-V, --version', 'Show version number')
.option('--json', 'Output as JSON')
.option('-q, --quiet', 'Suppress non-essential output')
.option('-v, --verbose', 'Show detailed output')
.option('--workbench <path>', 'Override workbench context (name or path)');
program.addCommand(authorCommand());
program.addCommand(publishCommand());
program.addCommand(skillsCommand());
program.addHelpText('after', `
Exit Codes:
0 Success
1 General error
2 Usage or validation error
3 Network error
4 Not found
Run 'agentpack <command> --help' for details on a specific command.`);
program.action(() => {
program.help();
});
return program;
}
export function run(argv) {
const program = createProgram();
process.on('uncaughtException', (err) => {
const opts = program.opts?.() || {};
if (opts.json) {
output.json({ error: 'uncaught_exception', message: err.message });
} else {
output.error(formatError(err));
}
process.exit(EXIT_CODES.GENERAL);
});
process.on('unhandledRejection', (reason) => {
const err = reason instanceof Error ? reason : new Error(String(reason));
const opts = program.opts?.() || {};
if (opts.json) {
output.json({ error: 'unhandled_rejection', message: err.message });
} else {
output.error(formatError(err));
}
process.exit(EXIT_CODES.GENERAL);
});
program.parseAsync(argv).catch((err) => {
if (err instanceof AgentpackError) {
const opts = program.opts?.() || {};
if (opts.json) {
output.json(err.toJSON());
} else {
output.error(formatError(err));
}
process.exit(err.exitCode);
return;
}
output.error(formatError(err));
process.exit(EXIT_CODES.GENERAL);
});
}