open source is social v-it.org
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add init, setup, and doctor commands

Skeleton commands for local project detection (init), user-level
config initialization (setup), and combined status reporting (doctor).
All three reuse existing config.js and paths.js helpers.

+89
+6
src/cli.js
··· 3 3 4 4 import { Command } from 'commander'; 5 5 import registerConfig from './cmd/config.js'; 6 + import registerDoctor from './cmd/doctor.js'; 7 + import registerInit from './cmd/init.js'; 6 8 import registerOauth from './cmd/oauth.js'; 7 9 import registerPlcRegister from './cmd/plc-register.js'; 8 10 import registerPlcVerify from './cmd/plc-verify.js'; 9 11 import registerFirehose from './cmd/firehose.js'; 10 12 import registerPdsRecord from './cmd/pds-record.js'; 13 + import registerSetup from './cmd/setup.js'; 11 14 12 15 const program = new Command(); 13 16 program ··· 16 19 .version('0.1.0'); 17 20 18 21 registerConfig(program); 22 + registerDoctor(program); 23 + registerInit(program); 19 24 registerOauth(program); 20 25 registerPlcRegister(program); 21 26 registerPlcVerify(program); 22 27 registerFirehose(program); 23 28 registerPdsRecord(program); 29 + registerSetup(program); 24 30 25 31 export { program };
+33
src/cmd/doctor.js
··· 1 + // SPDX-License-Identifier: AGPL-3.0-only 2 + // Copyright (c) 2026 sol pbc 3 + 4 + import { existsSync } from 'node:fs'; 5 + import { join } from 'node:path'; 6 + import { loadConfig } from '../lib/config.js'; 7 + 8 + export default function register(program) { 9 + program 10 + .command('doctor') 11 + .description('Check vit setup status') 12 + .action(async () => { 13 + try { 14 + const config = loadConfig(); 15 + if (config.setup_at) { 16 + const when = new Date(config.setup_at * 1000).toISOString(); 17 + console.log(`setup: ok (${when})`); 18 + } else { 19 + console.log('setup: not done (run vit setup)'); 20 + } 21 + 22 + const vitDir = join(process.cwd(), '.vit'); 23 + if (existsSync(vitDir)) { 24 + console.log('.vit: found'); 25 + } else { 26 + console.log('.vit: not found'); 27 + } 28 + } catch (err) { 29 + console.error(err.message); 30 + process.exitCode = 1; 31 + } 32 + }); 33 + }
+24
src/cmd/init.js
··· 1 + // SPDX-License-Identifier: AGPL-3.0-only 2 + // Copyright (c) 2026 sol pbc 3 + 4 + import { existsSync } from 'node:fs'; 5 + import { join } from 'node:path'; 6 + 7 + export default function register(program) { 8 + program 9 + .command('init') 10 + .description('Check for local .vit directory') 11 + .action(async () => { 12 + try { 13 + const vitDir = join(process.cwd(), '.vit'); 14 + if (existsSync(vitDir)) { 15 + console.log('.vit directory found'); 16 + } else { 17 + console.log('.vit directory not found'); 18 + } 19 + } catch (err) { 20 + console.error(err.message); 21 + process.exitCode = 1; 22 + } 23 + }); 24 + }
+26
src/cmd/setup.js
··· 1 + // SPDX-License-Identifier: AGPL-3.0-only 2 + // Copyright (c) 2026 sol pbc 3 + 4 + import { loadConfig, saveConfig } from '../lib/config.js'; 5 + 6 + export default function register(program) { 7 + program 8 + .command('setup') 9 + .description('Initialize user-level vit configuration') 10 + .action(async () => { 11 + try { 12 + const config = loadConfig(); 13 + if (config.setup_at) { 14 + const when = new Date(config.setup_at * 1000).toISOString(); 15 + console.log(`vit already set up (setup_at: ${when})`); 16 + return; 17 + } 18 + config.setup_at = Math.floor(Date.now() / 1000); 19 + saveConfig(config); 20 + console.log('vit setup complete'); 21 + } catch (err) { 22 + console.error(err.message); 23 + process.exitCode = 1; 24 + } 25 + }); 26 + }