From 003a81d37dab75824c6da8c7e21204e816e2ad13 Mon Sep 17 00:00:00 2001 From: Hunter Bown Date: Tue, 26 May 2026 11:21:18 -0500 Subject: [PATCH 1/3] test: align macos CI assertions --- crates/tui/src/theme_qa_audit.rs | 16 +++++----- crates/tui/src/tui/app.rs | 54 +++++++++++++++++--------------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/crates/tui/src/theme_qa_audit.rs b/crates/tui/src/theme_qa_audit.rs index a19da7e3..37c1435a 100644 --- a/crates/tui/src/theme_qa_audit.rs +++ b/crates/tui/src/theme_qa_audit.rs @@ -12,7 +12,9 @@ mod tests { use crate::palette::{ CATPPUCCIN_MOCHA_UI_THEME, DRACULA_UI_THEME, GRAYSCALE_UI_THEME, GRUVBOX_DARK_UI_THEME, - LIGHT_UI_THEME, TOKYO_NIGHT_UI_THEME, UI_THEME, UiTheme, + LIGHT_UI_THEME, TOKYO_NIGHT_UI_THEME, UI_THEME, UiTheme, WHALE_ACCENT_ACTION_RGB, + WHALE_ACCENT_PRIMARY_RGB, WHALE_ACCENT_SECONDARY_RGB, WHALE_BG_RGB, WHALE_TEXT_BODY_RGB, + WHALE_TEXT_MUTED_RGB, }; use ratatui::style::Color; @@ -288,30 +290,30 @@ mod tests { fn whale_dark_uses_proposed_palette() { // Issue #2012: verify the default Whale dark uses proposed tokens. let t = UI_THEME; - assert_eq!(rgb(t.surface_bg), Some((13, 21, 37)), "Deep Navy #0D1525"); + assert_eq!(rgb(t.surface_bg), Some(WHALE_BG_RGB), "Deep Navy #0A1120"); assert_eq!( rgb(t.text_body), - Some((246, 242, 232)), + Some(WHALE_TEXT_BODY_RGB), "Whale Ivory #F6F2E8" ); assert_eq!( rgb(t.text_muted), - Some((169, 180, 199)), + Some(WHALE_TEXT_MUTED_RGB), "Mist Gray #A9B4C7" ); assert_eq!( rgb(t.accent_primary), - Some((246, 196, 83)), + Some(WHALE_ACCENT_PRIMARY_RGB), "Signal Gold #F6C453" ); assert_eq!( rgb(t.accent_secondary), - Some((79, 209, 197)), + Some(WHALE_ACCENT_SECONDARY_RGB), "Seafoam #4FD1C5" ); assert_eq!( rgb(t.accent_action), - Some((255, 122, 89)), + Some(WHALE_ACCENT_ACTION_RGB), "Coral Spark #FF7A59" ); assert_eq!(rgb(t.error_fg), Some((255, 92, 122)), "Rose Red #FF5C7A"); diff --git a/crates/tui/src/tui/app.rs b/crates/tui/src/tui/app.rs index 884242c4..2c3ec0c9 100644 --- a/crates/tui/src/tui/app.rs +++ b/crates/tui/src/tui/app.rs @@ -3145,13 +3145,10 @@ impl App { self.insert_str(&normalized); } self.paste_burst.clear_after_explicit_paste(); - // Visible-before-submit consolidation: when the post-paste input - // is over the cap, swap it for an @paste-…md mention immediately - // (instead of waiting until the user presses Enter and getting - // surprised by an auto-sent @mention). The same logic runs as a - // safety-net at submit time so any other code path that fills - // self.input above the cap still consolidates rather than - // silently truncating. + // Large pasted input stays editable and visible until submit. The + // submit-time safety net consolidates oversized composer content into + // an @paste-...md mention before dispatch, so no path silently + // truncates user input. // self.consolidate_large_input_if_oversized(); // deferred to submit time } @@ -5324,12 +5321,10 @@ mod tests { } #[test] - fn paste_consolidates_oversized_text_into_paste_file_visibly() { - // Visible-before-submit consolidation (paste UX): when a single - // bracketed paste exceeds the safety cap, the @mention must - // replace the input *immediately*, so the user sees what's - // about to be sent before pressing Enter — not as a side effect - // of submit. + fn paste_defers_oversized_text_consolidation_until_submit() { + // #2168: a large paste stays inline so the user can still edit it. + // Submit-time consolidation then writes the paste file and sends the + // @mention instead of the raw oversized content. let tmp = tempfile::TempDir::new().expect("tempdir"); let mut opts = test_options(false); opts.workspace = tmp.path().to_path_buf(); @@ -5338,26 +5333,35 @@ mod tests { app.insert_paste_text(&full_content); - // Composer should now contain the @mention, not the full text. - assert!( - app.input.starts_with("@.deepseek/pastes/paste-") && app.input.ends_with(".md"), - "expected @mention in composer after large paste, got: {}", - app.input - ); - // The cursor moves to the end of the @mention. + assert_eq!(app.input, full_content); assert_eq!(app.cursor_position, app.input.chars().count()); - // The paste file must exist with the full content. - let rel_path = &app.input[1..]; + let pastes_dir = tmp.path().join(".deepseek/pastes"); + assert!( + !pastes_dir.exists() || std::fs::read_dir(&pastes_dir).unwrap().next().is_none(), + "paste file should not be written before submit" + ); + assert!( + app.status_toasts + .iter() + .all(|toast| !toast.text.contains("consolidated")), + "consolidation toast should not appear before submit" + ); + + let submitted = app.submit_input().expect("expected submitted input"); + assert!( + submitted.starts_with("@.deepseek/pastes/paste-") && submitted.ends_with(".md"), + "expected @mention after submit, got: {submitted}" + ); + let rel_path = &submitted[1..]; let abs = tmp.path().join(rel_path); assert!(abs.is_file(), "paste file must exist at {abs:?}"); let written = std::fs::read_to_string(&abs).expect("read"); assert_eq!(written, full_content); - // A toast confirms what happened so the user isn't surprised. assert!( app.status_toasts .iter() - .any(|t| t.text.contains("consolidated")), - "expected consolidation toast" + .any(|toast| toast.text.contains("consolidated")), + "expected consolidation toast after submit" ); } From 586f3f325e0808f2e14ee9e117187248c5d59c3b Mon Sep 17 00:00:00 2001 From: Hunter Bown Date: Tue, 26 May 2026 11:32:31 -0500 Subject: [PATCH 2/3] test: align windows notification fallback --- crates/tui/src/tui/notifications.rs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/crates/tui/src/tui/notifications.rs b/crates/tui/src/tui/notifications.rs index d2b068e8..4db152fe 100644 --- a/crates/tui/src/tui/notifications.rs +++ b/crates/tui/src/tui/notifications.rs @@ -8,8 +8,8 @@ //! - **BEL** — audible bell (`\x07`) as a last-resort fallback. //! //! When `method = "auto"`, the resolver picks the best method for the -//! current terminal; Windows falls back to `Off` to avoid the error chime -//! (#583). +//! current terminal; Windows falls back to `Bel`, which is routed through +//! `MessageBeep(MB_OK)` for an audible default notification sound. #[cfg(target_os = "windows")] use windows::Win32::System::Diagnostics::Debug::MessageBeep; @@ -68,7 +68,7 @@ fn windows_bell() { /// - `$TERM` contains `ghostty` → `Osc9` (cmux etc.) /// - `$TERM` contains `kitty` → `Kitty` /// - Unix unknown → `Bel` -/// - Windows unknown → `Off` +/// - Windows unknown → `Bel` #[must_use] fn resolve_method() -> Method { let term_program = std::env::var("TERM_PROGRAM").unwrap_or_default(); @@ -199,8 +199,8 @@ pub fn notify_done_to( /// /// With `method = Auto`, selects the best protocol for the current terminal /// (OSC 9, Kitty OSC 99, Ghostty OSC 777, or Bel). The unknown-terminal -/// fallback is platform-aware — `Bel` on macOS / Linux, `Off` on Windows -/// (where BEL maps to the `SystemAsterisk` / `MB_OK` error chime, #583). +/// fallback is platform-aware: `Bel` on every platform, with Windows routing +/// it through `MessageBeep(MB_OK)` for a default system notification sound. /// See [`resolve_method`] for the canonical resolution table. Pass /// `in_tmux = true` (i.e. `$TMUX` is non-empty at runtime) to wrap OSC /// sequences in a DCS passthrough. @@ -620,7 +620,9 @@ mod tests { /// when the test harness runs them in parallel threads. fn env_lock() -> std::sync::MutexGuard<'static, ()> { static LOCK: OnceLock> = OnceLock::new(); - LOCK.get_or_init(|| Mutex::new(())).lock().unwrap() + LOCK.get_or_init(|| Mutex::new(())) + .lock() + .unwrap_or_else(|poisoned| poisoned.into_inner()) } fn capture( @@ -827,12 +829,11 @@ mod tests { assert_eq!(resolved, Method::Bel); } - /// #583: on Windows, an unknown TERM_PROGRAM resolves to `Off` - /// (not `Bel`) so the post-turn notification doesn't ring the - /// `SystemAsterisk` / `MB_OK` chime. + /// #2166: on Windows, an unknown TERM_PROGRAM resolves to `Bel` so + /// `windows_bell()` can route the notification through `MessageBeep`. #[test] #[cfg(target_os = "windows")] - fn auto_detect_picks_off_for_unknown_on_windows() { + fn auto_detect_picks_bel_for_unknown_on_windows() { let _lock = env_lock(); let prev = std::env::var_os("TERM_PROGRAM"); // SAFETY: test-only; serialised by env_lock(). @@ -845,7 +846,7 @@ mod tests { None => std::env::remove_var("TERM_PROGRAM"), } } - assert_eq!(resolved, Method::Off); + assert_eq!(resolved, Method::Bel); } /// #583: known OSC-9 terminals must still resolve to `Osc9` on From 2ef1c3666f4e3c7d8bc38c63a3de77bd7abe8063 Mon Sep 17 00:00:00 2001 From: Hunter Bown Date: Tue, 26 May 2026 11:52:48 -0500 Subject: [PATCH 3/3] chore: bump release lane to 0.8.46 --- CHANGELOG.md | 5 +++-- Cargo.lock | 28 ++++++++++++++-------------- Cargo.toml | 2 +- crates/agent/Cargo.toml | 2 +- crates/app-server/Cargo.toml | 18 +++++++++--------- crates/cli/Cargo.toml | 14 +++++++------- crates/config/Cargo.toml | 2 +- crates/core/Cargo.toml | 16 ++++++++-------- crates/execpolicy/Cargo.toml | 2 +- crates/hooks/Cargo.toml | 2 +- crates/tools/Cargo.toml | 2 +- crates/tui/CHANGELOG.md | 5 +++-- crates/tui/Cargo.toml | 6 +++--- npm/codewhale/package.json | 4 ++-- npm/deepseek-tui/package.json | 2 +- 15 files changed, 56 insertions(+), 54 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f62e7bfd..6c266c89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,7 +83,7 @@ Thanks to new contributors whose PRs landed in this release: **@zhuangbiaowei** (#2145), **@aboimpinto** (#1872), and continuing contributors **@reidliu41**, **@cyq1017**, **@idling11**, -**@h3c-hexin**, **@wdw8276**, and **@zlh124**. +**@h3c-hexin**, **@wdw8276**, **@zlh124**, and **@jeoor**. ## [0.8.45] - 2026-05-25 @@ -4968,7 +4968,8 @@ Welcome — and thank you. - Hooks system and config profiles - Example skills and launch assets -[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.45...HEAD +[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.46...HEAD +[0.8.46]: https://github.com/Hmbown/CodeWhale/compare/v0.8.45...v0.8.46 [0.8.45]: https://github.com/Hmbown/CodeWhale/compare/v0.8.44...v0.8.45 [0.8.44]: https://github.com/Hmbown/CodeWhale/compare/v0.8.43...v0.8.44 [0.8.43]: https://github.com/Hmbown/CodeWhale/compare/v0.8.42...v0.8.43 diff --git a/Cargo.lock b/Cargo.lock index 7dbc5d6c..83777fd1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -803,7 +803,7 @@ checksum = "e9b18233253483ce2f65329a24072ec414db782531bdbb7d0bbc4bd2ce6b7e21" [[package]] name = "codewhale-agent" -version = "0.8.45" +version = "0.8.46" dependencies = [ "codewhale-config", "serde", @@ -811,7 +811,7 @@ dependencies = [ [[package]] name = "codewhale-app-server" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "axum", @@ -836,7 +836,7 @@ dependencies = [ [[package]] name = "codewhale-cli" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "chrono", @@ -862,7 +862,7 @@ dependencies = [ [[package]] name = "codewhale-config" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "codewhale-secrets", @@ -875,7 +875,7 @@ dependencies = [ [[package]] name = "codewhale-core" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "chrono", @@ -893,7 +893,7 @@ dependencies = [ [[package]] name = "codewhale-execpolicy" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "codewhale-protocol", @@ -902,7 +902,7 @@ dependencies = [ [[package]] name = "codewhale-hooks" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "async-trait", @@ -916,7 +916,7 @@ dependencies = [ [[package]] name = "codewhale-mcp" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "serde", @@ -925,7 +925,7 @@ dependencies = [ [[package]] name = "codewhale-protocol" -version = "0.8.45" +version = "0.8.46" dependencies = [ "serde", "serde_json", @@ -933,7 +933,7 @@ dependencies = [ [[package]] name = "codewhale-secrets" -version = "0.8.45" +version = "0.8.46" dependencies = [ "dirs", "keyring", @@ -946,7 +946,7 @@ dependencies = [ [[package]] name = "codewhale-state" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "chrono", @@ -958,7 +958,7 @@ dependencies = [ [[package]] name = "codewhale-tools" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "async-trait", @@ -971,7 +971,7 @@ dependencies = [ [[package]] name = "codewhale-tui" -version = "0.8.45" +version = "0.8.46" dependencies = [ "anyhow", "arboard", @@ -1037,7 +1037,7 @@ dependencies = [ [[package]] name = "codewhale-tui-core" -version = "0.8.45" +version = "0.8.46" [[package]] name = "colorchoice" diff --git a/Cargo.toml b/Cargo.toml index ac727f04..dae89151 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.45" +version = "0.8.46" edition = "2024" # Rust 1.88 stabilized `let_chains` in `if`/`while` conditions, which the # codebase relies on extensively. Cargo enforces this so users on older diff --git a/crates/agent/Cargo.toml b/crates/agent/Cargo.toml index dc402892..4f98a69c 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] -codewhale-config = { path = "../config", version = "0.8.45" } +codewhale-config = { path = "../config", version = "0.8.46" } serde.workspace = true diff --git a/crates/app-server/Cargo.toml b/crates/app-server/Cargo.toml index d683abf4..09dd8643 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 -codewhale-agent = { path = "../agent", version = "0.8.45" } -codewhale-config = { path = "../config", version = "0.8.45" } -codewhale-core = { path = "../core", version = "0.8.45" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.45" } -codewhale-hooks = { path = "../hooks", version = "0.8.45" } -codewhale-mcp = { path = "../mcp", version = "0.8.45" } -codewhale-protocol = { path = "../protocol", version = "0.8.45" } -codewhale-state = { path = "../state", version = "0.8.45" } -codewhale-tools = { path = "../tools", version = "0.8.45" } +codewhale-agent = { path = "../agent", version = "0.8.46" } +codewhale-config = { path = "../config", version = "0.8.46" } +codewhale-core = { path = "../core", version = "0.8.46" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.46" } +codewhale-hooks = { path = "../hooks", version = "0.8.46" } +codewhale-mcp = { path = "../mcp", version = "0.8.46" } +codewhale-protocol = { path = "../protocol", version = "0.8.46" } +codewhale-state = { path = "../state", version = "0.8.46" } +codewhale-tools = { path = "../tools", version = "0.8.46" } serde.workspace = true serde_json.workspace = true tokio.workspace = true diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index e2006806..59d4da18 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -25,13 +25,13 @@ path = "src/bin/deepseek_legacy_shim.rs" anyhow.workspace = true clap.workspace = true clap_complete.workspace = true -codewhale-agent = { path = "../agent", version = "0.8.45" } -codewhale-app-server = { path = "../app-server", version = "0.8.45" } -codewhale-config = { path = "../config", version = "0.8.45" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.45" } -codewhale-mcp = { path = "../mcp", version = "0.8.45" } -codewhale-secrets = { path = "../secrets", version = "0.8.45" } -codewhale-state = { path = "../state", version = "0.8.45" } +codewhale-agent = { path = "../agent", version = "0.8.46" } +codewhale-app-server = { path = "../app-server", version = "0.8.46" } +codewhale-config = { path = "../config", version = "0.8.46" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.46" } +codewhale-mcp = { path = "../mcp", version = "0.8.46" } +codewhale-secrets = { path = "../secrets", version = "0.8.46" } +codewhale-state = { path = "../state", version = "0.8.46" } chrono.workspace = true dirs.workspace = true serde.workspace = true diff --git a/crates/config/Cargo.toml b/crates/config/Cargo.toml index 912d5ed8..4fbdb03c 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 -codewhale-secrets = { path = "../secrets", version = "0.8.45" } +codewhale-secrets = { path = "../secrets", version = "0.8.46" } dirs.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index c9d602f4..45853186 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 -codewhale-agent = { path = "../agent", version = "0.8.45" } -codewhale-config = { path = "../config", version = "0.8.45" } -codewhale-execpolicy = { path = "../execpolicy", version = "0.8.45" } -codewhale-hooks = { path = "../hooks", version = "0.8.45" } -codewhale-mcp = { path = "../mcp", version = "0.8.45" } -codewhale-protocol = { path = "../protocol", version = "0.8.45" } -codewhale-state = { path = "../state", version = "0.8.45" } -codewhale-tools = { path = "../tools", version = "0.8.45" } +codewhale-agent = { path = "../agent", version = "0.8.46" } +codewhale-config = { path = "../config", version = "0.8.46" } +codewhale-execpolicy = { path = "../execpolicy", version = "0.8.46" } +codewhale-hooks = { path = "../hooks", version = "0.8.46" } +codewhale-mcp = { path = "../mcp", version = "0.8.46" } +codewhale-protocol = { path = "../protocol", version = "0.8.46" } +codewhale-state = { path = "../state", version = "0.8.46" } +codewhale-tools = { path = "../tools", version = "0.8.46" } serde_json.workspace = true uuid.workspace = true diff --git a/crates/execpolicy/Cargo.toml b/crates/execpolicy/Cargo.toml index 16b09697..acf2ce21 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 -codewhale-protocol = { path = "../protocol", version = "0.8.45" } +codewhale-protocol = { path = "../protocol", version = "0.8.46" } serde.workspace = true diff --git a/crates/hooks/Cargo.toml b/crates/hooks/Cargo.toml index 4f657cd0..a6a3600e 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 -codewhale-protocol = { path = "../protocol", version = "0.8.45" } +codewhale-protocol = { path = "../protocol", version = "0.8.46" } reqwest.workspace = true serde.workspace = true serde_json.workspace = true diff --git a/crates/tools/Cargo.toml b/crates/tools/Cargo.toml index 464ce47e..2be5cc0d 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 -codewhale-protocol = { path = "../protocol", version = "0.8.45" } +codewhale-protocol = { path = "../protocol", version = "0.8.46" } serde.workspace = true serde_json.workspace = true tokio.workspace = true diff --git a/crates/tui/CHANGELOG.md b/crates/tui/CHANGELOG.md index f62e7bfd..6c266c89 100644 --- a/crates/tui/CHANGELOG.md +++ b/crates/tui/CHANGELOG.md @@ -83,7 +83,7 @@ Thanks to new contributors whose PRs landed in this release: **@zhuangbiaowei** (#2145), **@aboimpinto** (#1872), and continuing contributors **@reidliu41**, **@cyq1017**, **@idling11**, -**@h3c-hexin**, **@wdw8276**, and **@zlh124**. +**@h3c-hexin**, **@wdw8276**, **@zlh124**, and **@jeoor**. ## [0.8.45] - 2026-05-25 @@ -4968,7 +4968,8 @@ Welcome — and thank you. - Hooks system and config profiles - Example skills and launch assets -[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.45...HEAD +[Unreleased]: https://github.com/Hmbown/CodeWhale/compare/v0.8.46...HEAD +[0.8.46]: https://github.com/Hmbown/CodeWhale/compare/v0.8.45...v0.8.46 [0.8.45]: https://github.com/Hmbown/CodeWhale/compare/v0.8.44...v0.8.45 [0.8.44]: https://github.com/Hmbown/CodeWhale/compare/v0.8.43...v0.8.44 [0.8.43]: https://github.com/Hmbown/CodeWhale/compare/v0.8.42...v0.8.43 diff --git a/crates/tui/Cargo.toml b/crates/tui/Cargo.toml index 2ffdde9e..6aa5486c 100644 --- a/crates/tui/Cargo.toml +++ b/crates/tui/Cargo.toml @@ -27,9 +27,9 @@ path = "src/bin/deepseek_tui_legacy_shim.rs" [dependencies] anyhow = "1.0.100" arboard = "3.4" -codewhale-config = { path = "../config", version = "0.8.45" } -codewhale-secrets = { path = "../secrets", version = "0.8.45" } -codewhale-tools = { path = "../tools", version = "0.8.45" } +codewhale-config = { path = "../config", version = "0.8.46" } +codewhale-secrets = { path = "../secrets", version = "0.8.46" } +codewhale-tools = { path = "../tools", version = "0.8.46" } schemaui = { version = "0.12.0", default-features = false, optional = true } async-stream = "0.3.6" async-trait = "0.1" diff --git a/npm/codewhale/package.json b/npm/codewhale/package.json index c8a402f8..5413ba70 100644 --- a/npm/codewhale/package.json +++ b/npm/codewhale/package.json @@ -1,7 +1,7 @@ { "name": "codewhale", - "version": "0.8.45", - "codewhaleBinaryVersion": "0.8.45", + "version": "0.8.46", + "codewhaleBinaryVersion": "0.8.46", "description": "Install and run CodeWhale, the agentic terminal for open-source and open-weight coding models, from GitHub release artifacts.", "author": "Hmbown", "license": "MIT", diff --git a/npm/deepseek-tui/package.json b/npm/deepseek-tui/package.json index b99f9a15..75462031 100644 --- a/npm/deepseek-tui/package.json +++ b/npm/deepseek-tui/package.json @@ -1,6 +1,6 @@ { "name": "deepseek-tui", - "version": "0.8.45", + "version": "0.8.46", "description": "Legacy compatibility package. Renamed to `codewhale`; run `npm install -g codewhale` for new installs.", "author": "Hmbown", "license": "MIT",