34 std::string host =
"localhost";
38 for (
size_t i = 0; i < args.size(); ++i) {
39 if (args[i] ==
"--host" && i + 1 < args.size()) {
42 }
else if (args[i] ==
"--port" && i + 1 < args.size()) {
43 port = std::stoi(args[i + 1]);
48 std::cout <<
"Connecting to " << host <<
":" << port <<
"..." << std::endl;
50 auto status = g_network_client->Connect(host, port);
53 std::cout <<
"✓ Connected to yaze-server" << std::endl;
55 std::cerr <<
"✗ Connection failed: " << status.message() << std::endl;
64 if (!g_network_client->IsConnected()) {
65 return absl::FailedPreconditionError(
66 "Not connected. Run: z3ed net connect");
69 std::string session_code;
73 for (
size_t i = 0; i < args.size(); ++i) {
74 if (args[i] ==
"--code" && i + 1 < args.size()) {
75 session_code = args[i + 1];
77 }
else if (args[i] ==
"--username" && i + 1 < args.size()) {
78 username = args[i + 1];
83 if (session_code.empty() || username.empty()) {
84 return absl::InvalidArgumentError(
85 "Usage: z3ed net join --code <CODE> --username <NAME>");
88 std::cout <<
"Joining session " << session_code <<
" as " << username <<
"..."
91 auto status = g_network_client->JoinSession(session_code, username);
94 std::cout <<
"✓ Joined session successfully" << std::endl;
96 std::cerr <<
"✗ Failed to join: " << status.message() << std::endl;
121 if (!g_network_client->IsConnected()) {
122 return absl::FailedPreconditionError(
123 "Not connected. Run: z3ed net connect");
127 std::cout <<
"Usage:\n";
128 std::cout <<
" z3ed net proposal submit --description <DESC> --data <JSON>\n";
129 std::cout <<
" z3ed net proposal status --id <ID>\n";
130 std::cout <<
" z3ed net proposal wait --id <ID> [--timeout <SEC>]\n";
131 return absl::OkStatus();
134 std::string subcommand = args[0];
135 std::vector<std::string> subargs(args.begin() + 1, args.end());
137 if (subcommand ==
"submit") {
139 }
else if (subcommand ==
"status") {
141 }
else if (subcommand ==
"wait") {
144 return absl::InvalidArgumentError(
145 absl::StrFormat(
"Unknown proposal subcommand: %s", subcommand));
150 std::string description;
151 std::string data_json;
152 std::string username =
"cli_user";
154 for (
size_t i = 0; i < args.size(); ++i) {
155 if (args[i] ==
"--description" && i + 1 < args.size()) {
156 description = args[i + 1];
158 }
else if (args[i] ==
"--data" && i + 1 < args.size()) {
159 data_json = args[i + 1];
161 }
else if (args[i] ==
"--username" && i + 1 < args.size()) {
162 username = args[i + 1];
167 if (description.empty() || data_json.empty()) {
168 return absl::InvalidArgumentError(
169 "Usage: z3ed net proposal submit --description <DESC> --data <JSON>");
172 std::cout <<
"Submitting proposal..." << std::endl;
173 std::cout <<
" Description: " << description << std::endl;
175 auto status = g_network_client->SubmitProposal(
182 std::cout <<
"✓ Proposal submitted" << std::endl;
183 std::cout <<
" Waiting for approval from host..." << std::endl;
185 std::cerr <<
"✗ Failed to submit: " << status.message() << std::endl;
192 std::string proposal_id;
194 for (
size_t i = 0; i < args.size(); ++i) {
195 if (args[i] ==
"--id" && i + 1 < args.size()) {
196 proposal_id = args[i + 1];
201 if (proposal_id.empty()) {
202 return absl::InvalidArgumentError(
203 "Usage: z3ed net proposal status --id <ID>");
206 auto status_result = g_network_client->GetProposalStatus(proposal_id);
208 if (status_result.ok()) {
209 std::cout <<
"Proposal " << proposal_id.substr(0, 8) <<
"..." << std::endl;
210 std::cout <<
" Status: " << *status_result << std::endl;
212 std::cerr <<
"✗ Failed to get status: " << status_result.status().message()
216 return status_result.status();
220 std::string proposal_id;
221 int timeout_seconds = 60;
223 for (
size_t i = 0; i < args.size(); ++i) {
224 if (args[i] ==
"--id" && i + 1 < args.size()) {
225 proposal_id = args[i + 1];
227 }
else if (args[i] ==
"--timeout" && i + 1 < args.size()) {
228 timeout_seconds = std::stoi(args[i + 1]);
233 if (proposal_id.empty()) {
234 return absl::InvalidArgumentError(
235 "Usage: z3ed net proposal wait --id <ID> [--timeout <SEC>]");
238 std::cout <<
"Waiting for approval (timeout: " << timeout_seconds <<
"s)..."
241 auto approved_result = g_network_client->WaitForApproval(
246 if (approved_result.ok()) {
247 if (*approved_result) {
248 std::cout <<
"✓ Proposal approved!" << std::endl;
250 std::cout <<
"✗ Proposal rejected" << std::endl;
253 std::cerr <<
"✗ Error: " << approved_result.status().message() << std::endl;
256 return approved_result.status();