feat(v2): add SidecarManager and agent Tauri commands
Implement Rust SidecarManager that spawns Node.js sidecar process, communicates via stdio NDJSON, and manages agent session lifecycle. Add agent_query, agent_stop, agent_ready Tauri commands. Sidecar auto-starts on app launch.
This commit is contained in:
parent
54b0d44bc1
commit
f0ec44f6a6
2 changed files with 257 additions and 3 deletions
|
|
@ -4,13 +4,17 @@ mod watcher;
|
|||
mod session;
|
||||
|
||||
use pty::{PtyManager, PtyOptions};
|
||||
use sidecar::{AgentQueryOptions, SidecarManager};
|
||||
use std::sync::Arc;
|
||||
use tauri::State;
|
||||
|
||||
struct AppState {
|
||||
pty_manager: Arc<PtyManager>,
|
||||
sidecar_manager: Arc<SidecarManager>,
|
||||
}
|
||||
|
||||
// --- PTY commands ---
|
||||
|
||||
#[tauri::command]
|
||||
fn pty_spawn(
|
||||
app: tauri::AppHandle,
|
||||
|
|
@ -40,10 +44,34 @@ fn pty_kill(state: State<'_, AppState>, id: String) -> Result<(), String> {
|
|||
state.pty_manager.kill(&id)
|
||||
}
|
||||
|
||||
// --- Agent/sidecar commands ---
|
||||
|
||||
#[tauri::command]
|
||||
fn agent_query(
|
||||
state: State<'_, AppState>,
|
||||
options: AgentQueryOptions,
|
||||
) -> Result<(), String> {
|
||||
state.sidecar_manager.query(&options)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
fn agent_stop(state: State<'_, AppState>, session_id: String) -> Result<(), String> {
|
||||
state.sidecar_manager.stop_session(&session_id)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
fn agent_ready(state: State<'_, AppState>) -> bool {
|
||||
state.sidecar_manager.is_ready()
|
||||
}
|
||||
|
||||
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
||||
pub fn run() {
|
||||
let pty_manager = Arc::new(PtyManager::new());
|
||||
let sidecar_manager = Arc::new(SidecarManager::new());
|
||||
|
||||
let app_state = AppState {
|
||||
pty_manager: Arc::new(PtyManager::new()),
|
||||
pty_manager,
|
||||
sidecar_manager: sidecar_manager.clone(),
|
||||
};
|
||||
|
||||
tauri::Builder::default()
|
||||
|
|
@ -53,8 +81,11 @@ pub fn run() {
|
|||
pty_write,
|
||||
pty_resize,
|
||||
pty_kill,
|
||||
agent_query,
|
||||
agent_stop,
|
||||
agent_ready,
|
||||
])
|
||||
.setup(|app| {
|
||||
.setup(move |app| {
|
||||
if cfg!(debug_assertions) {
|
||||
app.handle().plugin(
|
||||
tauri_plugin_log::Builder::default()
|
||||
|
|
@ -62,6 +93,13 @@ pub fn run() {
|
|||
.build(),
|
||||
)?;
|
||||
}
|
||||
|
||||
// Start sidecar on app launch
|
||||
match sidecar_manager.start(app.handle()) {
|
||||
Ok(()) => log::info!("Sidecar startup initiated"),
|
||||
Err(e) => log::warn!("Sidecar startup failed (agent features unavailable): {e}"),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
})
|
||||
.run(tauri::generate_context!())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue