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:
parent
500129c714
commit
dd04f397b1
367 changed files with 29489 additions and 10051 deletions
|
|
@ -6,7 +6,7 @@ use std::sync::{Arc, OnceLock};
|
|||
use std::time::Instant;
|
||||
|
||||
use dashmap::DashMap;
|
||||
use xai_file_utils::events::{Event, EventWriter, ToolOutcome};
|
||||
use xai_file_utils::events::{Event, EventWriter, ToolCompletedSource, ToolOutcome};
|
||||
use xai_file_utils::queue::UploadQueueStats;
|
||||
use xai_tool_protocol::{ToolServerLifecycleStatus, ToolServerStatusPayload};
|
||||
|
||||
|
|
@ -442,11 +442,13 @@ impl ActivityTracker {
|
|||
// captured writer handle keeps the file open). `duration_ms` is always
|
||||
// truthful because the start time is paired with the writer.
|
||||
if let Some((_, (started_ms, writer))) = self.call_started_ms.remove(call_id) {
|
||||
let duration_ms = now.saturating_sub(started_ms);
|
||||
// Workspace = hub/proxy hop; join package durations on shell rows (no source).
|
||||
writer.emit(Event::ToolCompleted {
|
||||
tool_name,
|
||||
duration_ms,
|
||||
duration_ms: now.saturating_sub(started_ms),
|
||||
outcome,
|
||||
tool_call_id: call_id.to_owned(),
|
||||
source: ToolCompletedSource::Workspace,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -1879,6 +1881,7 @@ mod tests {
|
|||
assert_eq!(events[1]["type"], "tool_completed");
|
||||
assert_eq!(events[1]["tool_name"], "read_file");
|
||||
assert_eq!(events[1]["outcome"], "success");
|
||||
assert_eq!(events[1]["source"], "workspace");
|
||||
assert!(
|
||||
events[1]["duration_ms"].as_u64().is_some(),
|
||||
"ToolCompleted must carry a duration_ms"
|
||||
|
|
|
|||
Loading…
Reference in a new issue