diff --git a/v2/Cargo.lock b/v2/Cargo.lock
index 8a9aa2e..d94a277 100644
--- a/v2/Cargo.lock
+++ b/v2/Cargo.lock
@@ -8,6 +8,37 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
+[[package]]
+name = "agent-orchestrator"
+version = "0.1.0"
+dependencies = [
+ "bterminal-core",
+ "dirs 5.0.1",
+ "futures-util",
+ "keyring",
+ "log",
+ "notify",
+ "notify-rust",
+ "opentelemetry",
+ "opentelemetry-otlp",
+ "opentelemetry_sdk",
+ "rfd",
+ "rusqlite",
+ "serde",
+ "serde_json",
+ "tauri",
+ "tauri-build",
+ "tauri-plugin-dialog",
+ "tauri-plugin-updater",
+ "tempfile",
+ "tokio",
+ "tokio-tungstenite",
+ "tracing",
+ "tracing-opentelemetry",
+ "tracing-subscriber",
+ "uuid",
+]
+
[[package]]
name = "ahash"
version = "0.8.12"
@@ -363,37 +394,6 @@ dependencies = [
"alloc-stdlib",
]
-[[package]]
-name = "bterminal"
-version = "0.1.0"
-dependencies = [
- "bterminal-core",
- "dirs 5.0.1",
- "futures-util",
- "keyring",
- "log",
- "notify",
- "notify-rust",
- "opentelemetry",
- "opentelemetry-otlp",
- "opentelemetry_sdk",
- "rfd",
- "rusqlite",
- "serde",
- "serde_json",
- "tauri",
- "tauri-build",
- "tauri-plugin-dialog",
- "tauri-plugin-updater",
- "tempfile",
- "tokio",
- "tokio-tungstenite",
- "tracing",
- "tracing-opentelemetry",
- "tracing-subscriber",
- "uuid",
-]
-
[[package]]
name = "bterminal-core"
version = "0.1.0"
diff --git a/v2/index.html b/v2/index.html
index 47d67ec..ee71d29 100644
--- a/v2/index.html
+++ b/v2/index.html
@@ -4,6 +4,10 @@
Agent Orchestrator
+
diff --git a/v2/src-tauri/Cargo.toml b/v2/src-tauri/Cargo.toml
index 6e32a62..30e1b23 100644
--- a/v2/src-tauri/Cargo.toml
+++ b/v2/src-tauri/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "bterminal"
+name = "agent-orchestrator"
version = "0.1.0"
description = "Multi-session Claude agent dashboard"
authors = ["DexterFromLab"]
@@ -10,7 +10,7 @@ rust-version = "1.77.2"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
-name = "bterminal_lib"
+name = "agent_orchestrator_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
diff --git a/v2/src-tauri/src/main.rs b/v2/src-tauri/src/main.rs
index 82ee8eb..ae97c48 100644
--- a/v2/src-tauri/src/main.rs
+++ b/v2/src-tauri/src/main.rs
@@ -2,5 +2,5 @@
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
- bterminal_lib::run();
+ agent_orchestrator_lib::run();
}
diff --git a/v2/src-tauri/src/telemetry.rs b/v2/src-tauri/src/telemetry.rs
index 0391460..7551bfd 100644
--- a/v2/src-tauri/src/telemetry.rs
+++ b/v2/src-tauri/src/telemetry.rs
@@ -28,7 +28,7 @@ impl Drop for TelemetryGuard {
/// Call once at app startup, before any tracing macros fire.
pub fn init() -> TelemetryGuard {
let filter = EnvFilter::try_from_default_env()
- .unwrap_or_else(|_| EnvFilter::new("bterminal=info,bterminal_lib=info,bterminal_core=info"));
+ .unwrap_or_else(|_| EnvFilter::new("agent_orchestrator=info,agent_orchestrator_lib=info,bterminal_core=info"));
let fmt_layer = tracing_subscriber::fmt::layer()
.with_target(true)
@@ -42,7 +42,7 @@ pub fn init() -> TelemetryGuard {
match build_otlp_provider(&endpoint) {
Ok(provider) => {
let otel_layer = tracing_opentelemetry::layer()
- .with_tracer(provider.tracer("bterminal"));
+ .with_tracer(provider.tracer("agent-orchestrator"));
tracing_subscriber::registry()
.with(filter)
@@ -90,7 +90,7 @@ fn build_otlp_provider(endpoint: &str) -> Result(undefined);
@@ -77,26 +91,42 @@
}
onMount(() => {
+ // Step 0: Theme
initTheme();
getSetting('project_max_aspect').then(v => {
if (v) document.documentElement.style.setProperty('--project-max-aspect', v);
});
+ markStep(0);
+
+ // Step 1: Providers
registerProvider(CLAUDE_PROVIDER);
registerProvider(CODEX_PROVIDER);
registerProvider(OLLAMA_PROVIDER);
const memora = new MemoraAdapter();
registerMemoryAdapter(memora);
memora.checkAvailability();
+ markStep(1);
+
+ // Step 2: Agent dispatcher
startAgentDispatcher();
startHealthTick();
+ markStep(2);
// Disable wake scheduler in test mode to prevent timer interference
invoke('is_test_mode').then(isTest => {
if (isTest) disableWakeScheduler();
});
+ // Step 3: Sidecar (small delay to let sidecar report ready)
+ setTimeout(() => markStep(3), 300);
+
if (!detached) {
- loadWorkspace().then(() => { loaded = true; });
+ // Step 4: Workspace
+ loadWorkspace().then(() => {
+ markStep(4);
+ // Brief pause to show completed state before transition
+ setTimeout(() => { loaded = true; }, 400);
+ });
}
/** Check if event target is an editable element (input, textarea, contenteditable) */
@@ -299,7 +329,7 @@
paletteOpen = false} />
searchOpen = false} />
{:else}
- Loading workspace...
+
{/if}
@@ -380,13 +410,4 @@
flex-direction: column;
}
- .loading {
- display: flex;
- align-items: center;
- justify-content: center;
- height: 100vh;
- color: var(--ctp-overlay0);
- font-size: 0.9rem;
- background: var(--ctp-base);
- }
diff --git a/v2/src/assets/splash.jpg b/v2/src/assets/splash.jpg
new file mode 100644
index 0000000..125b07e
Binary files /dev/null and b/v2/src/assets/splash.jpg differ
diff --git a/v2/src/lib/components/SplashScreen.svelte b/v2/src/lib/components/SplashScreen.svelte
new file mode 100644
index 0000000..830f716
--- /dev/null
+++ b/v2/src/lib/components/SplashScreen.svelte
@@ -0,0 +1,138 @@
+
+
+
+

+
+
+
+
+
Agent Orchestrator
+ {version}
+ Pandora's Box
+
+
+
+
+
+
+