release: prepare v0.8.43#1988
Conversation
- grep_files now respects cancellation token (#1839, thanks @LING71671) - Ctrl+Z restores last cleared composer draft (#1911, thanks @LING71671) - Clipboard works on non-wlroots Wayland via wl-copy (#1938, thanks @ousamabenyounes)
- Workspace version: 0.8.42 → 0.8.43 - All internal codewhale-* deps: 0.8.42 → 0.8.43 - npm codewhale: 0.8.42 → 0.8.43 - npm deepseek-tui shim: 0.8.42 → 0.8.43 - Crate descriptions: open-model-first positioning - npm descriptions: open-source and open-weight language - Cargo.lock regenerated
- MIN_KNOWN_CONTRIBUTORS: 91 → 98 (live GitHub count) - page.tsx fallback: 91 → 98 - README Thanks section: add 30+ previously unlisted contributors whose PRs were merged since April 2026 - Sync contributor list across all three translations (en, zh-CN, ja-JP)
There was a problem hiding this comment.
Pull request overview
Release prep for v0.8.43, bundling a handful of small fixes (TUI + tools + npm installer), syncing workspace/npm version pins, and refreshing public-facing docs/web copy and contributor acknowledgements.
Changes:
- Harvested fixes:
grep_filescancellation support, npm installer stream pause to avoid manifest truncation, Ctrl+Z composer draft restore, and improved Wayland clipboard behavior viawl-copyfirst. - Version + metadata sync: workspace/crate/npm bumps to
0.8.43, Cargo.lock regeneration, and updated package descriptions/funding fields. - Contributor + branding surfaces: website repo stats defaults, homepage copy, and README translations updated (including Support section + acknowledgements).
Reviewed changes
Copilot reviewed 24 out of 25 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| web/lib/github.ts | Updates default repo slug, contributor floor, and web User-Agent for GitHub API calls. |
| web/app/[locale]/page.tsx | Refreshes homepage copy, repo links, fallback contributor count, and adds provider list + new sections. |
| README.zh-CN.md | Adds TOC links, Sponsor badge, Support section, and expands acknowledgements. |
| README.md | Adds TOC links, Sponsor badge, Support section, and expands acknowledgements; removes old inline support link. |
| README.ja-JP.md | Adds TOC links, Sponsor badge, Support section, and expands acknowledgements; removes old coffee badge block. |
| npm/deepseek-tui/package.json | Bumps shim version and updates description/keywords + adds funding metadata. |
| npm/codewhale/scripts/install.js | Pauses response streams early to prevent data loss; resumes explicitly in downloadText. |
| npm/codewhale/package.json | Bumps version + binary pin; refreshes description; adds funding metadata. |
| crates/tui/src/tui/ui.rs | Adds Ctrl+Z keybinding to restore the last cleared composer draft. |
| crates/tui/src/tui/clipboard.rs | Adds wl-copy helper and Linux ordering change; introduces unit tests for helper behavior. |
| crates/tui/src/tui/app.rs | Implements single-slot clear undo buffer and restoration logic; adds tests. |
| crates/tui/src/tools/search.rs | Adds cancellation token checks to grep_files recursion and scanning; adds regression test. |
| crates/tui/CHANGELOG.md | Adds v0.8.43 release notes and link refs. |
| crates/tui/Cargo.toml | Updates crate description and internal dependency pins to 0.8.43. |
| crates/tools/Cargo.toml | Updates internal dependency pin to 0.8.43. |
| crates/hooks/Cargo.toml | Updates internal dependency pin to 0.8.43. |
| crates/execpolicy/Cargo.toml | Updates internal dependency pin to 0.8.43. |
| crates/core/Cargo.toml | Updates internal dependency pins to 0.8.43. |
| crates/config/Cargo.toml | Updates internal dependency pin to 0.8.43. |
| crates/cli/Cargo.toml | Updates crate description and internal dependency pins to 0.8.43. |
| crates/app-server/Cargo.toml | Updates internal dependency pins to 0.8.43. |
| crates/agent/Cargo.toml | Updates internal dependency pin to 0.8.43. |
| CHANGELOG.md | Adds v0.8.43 release notes and link refs (workspace-level). |
| Cargo.toml | Bumps workspace version to 0.8.43. |
| Cargo.lock | Regenerated lockfile reflecting dependency updates and crate version bumps. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| pub fn stash_current_input_for_recovery(&mut self) { | ||
| let draft = self.input.clone(); | ||
| if draft.trim().is_empty() { | ||
| self.clear_undo_buffer = None; |
| #[cfg(target_os = "linux")] | ||
| #[test] | ||
| fn wlcopy_helper_succeeds_when_binary_returns_zero() { | ||
| let result = write_text_with_wlcopy_using_argv("true", "test"); |
There was a problem hiding this comment.
Code Review
This pull request updates the project to version 0.8.43 and completes the rebranding from "DeepSeek TUI" to "CodeWhale" across documentation, metadata, and web surfaces. Key functional improvements include implementing cancellation support for the grep_files tool, fixing a race condition in the npm installer by pausing HTTP streams, and adding wl-copy support for Wayland compositors. Additionally, a draft recovery feature was added to the TUI composer, mapped to Ctrl+Z. Review feedback suggests refining the draft recovery logic to prevent accidental buffer clearing and removing redundant code in the restoration method. There is also a note regarding the potential conflict of the Ctrl+Z shortcut with standard terminal job control.
| if draft.trim().is_empty() { | ||
| self.clear_undo_buffer = None; | ||
| return; |
There was a problem hiding this comment.
| pub fn restore_last_cleared_input_if_empty(&mut self) -> bool { | ||
| if !self.input.is_empty() { | ||
| return false; | ||
| } | ||
| let Some(saved) = self.clear_undo_buffer.take().filter(|s| !s.is_empty()) else { | ||
| return false; | ||
| }; | ||
|
|
||
| self.input = saved; | ||
| self.cursor_position = char_count(&self.input); | ||
| self.history_index = None; | ||
| self.history_navigation_draft = None; | ||
| self.selected_attachment_index = None; | ||
| self.slash_menu_selected = 0; | ||
| self.slash_menu_hidden = false; | ||
| self.needs_redraw = true; | ||
| self.clear_undo_buffer = None; | ||
| true | ||
| } |
There was a problem hiding this comment.
The clear_undo_buffer = None assignment is redundant because self.clear_undo_buffer.take() already clears the field. Additionally, the .filter(|s| !s.is_empty()) is unnecessary as stash_current_input_for_recovery already ensures that only non-empty strings are stored.
pub fn restore_last_cleared_input_if_empty(&mut self) -> bool {
if !self.input.is_empty() {
return false;
}
let Some(saved) = self.clear_undo_buffer.take() else {
return false;
};
self.input = saved;
self.cursor_position = char_count(&self.input);
self.history_index = None;
self.history_navigation_draft = None;
self.selected_attachment_index = None;
self.slash_menu_selected = 0;
self.slash_menu_hidden = false;
self.needs_redraw = true;
true
}| KeyCode::Char('z') if key.modifiers.contains(KeyModifiers::CONTROL) => { | ||
| if app.restore_last_cleared_input_if_empty() { | ||
| app.status_message = Some("Restored cleared draft".to_string()); | ||
| } | ||
| } |
There was a problem hiding this comment.
Using Ctrl+Z for restoring a draft shadows the standard terminal SIGTSTP signal, which is used to suspend processes. While this is common in full-screen editors, it may surprise users who rely on terminal job control. Consider if this shortcut should be configurable or restricted to specific focus states.
The previous resolved allocative 0.3.6 which pulls hashbrown 0.16, conflicting with starlark_map's hashbrown 0.14 dependency. Restore the original lockfile and update only workspace crates to 0.8.43 via .
- Show fuller turn ID prefix (16 chars) for disambiguation in task_read/task_cancel - Replace ambiguous 'X active (Y running)' with clear per-status breakdown - Add y/Y yank affordances for copying turn ID and full status from Tasks panel - Add yank hint text in Tasks panel footer
When a turn has been running for > 30 seconds, the footer now shows a classified stall reason suffix: - 'waiting for model' — API streaming in progress - 'tools executing' — active tool calls running - 'sub-agents working' — child sub-agents in flight - 'compacting context' — context compaction active - 'background jobs running' — shell tasks executing - 'waiting — no recent activity' — turn stalled with no classified work
Implements structured choice cards for the v0.8.43 truth-surface tracker. When Brother Whale needs user input, it surfaces a bordered card with: - A question prompt - Numbered options with (default) marker - Arrow/j/k navigation and 1-9 number-key shortcuts - Enter to confirm, Esc to cancel - Decision results surfaced as status messages The widget compiles and the keyboard routing is wired into the main event loop. Rendering overlay wire-up follows in the next commit.
Goal mode (v0.8.43 truth-surface): - New AppMode::Goal variant orthogonal to Plan/Agent/YOLO - /goal command to set/complete objectives - Goal status displayed in Work sidebar with elapsed time - Alt+G keybinding to toggle Goal mode - Mode parsed from /mode goal|4 command Receipts (v0.8.43 truth-surface): - ToolEvidence struct collects per-turn tool summaries - Post-turn receipt generated on TurnComplete - Receipt rendered as dimmed line at transcript tail - Receipt/evidence cleared on new turn dispatch Also: - Fix AppMode::Goal exhaustive pattern coverage across 5 files - Update doctor error message (deepseek → codewhale) - Fix clippy::useless_format warning
…ll reasons, decision cards
- Thinking cells now qualify as detail targets alongside tools and sub-agents - Space key on empty composer toggles the focused cell's collapsed state - Status message confirms expand/collapse action - Builds on existing collapsed_cells HashSet from mouse context menu
Before the turn breaks at the thinking-only checkpoint, drain any sub-agent completions that arrived between the last hold check and now. If a child finished while we were running the final status check, surface its sentinel immediately rather than delaying it to the next turn.
- npm/codewhale/README.md: remove DeepSeek-first language - docs/INSTALL.md: scoop install codewhale (not deepseek-tui) - Wire decision card overlay rendering in main render loop - Decision cards now appear centered on transcript when active
…ntributors Fixes the macOS test failure on PR #1988 and the contributor-credit gate from scripts/release/check-versions.sh. cell_has_detail_target() was matching HistoryCell::Thinking, which caused the activity footer to append " · ⌥+V raw" to thinking cells that have no separate raw detail target. The detail-card flow only exists for tool / sub-agent cells; thinking renders its own raw text inline. Removing Thinking from the match arm restores the behavior the existing activity_footer_hint_surfaces_visible_thinking_without_raw_tool_hint test asserts. The CHANGELOG.md 0.8.43 section now credits the 30 contributors added to README acknowledgements in this cycle, satisfying the README-vs- CHANGELOG cross-check in check-versions.sh. crates/tui/CHANGELOG.md is re-synced so the matching guard passes. Verified locally on macOS: - cargo fmt --all -- --check : clean - cargo clippy --workspace --all-targets --all-features --locked -D warnings : clean - cargo test --workspace --all-features --locked : 41 suites, 0 failed - ./scripts/release/check-versions.sh : Version state OK - ./scripts/release/publish-crates.sh dry-run : all 14 crates OK - cargo build --release --locked : clean Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Release preparation for v0.8.43 — harvests four small candidate fixes, syncs version pins, refreshes contributor surfaces, implements Tasks sidebar inspectability improvements, and adds the CHANGELOG entry.
Included fixes
grep_filesrespects cancellation tokenNew features
task_read/task_canceldisambiguation. Background job status shows clear per-status breakdown (3 running, 2 completed) instead of ambiguous5 active (3 running).y/Yyank affordances copy the current turn ID or full status line to the system clipboard from the Tasks panel.Version bumps
0.8.42→0.8.43codewhale-*crate dependency pinscodewhale:0.8.42→0.8.43deepseek-tuideprecation shim:0.8.42→0.8.43Cargo.lock: restored compatible resolution (avoidedallocative/hashbrownversion conflict)Contributor surfaces
MIN_KNOWN_CONTRIBUTORS: 91 → 98 (live GitHubcontributors?anon=truecount)Checks run
check-versions.shcargo fmt --all -- --checkgit diff --checkcargo build --locked(full workspace)cargo clippy --workspace --all-targets --all-features --locked -- -D warningsscripts/release/publish-crates.sh dry-runCommits
Deferred steps (after approval)
mainauto-tag.ymlto create tagv0.8.43release.ymlto build release artifactsnpm publishfromnpm/codewhale→codewhale@0.8.43npm publishfromnpm/deepseek-tui→deepseek-tui@0.8.43./scripts/release/publish-crates.sh publish./scripts/release/check-published.sh 0.8.43https://cnb.cool/codewhale.net/codewhale