From 4b3813ac8d73542690e4f82292441d21df9bc5bf Mon Sep 17 00:00:00 2001 From: jaelgeng Date: Tue, 30 Jun 2026 14:26:03 +0800 Subject: [PATCH 1/2] refactor(cli): move cache to import subcommand (--cache-status/--cache-gc) Cache only serves import's shallow clone repos. Move it under the import command for better discoverability: teamai import --cache-status # show cache disk usage teamai import --cache-gc # garbage-collect stale entries The old `teamai cache` command is preserved as a hidden alias for backward compatibility. --- src/index.ts | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 016bbb1..0985ffa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -614,8 +614,24 @@ program .addOption(new Option('--skip-import', 'Only write drafts; skip the actual --from-repo-list run').hideHelp()) .addOption(new Option('--iwiki-dual', 'Enable dual-output mode for --from-iwiki (write codebase sections in addition to learning)').hideHelp()) .addOption(new Option('--require-review', 'Defer codebase section writes to .teamai/pending-review.jsonl for human review').hideHelp()) + .option('--cache-status', 'Show import cache status (repos cached, disk usage)') + .option('--cache-gc', 'Garbage-collect stale import cache entries') + .addOption(new Option('--max-bytes ', 'Override capacity cap for --cache-gc').hideHelp()) + .addOption(new Option('--stale-days ', 'Threshold for stale-eviction in days (default 30)').default('30').hideHelp()) .action(async (cmdOpts) => { const globalOpts = program.opts() as GlobalOptions; + if (cmdOpts.cacheStatus || cmdOpts.cacheGc) { + const { cacheCmd } = await import('./cache-cmd.js'); + await cacheCmd({ + ...globalOpts, + status: cmdOpts.cacheStatus, + gc: cmdOpts.cacheGc, + maxBytes: cmdOpts.maxBytes, + staleDays: cmdOpts.staleDays, + json: cmdOpts.json, + }); + return; + } const { importCmd } = await import('./import.js'); await importCmd({ ...globalOpts, ...cmdOpts }); }); @@ -654,9 +670,10 @@ program await codebaseCmd({ ...globalOpts, ...cmdOpts }); }); +// `teamai cache` → alias kept for backward compatibility, hidden from help program - .command('cache') - .description('Inspect and clean ~/.teamai/cache/repos') + .command('cache', { hidden: true }) + .description('Alias for: teamai import cache') .option('--status', 'Print cache status (default action)') .option('--gc', 'Run garbage collection') .option('--max-bytes ', 'Override capacity cap for --gc') From f8b8b882056eb640b2aad37f884c0fd86f78a28f Mon Sep 17 00:00:00 2001 From: jaelgeng Date: Tue, 30 Jun 2026 14:28:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor(cli):=20simplify=20command=20surfa?= =?UTF-8?q?ce=20=E2=80=94=20cache=20under=20import,=20hide=20internal=20op?= =?UTF-8?q?tions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove top-level `teamai cache` command; functionality now accessible via `teamai import --cache-status` / `--cache-gc` - Hide low-frequency codebase options from --help: --extract, --incremental, --project, --max-files, --upgrade-wiki (still functional, just not shown to avoid noise) - `teamai codebase` now shows only its core: --lint / --fix / --json --- src/index.ts | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) diff --git a/src/index.ts b/src/index.ts index 0985ffa..5bfcf95 100644 --- a/src/index.ts +++ b/src/index.ts @@ -652,11 +652,11 @@ program program .command('codebase') .description('Inspect and maintain team-codebase outputs') - .addOption(new Option('--extract [path]', 'Extract code knowledge and build graph from source')) - .addOption(new Option('--incremental', 'Only re-extract changed files (requires prior manifest)')) - .addOption(new Option('--project ', 'Project slug for extract output (default: directory name)')) - .addOption(new Option('--max-files ', 'Max source files to scan (default: 200)')) - .addOption(new Option('--upgrade-wiki', 'Migrate docs/team-codebase/ to teamwiki/ graph format')) + .addOption(new Option('--extract [path]', 'Extract code knowledge and build graph from source').hideHelp()) + .addOption(new Option('--incremental', 'Only re-extract changed files (requires prior manifest)').hideHelp()) + .addOption(new Option('--project ', 'Project slug for extract output (default: directory name)').hideHelp()) + .addOption(new Option('--max-files ', 'Max source files to scan (default: 200)').hideHelp()) + .addOption(new Option('--upgrade-wiki', 'Migrate docs/team-codebase/ to teamwiki/ graph format').hideHelp()) .option('--lint', 'Run global consistency lint over docs/team-codebase') .option('--fix', 'Apply low-risk mechanical fixes (only with --lint)') .addOption(new Option('--severity ', 'Minimum severity to report: high|medium|low|info').default('info').hideHelp()) @@ -670,21 +670,6 @@ program await codebaseCmd({ ...globalOpts, ...cmdOpts }); }); -// `teamai cache` → alias kept for backward compatibility, hidden from help -program - .command('cache', { hidden: true }) - .description('Alias for: teamai import cache') - .option('--status', 'Print cache status (default action)') - .option('--gc', 'Run garbage collection') - .option('--max-bytes ', 'Override capacity cap for --gc') - .option('--stale-days ', 'Threshold for stale-eviction (default 30)', '30') - .option('--dry-run', 'Report actions without removing files') - .option('--json', 'Machine-readable output') - .action(async (cmdOpts) => { - const globalOpts = program.opts() as GlobalOptions; - const { cacheCmd } = await import('./cache-cmd.js'); - await cacheCmd({ ...globalOpts, ...cmdOpts }); - }); program .command('review [id]')