Skip to content

Commit 41ca044

Browse files
author
Laurent Guitton
committed
chore: bump version to 3.2.0
1 parent dddf8b9 commit 41ca044

16 files changed

Lines changed: 78 additions & 56 deletions

File tree

CHANGELOG.md

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [3.2.0] - 2026-07-02
11+
1012
### Added
1113

14+
- **Integrated terminal — WebGL rendering, agent tabs, New AI task** — the terminal panel now renders via WebGL for smoother output, gains inline search (`Ctrl+F`, prev/next) and clickable links, and its tabs carry a type (`shell` / `claude` / `codex`) with a distinct icon and an unread-output dot. "Launch Claude Code" / "Launch Codex" now open a real PTY shell tab instead of a non-functional stub, and a new "New AI task" button creates a scratch git worktree and opens a Claude Code terminal tab in one click. Hardening: `safe_repo_path()` on all terminal filesystem operations, a shell-executable whitelist, PTY orphan/zombie prevention on tab close, bounded keystroke input, and a UTF-8 boundary carry-buffer fix for multibyte characters straddling PTY read chunks.
15+
- **File Explorer / Editor panel** — a new dockable panel (drag/resize/fullscreen, mirroring the Terminal panel) lists the full repo file tree (gitignore-aware, via `git ls-files`) and opens files in a lazy-loaded CodeMirror 6 editor with per-tab undo history, syntax highlighting, and a lock/undo/save toolbar. Reachable from a new Files tile in the AppDock, with per-repo layout settings and folder file-counts pre-computed in a single tree walk.
1216
- **Per-project worktree submenu** — each project tab now has a caret (▼) between its name and close button that opens a submenu listing `main` plus every worktree of the project. Selecting one switches that project's checkout in place (no extra tab); the active checkout is checkmarked.
1317
- **AI tasks manage their worktree**`gitwand-scratch-*` worktrees appear in the submenu with a sparkle icon and a delete action that prompts to either merge the work back into the project or delete the isolated worktree (with branch cleanup), instead of leaving it orphaned on disk.
14-
15-
### Fixed
16-
17-
- **Git Tree: deleting a worktree branch** — right-clicking a branch that's checked out in a worktree now offers "Delete worktree" (and "Merge & delete worktree" for AI-task scratch worktrees) instead of a plain "Delete branch" that git rejects. Removing/merging a worktree also reloads the branch list so the deleted branch no longer lingers in the view.
18+
- **GitTree filter mode + branch/date-bucket navigation** — the Git Tree toolbar gains a filter mode that recalculates the DAG to show only matching commits, quick-toggle buttons for branch/author filters, and date-bucket separators in the commit timeline. The branch search box now offers a branch-name autocomplete dropdown (teleported to `<body>` to escape `overflow:hidden` clipping) and can resolve `#<PR number>` directly to the branch that PR is on — cache-first against the already-loaded PR list, with a debounced fallback fetch and a `#1234` badge on branches with a known PR.
19+
- **Submodule updates** — the Submodules panel now shows update-available indicators and lets you pull remote submodule changes (rebase) or discard them (`git submodule update --force`), backed by new Rust `ops.rs` commands.
20+
- **Per-author line churn stats** — the contributor dashboard now aggregates insertions/deletions per author (via `git log --numstat`) alongside the existing commit counts. Also brings GitHub API request caching via ETags and consolidated PR detail queries to cut API usage.
21+
- **Antigravity CLI provider** — the Antigravity CLI (`agy`) is now a selectable local AI provider in Settings, with backend detection and execution support.
22+
- **Rebase onto any ref, with branch reset** — the rebase editor now accepts remote branches, tags, and raw SHAs (not just local branches) as the base, with free-form ref input; when there are no commits to replay, it offers a branch reset routed through the app's standard confirmation flow instead of an inline prompt.
1823

1924
### Changed
2025

