func Tesses.CrossLang.Shell.Default(dd)
{
    each(var flag : dd.Flags)
    {
        if(flag == "version")
        {
            Console.WriteLine($"VM version: {VM.RuntimeVersion}");
            Console.WriteLine($"Bytecode version: {VM.BytecodeVersion}");
            Console.WriteLine($"Shell version: {main.File.Version}");
            Console.WriteLine($"Args version: {Tesses.CrossLang.Args.File.Version}");
            Console.WriteLine($"BuildTool version: {Tesses.CrossLang.BuildTool.File.Version}");
            return 0;
        }
    }
    Console.WriteLine($"USAGE: crosslang COMMAND [command-arguments]");
    Console.WriteLine("COMMANDS:");
    Console.WriteLine("new: create new project");
    Console.WriteLine("build: build a project");
    Console.WriteLine("test: test a project");
    Console.WriteLine("run: run a project");
	Console.WriteLine("debug: debug a project");
	Console.WriteLine("install-console: install a console application");
	Console.WriteLine("install-template: install a project template");
	Console.WriteLine("install-tool: install a tool");
    Console.WriteLine("install-webapp: install a web application");
	Console.WriteLine("console: run or list installed console applications");
	Console.WriteLine("webapp: run or list installed web applications");
    Console.WriteLine("webapp-test: test a web application in place");
    Console.WriteLine("tool: run or list installed tools");
	Console.WriteLine("tool-test: test a tool in place");
	Console.WriteLine("add-project: add project as a dependency");
	Console.WriteLine("add-dependency: add package as dependency");
	Console.WriteLine("upload-package: upload package to cpkg");
	Console.WriteLine("token: get a session token for CI/CD pipeline (its interactive), you would put the token in the secrets manually.");
    Console.WriteLine("login: login to cpkg");
	Console.WriteLine("logout: logout from cpkg");
    Console.WriteLine("configdir: print the config directory");
    Console.WriteLine("update-shell: update the shell"); //this command is handled by runtime so we don't have to implement it here
    Console.WriteLine("docs: view docs for project, crvm or reference");
    return 0;
}