Synced from monorepo

Synced from monorepo

Changes:
- Temporarily disable session share link creation in the TUI
- Do not approve plan on empty Enter from the revise prompt
- Expose chat product Skills via ACP available_commands_update
- Return immediately from a blocking wait on an already-completed ACP task
- Split headless pager module for clearer structure
- Stop git worktree prune from removing user registrations on resume
- Use compaction sampler tokenizer for item token counts
- Opt-in extra root CAs via GROK_EXTRA_CA_BUNDLE
- Cancel all session subagents when the user stops
- Let the session persistence actor exit when its session ends
- Make fullscreen terminal resize much cheaper on long sessions
- Report honestly from kill_task when an ACP task does not exist
- Hide /usage for external-auth deployments
- Forward the history-load trailer’s computer_reason to the client
- Remove ineffective no-op tool reminder
- Declare slash-command screen-mode support in one place
- Keep settings enum picker on the committed value until Enter
- Reap a PTY’s full process tree
- Stream tool calls from headless mode over ACP
- Bridge gateway task lifecycle to ACP for chat session background tasks
- Don’t warn about truncated history on a suppressed replay
- Fit full-replace summarizer input and recover on context-length errors
- Stop dropping agents over an unrecognized frontmatter color
- Add /undo as a slash alias for /rewind
- Harden sleep/wake token-refresh paths against forced re-login
- Add session/list ACP method
- Give each sampling backend its own conversion module
- Treat an unenrolled child process as a lint error
- Suppress the cancelled marker on send-now wake turns
- Stop tearing down Roslyn on every edit, and read C# diagnostics

Source-Revision: 2a28b4a86cfc4a4c133c35b7fc2a6a9964387c39
This commit is contained in:
grokkybara[bot] 2026-07-30 19:07:40 +00:00
commit dd04f397b1
367 changed files with 29489 additions and 10051 deletions

View file

@ -901,6 +901,7 @@ mod tests {
.stderr(std::process::Stdio::null())
.envs(xai_tty_utils::pager_env());
xai_tty_utils::detach_std_command(&mut cmd);
#[allow(clippy::disallowed_methods)] // test fixture; the test reaps it
let child = cmd.spawn().expect("spawn fake persistent leader");
let pid = child.id();
let tree = TestProcessTree::try_attach(pid, "fake persistent leader")

View file

@ -58,6 +58,10 @@ impl LogEntry {
}
}
/// Requests kept for inspection; each holds a whole conversation, so an
/// unbounded log outgrows what it is testing. `request_count` stays exact.
const MAX_LOGGED_REQUESTS: usize = 1024;
pub struct RequestLog {
count: AtomicU32,
entries: std::sync::Mutex<Vec<LogEntry>>,
@ -80,7 +84,11 @@ impl RequestLog {
headers: Vec<(String, String)>,
) {
self.count.fetch_add(1, Ordering::SeqCst);
self.entries.lock().unwrap().push(LogEntry {
let mut entries = self.entries.lock().unwrap();
if entries.len() >= MAX_LOGGED_REQUESTS {
entries.remove(0);
}
entries.push(LogEntry {
method: method.to_string(),
path: path.to_string(),
body: body.cloned(),

View file

@ -1006,6 +1006,7 @@ mod tests {
let mut command = std::process::Command::new("/bin/sh");
command.args(["-c", "exit 23"]);
xai_tty_utils::detach_std_command(&mut command);
#[allow(clippy::disallowed_methods)] // test fixture; the test reaps it
let mut child = command.spawn().expect("spawn observation fixture");
let deadline = std::time::Instant::now() + Duration::from_secs(2);
while !process_has_exited_without_reap(child.id(), "observation fixture")