mirror of
https://github.com/callstack/agent-device.git
synced 2026-09-14 20:06:34 +08:00
ae74c51abd
* chore: ratchet architecture dependency graph Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test: ratchet agent-facing output economy Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * feat: derive command navigation explanations Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: keep efficiency checks fallow-clean Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(layering): enforce back-edge ceiling monotonicity and cover root src files Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * ci(layering): pin back-edge-ceiling ratchet to PR merge-base Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * test(output-economy): baseline-independent actionability floors, policy-derived error, like-for-like screenshot surfaces Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix(explain): resolve true CLI aliases, canonical usage, and derived owners Surface true CLI aliases from parser normalization (long-press, metrics, tap, launch, relaunch) distinct from catalog keys, preserving implied-flag semantics (relaunch => open --relaunch). Extract the canonical single-line usage builder to src/utils/cli-usage.ts so schemas without usageOverride include positionals and flags. Replace guessed handler paths with a completeness-checked daemon-route owner map keyed by the closed DaemonCommandRoute union, fixing silently-dropped non-kebab routes (reactNative, recordTrace) and generic dispatch. Add table-driven coverage for aliases, synthesized usage, split-family/route-variant/dispatch owners, structured output, and explain:command CLI exit/stdout/stderr. Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: enforce exact ratchets and compact command explain Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: colocate command ownership metadata Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: bind daemon owners to production routes Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: preserve generic dispatch bundling Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: enforce monotonic output budgets Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: Michał Pierzchała <thymikee@gmail.com> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import fs from 'node:fs';
|
|
import path from 'node:path';
|
|
import { explainCommand, formatCommandExplanation } from '../src/commands/command-explain.ts';
|
|
import { getDaemonRouteOwnerFiles } from '../src/daemon/request-handler-chain.ts';
|
|
|
|
const repoRoot = path.resolve(import.meta.dirname, '..');
|
|
const args = process.argv.slice(2);
|
|
const json = args.includes('--json');
|
|
const full = args.includes('--full');
|
|
const query = args.find((arg) => arg !== '--json' && arg !== '--full');
|
|
|
|
if (!query) {
|
|
process.stderr.write('Usage: pnpm explain:command <command-or-catalog-key> [--json] [--full]\n');
|
|
process.exitCode = 1;
|
|
} else {
|
|
const daemonRouteOwnerFiles = getDaemonRouteOwnerFiles();
|
|
const result = explainCommand(query, {
|
|
fileExists: (file) => fs.existsSync(path.join(repoRoot, file)),
|
|
daemonRouteOwnerFiles,
|
|
});
|
|
if (!result.found) {
|
|
const suffix =
|
|
result.suggestions.length === 0 ? '' : ` Did you mean: ${result.suggestions.join(', ')}?`;
|
|
process.stderr.write(`Unknown command "${result.query}".${suffix}\n`);
|
|
process.exitCode = 1;
|
|
} else {
|
|
process.stdout.write(
|
|
json
|
|
? `${JSON.stringify(result.explanation, null, 2)}\n`
|
|
: `${formatCommandExplanation(result.explanation, { detail: full ? 'full' : 'compact' })}\n`,
|
|
);
|
|
}
|
|
}
|