diff --git a/Cargo.lock b/Cargo.lock index 6c25e3ce..a8de6131 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1080,7 +1080,7 @@ dependencies = [ [[package]] name = "deepseek-agent" -version = "0.8.8" +version = "0.8.9" dependencies = [ "deepseek-config", "serde", @@ -1088,7 +1088,7 @@ dependencies = [ [[package]] name = "deepseek-app-server" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "axum", @@ -1110,7 +1110,7 @@ dependencies = [ [[package]] name = "deepseek-config" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "deepseek-secrets", @@ -1122,7 +1122,7 @@ dependencies = [ [[package]] name = "deepseek-core" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "chrono", @@ -1140,7 +1140,7 @@ dependencies = [ [[package]] name = "deepseek-execpolicy" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "deepseek-protocol", @@ -1149,7 +1149,7 @@ dependencies = [ [[package]] name = "deepseek-hooks" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "async-trait", @@ -1163,7 +1163,7 @@ dependencies = [ [[package]] name = "deepseek-mcp" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "serde", @@ -1172,7 +1172,7 @@ dependencies = [ [[package]] name = "deepseek-protocol" -version = "0.8.8" +version = "0.8.9" dependencies = [ "serde", "serde_json", @@ -1180,7 +1180,7 @@ dependencies = [ [[package]] name = "deepseek-secrets" -version = "0.8.8" +version = "0.8.9" dependencies = [ "dirs", "keyring", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "deepseek-state" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "chrono", @@ -1205,7 +1205,7 @@ dependencies = [ [[package]] name = "deepseek-tools" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "async-trait", @@ -1218,7 +1218,7 @@ dependencies = [ [[package]] name = "deepseek-tui" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "arboard", @@ -1277,7 +1277,7 @@ dependencies = [ [[package]] name = "deepseek-tui-cli" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "chrono", @@ -1301,7 +1301,7 @@ dependencies = [ [[package]] name = "deepseek-tui-core" -version = "0.8.8" +version = "0.8.9" [[package]] name = "deranged" diff --git a/Cargo.toml b/Cargo.toml index ae052cde..8a77572a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ default-members = ["crates/cli", "crates/app-server", "crates/tui"] resolver = "2" [workspace.package] -version = "0.8.8" +version = "0.8.9" edition = "2024" license = "MIT" repository = "https://github.com/Hmbown/DeepSeek-TUI" diff --git a/crates/agent/Cargo.toml b/crates/agent/Cargo.toml index 52fd271b..0e37ef0e 100644 --- a/crates/agent/Cargo.toml +++ b/crates/agent/Cargo.toml @@ -7,5 +7,5 @@ repository.workspace = true description = "Model/provider registry and fallback strategy for DeepSeek workspace architecture" [dependencies] -deepseek-config = { path = "../config", version = "0.8.8" } +deepseek-config = { path = "../config", version = "0.8.9" } serde.workspace = true diff --git a/crates/app-server/Cargo.toml b/crates/app-server/Cargo.toml index fb550102..92ec3a99 100644 --- a/crates/app-server/Cargo.toml +++ b/crates/app-server/Cargo.toml @@ -10,15 +10,15 @@ description = "Codex-style app-server transport for DeepSeek workspace architect anyhow.workspace = true axum.workspace = true clap.workspace = true -deepseek-agent = { path = "../agent", version = "0.8.8" } -deepseek-config = { path = "../config", version = "0.8.8" } -deepseek-core = { path = "../core", version = "0.8.8" } -deepseek-execpolicy = { path = "../execpolicy", version = "0.8.8" } -deepseek-hooks = { path = "../hooks", version = "0.8.8" } -deepseek-mcp = { path = "../mcp", version = "0.8.8" } -deepseek-protocol = { path = "../protocol", version = "0.8.8" } -deepseek-state = { path = "../state", version = "0.8.8" } -deepseek-tools = { path = "../tools", version = "0.8.8" } +deepseek-agent = { path = "../agent", version = "0.8.9" } +deepseek-config = { path = "../config", version = "0.8.9" } +deepseek-core = { path = "../core", version = "0.8.9" } +deepseek-execpolicy = { path = "../execpolicy", version = "0.8.9" } +deepseek-hooks = { path = "../hooks", version = "0.8.9" } +deepseek-mcp = { path = "../mcp", version = "0.8.9" } +deepseek-protocol = { path = "../protocol", version = "0.8.9" } +deepseek-state = { path = "../state", version = "0.8.9" } +deepseek-tools = { path = "../tools", version = "0.8.9" } serde.workspace = true serde_json.workspace = true tokio.workspace = true diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 650a8cd0..390d4138 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -14,13 +14,13 @@ path = "src/main.rs" anyhow.workspace = true clap.workspace = true clap_complete.workspace = true -deepseek-agent = { path = "../agent", version = "0.8.8" } -deepseek-app-server = { path = "../app-server", version = "0.8.8" } -deepseek-config = { path = "../config", version = "0.8.8" } -deepseek-execpolicy = { path = "../execpolicy", version = "0.8.8" } -deepseek-mcp = { path = "../mcp", version = "0.8.8" } -deepseek-secrets = { path = "../secrets", version = "0.8.8" } -deepseek-state = { path = "../state", version = "0.8.8" } +deepseek-agent = { path = "../agent", version = "0.8.9" } +deepseek-app-server = { path = "../app-server", version = "0.8.9" } +deepseek-config = { path = "../config", version = "0.8.9" } +deepseek-execpolicy = { path = "../execpolicy", version = "0.8.9" } +deepseek-mcp = { path = "../mcp", version = "0.8.9" } +deepseek-secrets = { path = "../secrets", version = "0.8.9" } +deepseek-state = { path = "../state", version = "0.8.9" } chrono.workspace = true dirs.workspace = true serde.workspace = true diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index d36248dc..59b264e4 100644 --- a/crates/config/Cargo.toml +++ b/crates/config/Cargo.toml @@ -8,7 +8,7 @@ description = "Config schema and precedence model for DeepSeek workspace archite [dependencies] anyhow.workspace = true -deepseek-secrets = { path = "../secrets", version = "0.8.8" } +deepseek-secrets = { path = "../secrets", version = "0.8.9" } dirs.workspace = true serde.workspace = true toml.workspace = true diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 2677775e..511b9ce7 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -9,13 +9,13 @@ description = "Core runtime boundaries for DeepSeek workspace architecture" [dependencies] anyhow.workspace = true chrono.workspace = true -deepseek-agent = { path = "../agent", version = "0.8.8" } -deepseek-config = { path = "../config", version = "0.8.8" } -deepseek-execpolicy = { path = "../execpolicy", version = "0.8.8" } -deepseek-hooks = { path = "../hooks", version = "0.8.8" } -deepseek-mcp = { path = "../mcp", version = "0.8.8" } -deepseek-protocol = { path = "../protocol", version = "0.8.8" } -deepseek-state = { path = "../state", version = "0.8.8" } -deepseek-tools = { path = "../tools", version = "0.8.8" } +deepseek-agent = { path = "../agent", version = "0.8.9" } +deepseek-config = { path = "../config", version = "0.8.9" } +deepseek-execpolicy = { path = "../execpolicy", version = "0.8.9" } +deepseek-hooks = { path = "../hooks", version = "0.8.9" } +deepseek-mcp = { path = "../mcp", version = "0.8.9" } +deepseek-protocol = { path = "../protocol", version = "0.8.9" } +deepseek-state = { path = "../state", version = "0.8.9" } +deepseek-tools = { path = "../tools", version = "0.8.9" } serde_json.workspace = true uuid.workspace = true diff --git a/crates/execpolicy/Cargo.toml b/crates/execpolicy/Cargo.toml index 7bf6b405..f24f839e 100644 --- a/crates/execpolicy/Cargo.toml +++ b/crates/execpolicy/Cargo.toml @@ -8,5 +8,5 @@ description = "Execution policy and approval model parity for DeepSeek workspace [dependencies] anyhow.workspace = true -deepseek-protocol = { path = "../protocol", version = "0.8.8" } +deepseek-protocol = { path = "../protocol", version = "0.8.9" } serde.workspace = true diff --git a/crates/hooks/Cargo.toml b/crates/hooks/Cargo.toml index c1fb457b..d6a9e2ae 100644 --- a/crates/hooks/Cargo.toml +++ b/crates/hooks/Cargo.toml @@ -10,7 +10,7 @@ description = "Hook dispatch and notifications parity for DeepSeek workspace arc anyhow.workspace = true async-trait.workspace = true chrono.workspace = true -deepseek-protocol = { path = "../protocol", version = "0.8.8" } +deepseek-protocol = { path = "../protocol", version = "0.8.9" } reqwest.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/tools/Cargo.toml b/crates/tools/Cargo.toml index aebf738e..4d5ba62a 100644 --- a/crates/tools/Cargo.toml +++ b/crates/tools/Cargo.toml @@ -9,7 +9,7 @@ description = "Tool invocation lifecycle, schema validation, and scheduler paral [dependencies] anyhow.workspace = true async-trait.workspace = true -deepseek-protocol = { path = "../protocol", version = "0.8.8" } +deepseek-protocol = { path = "../protocol", version = "0.8.9" } serde.workspace = true serde_json.workspace = true tokio.workspace = true diff --git a/crates/tui/Cargo.toml b/crates/tui/Cargo.toml index dbbaaeed..fb576743 100644 --- a/crates/tui/Cargo.toml +++ b/crates/tui/Cargo.toml @@ -21,8 +21,8 @@ path = "src/main.rs" [dependencies] anyhow = "1.0.100" arboard = "3.4" -deepseek-secrets = { path = "../secrets", version = "0.8.8" } -deepseek-tools = { path = "../tools", version = "0.8.8" } +deepseek-secrets = { path = "../secrets", version = "0.8.9" } +deepseek-tools = { path = "../tools", version = "0.8.9" } schemaui = { version = "0.12.0", default-features = false, optional = true } async-stream = "0.3.6" async-trait = "0.1" diff --git a/crates/tui/src/tui/app.rs b/crates/tui/src/tui/app.rs index c90f2701..ea857059 100644 --- a/crates/tui/src/tui/app.rs +++ b/crates/tui/src/tui/app.rs @@ -2884,10 +2884,7 @@ impl App { if let Err(e) = std::fs::create_dir_all(&pastes_dir) { // Fallback: keep a truncated version so we don't lose the // user's input entirely when the filesystem is unhappy. - self.input = full_input - .chars() - .take(MAX_SUBMITTED_INPUT_CHARS) - .collect(); + self.input = full_input.chars().take(MAX_SUBMITTED_INPUT_CHARS).collect(); self.cursor_position = char_count(&self.input); self.push_status_toast( format!("Failed to create paste directory: {e}"), @@ -2899,10 +2896,7 @@ impl App { let file_path = self.workspace.join(&rel_path); if let Err(e) = std::fs::write(&file_path, &full_input) { - self.input = full_input - .chars() - .take(MAX_SUBMITTED_INPUT_CHARS) - .collect(); + self.input = full_input.chars().take(MAX_SUBMITTED_INPUT_CHARS).collect(); self.cursor_position = char_count(&self.input); self.push_status_toast( format!("Failed to write paste file: {e}"), @@ -3326,7 +3320,10 @@ mod tests { .iter() .any(|toast| toast.text.contains("consolidated")), "expected consolidation toast, got: {:?}", - app.status_toasts.iter().map(|t| &t.text).collect::>() + app.status_toasts + .iter() + .map(|t| &t.text) + .collect::>() ); // The composer must be clear after submit. diff --git a/crates/tui/src/tui/sidebar.rs b/crates/tui/src/tui/sidebar.rs index 2d9814cf..ef447c63 100644 --- a/crates/tui/src/tui/sidebar.rs +++ b/crates/tui/src/tui/sidebar.rs @@ -639,10 +639,7 @@ fn render_context_panel(f: &mut Frame, area: Rect, app: &App) { Style::default().fg(palette::DEEPSEEK_SKY).bold(), ), Span::styled( - format!( - " {}", - app.workspace_context.as_deref().unwrap_or("") - ), + format!(" {}", app.workspace_context.as_deref().unwrap_or("")), Style::default().fg(palette::TEXT_DIM), ), ])); @@ -676,16 +673,25 @@ fn render_context_panel(f: &mut Frame, area: Rect, app: &App) { // ── Session cost ───────────────────────────────────────────── let total_cost = app.session.session_cost + app.session.subagent_cost; lines.push(Line::from(Span::styled( - format!("cost: ${total_cost:.4} (session ${:.4} + agents ${:.4})", - app.session.session_cost, app.session.subagent_cost), + format!( + "cost: ${total_cost:.4} (session ${:.4} + agents ${:.4})", + app.session.session_cost, app.session.subagent_cost + ), Style::default().fg(palette::TEXT_MUTED), ))); // ── MCP servers ────────────────────────────────────────────── if app.mcp_configured_count > 0 { - let restart_hint = if app.mcp_restart_required { " (restart needed)" } else { "" }; + let restart_hint = if app.mcp_restart_required { + " (restart needed)" + } else { + "" + }; lines.push(Line::from(Span::styled( - format!("mcp: {} server(s){}", app.mcp_configured_count, restart_hint), + format!( + "mcp: {} server(s){}", + app.mcp_configured_count, restart_hint + ), Style::default().fg(palette::TEXT_MUTED), ))); } @@ -700,8 +706,11 @@ fn render_context_panel(f: &mut Frame, area: Rect, app: &App) { // ── Cycles ─────────────────────────────────────────────────── if app.cycle_count > 0 { lines.push(Line::from(Span::styled( - format!("cycles: {} crossed, {} briefing(s)", - app.cycle_count, app.cycle_briefings.len()), + format!( + "cycles: {} crossed, {} briefing(s)", + app.cycle_count, + app.cycle_briefings.len() + ), Style::default().fg(palette::TEXT_MUTED), ))); } diff --git a/crates/tui/src/tui/ui.rs b/crates/tui/src/tui/ui.rs index 57026836..6f51976d 100644 --- a/crates/tui/src/tui/ui.rs +++ b/crates/tui/src/tui/ui.rs @@ -4222,13 +4222,10 @@ async fn submit_or_steer_message( let count = app.queued_message_count().saturating_add(1); app.queue_message(message); if app.offline_mode { - app.status_message = Some(format!( - "Offline: {count} queued — ↑ to edit, /queue list" - )); + app.status_message = + Some(format!("Offline: {count} queued — ↑ to edit, /queue list")); } else { - app.status_message = Some(format!( - "{count} queued — ↑ to edit, /queue list" - )); + app.status_message = Some(format!("{count} queued — ↑ to edit, /queue list")); } Ok(()) } diff --git a/npm/deepseek-tui/package.json b/npm/deepseek-tui/package.json index 909be082..e0ea93f9 100644 --- a/npm/deepseek-tui/package.json +++ b/npm/deepseek-tui/package.json @@ -1,7 +1,7 @@ { "name": "deepseek-tui", - "version": "0.8.8", - "deepseekBinaryVersion": "0.8.8", + "version": "0.8.9", + "deepseekBinaryVersion": "0.8.9", "description": "Install and run deepseek and deepseek-tui binaries from GitHub release artifacts.", "author": "Hmbown", "license": "MIT",