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 +
+ +
+
+
+
+
{currentStep}
+
+
+
+ +