Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion bt-daemon/src/translate/antigravity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ struct AntigravityTranslator {
session_id: String,
session_span_id: String,
root_span_id: String,
session_parent_span_ids: Vec<String>,
root_open: bool,
root_ended: bool,
turn: Option<Turn>,
Expand All @@ -84,6 +85,7 @@ impl AntigravityTranslator {
session_id: session_id.to_string(),
session_span_id: root.clone(),
root_span_id: root,
session_parent_span_ids: Vec::new(),
root_open: false,
root_ended: false,
turn: None,
Expand Down Expand Up @@ -112,6 +114,7 @@ impl AntigravityTranslator {
if let Some(external_root) = external_root_span_id {
self.root_span_id = external_root;
}
self.session_parent_span_ids = parent_span_id.into_iter().collect();

let workspace = event
.payload
Expand Down Expand Up @@ -152,7 +155,7 @@ impl AntigravityTranslator {
ops.push(SpanOp::Insert(SpanRow {
span_id: self.session_span_id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: parent_span_id.into_iter().collect(),
parent_span_ids: self.session_parent_span_ids.clone(),
name: format!("Antigravity: {label}"),
span_type: SpanType::Task,
start_ms: Some(event.ts_ms),
Expand Down Expand Up @@ -486,6 +489,7 @@ impl AntigravityTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: turn.span_id,
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![self.session_span_id.clone()],
end_ms: Some(ts_ms),
output: turn.last_output,
metadata: Some(json!({"turn_number":turn.number})),
Expand All @@ -503,6 +507,7 @@ impl AntigravityTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: self.session_span_id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: self.session_parent_span_ids.clone(),
end_ms: Some(ts_ms),
error,
..Default::default()
Expand Down
36 changes: 31 additions & 5 deletions bt-daemon/src/translate/claude.rs
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ struct TranscriptCursor {

struct Subagent {
span_id: String,
parent_span_id: String,
transcript_path: Option<String>,
}

Expand Down Expand Up @@ -248,6 +249,7 @@ struct ClaudeTranslator {
session_id: String,
session_span_id: String,
root_span_id: String,
session_parent_span_ids: Vec<String>,
root_open: bool,
root_ended: bool,
turn: Option<Turn>,
Expand Down Expand Up @@ -280,6 +282,7 @@ impl ClaudeTranslator {
session_id: session_id.to_string(),
session_span_id: root.clone(),
root_span_id: root,
session_parent_span_ids: Vec::new(),
root_open: false,
root_ended: false,
turn: None,
Expand Down Expand Up @@ -325,6 +328,7 @@ impl ClaudeTranslator {
if let Some(root) = root_span_id {
self.root_span_id = root.clone();
}
self.session_parent_span_ids = parent_span_id.into_iter().collect();
let cwd = hook.cwd.clone().unwrap_or_default();
let workspace = basename(&cwd);
let mut metadata = ctx
Expand Down Expand Up @@ -360,7 +364,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Insert(SpanRow {
span_id: self.session_span_id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: parent_span_id.into_iter().collect(),
parent_span_ids: self.session_parent_span_ids.clone(),
name: format!("Claude Code: {workspace}"),
span_type: SpanType::Task,
start_ms: Some(event.ts_ms),
Expand Down Expand Up @@ -422,6 +426,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: old.id,
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![self.session_span_id.clone()],
end_ms: Some(event.ts_ms),
..Default::default()
}));
Expand Down Expand Up @@ -485,6 +490,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: turn.id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![self.session_span_id.clone()],
metadata: explicit_skill_metadata(&self.pending_skills),
..Default::default()
}));
Expand Down Expand Up @@ -529,6 +535,7 @@ impl ClaudeTranslator {
hook.agent_id.clone(),
Subagent {
span_id: span_id.clone(),
parent_span_id: parent_id,
transcript_path: None,
},
);
Expand Down Expand Up @@ -594,6 +601,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: pending.span_id,
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![pending.parent_id],
end_ms: Some(event.ts_ms),
output,
metadata: Some(metadata),
Expand Down Expand Up @@ -638,6 +646,11 @@ impl ClaudeTranslator {
fn stop_subagent(&mut self, event: &Envelope, hook: SubagentHook, ops: &mut Vec<SpanOp>) {
let agent_id = hook.agent_id.clone();
let parent = self.ensure_subagent(&hook, event, ops);
let parent_span_ids = self
.subagents
.get(&agent_id)
.map(|agent| vec![agent.parent_span_id.clone()])
.unwrap_or_else(|| vec![self.session_span_id.clone()]);
let path = hook.agent_transcript_path;
if let Some(agent) = self.subagents.get_mut(&agent_id) {
agent.transcript_path = path.clone();
Expand Down Expand Up @@ -667,6 +680,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: parent.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids,
end_ms: Some(event.ts_ms),
output: event.payload.get("last_assistant_message").cloned(),
..Default::default()
Expand Down Expand Up @@ -792,9 +806,11 @@ impl ClaudeTranslator {
}
self.emitted_tools.insert(tool.call_id.clone());
if let Some(pending) = self.pending_tools.remove(&tool.call_id) {
ops.push(SpanOp::Merge(
tool.into_update(pending.span_id, self.root_span_id.clone()),
));
ops.push(SpanOp::Merge(tool.into_update(
pending.span_id,
self.root_span_id.clone(),
pending.parent_id,
)));
} else {
let span_key = format!("tool:{}", tool.call_id);
ops.push(SpanOp::Insert(tool.into_row(
Expand Down Expand Up @@ -845,6 +861,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: turn_id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![self.session_span_id.clone()],
end_ms: Some(event.ts_ms),
output: event
.payload
Expand Down Expand Up @@ -882,6 +899,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: tool.span_id,
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![tool.parent_id],
end_ms: Some(end_ms),
metadata: Some(Value::Object(metadata)),
..Default::default()
Expand Down Expand Up @@ -909,6 +927,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: turn.id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![self.session_span_id.clone()],
end_ms: Some(event.ts_ms),
..Default::default()
}));
Expand All @@ -919,6 +938,7 @@ impl ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: self.session_span_id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: self.session_parent_span_ids.clone(),
end_ms: Some(event.ts_ms),
..Default::default()
}));
Expand Down Expand Up @@ -954,6 +974,7 @@ impl AgentTranslator for ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: self.session_span_id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: self.session_parent_span_ids.clone(),
metadata: Some(json!({ "claude_code_version": version })),
..Default::default()
}));
Expand Down Expand Up @@ -1035,6 +1056,7 @@ impl AgentTranslator for ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: tool.span_id,
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![tool.parent_id],
end_ms: Some(end_ms),
error: Some("Session ended before tool completion".into()),
..Default::default()
Expand All @@ -1044,6 +1066,7 @@ impl AgentTranslator for ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: turn.id,
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![self.session_span_id.clone()],
end_ms: Some(end_ms),
error: Some("Session ended before turn completion".into()),
..Default::default()
Expand All @@ -1053,6 +1076,7 @@ impl AgentTranslator for ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: subagent.span_id,
root_span_id: self.root_span_id.clone(),
parent_span_ids: vec![subagent.parent_span_id],
end_ms: Some(end_ms),
error: Some("Session ended before subagent completion".into()),
..Default::default()
Expand All @@ -1063,6 +1087,7 @@ impl AgentTranslator for ClaudeTranslator {
ops.push(SpanOp::Merge(SpanRow {
span_id: self.session_span_id.clone(),
root_span_id: self.root_span_id.clone(),
parent_span_ids: self.session_parent_span_ids.clone(),
end_ms: Some(end_ms),
..Default::default()
}));
Expand Down Expand Up @@ -1652,10 +1677,11 @@ impl TranscriptTool {
}
}

fn into_update(self, span_id: String, root_span_id: String) -> SpanRow {
fn into_update(self, span_id: String, root_span_id: String, parent_id: String) -> SpanRow {
SpanRow {
span_id,
root_span_id,
parent_span_ids: vec![parent_id],
end_ms: Some(self.end_ms),
output: self.output.clone(),
metadata: Some(self.metadata()),
Expand Down
Loading
Loading