Unlucky Launcher v0.0.1-alpha
CI / fmt (rustfmt --check) (push) Canceled after 0s
CI / clippy (ubuntu-latest) (push) Canceled after 0s
CI / clippy (windows-latest) (push) Canceled after 0s
CI / test (ubuntu-latest) (push) Canceled after 0s
CI / test (windows-latest) (push) Canceled after 0s
CI / build release (ubuntu-latest) (push) Canceled after 0s
CI / build release (windows-latest) (push) Canceled after 0s
Guards / core 零 UI 守门 (push) Canceled after 0s
Guards / 文件行数 ≤400 守门 (push) Canceled after 0s
Guards / 依赖许可与来源(cargo-deny) (push) Canceled after 0s
CI / fmt (rustfmt --check) (push) Canceled after 0s
CI / clippy (ubuntu-latest) (push) Canceled after 0s
CI / clippy (windows-latest) (push) Canceled after 0s
CI / test (ubuntu-latest) (push) Canceled after 0s
CI / test (windows-latest) (push) Canceled after 0s
CI / build release (ubuntu-latest) (push) Canceled after 0s
CI / build release (windows-latest) (push) Canceled after 0s
Guards / core 零 UI 守门 (push) Canceled after 0s
Guards / 文件行数 ≤400 守门 (push) Canceled after 0s
Guards / 依赖许可与来源(cargo-deny) (push) Canceled after 0s
Rust 原生单文件 Minecraft 启动器:CLI 完整可用(install/launch/accounts/java/diagnose/agent), MCP server 接入外部 Agent 工具,GUI 开发中。
This commit is contained in:
commit
bc41dfcf7d
517 files changed
+92844
No files matched your search
@@ -0,0 +1,54 @@
|
||||
//! 进程入口的可测试形态:解析 → 分发 → 打印 → 退出码。
|
||||
//!
|
||||
//! `main` 只做两件事:把真实 stdio 传进来、把返回码交给进程。
|
||||
|
||||
use std::io::Write;
|
||||
|
||||
use crate::cli;
|
||||
use crate::commands;
|
||||
use crate::error::EXIT_OK;
|
||||
use crate::output;
|
||||
|
||||
/// 跑一条命令行,返回进程退出码(0 / 1 / 2)。
|
||||
///
|
||||
/// `args` 不含 argv[0]。`--json` 与 `--quiet` 在解析失败时也要生效,
|
||||
/// 因此这里先扫一遍原始参数,而不是依赖解析结果。
|
||||
pub fn run(args: &[String], out: &mut dyn Write, err: &mut dyn Write) -> i32 {
|
||||
let json = args.iter().any(|arg| arg == "--json");
|
||||
let quiet = args.iter().any(|arg| arg == "--quiet" || arg == "-q");
|
||||
|
||||
let invocation = match cli::parse(args) {
|
||||
Ok(invocation) => invocation,
|
||||
Err(error) => {
|
||||
let _ = output::print_error(&error, json, out, err);
|
||||
return error.exit_code();
|
||||
}
|
||||
};
|
||||
|
||||
// `ull agent serve` 提前分流:stdio 形态下 stdout 是 JSON-RPC 流,
|
||||
// 任何一行额外输出(包括返回后的 Report)都会让客户端解析失败。
|
||||
if let cli::Command::AgentServe(serve_args) = &invocation.command {
|
||||
return match crate::commands::agent::run_serve_with(&invocation.globals, serve_args, err) {
|
||||
Ok(code) => code,
|
||||
Err(error) => {
|
||||
let _ = output::print_error(&error, json, out, err);
|
||||
error.exit_code()
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
match commands::run(&invocation) {
|
||||
Ok(outcome) => {
|
||||
if let Err(write_err) = output::print_report(&outcome, json, quiet, out, err) {
|
||||
// 输出写不出去(管道早闭)不再折腾,直接按内部错误退出。
|
||||
let _ = writeln!(err, "错误: 写输出失败:{write_err}");
|
||||
return crate::error::EXIT_INTERNAL;
|
||||
}
|
||||
EXIT_OK
|
||||
}
|
||||
Err(error) => {
|
||||
let _ = output::print_error(&error, json, out, err);
|
||||
error.exit_code()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user