bug fixes

This commit is contained in:
jaberjaber23
2026-03-18 05:49:42 +03:00
parent 9f9903797e
commit 3688d86ef8
3 changed files with 65 additions and 17 deletions
Generated
+14 -14
View File
@@ -3811,7 +3811,7 @@ dependencies = [
[[package]]
name = "openfang-api"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"async-trait",
"axum",
@@ -3851,7 +3851,7 @@ dependencies = [
[[package]]
name = "openfang-channels"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"aes",
"async-trait",
@@ -3888,7 +3888,7 @@ dependencies = [
[[package]]
name = "openfang-cli"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"clap",
"clap_complete",
@@ -3915,7 +3915,7 @@ dependencies = [
[[package]]
name = "openfang-desktop"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"axum",
"open",
@@ -3941,7 +3941,7 @@ dependencies = [
[[package]]
name = "openfang-extensions"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"aes-gcm",
"argon2",
@@ -3969,7 +3969,7 @@ dependencies = [
[[package]]
name = "openfang-hands"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"chrono",
"dashmap",
@@ -3986,7 +3986,7 @@ dependencies = [
[[package]]
name = "openfang-kernel"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"async-trait",
"chrono",
@@ -4024,7 +4024,7 @@ dependencies = [
[[package]]
name = "openfang-memory"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"async-trait",
"chrono",
@@ -4043,7 +4043,7 @@ dependencies = [
[[package]]
name = "openfang-migrate"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"chrono",
"dirs 6.0.0",
@@ -4062,7 +4062,7 @@ dependencies = [
[[package]]
name = "openfang-runtime"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"anyhow",
"async-trait",
@@ -4096,7 +4096,7 @@ dependencies = [
[[package]]
name = "openfang-skills"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"chrono",
"hex",
@@ -4119,7 +4119,7 @@ dependencies = [
[[package]]
name = "openfang-types"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"async-trait",
"chrono",
@@ -4138,7 +4138,7 @@ dependencies = [
[[package]]
name = "openfang-wire"
version = "0.4.4"
version = "0.4.5"
dependencies = [
"async-trait",
"chrono",
@@ -8814,7 +8814,7 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
[[package]]
name = "xtask"
version = "0.4.4"
version = "0.4.5"
[[package]]
name = "yoke"
+46
View File
@@ -64,6 +64,11 @@ impl Drop for ServerHandle {
/// any Tauri window is created. The actual axum server runs on a dedicated
/// thread with its own tokio runtime.
pub fn start_server() -> Result<ServerHandle, Box<dyn std::error::Error>> {
// Load .env and secrets.env into process environment (same as CLI).
// Without this, API keys stored in ~/.openfang/.env are invisible to
// the kernel's provider detection and credential resolver.
load_dotenv_files();
// Boot kernel (sync — no tokio needed)
let kernel = OpenFangKernel::boot(None)?;
let kernel = Arc::new(kernel);
@@ -145,3 +150,44 @@ async fn run_embedded_server(
}
}
}
/// Load ~/.openfang/.env and ~/.openfang/secrets.env into the process environment.
/// System env vars take priority — existing vars are NOT overridden.
fn load_dotenv_files() {
let home = if let Ok(h) = std::env::var("OPENFANG_HOME") {
std::path::PathBuf::from(h)
} else {
let user_home = std::env::var("HOME")
.or_else(|_| std::env::var("USERPROFILE"))
.unwrap_or_default();
if user_home.is_empty() {
return;
}
std::path::PathBuf::from(user_home).join(".openfang")
};
for filename in &[".env", "secrets.env"] {
let path = home.join(filename);
if let Ok(content) = std::fs::read_to_string(&path) {
for line in content.lines() {
let trimmed = line.trim();
if trimmed.is_empty() || trimmed.starts_with('#') {
continue;
}
if let Some((key, value)) = trimmed.split_once('=') {
let key = key.trim();
let mut value = value.trim().to_string();
if ((value.starts_with('"') && value.ends_with('"'))
|| (value.starts_with('\'') && value.ends_with('\'')))
&& value.len() >= 2
{
value = value[1..value.len() - 1].to_string();
}
if !key.is_empty() && std::env::var(key).is_err() {
std::env::set_var(key, &value);
}
}
}
}
}
}
+5 -3
View File
@@ -1258,15 +1258,17 @@ impl OpenFangKernel {
fixed_id: Option<AgentId>,
) -> KernelResult<AgentId> {
let agent_id = fixed_id.unwrap_or_default();
let session_id = SessionId::new();
let name = manifest.name.clone();
info!(agent = %name, id = %agent_id, parent = ?parent, "Spawning agent");
// Create session
self.memory
// Create session — use the returned session_id so the registry
// and database are in sync (fixes duplicate session bug #651).
let session = self
.memory
.create_session(agent_id)
.map_err(KernelError::OpenFang)?;
let session_id = session.id;
// Inherit kernel exec_policy as fallback if agent manifest doesn't have one
let mut manifest = manifest;