The centrakit CLI moves from commander and hand-written helpers to citty, @clack/prompts, c12 and Node 24 built-ins, and the guard tests scan files with fs.glob and oxc-parser.
The CLI was built on commander with a custom runner, hand-written runtime flag parsing, a JSON-only config file and a spawn-based browser opener. It never prompted for missing values, so register took the password as a positional argument and every organization command needed a UUID typed by hand. The guard tests in tests/integration and packages/ui/tests each had their own recursive directory walker and matched imports with regular expressions, which also matched text inside comments and strings.
defineCommand default export loaded lazily from src/root.ts, so --version and help stay fast without a separate fast path.@clack/prompts, wrapped in src/ui.ts. Prompts only appear when stdin and stdout are terminals, --json is off and the session is not non-interactive. Otherwise a missing value is an error.defineConfig from centrakit/config.node:util styleText, the browser opener uses open, and command suggestions use fastest-levenshtein.node through type stripping, so tsx is no longer needed.listFiles and listFilesSync helpers from @workspace/test-fixtures/source-files, built on fs.glob, and read imports with importSpecifiers, built on oxc-parser.std-env was considered for CI detection but left out, because it reads the environment once at import and the tests change it per case. The CLI reads CI through its t3 env schema at call time instead.--social is read from the raw arguments with collectRepeatedFlag in src/args.ts.runCli moves leading global flags behind the command path before parsing.register takes the password from a hidden prompt or --password-stdin and no longer accepts it as an argument.Last updated on