MCPcopy Create free account
hub / github.com/GCWing/BitFun / run

Method run

src/apps/cli/src/modes/exec.rs:97–386  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

95 }
96
97 pub async fn run(&mut self) -> Result<()> {
98 tracing::info!(
99 "Executing command, Agent: {}, Message: {}",
100 self.agent_type,
101 self.message
102 );
103
104 let session_id = self.prepare_session().await?;
105 let event_queue = self.agent.event_queue().clone();
106
107 self.emit(json!({
108 "type": "session",
109 "session_id": session_id,
110 "agent": self.agent_type,
111 }))?;
112 self.print_text(|| {
113 println!("Executing: {}", self.message);
114 println!();
115 println!("Session: {}", session_id);
116 println!("Thinking...");
117 });
118
119 let _turn_id = self
120 .agent
121 .send_message(self.message.clone(), &self.agent_type)
122 .await?;
123
124 // Consume events from EventQueue until turn completes
125 let mut total_tool_calls = 0usize;
126 let mut subagent_parent_sessions: HashMap<String, String> = HashMap::new();
127
128 loop {
129 // Wait for events (efficient, uses Notify internally)
130 event_queue.wait_for_events().await;
131 let events = event_queue.dequeue_batch(20).await;
132
133 for envelope in events {
134 let event = &envelope.event;
135
136 if let AgenticEvent::SubagentSessionLinked {
137 session_id: subagent_session_id,
138 parent_session_id,
139 ..
140 } = event
141 {
142 subagent_parent_sessions
143 .insert(subagent_session_id.clone(), parent_session_id.clone());
144 continue;
145 }
146
147 // Only process events for our session
148 if event.session_id() != Some(&session_id) {
149 // Check if this is a subagent event whose parent is in our session
150 if let AgenticEvent::ToolEvent { tool_event, .. } = event {
151 let parent_session_id = event.session_id().and_then(|event_session_id| {
152 subagent_parent_sessions.get(event_session_id)
153 });
154 if parent_session_id.map(String::as_str) == Some(session_id.as_str()) {

Callers

nothing calls this directly

Calls 15

prepare_sessionMethod · 0.80
event_queueMethod · 0.80
print_textMethod · 0.80
wait_for_eventsMethod · 0.80
dequeue_batchMethod · 0.80
emitMethod · 0.65
cloneMethod · 0.45
send_messageMethod · 0.45
insertMethod · 0.45
session_idMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected