refactor: server no longer runs agent loop or LLM
- Remove agent_loop from server (was ~400 lines) — server dispatches to workers - AgentManager simplified to pure dispatcher (send_event → worker) - Remove LLM config requirement from server (workers bring their own via config.yaml) - Remove process_feedback, build_feedback_tools from server - Remove chat API endpoint (LLM on workers only) - Remove service proxy (services run on workers) - Worker reads LLM config from its own config.yaml - ws_worker.rs handles WorkerToServer::Update messages (DB + broadcast) - Verified locally: tori server + tori worker connect and register
This commit is contained in:
26
src/main.rs
26
src/main.rs
@@ -27,6 +27,9 @@ enum Command {
|
||||
/// Worker name
|
||||
#[arg(long, env = "TORI_WORKER_NAME")]
|
||||
name: Option<String>,
|
||||
/// Config file path (for LLM settings)
|
||||
#[arg(long, default_value = "config.yaml")]
|
||||
config: String,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -40,13 +43,19 @@ async fn main() -> anyhow::Result<()> {
|
||||
|
||||
match cli.command {
|
||||
Command::Server => run_server().await,
|
||||
Command::Worker { server, name } => {
|
||||
Command::Worker { server, name, config } => {
|
||||
let name = name.unwrap_or_else(|| {
|
||||
hostname::get()
|
||||
.map(|h| h.to_string_lossy().to_string())
|
||||
.unwrap_or_else(|_| "worker-1".to_string())
|
||||
});
|
||||
worker_runner::run(&server, &name).await
|
||||
let config_str = std::fs::read_to_string(&config)
|
||||
.unwrap_or_else(|e| panic!("Failed to read {}: {}", config, e));
|
||||
let cfg: Config = serde_yaml::from_str(&config_str)
|
||||
.unwrap_or_else(|e| panic!("Failed to parse {}: {}", config, e));
|
||||
let llm_config = cfg.llm
|
||||
.unwrap_or_else(|| panic!("LLM config required in {} for worker mode", config));
|
||||
worker_runner::run(&server, &name, &llm_config).await
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -79,10 +88,6 @@ async fn run_server() -> anyhow::Result<()> {
|
||||
|
||||
let agent_mgr = agent::AgentManager::new(
|
||||
database.pool.clone(),
|
||||
config.llm.clone(),
|
||||
config.template_repo.clone(),
|
||||
kb_arc.clone(),
|
||||
config.jwt_private_key.clone(),
|
||||
worker_mgr.clone(),
|
||||
);
|
||||
|
||||
@@ -129,6 +134,7 @@ async fn run_server() -> anyhow::Result<()> {
|
||||
}
|
||||
};
|
||||
|
||||
let ws_pool = database.pool.clone();
|
||||
let state = Arc::new(AppState {
|
||||
db: database,
|
||||
config: config.clone(),
|
||||
@@ -151,7 +157,13 @@ async fn run_server() -> anyhow::Result<()> {
|
||||
let r = obj_root;
|
||||
move || api::obj::root_listing(r)
|
||||
}))
|
||||
.nest("/ws/tori/workers", ws_worker::router(worker_mgr))
|
||||
.nest("/ws/tori/workers", {
|
||||
let pool = ws_pool;
|
||||
let agent_mgr_for_ws = agent_mgr.clone();
|
||||
let broadcast_fn: Arc<dyn Fn(&str) -> tokio::sync::broadcast::Sender<agent::WsMessage> + Send + Sync> =
|
||||
Arc::new(move |pid: &str| agent_mgr_for_ws.get_broadcast_sender(pid));
|
||||
ws_worker::router(worker_mgr, pool, broadcast_fn)
|
||||
})
|
||||
.nest("/ws/tori", ws::router(agent_mgr))
|
||||
.nest_service("/tori", ServeDir::new("web/dist").fallback(ServeFile::new("web/dist/index.html")))
|
||||
.route("/", axum::routing::get(|| async {
|
||||
|
||||
Reference in New Issue
Block a user