import type { Command } from "commander"; import { onboardCommand } from "../../commands/onboard.js"; import { setupCommand } from "../../commands/setup.js"; import { defaultRuntime } from "../../runtime.js"; import { formatDocsLink } from "../../terminal/links.js"; import { theme } from "../../terminal/theme.js"; import { hasExplicitOptions } from "../command-options.js"; import { runCommandWithRuntime } from "../cli-utils.js"; export function registerSetupCommand(program: Command) { program .command("setup") .description("Initialize ~/.clawdbot/clawdbot.json and the agent workspace") .addHelpText( "after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/setup", "docs.clawd.bot/cli/setup")}\n`, ) .option( "--workspace ", "Agent workspace directory (default: ~/clawd; stored as agents.defaults.workspace)", ) .option("--wizard", "Run the interactive onboarding wizard", false) .option("--non-interactive", "Run the wizard without prompts", false) .option("--mode ", "Wizard mode: local|remote") .option("--remote-url ", "Remote Gateway WebSocket URL") .option("--remote-token ", "Remote Gateway token (optional)") .action(async (opts, command) => { await runCommandWithRuntime(defaultRuntime, async () => { const hasWizardFlags = hasExplicitOptions(command, [ "wizard", "nonInteractive", "mode", "remoteUrl", "remoteToken", ]); if (opts.wizard || hasWizardFlags) { await onboardCommand( { workspace: opts.workspace as string | undefined, nonInteractive: Boolean(opts.nonInteractive), mode: opts.mode as "local" | "remote" | undefined, remoteUrl: opts.remoteUrl as string | undefined, remoteToken: opts.remoteToken as string | undefined, }, defaultRuntime, ); return; } await setupCommand({ workspace: opts.workspace as string | undefined }, defaultRuntime); }); }); }