26+
- **Sidebar: unified Changes section** — the working-tree "Unstaged" and "Untracked" sections are merged into a single "Changes" section for a simpler, more conventional view.
27+
- **PR create: base branch is now a `<select>`** — replaces the free-form text input + datalist, restricting the target to valid base branches (main/master first, then `release/*`, then the rest by recency).
28+
- **AI presets: duplicate default entry removed** — the built-in `__builtin_default` preset (which duplicated the Default menu entry already routed via `activate(null)`) is gone; the active-preset checkmark now refreshes immediately after save instead of staying stale until reload.
2129
- **Closing a project asks for confirmation** — a confirmation prompt guards the tab close button (now next to the worktree caret) against misclicks. Closing a project only closes the tab; its worktrees stay on disk.
30+
- **Tauri bumped to 2.11**`@tauri-apps/api`, CLI and plugins aligned with the Rust-side bump; the fragile inline find/chmod postinstall step was replaced with a cross-platform `scripts/fix-spawn-helper.mjs`.
31+
- **Website: "Today" card refresh** — the What's New card moved to first position with its badge bumped to v3.0 and a rewritten triaged-inbox description across all 5 locales; the social-share `og-image` was refreshed to match.
32+
33+
### Fixed
34+
35+
- **Git Tree: deleting a worktree branch** — right-clicking a branch that's checked out in a worktree now offers "Delete worktree" (and "Merge & delete worktree" for AI-task scratch worktrees) instead of a plain "Delete branch" that git rejects. Removing/merging a worktree also reloads the branch list so the deleted branch no longer lingers in the view.
36+
- **Fork PR checkout** — checking out a PR now resolves its real source repository and fetches `pull/N/head` from upstream when the PR originates from a fork; the branch, status, and log resync immediately after checkout instead of showing stale state.
37+
- **Real Tauri error messages surfaced**`invoke()` rejects with a plain string, not an `Error` object, so `err.message` was always `undefined` across ~20 catch blocks in `useGitRepo.ts`, showing e.g. "git log: undefined" instead of the actual git error.
38+
- **"Changes" missing from selectable startup views** — Settings > Dock's startup-view picker now includes Changes alongside the other panes.
39+
- **PR create: close button legibility** — improved contrast on the close button in the PR creation view.
2240

2341
## [3.1.0] - 2026-06-25
2442

@@ -1148,7 +1166,8 @@ Design-system foundations — the app header and every overlay now ride on a sha
11481166
- CI pipeline via GitHub Actions (Node 18, 20, 22)
11491167
- 28 tests covering all patterns + real-world scenarios (package.json, Laravel routes, Vue SFC, CSS, .env files)
11501168

1151-
[Unreleased]: https://github.com/devlint/GitWand/compare/v3.1.0...HEAD
1169+
[Unreleased]: https://github.com/devlint/GitWand/compare/v3.2.0...HEAD
1170+
[3.2.0]: https://github.com/devlint/GitWand/compare/v3.1.0...v3.2.0
11521171
[3.1.0]: https://github.com/devlint/GitWand/compare/v3.0.0...v3.1.0
11531172
[3.0.0]: https://github.com/devlint/GitWand/compare/v2.24.0...v3.0.0
11541173
[2.24.0]: https://github.com/devlint/GitWand/compare/v2.23.0...v2.24.0

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<p align="center">
2222
<img alt="License" src="https://img.shields.io/badge/license-MIT-8B5CF6">
2323
<img alt="TypeScript" src="https://img.shields.io/badge/TypeScript-100%25-3178C6">
24-
<img alt="Version" src="https://img.shields.io/badge/version-3.1.0-22c55e">
24+
<img alt="Version" src="https://img.shields.io/badge/version-3.2.0-22c55e">
2525
</p>
2626

2727
---

ROADMAP.md

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,6 @@
66

77
## What's Next
88

