diff --git a/src/cli.js b/src/cli.js index 0abf467..80def8f 100644 --- a/src/cli.js +++ b/src/cli.js @@ -3,11 +3,14 @@ import { Command } from 'commander'; import registerConfig from './cmd/config.js'; +import registerDoctor from './cmd/doctor.js'; +import registerInit from './cmd/init.js'; import registerOauth from './cmd/oauth.js'; import registerPlcRegister from './cmd/plc-register.js'; import registerPlcVerify from './cmd/plc-verify.js'; import registerFirehose from './cmd/firehose.js'; import registerPdsRecord from './cmd/pds-record.js'; +import registerSetup from './cmd/setup.js'; const program = new Command(); program @@ -16,10 +19,13 @@ program .version('0.1.0'); registerConfig(program); +registerDoctor(program); +registerInit(program); registerOauth(program); registerPlcRegister(program); registerPlcVerify(program); registerFirehose(program); registerPdsRecord(program); +registerSetup(program); export { program }; diff --git a/src/cmd/doctor.js b/src/cmd/doctor.js new file mode 100644 index 0000000..09641d9 --- /dev/null +++ b/src/cmd/doctor.js @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// Copyright (c) 2026 sol pbc + +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; +import { loadConfig } from '../lib/config.js'; + +export default function register(program) { + program + .command('doctor') + .description('Check vit setup status') + .action(async () => { + try { + const config = loadConfig(); + if (config.setup_at) { + const when = new Date(config.setup_at * 1000).toISOString(); + console.log(`setup: ok (${when})`); + } else { + console.log('setup: not done (run vit setup)'); + } + + const vitDir = join(process.cwd(), '.vit'); + if (existsSync(vitDir)) { + console.log('.vit: found'); + } else { + console.log('.vit: not found'); + } + } catch (err) { + console.error(err.message); + process.exitCode = 1; + } + }); +} diff --git a/src/cmd/init.js b/src/cmd/init.js new file mode 100644 index 0000000..d03d3af --- /dev/null +++ b/src/cmd/init.js @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// Copyright (c) 2026 sol pbc + +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; + +export default function register(program) { + program + .command('init') + .description('Check for local .vit directory') + .action(async () => { + try { + const vitDir = join(process.cwd(), '.vit'); + if (existsSync(vitDir)) { + console.log('.vit directory found'); + } else { + console.log('.vit directory not found'); + } + } catch (err) { + console.error(err.message); + process.exitCode = 1; + } + }); +} diff --git a/src/cmd/setup.js b/src/cmd/setup.js new file mode 100644 index 0000000..7cb8fff --- /dev/null +++ b/src/cmd/setup.js @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: AGPL-3.0-only +// Copyright (c) 2026 sol pbc + +import { loadConfig, saveConfig } from '../lib/config.js'; + +export default function register(program) { + program + .command('setup') + .description('Initialize user-level vit configuration') + .action(async () => { + try { + const config = loadConfig(); + if (config.setup_at) { + const when = new Date(config.setup_at * 1000).toISOString(); + console.log(`vit already set up (setup_at: ${when})`); + return; + } + config.setup_at = Math.floor(Date.now() / 1000); + saveConfig(config); + console.log('vit setup complete'); + } catch (err) { + console.error(err.message); + process.exitCode = 1; + } + }); +}