upgrade Skill system auf regitry

This commit is contained in:
Sithies
2026-03-17 21:51:00 +01:00
parent 389c759166
commit 4e6b2c6759
28 changed files with 534 additions and 478 deletions
+24 -26
View File
@@ -1,8 +1,3 @@
// crates/nazarick/src/main.rs
//
// Nazarick — Einstiegspunkt.
// Initialisiert alle Komponenten und startet den HTTP-Server.
mod chat;
mod config;
@@ -14,68 +9,73 @@ use tower_http::trace::TraceLayer;
use tracing::info;
use api::llm::lmstudio::LmStudioProvider;
use nazarick_core::agent::skill_registry::SkillRegistry;
use sebas_tian::Sebas;
use lyra::Lyra;
use skills::personality::PersonalitySkill;
use chat::synology::{handle_incoming, AppState};
use skills as _;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Logging initialisieren
tracing_subscriber::fmt()
.with_env_filter("nazarick=info,tower_http=debug,api=debug")
.init();
info!("Nazarick erwacht...");
// Arbeitsverzeichnis auf Workspace-Root setzen
// Damit relative Pfade wie "config/shared_core.md" immer funktionieren
let exe_path = std::env::current_exe()?;
let workspace_root = exe_path
.parent() // debug/
.and_then(|p| p.parent()) // target/
.and_then(|p| p.parent()) // workspace root
.parent()
.and_then(|p| p.parent())
.and_then(|p| p.parent())
.ok_or_else(|| anyhow::anyhow!("Workspace-Root nicht gefunden"))?;
std::env::set_current_dir(workspace_root)?;
info!("Arbeitsverzeichnis: {}", workspace_root.display());
// Config laden
let cfg = config::load().map_err(|e| {
eprintln!("Config Fehler: {}", e);
e
})?;
let port = cfg.chat.listen_port;
// Sebas Tian — Butler Agent
let registry = Arc::new(SkillRegistry::collect());
info!("Skills geladen: {:?}", registry.all_names());
let sebas_cfg = cfg.chat.agents.iter()
.find(|a| a.agent_id == "sebas_tian")
.ok_or_else(|| anyhow::anyhow!("sebas_tian nicht in config"))?;
let lyra_cfg = cfg.chat.agents.iter()
.find(|a| a.agent_id == "lyra")
.ok_or_else(|| anyhow::anyhow!("lyra nicht in config"))?;
let sebas = Sebas::new(
"sebas_tian",
"config/shared_core.md",
"crates/sebas-tian/config/soul_core.md",
"crates/sebas-tian/config/soul_personality.md",
Box::new(LmStudioProvider::new(
"http://localhost:1234",
"qwen/qwen3.5-9b",
)),
Arc::new(PersonalitySkill::new(
"crates/sebas-tian/config/soul_personality.md",
)),
registry.clone(),
sebas_cfg.max_tokens,
sebas_cfg.max_loops,
);
// Lyra — Companion Agent
let lyra = Lyra::new(
"lyra",
"config/shared_core.md",
"crates/lyra/config/soul_core.md",
"crates/lyra/config/soul_personality.md",
Box::new(LmStudioProvider::new(
"http://localhost:1234",
"qwen/qwen3.5-9b",
)),
Arc::new(PersonalitySkill::new(
"crates/lyra/config/soul_personality.md",
)),
registry.clone(),
lyra_cfg.max_tokens,
lyra_cfg.max_loops,
);
// Shared State aufbauen
let state = Arc::new(AppState {
agents: cfg.chat.agents,
admin_user_id: cfg.chat.admin_user_id,
@@ -85,13 +85,11 @@ async fn main() -> anyhow::Result<()> {
lyra: Mutex::new(lyra),
});
// Routes registrieren
let app = Router::new()
.route("/chat/synology", post(handle_incoming))
.with_state(state)
.layer(TraceLayer::new_for_http());
// Server starten
let addr = format!("0.0.0.0:{}", port);
let listener = tokio::net::TcpListener::bind(&addr).await?;