Synced from monorepo
Synced from monorepo Changes: - Workspace task snapshots only list incomplete backgrounded tasks - Quiet auth, LSP, and config warnings in the shell - Fix observability attributes for warm store errors, restore setup, remote tools, and preview denials - Fail closed when soak metrics are missing - Run plan-mode exit last in mixed tool batches - Allow /loop to store prompts that can terminate the loop - Make subagent maximum nesting depth configurable - Security: apply sandbox profile to the leader process that executes tools Source-Revision: 1adcd1f477870e4a97bacbd6be78c8a3bfbac46d
This commit is contained in:
parent
b41c75a578
commit
02d9359435
96 changed files with 2346 additions and 351 deletions
|
|
@ -30,8 +30,9 @@ use std::env;
|
|||
use std::net::SocketAddr;
|
||||
use tokio_util::sync::CancellationToken;
|
||||
use xai_grok_pager::app::{
|
||||
AgentCmd, Command, HeadlessArgs, LeaderMgmtArgs, LeaderMgmtCommand, LeaderTargetArgs,
|
||||
PagerArgs, join_early_prefetch, resolve_use_leader,
|
||||
AgentCmd, Command, HeadlessArgs, LeaderMgmtArgs, LeaderMgmtCommand, LeaderMode,
|
||||
LeaderTargetArgs, PagerArgs, join_early_prefetch, resolve_leader_mode, resolve_use_leader,
|
||||
warn_leader_disabled_by_sandbox,
|
||||
};
|
||||
use xai_grok_pager::app::{WorkspaceMgmtArgs, WorkspaceMgmtCommand, WorkspaceStartArgs};
|
||||
use xai_grok_pager::client_identity::PAGER_CLIENT_VERSION;
|
||||
|
|
@ -416,6 +417,20 @@ fn fetch_remote_settings() -> Option<xai_grok_shell::util::config::RemoteSetting
|
|||
join_early_prefetch(xai_grok_shell::agent::models::start_early_prefetch(None))
|
||||
}
|
||||
async fn run_workspace_mgmt(args: WorkspaceMgmtArgs) -> Result<()> {
|
||||
if matches!(
|
||||
&args.command,
|
||||
WorkspaceMgmtCommand::Start(_)
|
||||
| WorkspaceMgmtCommand::Restart(_)
|
||||
| WorkspaceMgmtCommand::Resume { .. }
|
||||
) && let Some(profile) = xai_grok_sandbox::requested_confinement_profile()
|
||||
{
|
||||
anyhow::bail!(
|
||||
"`grok workspace` start/restart/resume is unavailable under sandbox profile '{profile}': \
|
||||
those commands (re)activate shared-leader workspace exposure that this session cannot \
|
||||
prove is confined by that profile. Disable the profile at the source that selected it \
|
||||
(CLI, env, config, or a managed requirement)."
|
||||
);
|
||||
}
|
||||
let env_override = workspace_command_env_override();
|
||||
let remote_settings = if env_override.is_none() {
|
||||
fetch_remote_settings()
|
||||
|
|
@ -526,6 +541,7 @@ async fn workspace_start(
|
|||
&raw_config,
|
||||
remote_settings.as_ref(),
|
||||
true,
|
||||
xai_grok_sandbox::requested_confinement_profile(),
|
||||
);
|
||||
if !use_leader {
|
||||
anyhow::bail!(
|
||||
|
|
@ -1122,14 +1138,29 @@ async fn run_agent_command(
|
|||
&agent_args.mode,
|
||||
None | Some(AgentCmd::Stdio) | Some(AgentCmd::Headless(_))
|
||||
);
|
||||
let (use_leader, policy_disable_reason) = resolve_use_leader(
|
||||
let requested_confinement = xai_grok_sandbox::requested_confinement_profile();
|
||||
let LeaderMode {
|
||||
use_leader,
|
||||
policy_disable_reason,
|
||||
disabled_by_confinement,
|
||||
} = resolve_leader_mode(
|
||||
agent_args.leader,
|
||||
agent_args.no_leader,
|
||||
&raw_config,
|
||||
remote_settings.as_ref(),
|
||||
leader_eligible,
|
||||
requested_confinement,
|
||||
);
|
||||
tracing::info!(use_leader, ?policy_disable_reason, "leader mode resolved");
|
||||
tracing::info!(
|
||||
use_leader,
|
||||
?policy_disable_reason,
|
||||
sandbox_profile = ?requested_confinement,
|
||||
leader_disabled_by_sandbox = disabled_by_confinement.is_some(),
|
||||
"leader mode resolved"
|
||||
);
|
||||
if let Some(profile) = disabled_by_confinement {
|
||||
warn_leader_disabled_by_sandbox(profile);
|
||||
}
|
||||
let managed_install = is_managed_install(
|
||||
std::env::current_exe().ok(),
|
||||
&xai_grok_shell::util::grok_home::grok_home(),
|
||||
|
|
|
|||
Loading…
Reference in a new issue