Synced from monorepo
Synced from monorepo Changes: - Workspace server: report `/ready` as failed with dwell on hub connect failure - Refresh OIDC token for the Grok agent in the shell - ACP terminal output recorder - Cross-platform provider auth commands in the shell - Default `/resume` to Grok sessions with a hint for hidden external sessions - Resume sessions by title with `--resume` - Limit app-builder archive size - Data-driven tag labels for slash commands - Doctor fixes for tmux - Custom provider gateways and subprocess environment policy in the shell - `/tutorial` — opt-in onboarding tour of Grok Build - Soft and required CLI version checks in the shell - Privacy banner env overrides survive live settings updates - Add remote flag to override the image-edit model - Return profile fields from auth info even when the access token is expired - Add edit control on queued prompt rows - Keep fail-closed policy when clearing orphans with no team - Setting to disable the Ctrl+Space/F8 voice shortcut - Pass `--raw` to pw-record so Linux dictation works on older PipeWire - Validate git URLs when adding marketplace entries - Stop shipping stale tool-doc parameter and tool names - Re-point dashboard attach after `/fork` only when the parent was attached - Surface Grok Computer media-generation results as file-path chunks - Clear web background-task tray on kill and keep the task description - Show privacy upsell banner in agent view until acted on - Add tools-server client callback surface - Protect persistent global hook sources Source-Revision: 95d84f443eddcbed6cbfd6eed22e2eafe6b3939d
This commit is contained in:
parent
a5727c5960
commit
69f0ba880a
286 changed files with 22939 additions and 9624 deletions
|
|
@ -266,6 +266,17 @@ fn clone_cli_command(url: &str, branch: Option<&str>, dest: &Path) -> std::proce
|
|||
cmd
|
||||
}
|
||||
|
||||
/// Probe whether `url` is a reachable git repository via a timed
|
||||
/// `git ls-remote`, without touching any cache. Used to reject non-git URLs
|
||||
/// (e.g. MCP endpoints) at add time instead of persisting a source that
|
||||
/// fails on every scan.
|
||||
pub fn probe_git_remote(url: &str) -> Result<(), String> {
|
||||
let url = xai_grok_agent::plugins::git_install::validate_git_url(url)?;
|
||||
let mut cmd = git_command();
|
||||
cmd.args(["ls-remote", "--", url, "HEAD"]);
|
||||
run_git_timed(&mut cmd, "ls-remote", NETWORK_OP_TIMEOUT)
|
||||
}
|
||||
|
||||
fn fetch_cli_command(repo_dir: &Path, branch: Option<&str>) -> std::process::Command {
|
||||
let mut cmd = git_command();
|
||||
cmd.current_dir(repo_dir).args([
|
||||
|
|
@ -513,6 +524,30 @@ mod tests {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn probe_git_remote_accepts_git_repo() {
|
||||
if !git_available() {
|
||||
eprintln!("skipping git-dependent test: git binary not available");
|
||||
return;
|
||||
}
|
||||
let remote = tempfile::tempdir().unwrap();
|
||||
init_remote_repo(remote.path());
|
||||
let url = remote.path().to_string_lossy().to_string();
|
||||
probe_git_remote(&url).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn probe_git_remote_rejects_non_repo() {
|
||||
if !git_available() {
|
||||
eprintln!("skipping git-dependent test: git binary not available");
|
||||
return;
|
||||
}
|
||||
let dir = tempfile::tempdir().unwrap();
|
||||
let url = dir.path().to_string_lossy().to_string();
|
||||
let err = probe_git_remote(&url).unwrap_err();
|
||||
assert!(err.contains("ls-remote failed"), "{err}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn run_git_timed_kills_hung_process() {
|
||||
let mut cmd = Command::new("sleep");
|
||||
|
|
|
|||
Loading…
Reference in a new issue