Adds consent management for tool execution, input validation, sandboxed process execution, and MCP server integration. Updates session management to support tool use, conversation persistence, and streaming responses. Major additions: - Database migrations for conversations and secure storage - Encryption and credential management infrastructure - Extensible tool system with code execution and web search - Consent management and validation systems - Sandboxed process execution - MCP server integration Infrastructure changes: - Module registration and workspace dependencies - ToolCall type and tool-related Message methods - Privacy, security, and tool configuration structures - Database-backed conversation persistence - Tool call tracking in conversations Provider and UI updates: - Ollama provider updates for tool support and new Role types - TUI chat and code app updates for async initialization - CLI updates for new SessionController API - Configuration documentation updates - CHANGELOG updates 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use anyhow::Result;
|
|
use owlen_core::session::SessionController;
|
|
use owlen_core::ui::{AppState, InputMode};
|
|
use tokio::sync::mpsc;
|
|
|
|
use crate::chat_app::{ChatApp, SessionEvent};
|
|
use crate::events::Event;
|
|
|
|
const DEFAULT_SYSTEM_PROMPT: &str =
|
|
"You are OWLEN Code Assistant. Provide detailed, actionable programming help.";
|
|
|
|
pub struct CodeApp {
|
|
inner: ChatApp,
|
|
}
|
|
|
|
impl CodeApp {
|
|
pub async fn new(
|
|
mut controller: SessionController,
|
|
) -> Result<(Self, mpsc::UnboundedReceiver<SessionEvent>)> {
|
|
controller
|
|
.conversation_mut()
|
|
.push_system_message(DEFAULT_SYSTEM_PROMPT.to_string());
|
|
let (inner, rx) = ChatApp::new(controller).await?;
|
|
Ok((Self { inner }, rx))
|
|
}
|
|
|
|
pub async fn handle_event(&mut self, event: Event) -> Result<AppState> {
|
|
self.inner.handle_event(event).await
|
|
}
|
|
|
|
pub fn handle_session_event(&mut self, event: SessionEvent) -> Result<()> {
|
|
self.inner.handle_session_event(event)
|
|
}
|
|
|
|
pub fn mode(&self) -> InputMode {
|
|
self.inner.mode()
|
|
}
|
|
|
|
pub fn inner(&self) -> &ChatApp {
|
|
&self.inner
|
|
}
|
|
|
|
pub fn inner_mut(&mut self) -> &mut ChatApp {
|
|
&mut self.inner
|
|
}
|
|
}
|