103 lines
4.6 KiB
C#
103 lines
4.6 KiB
C#
using System.CommandLine;
|
|
using Toak.Commands;
|
|
|
|
namespace Toak;
|
|
|
|
public class Program
|
|
{
|
|
public static async Task<int> Main(string[] args)
|
|
{
|
|
var rootCommand = new RootCommand("Toak: High-speed Linux Dictation");
|
|
|
|
var pipeOption = new Option<bool>(["--pipe", "-p"], "Output transcription to stdout instead of typing");
|
|
var copyOption = new Option<bool>("--copy", "Copy to clipboard instead of typing");
|
|
var verboseOption = new Option<bool>(["--verbose", "-v"], "Enable detailed debug logging");
|
|
|
|
rootCommand.AddGlobalOption(verboseOption);
|
|
|
|
// Toggle Command
|
|
var toggleCmd = new Command("toggle", "Starts or stops the recording");
|
|
toggleCmd.AddOption(pipeOption);
|
|
toggleCmd.AddOption(copyOption);
|
|
toggleCmd.SetHandler(ToggleCommand.ExecuteAsync, pipeOption, copyOption, verboseOption);
|
|
rootCommand.AddCommand(toggleCmd);
|
|
|
|
// Start Command
|
|
var startCmd = new Command("start", "Explicitly starts the recording");
|
|
startCmd.SetHandler(StartCommand.ExecuteAsync, verboseOption);
|
|
rootCommand.AddCommand(startCmd);
|
|
|
|
// Stop Command
|
|
var stopCmd = new Command("stop", "Explicitly stops the recording");
|
|
stopCmd.AddOption(pipeOption);
|
|
stopCmd.AddOption(copyOption);
|
|
stopCmd.SetHandler(StopCommand.ExecuteAsync, pipeOption, copyOption, verboseOption);
|
|
rootCommand.AddCommand(stopCmd);
|
|
|
|
// Status Command
|
|
var statusCmd = new Command("status", "Outputs the current daemon status");
|
|
var jsonOption = new Option<bool>("--json", "Output status as JSON");
|
|
statusCmd.AddOption(jsonOption);
|
|
statusCmd.SetHandler(StatusCommand.ExecuteAsync, jsonOption, verboseOption);
|
|
rootCommand.AddCommand(statusCmd);
|
|
|
|
// Daemon Command
|
|
var daemonCmd = new Command("daemon", "Starts the background service");
|
|
daemonCmd.SetHandler(Core.DaemonService.StartAsync, verboseOption);
|
|
rootCommand.AddCommand(daemonCmd);
|
|
|
|
// Discard Command
|
|
var discardCmd = new Command("discard", "Abort current recording without transcribing");
|
|
discardCmd.AddOption(pipeOption);
|
|
discardCmd.SetHandler(DiscardCommand.ExecuteAsync, pipeOption, verboseOption);
|
|
rootCommand.AddCommand(discardCmd);
|
|
|
|
// Onboard Command
|
|
var onboardCmd = new Command("onboard", "Configure the application");
|
|
onboardCmd.SetHandler(OnboardCommand.ExecuteAsync, verboseOption);
|
|
rootCommand.AddCommand(onboardCmd);
|
|
|
|
// Latency Test Command
|
|
var latencyCmd = new Command("latency-test", "Benchmark full pipeline without recording");
|
|
latencyCmd.SetHandler(LatencyTestCommand.ExecuteAsync, verboseOption);
|
|
rootCommand.AddCommand(latencyCmd);
|
|
|
|
// Show Command
|
|
var showCmd = new Command("show", "Show current configuration");
|
|
showCmd.SetHandler(ShowCommand.ExecuteAsync, verboseOption);
|
|
rootCommand.AddCommand(showCmd);
|
|
|
|
// Config Command
|
|
var configCmd = new Command("config", "Update a specific configuration setting");
|
|
var keyArg = new Argument<string>("key", "Configuration key (e.g., llm, whisper, lang)");
|
|
var valArg = new Argument<string>("value", "Configuration value");
|
|
configCmd.AddArgument(keyArg);
|
|
configCmd.AddArgument(valArg);
|
|
configCmd.SetHandler(ConfigUpdaterCommand.ExecuteAsync, keyArg, valArg, verboseOption);
|
|
rootCommand.AddCommand(configCmd);
|
|
|
|
// Stats Command
|
|
var statsCmd = new Command("stats", "Display usage statistics and analytics");
|
|
statsCmd.SetHandler(StatsCommand.ExecuteAsync, verboseOption);
|
|
rootCommand.AddCommand(statsCmd);
|
|
|
|
// History Command
|
|
var historyCmd = new Command("history", "Display recent transcriptions with timestamps");
|
|
var numArg = new Option<int>(["-n", "--num"], () => 10, "Number of recent entries to show");
|
|
var grepArg = new Option<string>("--grep", "Search through transcription history");
|
|
var exportArg = new Option<string>("--export", "Export transcription history to a Markdown file");
|
|
var shredArg = new Option<bool>("--shred", "Securely delete transcription history");
|
|
historyCmd.AddOption(numArg);
|
|
historyCmd.AddOption(grepArg);
|
|
historyCmd.AddOption(exportArg);
|
|
historyCmd.AddOption(shredArg);
|
|
historyCmd.SetHandler(HistoryCommand.ExecuteAsync, numArg, grepArg, exportArg, shredArg, verboseOption);
|
|
rootCommand.AddCommand(historyCmd);
|
|
|
|
// Skill Command
|
|
rootCommand.AddCommand(SkillCommand.CreateCommand(verboseOption));
|
|
|
|
return await rootCommand.InvokeAsync(args);
|
|
}
|
|
}
|