mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-04-10 19:33:37 +08:00
feat: add ecc2 delegate progress signals
This commit is contained in:
@@ -192,7 +192,11 @@ struct AggregateUsage {
|
|||||||
struct DelegatedChildSummary {
|
struct DelegatedChildSummary {
|
||||||
session_id: String,
|
session_id: String,
|
||||||
state: SessionState,
|
state: SessionState,
|
||||||
|
approval_backlog: usize,
|
||||||
handoff_backlog: usize,
|
handoff_backlog: usize,
|
||||||
|
tokens_used: u64,
|
||||||
|
files_changed: u32,
|
||||||
|
duration_secs: u64,
|
||||||
task_preview: String,
|
task_preview: String,
|
||||||
branch: Option<String>,
|
branch: Option<String>,
|
||||||
last_output_preview: Option<String>,
|
last_output_preview: Option<String>,
|
||||||
@@ -2483,6 +2487,11 @@ impl Dashboard {
|
|||||||
match self.db.get_session(&child_id) {
|
match self.db.get_session(&child_id) {
|
||||||
Ok(Some(session)) => {
|
Ok(Some(session)) => {
|
||||||
team.total += 1;
|
team.total += 1;
|
||||||
|
let approval_backlog = self
|
||||||
|
.approval_queue_counts
|
||||||
|
.get(&child_id)
|
||||||
|
.copied()
|
||||||
|
.unwrap_or(0);
|
||||||
let handoff_backlog = match self.db.unread_task_handoff_count(&child_id)
|
let handoff_backlog = match self.db.unread_task_handoff_count(&child_id)
|
||||||
{
|
{
|
||||||
Ok(count) => count,
|
Ok(count) => count,
|
||||||
@@ -2505,9 +2514,13 @@ impl Dashboard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
route_candidates.push(DelegatedChildSummary {
|
route_candidates.push(DelegatedChildSummary {
|
||||||
|
approval_backlog,
|
||||||
handoff_backlog,
|
handoff_backlog,
|
||||||
state: state.clone(),
|
state: state.clone(),
|
||||||
session_id: child_id.clone(),
|
session_id: child_id.clone(),
|
||||||
|
tokens_used: session.metrics.tokens_used,
|
||||||
|
files_changed: session.metrics.files_changed,
|
||||||
|
duration_secs: session.metrics.duration_secs,
|
||||||
task_preview: truncate_for_dashboard(&session.task, 40),
|
task_preview: truncate_for_dashboard(&session.task, 40),
|
||||||
branch: session
|
branch: session
|
||||||
.worktree
|
.worktree
|
||||||
@@ -2521,9 +2534,13 @@ impl Dashboard {
|
|||||||
.map(|line| truncate_for_dashboard(&line.text, 48)),
|
.map(|line| truncate_for_dashboard(&line.text, 48)),
|
||||||
});
|
});
|
||||||
delegated.push(DelegatedChildSummary {
|
delegated.push(DelegatedChildSummary {
|
||||||
|
approval_backlog,
|
||||||
handoff_backlog,
|
handoff_backlog,
|
||||||
state,
|
state,
|
||||||
session_id: child_id,
|
session_id: child_id,
|
||||||
|
tokens_used: session.metrics.tokens_used,
|
||||||
|
files_changed: session.metrics.files_changed,
|
||||||
|
duration_secs: session.metrics.duration_secs,
|
||||||
task_preview: truncate_for_dashboard(&session.task, 40),
|
task_preview: truncate_for_dashboard(&session.task, 40),
|
||||||
branch: session
|
branch: session
|
||||||
.worktree
|
.worktree
|
||||||
@@ -3002,10 +3019,14 @@ impl Dashboard {
|
|||||||
lines.push("Delegates".to_string());
|
lines.push("Delegates".to_string());
|
||||||
for child in &self.selected_child_sessions {
|
for child in &self.selected_child_sessions {
|
||||||
let mut child_line = format!(
|
let mut child_line = format!(
|
||||||
"- {} [{}] | backlog {} | task {}",
|
"- {} [{}] | approvals {} | backlog {} | progress {} tok / {} files / {} | task {}",
|
||||||
format_session_id(&child.session_id),
|
format_session_id(&child.session_id),
|
||||||
session_state_label(&child.state),
|
session_state_label(&child.state),
|
||||||
|
child.approval_backlog,
|
||||||
child.handoff_backlog,
|
child.handoff_backlog,
|
||||||
|
format_token_count(child.tokens_used),
|
||||||
|
child.files_changed,
|
||||||
|
format_duration(child.duration_secs),
|
||||||
child.task_preview
|
child.task_preview
|
||||||
);
|
);
|
||||||
if let Some(branch) = child.branch.as_ref() {
|
if let Some(branch) = child.branch.as_ref() {
|
||||||
@@ -4503,7 +4524,11 @@ diff --git a/src/next.rs b/src/next.rs
|
|||||||
dashboard.selected_child_sessions = vec![DelegatedChildSummary {
|
dashboard.selected_child_sessions = vec![DelegatedChildSummary {
|
||||||
session_id: "delegate-12345678".to_string(),
|
session_id: "delegate-12345678".to_string(),
|
||||||
state: SessionState::Running,
|
state: SessionState::Running,
|
||||||
|
approval_backlog: 1,
|
||||||
handoff_backlog: 2,
|
handoff_backlog: 2,
|
||||||
|
tokens_used: 1_280,
|
||||||
|
files_changed: 3,
|
||||||
|
duration_secs: 12,
|
||||||
task_preview: "Implement rust tui delegate board".to_string(),
|
task_preview: "Implement rust tui delegate board".to_string(),
|
||||||
branch: Some("ecc/delegate-12345678".to_string()),
|
branch: Some("ecc/delegate-12345678".to_string()),
|
||||||
last_output_preview: Some("Investigating pane selection behavior".to_string()),
|
last_output_preview: Some("Investigating pane selection behavior".to_string()),
|
||||||
@@ -4512,7 +4537,7 @@ diff --git a/src/next.rs b/src/next.rs
|
|||||||
let text = dashboard.selected_session_metrics_text();
|
let text = dashboard.selected_session_metrics_text();
|
||||||
assert!(
|
assert!(
|
||||||
text.contains(
|
text.contains(
|
||||||
"- delegate [Running] | backlog 2 | task Implement rust tui delegate board | branch ecc/delegate-12345678"
|
"- delegate [Running] | approvals 1 | backlog 2 | progress 1,280 tok / 3 files / 00:00:12 | task Implement rust tui delegate board | branch ecc/delegate-12345678"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
assert!(text.contains(" last output Investigating pane selection behavior"));
|
assert!(text.contains(" last output Investigating pane selection behavior"));
|
||||||
@@ -5040,6 +5065,10 @@ diff --git a/src/next.rs b/src/next.rs
|
|||||||
let mut dashboard = test_dashboard(vec![lead.clone(), child.clone()], 0);
|
let mut dashboard = test_dashboard(vec![lead.clone(), child.clone()], 0);
|
||||||
dashboard.db.insert_session(&lead).unwrap();
|
dashboard.db.insert_session(&lead).unwrap();
|
||||||
dashboard.db.insert_session(&child).unwrap();
|
dashboard.db.insert_session(&child).unwrap();
|
||||||
|
dashboard
|
||||||
|
.db
|
||||||
|
.update_metrics("worker-12345678", &child.metrics)
|
||||||
|
.unwrap();
|
||||||
dashboard
|
dashboard
|
||||||
.db
|
.db
|
||||||
.send_message(
|
.send_message(
|
||||||
@@ -5057,10 +5086,17 @@ diff --git a/src/next.rs b/src/next.rs
|
|||||||
"Reviewing delegate metrics board layout",
|
"Reviewing delegate metrics board layout",
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
dashboard
|
||||||
|
.approval_queue_counts
|
||||||
|
.insert("worker-12345678".into(), 2);
|
||||||
|
|
||||||
dashboard.sync_selected_lineage();
|
dashboard.sync_selected_lineage();
|
||||||
|
|
||||||
assert_eq!(dashboard.selected_child_sessions.len(), 1);
|
assert_eq!(dashboard.selected_child_sessions.len(), 1);
|
||||||
|
assert_eq!(dashboard.selected_child_sessions[0].approval_backlog, 2);
|
||||||
|
assert_eq!(dashboard.selected_child_sessions[0].tokens_used, 128);
|
||||||
|
assert_eq!(dashboard.selected_child_sessions[0].files_changed, 2);
|
||||||
|
assert_eq!(dashboard.selected_child_sessions[0].duration_secs, 12);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
dashboard.selected_child_sessions[0].task_preview,
|
dashboard.selected_child_sessions[0].task_preview,
|
||||||
"Implement delegate metrics board for EC…"
|
"Implement delegate metrics board for EC…"
|
||||||
@@ -5070,7 +5106,9 @@ diff --git a/src/next.rs b/src/next.rs
|
|||||||
Some("ecc/worker")
|
Some("ecc/worker")
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
dashboard.selected_child_sessions[0].last_output_preview.as_deref(),
|
dashboard.selected_child_sessions[0]
|
||||||
|
.last_output_preview
|
||||||
|
.as_deref(),
|
||||||
Some("Reviewing delegate metrics board layout")
|
Some("Reviewing delegate metrics board layout")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user