9-
### v3.2.0 — Terminal tabs & AI workspace
10-
11-
_Inspired by t1gu1's feedback: "How can I code with AI in GitWand?" — GitWand as a native AI workspace._
12-
13-
**Prerequisite fix — "Launch Claude Code" opens no usable session** _(follow-up to v2.8.0 Agent Sessions)_
14-
15-
The Agent Sessions launch action is wired end-to-end but doesn't produce a working session — a blocker for the AI-workspace vision below.
16-
17-
- **Root cause**: `agent_session_launch` spawns the `claude` CLI via `hidden_cmd` with `stdin`/`stdout`/`stderr` redirected to `null` and no terminal window (`hidden_cmd` is the *headless* helper — it sets `CREATE_NO_WINDOW` on Windows). But Claude Code is an interactive TUI requiring a TTY, so the process exits immediately / runs invisibly — the user clicks and nothing happens.
18-
- **Fix**: open a real terminal in the worktree's cwd and run `claude` there, reusing the cross-platform pattern already implemented in `claude_cli_login` (`osascript` → Terminal.app on macOS, `cmd /k start` on Windows, `gnome-terminal`/`konsole`/`kitty`/… on Linux). Factor that terminal-launch logic into a shared helper.
19-
- **Drop the fake "active" state**: the frontend sets `active = true` optimistically after a 1.5 s `setTimeout` with no confirmation the agent actually started — re-poll `agent_session_list` after launch instead.
20-
- **Make Cursor/Windsurf launchable too**: today the Launch button only shows for `claude`/`other`; those GUI editors have no launch path from the panel.
21-
22-
**Terminal with tabs**
23-
24-
- The integrated terminal extended with tabs: multiple simultaneous shell sessions (`⌘T` new, `⌘W` close, `⌘1..9` switch)
25-
- Automatic title from the first command, or editable with a double-click
26-
- Terminal panel anchored at the bottom, resizable height
27-
28-
**AI workspace (exploratory phase)**
29-
30-
- "New AI task" button: opens a blank worktree + launches a Claude Code (or Codex CLI) session in a dedicated terminal tab — the worktree diff displays live in GitWand
31-
- Vision: GitWand as the command center for coding with AI — see what the agent changes, stage what you want, commit — without leaving the app
32-
- User feedback expected to shape v2.25.0+
33-
34-
---
35-
369
### v3.3.0 — Safety Bundle: pre-commit secrets scanner
3710

