Execute internally with external notification (Hybrid mode)
(&self)
| 149 | |
| 150 | /// Execute internally with external notification (Hybrid mode) |
| 151 | async fn execute_with_notification(&self) -> LaneResult<Value> { |
| 152 | let task = ExternalTask { |
| 153 | task_id: self.task_id.clone(), |
| 154 | session_id: self.session_id.clone(), |
| 155 | lane: self.lane, |
| 156 | command_type: self.inner.command_type().to_string(), |
| 157 | payload: self.inner.payload(), |
| 158 | timeout_ms: self.timeout_ms, |
| 159 | created_at: Some(Instant::now()), |
| 160 | }; |
| 161 | let _ = self.event_tx.send(AgentEvent::ExternalTaskPending { |
| 162 | task_id: task.task_id.clone(), |
| 163 | session_id: task.session_id.clone(), |
| 164 | lane: task.lane, |
| 165 | command_type: task.command_type.clone(), |
| 166 | payload: task.payload.clone(), |
| 167 | timeout_ms: task.timeout_ms, |
| 168 | }); |
| 169 | let result = self |
| 170 | .inner |
| 171 | .execute() |
| 172 | .await |
| 173 | .map_err(|e| LaneError::CommandError(e.to_string())); |
| 174 | let _ = self.event_tx.send(AgentEvent::ExternalTaskCompleted { |
| 175 | task_id: self.task_id.clone(), |
| 176 | session_id: self.session_id.clone(), |
| 177 | success: result.is_ok(), |
| 178 | }); |
| 179 | result |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | #[async_trait] |