feat(agent): event-driven tool consent handshake (explicit UI prompts)

This commit is contained in:
2025-10-17 03:42:13 +02:00
parent 5553e61dbf
commit 3f92b7d963
6 changed files with 425 additions and 144 deletions

View File

@@ -17,7 +17,7 @@ use owlen_core::{
mode::Mode,
provider::ProviderManager,
providers::OllamaProvider,
session::SessionController,
session::{ControllerEvent, SessionController},
storage::StorageManager,
types::{ChatRequest, ChatResponse, Message, ModelInfo},
};
@@ -88,11 +88,19 @@ pub async fn launch(initial_mode: Mode) -> Result<()> {
}
};
let controller =
SessionController::new(provider, cfg, storage.clone(), tui_controller, false).await?;
let (controller_event_tx, controller_event_rx) = mpsc::unbounded_channel::<ControllerEvent>();
let controller = SessionController::new(
provider,
cfg,
storage.clone(),
tui_controller,
false,
Some(controller_event_tx),
)
.await?;
let provider_manager = Arc::new(ProviderManager::default());
let mut runtime = RuntimeApp::new(provider_manager);
let (mut app, mut session_rx) = ChatApp::new(controller).await?;
let (mut app, mut session_rx) = ChatApp::new(controller, controller_event_rx).await?;
app.initialize_models().await?;
if let Some(notice) = offline_notice.clone() {
app.set_status_message(&notice);