Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d84a769949 | ||
|
|
343aa1f723 | ||
|
|
6da48c6903 |
Generated
-74
@@ -9,7 +9,6 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"windows-sys",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -108,79 +107,6 @@ version = "1.0.22"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-sys"
|
|
||||||
version = "0.52.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
|
||||||
dependencies = [
|
|
||||||
"windows-targets",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows-targets"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
|
||||||
dependencies = [
|
|
||||||
"windows_aarch64_gnullvm",
|
|
||||||
"windows_aarch64_msvc",
|
|
||||||
"windows_i686_gnu",
|
|
||||||
"windows_i686_gnullvm",
|
|
||||||
"windows_i686_msvc",
|
|
||||||
"windows_x86_64_gnu",
|
|
||||||
"windows_x86_64_gnullvm",
|
|
||||||
"windows_x86_64_msvc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_gnullvm"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_aarch64_msvc"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_gnu"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_gnullvm"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_i686_msvc"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnu"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_gnullvm"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "windows_x86_64_msvc"
|
|
||||||
version = "0.52.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zmij"
|
name = "zmij"
|
||||||
version = "1.0.12"
|
version = "1.0.12"
|
||||||
|
|||||||
@@ -12,9 +12,6 @@ serde_json = "1.0"
|
|||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
|
||||||
windows-sys = { version = "0.52", features = ["Win32_System_Threading", "Win32_Foundation"] }
|
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
lto = true
|
lto = true
|
||||||
|
|||||||
+183
-683
File diff suppressed because it is too large
Load Diff
+7
-101
@@ -6,93 +6,14 @@ mod output;
|
|||||||
|
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs;
|
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
|
|
||||||
#[cfg(unix)]
|
use commands::{gen_id, parse_command};
|
||||||
use libc;
|
|
||||||
|
|
||||||
#[cfg(windows)]
|
|
||||||
use windows_sys::Win32::Foundation::CloseHandle;
|
|
||||||
#[cfg(windows)]
|
|
||||||
use windows_sys::Win32::System::Threading::{OpenProcess, PROCESS_QUERY_LIMITED_INFORMATION};
|
|
||||||
|
|
||||||
use commands::{gen_id, parse_command, ParseError};
|
|
||||||
use connection::{ensure_daemon, send_command};
|
use connection::{ensure_daemon, send_command};
|
||||||
use flags::{clean_args, parse_flags};
|
use flags::{clean_args, parse_flags};
|
||||||
use install::run_install;
|
use install::run_install;
|
||||||
use output::{print_help, print_response};
|
use output::{print_help, print_response};
|
||||||
|
|
||||||
fn run_session(args: &[String], session: &str, json_mode: bool) {
|
|
||||||
let subcommand = args.get(1).map(|s| s.as_str());
|
|
||||||
|
|
||||||
match subcommand {
|
|
||||||
Some("list") => {
|
|
||||||
let tmp = env::temp_dir();
|
|
||||||
let mut sessions: Vec<String> = Vec::new();
|
|
||||||
|
|
||||||
if let Ok(entries) = fs::read_dir(&tmp) {
|
|
||||||
for entry in entries.flatten() {
|
|
||||||
let name = entry.file_name().to_string_lossy().to_string();
|
|
||||||
// Look for socket files (Unix) or pid files
|
|
||||||
if name.starts_with("agent-browser-") && name.ends_with(".pid") {
|
|
||||||
let session_name = name
|
|
||||||
.strip_prefix("agent-browser-")
|
|
||||||
.and_then(|s| s.strip_suffix(".pid"))
|
|
||||||
.unwrap_or("");
|
|
||||||
if !session_name.is_empty() {
|
|
||||||
// Check if session is actually running
|
|
||||||
let pid_path = tmp.join(&name);
|
|
||||||
if let Ok(pid_str) = fs::read_to_string(&pid_path) {
|
|
||||||
if let Ok(pid) = pid_str.trim().parse::<u32>() {
|
|
||||||
#[cfg(unix)]
|
|
||||||
let running = unsafe { libc::kill(pid as i32, 0) == 0 };
|
|
||||||
#[cfg(windows)]
|
|
||||||
let running = unsafe {
|
|
||||||
let handle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, 0, pid);
|
|
||||||
if handle != 0 {
|
|
||||||
CloseHandle(handle);
|
|
||||||
true
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
};
|
|
||||||
if running {
|
|
||||||
sessions.push(session_name.to_string());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if json_mode {
|
|
||||||
println!(
|
|
||||||
r#"{{"success":true,"data":{{"sessions":{}}}}}"#,
|
|
||||||
serde_json::to_string(&sessions).unwrap_or_default()
|
|
||||||
);
|
|
||||||
} else if sessions.is_empty() {
|
|
||||||
println!("No active sessions");
|
|
||||||
} else {
|
|
||||||
println!("Active sessions:");
|
|
||||||
for s in &sessions {
|
|
||||||
let marker = if s == session { "→" } else { " " };
|
|
||||||
println!("{} {}", marker, s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
None | Some(_) => {
|
|
||||||
// Just show current session
|
|
||||||
if json_mode {
|
|
||||||
println!(r#"{{"success":true,"data":{{"session":"{}"}}}}"#, session);
|
|
||||||
} else {
|
|
||||||
println!("{}", session);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let args: Vec<String> = env::args().skip(1).collect();
|
let args: Vec<String> = env::args().skip(1).collect();
|
||||||
let flags = parse_flags(&args);
|
let flags = parse_flags(&args);
|
||||||
@@ -110,29 +31,14 @@ fn main() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle session separately (doesn't need daemon)
|
|
||||||
if clean.get(0).map(|s| s.as_str()) == Some("session") {
|
|
||||||
run_session(&clean, &flags.session, flags.json);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let cmd = match parse_command(&clean, &flags) {
|
let cmd = match parse_command(&clean, &flags) {
|
||||||
Ok(c) => c,
|
Some(c) => c,
|
||||||
Err(e) => {
|
None => {
|
||||||
if flags.json {
|
eprintln!(
|
||||||
let error_type = match &e {
|
"\x1b[31mUnknown command:\x1b[0m {}",
|
||||||
ParseError::UnknownCommand { .. } => "unknown_command",
|
clean.get(0).unwrap_or(&String::new())
|
||||||
ParseError::UnknownSubcommand { .. } => "unknown_subcommand",
|
|
||||||
ParseError::MissingArguments { .. } => "missing_arguments",
|
|
||||||
};
|
|
||||||
println!(
|
|
||||||
r#"{{"success":false,"error":"{}","type":"{}"}}"#,
|
|
||||||
e.format().replace('\n', " "),
|
|
||||||
error_type
|
|
||||||
);
|
);
|
||||||
} else {
|
eprintln!("\x1b[2mRun: agent-browser --help\x1b[0m");
|
||||||
eprintln!("\x1b[31m{}\x1b[0m", e.format());
|
|
||||||
}
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -215,10 +215,6 @@ Debug:
|
|||||||
errors [--clear] View page errors
|
errors [--clear] View page errors
|
||||||
highlight <sel> Highlight element
|
highlight <sel> Highlight element
|
||||||
|
|
||||||
Sessions:
|
|
||||||
session Show current session name
|
|
||||||
session list List active sessions
|
|
||||||
|
|
||||||
Setup:
|
Setup:
|
||||||
install Install browser binaries
|
install Install browser binaries
|
||||||
install --with-deps Also install system dependencies (Linux)
|
install --with-deps Also install system dependencies (Linux)
|
||||||
|
|||||||
Reference in New Issue
Block a user