3811
_Inspired by GitSquid. A "safety" feature with zero network dependency — everything local._
@@ -174,6 +147,8 @@ Positioning: neither "yet another Git GUI" nor an IDE. A first-class Git navigat
174147
175148
| Version | Highlights |
176149
|---------|-----------|
150+
| **v3.2.0** | **Integrated terminal** (WebGL rendering, inline search, clickable links, typed tabs with unread dot, real PTY agent launch, "New AI task" scratch-worktree button) · **File Explorer / Editor panel** (gitignore-aware tree, CodeMirror 6 editor, lock/undo/save toolbar) · **Git Tree** (filter mode, branch/author quick-toggles, date-bucket separators, branch autocomplete + `#PR` search) · Per-project worktree submenu + AI-task worktree management · Submodule update checking/applying · Per-author line churn stats · Antigravity CLI provider · Rebase onto any ref + branch reset · Sidebar unified Changes section · Tauri 2.11 |
151+
| **v3.1.0** | Customizable dock & startup view, PR create unpublished-branch warning, customizable release-note templates, anonymous GDPR-compliant launch ping, website screenshot slideshow & lightbox, pnpm 11.9.0 |
177152
| **v3.0.0** | **Today** (triaged action inbox, urgency tiers, state-aware primary actions, Launchpad → Today rename) · **VS Code extension on the Marketplace** (esbuild bundle, `publish-vscode.yml` CI, 4 extension bug fixes, CLI validation surfacing) · **Dashboard** (contributor modal, activity tooltips, fortnight stats, Git-Tree commit navigation) · **Branches** (top-contributor avatars, pinned section, move uncommitted changes on switch, force-delete prompt) · Fullscreen markdown image viewer · Website hero toggle + clickable platform cards |
178153
| **v2.24.0** | Full-screen views & in-app Launchpad — the permanent sidebar/Git-Tree strips give way to a floating bottom-center `AppDock`; Dashboard, Changes, History, PRs and a first-class full-screen Git Tree each render full-bleed (`RepoSidebar` gains a `pane` prop; collapsible, persisted commit composer rail). Launchpad gains in-app issue review (`IssueDetailView` + `useIssuePanel`), an action inbox (`useLaunchpadInbox` / `useRepoActionCards`), extracted scope (`useLaunchpadScope`) and internal navigation. The list/tree file-tree toggle extends to the history (commit) sidebar (`useFileTree` generalised over any `{ path }` entry). Plus a Linux AppImage follow-up: URL openers de-pollute `PATH`/`XDG_*` so a spawned `xdg-open` resolves the system browser instead of silently no-opening (#52), with opener stderr/exit captured. `EditCommitOverlay`/`SplitCommitModal` lazy-loaded. Full dev:web parity + 5-locale i18n |
179154
| **v2.23.0** | Changes sidebar & rebase polish — list/tree layout toggle for the changes view (collapsible folders, persisted layout + per-section collapse state, auto-expand to the selected file) via a new `useFileTree` composable; per-file and per-folder stage/unstage/discard fused into an always-visible segmented "action group". Interactive rebase now works in the packaged desktop app (dedicated `git_interactive_rebase` Tauri command replacing a dev-only HTTP endpoint) and branch pickers list branches by most-recent commit (shared `branchSort`). Plus a Linux AppImage fix: external links/OAuth buttons route through a robust multi-opener chain. Full dev:web parity + 5-locale i18n |

apps/desktop/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@gitwand/desktop",
3-
"version": "3.1.0",
3+
"version": "3.2.0",
44
"private": true,
55
"description": "GitWand Desktop — lightweight Git client with smart conflict resolution (Tauri + Vue 3)",
66
"type": "module",

apps/desktop/src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "gitwand-desktop"
3-
version = "3.1.0"
3+
version = "3.2.0"
44
description = "GitWand Desktop — standalone merge conflict resolution"
55
authors = ["Laurent Guitton <lb.guitton@gmail.com>"]
66
license = "MIT"

apps/desktop/src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/tauri-apps/tauri/dev/crates/tauri-config-schema/schema.json",
33
"productName": "GitWand",
4-
"version": "3.1.0",
4+
"version": "3.2.0",
55
"identifier": "com.gitwand.desktop",
66
"build": {
77
"frontendDist": "../dist",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gitwand",
3-
"version": "3.1.0",
3+
"version": "3.2.0",
44
"private": true,
55
"description": "Git's magic wand — automatic conflict resolution and smart merge tools",
66
"author": "Laurent Guitton <lb.guitton@gmail.com>",

packages/cli/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@gitwand/cli",
3-
"version": "3.1.0",
3+
"version": "3.2.0",
44
"description": "GitWand CLI — resolve Git conflicts from your terminal or CI pipeline",
55
"type": "module",
66
"main": "dist/index.js",

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@gitwand/core",
3-
"version": "3.1.0",
3+
"version": "3.2.0",
44
"description": "GitWand core — automatic Git conflict resolution engine (powers @gitwand/cli, @gitwand/mcp, and the GitWand desktop app)",
55
"type": "module",
66
"main": "dist/index.js",

packages/mcp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@gitwand/mcp",
3-
"version": "3.1.0",
3+
"version": "3.2.0",
44
"mcpName": "io.github.devlint/gitwand",
55
"description": "GitWand MCP server — smart Git conflict resolution for AI agents (Claude, Cursor, Windsurf, Claude Code)",
66
"type": "module",

0 commit comments

Comments
 (0)