Skip to content

enhance: Left/Right arrow key navigation in tree views#2300

Closed
imurashka wants to merge 4 commits into
sourcegit-scm:developfrom
imurashka:enhance/arrows-tree-navigation
Closed

enhance: Left/Right arrow key navigation in tree views#2300
imurashka wants to merge 4 commits into
sourcegit-scm:developfrom
imurashka:enhance/arrows-tree-navigation

Conversation

@imurashka
Copy link
Copy Markdown

@imurashka imurashka commented Apr 24, 2026

Adds Left/Right arrow key navigation in the tree view, both in Local Changes and in the Files tab of commit details. Behaves like VS Code / IntelliJ — Left collapses or walks up to the parent, Right expands or walks down to the first child.

Local Changes

changes.mp4

Files tab

files.mp4

love-linger added a commit that referenced this pull request May 7, 2026
Signed-off-by: leo <longshuang@msn.cn>
@love-linger
Copy link
Copy Markdown
Collaborator

I've pushed my implementation for this feature.

@love-linger love-linger closed this May 7, 2026
@imurashka imurashka deleted the enhance/arrows-tree-navigation branch May 7, 2026 18:46
UchiTesting added a commit to UchiTesting/sourcegit that referenced this pull request May 18, 2026
* ux: checkout commit popup layout

Signed-off-by: leo <longshuang@msn.cn>

* refactor: enable `CanSwitchBranchDirectly` by default

Signed-off-by: leo <longshuang@msn.cn>

* ux: avoid bounds of item in branch tree change

Signed-off-by: leo <longshuang@msn.cn>

* ux: hide the row to deal with uncommitted local changes when there are no local changes

Signed-off-by: leo <longshuang@msn.cn>

* localization: update English translation

Signed-off-by: leo <longshuang@msn.cn>

* refactor: simplify AI assistant architecture with tool-based integration

- Replace complex OpenAIService with AIProvider model
- Implement tool calling support for AI-generated commit messages
- Remove advanced AI configuration UI (prompts, streaming toggle)
- Add dedicated AI namespace with ChatTools, Service, and ToolCallsBuilder
- Update all view models and views to use new AI architecture
- Improve code organization and maintainability

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* feat: add additional prompt support for AI commit message generation

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* refactor: use non-streaming chat API

Signed-off-by: leo <longshuang@msn.cn>

* doc: update README.md

The AI-based commit message generator is totally rewrited. It is not just a C# port of anjerodev/commitollama

Signed-off-by: leo <longshuang@msn.cn>

* localization: update English translation

Signed-off-by: leo <longshuang@msn.cn>

* code_style: move command to get file changes for AI to `SourceGit.Commands.GetFileChangeForAI`

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move `Models.AIProvider` to `AI.Service`

Signed-off-by: leo <longshuang@msn.cn>

* ux: enable horizontal scroll in AI assistant view

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* code_style: remove unnecessary functions

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use async methods instead of `Task.Run` in `AIAssistant`

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use a single command to get staged files with `--amend` option enabled

Signed-off-by: leo <longshuang@msn.cn>

* feat: improve error handling and cancellation behavior in AI assistant

- Display error (include exception) in current window
- Improve cancellation behavior to preserve current `IsGenerating` state for proper UI updates

Signed-off-by: leo <longshuang@msn.cn>

* feature: show token usage in AI assistant result

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use `git status --porcelain=v2 -b` to get current branch info of a repo

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `Use` context menu entry to apply selected text as commit message

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* ux: better tab navigation

Signed-off-by: leo <longshuang@msn.cn>

* enhance: improve AI commit message generation instructions and tool descriptions

Signed-off-by: leo <longshuang@msn.cn>

* ux: focused visual style for text editor

Signed-off-by: leo <longshuang@msn.cn>

* localization: update Spanish translation (sourcegit-scm#2223)

- Add missing strings.

* doc: Update translation status and sort locale files

* localization: update Russian translate (sourcegit-scm#2225)

* doc: Update translation status and sort locale files

* version: Release 2026.07

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to exclude modifed/deleted files while discarding local changes (sourcegit-scm#2226)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* project: upgrade `AvaloniaUI` to `11.3.13`

Signed-off-by: leo <longshuang@msn.cn>

* code_style: move some code from agent to service; rename async method with `Async` suffix; fix typos

Signed-off-by: leo <longshuang@msn.cn>

* feature: support `git stash branch <branch_name> <stash>` command (sourcegit-scm#2227)

Signed-off-by: leo <longshuang@msn.cn>

* ux: layout of change collection view

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* feature: use custom `BranchSelector` instead of `ComboBox` to select remote branches with searching enabled (sourcegit-scm#2217)

Signed-off-by: leo <longshuang@msn.cn>

* ux: makes `BranchSelector` looks like normal `ComboBox`

Signed-off-by: leo <longshuang@msn.cn>

* ux: simplify data template for branch name in `BranchSelector`

Signed-off-by: leo <longshuang@msn.cn>

* feature: allow Doubao detecting selection in commit message box on Windows

Signed-off-by: leo <longshuang@msn.cn>

* refactor: dynamic loading and choosing AI model in assistant dialog (sourcegit-scm#2228)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: duplicated repo may be added when scanning repositories on case-insensitive platforms (sourcegit-scm#2230)

Signed-off-by: leo <longshuang@msn.cn>

* project: upgrade AvaloniaEdit

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use blank `User-Agent` header when communicating with open-ai compatible service (sourcegit-scm#2216)

Signed-off-by: leo <longshuang@msn.cn>

* ux: keybindings for `BranchSelector`

Signed-off-by: leo <longshuang@msn.cn>

* localization: apply selected datetime format in `About` dialog (sourcegit-scm#2223)

Signed-off-by: leo <longshuang@msn.cn>

* fix: remote's visit url must remove the account info part (sourcegit-scm#2235)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: notifications

- Modal dialog must display error message on top of its self
- Commands should only depends on Models and Native

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move some codes from `App` to `Views.ControlExtensions`

Signed-off-by: leo <longshuang@msn.cn>

* localization: update Russian translate (sourcegit-scm#2240)

* doc: Update translation status and sort locale files

* enhance: auto-select the new HEAD after reword (sourcegit-scm#2236)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: use `string.Equals` instead of operator `==`

Signed-off-by: leo <longshuang@msn.cn>

* localization: update Spanish translation (sourcegit-scm#2244)

+ Add missing strings.

* doc: Update translation status and sort locale files

* feature: allow editing of repository name via tab context menu (sourcegit-scm#2250)

* feature: allow editing of repository name via context menu of repository tab

Now we can edit tab name while seeing repository view.
This is a same feature of 'Edit' action for repository path in welcome view.
Add text resource "Text.PageTabBar.Tab.Edit" and  its translations are copied
from "Text.Welcome.Edit".

Note: The feature of changing bookmark is duplicated in a sub menu and
the edit dialog.

* refactor: remove duplicated menu action 'Bookmark'

Remove the 'Bookmark' sub-menu action because 'Edit'  action contains it.
The text resource "PageTabBar.Tab.Bookmark" and its translations are also removed.

* refactor: use `DirectoryInfo` to get absolute path of repository (sourcegit-scm#2246)

Signed-off-by: leo <longshuang@msn.cn>

* code_style: remove unused namespace using

Signed-off-by: leo <longshuang@msn.cn>

* build: update packages (CommunityToolkit.Mvvm, OpenAI, LiveChartsCore) (sourcegit-scm#2242)

* doc: update third-party readme

Signed-off-by: leo <longshuang@msn.cn>

* feature: better word division for highlighting (sourcegit-scm#2251)

Each line is divided into several chunks to highlight the changes.

The previous implementation splits text at a fixed set of delimiter
characters (spaces, tabs, and common ASCII symbols such as `+-*/=!,;`).
Non-delimiter characters — including CJK ideographs, Hiragana, and
Katakana — are never treated as boundaries, so they tend to form large,
coarse chunks in languages like Japanese or Chinese that do not use
spaces to separate words. A small change within such text causes the
entire surrounding phrase to be highlighted.

This new implementation classifies each character into one of three
categories and groups consecutive characters of the same category into
one chunk, except for the Other category which is always split
character by character:

- Letter (Unicode Ll/Lu/Lt/Lm + digits): ASCII letters, digits, and
  letters with diacritics such as é, ü, ß, ñ, ё. Consecutive Letter
  characters form one chunk, keeping European words intact.
- OtherLetter (Unicode Lo): CJK, Hiragana, Katakana, Hangul, Thai,
  Arabic, Hebrew, etc. Consecutive OtherLetter characters form one
  chunk. CJK punctuation (。、「」…) falls into the Other category
  and therefore acts as a natural boundary between chunks.
- Other (default): whitespace, control characters, punctuation, and
  symbols. This category corresponds to the delimiter characters of
  the previous implementation. Each character is always its own chunk,
  preserving the same per-character precision as before for operators,
  spaces, and punctuation.

Category values for all 65,536 char values are pre-computed into a
static read-only array at startup for lock-free O(1) lookup.

* fix: staged files do not update after committing with `--amend` enabled successfully (sourcegit-scm#2253)

This issue is introduced by commit 26fc29b. And the right way to fix this issue is to force `Command.Commit` finish in UI thread.

Signed-off-by: leo <longshuang@msn.cn>

* feature: auto-fetch now is a global setting instead of per-repo setting (sourcegit-scm#2050)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: avoid pre-edit text box being clipped

Signed-off-by: leo <longshuang@msn.cn>

* version: Release 2026.08

Signed-off-by: leo <longshuang@msn.cn>

* enhance: AI-based commit message generator (sourcegit-scm#2255)

- Make `AI Assistant` window resizable
- Make `AI Assistant` window non-modal dialog
- Clean up code

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to choose group and bookmark when cloning remote repository

Signed-off-by: leo <longshuang@msn.cn>

* refactor: rewrite `Open Local Repository` feature

Signed-off-by: leo <longshuang@msn.cn>

* fix: bad condition to check if auto-fetch is enabled (sourcegit-scm#2257)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* feature: add hotkey `Ctrl+Shift+O/⌘+⇧+O` to open local repository (sourcegit-scm#2256)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* revert: use blank `User-Agent` header when communicating with open-ai compatible service

This reverts commit 26ab0a7.

Signed-off-by: leo <longshuang@msn.cn>

* feature: show a checked icon when sha was copied

Signed-off-by: leo <longshuang@msn.cn>

* enhance: when cloning remote repo or opening local repo, the `Group` is `No Group (Uncategorized)` by default (sourcegit-scm#2258)

Signed-off-by: leo <longshuang@msn.cn>

* feature: reorder fixup commits to its right position when loading commits for interactive rebase (sourcegit-scm#588)

Signed-off-by: leo <longshuang@msn.cn>

* feature: reorder squash commits to its right position when loading commits for interactive rebase (sourcegit-scm#588)

Signed-off-by: leo <longshuang@msn.cn>

* feature: allow partial stage/unstage/discard for non-UTF8 text in diff view (sourcegit-scm#2260)

Current implementation fails on partial stage/unstage/discard operations for
non-UTF8 text because of applying a patch made with broken (replaced) text.
This modification allows these operation by preserving the original raw bytes
from the output of `git diff`, and use it to create patch file.

* code_style: refine diff result parsing

Signed-off-by: leo <longshuang@msn.cn>

* fix: infinite-loop occurs when interactive rebasing with multiple `fixup!`/`squash!` commits target a single commit (sourcegit-scm#2261)

Signed-off-by: leo <longshuang@msn.cn>

* ux: copied icon change duration

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to view details changes of submodule (only if this submodule is initialized and not available for new/delete submodule change) (sourcegit-scm#2264)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: disable `OPEN DETAILS` button when one of submodule revision is lost

Signed-off-by: leo <longshuang@msn.cn>

* enhance: show the `Submodule Change Details` window on the same screen of it's parent (sourcegit-scm#2264)

Signed-off-by: leo <longshuang@msn.cn>

* fix: fetch AI models in background to avoid main window waiting to show (sourcegit-scm#2267)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move some code from `App` to `Views.ControlExtensions`

Signed-off-by: leo <longshuang@msn.cn>

* feature: show uncommitted changes count for submodule (sourcegit-scm#2264)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: do not show `Git LFS` submenu for submodules (sourcegit-scm#2264)

Signed-off-by: leo <longshuang@msn.cn>

* fix: remove `--push` option because it is not valid parameter for `git-flow-next` (sourcegit-scm#2269)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: enable `Set as tracking branch` should be visible when push to a new branch (sourcegit-scm#2273)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: rewrite the way to quit app

Signed-off-by: leo <longshuang@msn.cn>

* fix: directly patch the final file when trying to stage/unstage/discard selected hunk with renamed/copied file (sourcegit-scm#2272)

Signed-off-by: leo <longshuang@msn.cn>

* fix: app will crash when it is quiting from Dock (sourcegit-scm#2271)

Signed-off-by: leo <longshuang@msn.cn>

* code_style: move `App.FixFontFamilyNames` to `StringExtensions.FormatFontNames`

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `Hide Others` app menu on macOS and correct the behaviour of `Show All`

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* feature: add `Local Branch Selector` and `Remote Branch Selector` control type for custom actions (sourcegit-scm#2274)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: replace `${BRANCH}` with current branch name if the custom action's scope is `Repository` (sourcegit-scm#2274)

Signed-off-by: leo <longshuang@msn.cn>

* code_style: remove unnecessary function call

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `String Formatter` for `TextBox` in custom action (sourcegit-scm#2274)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* code_style: remove unnecessary function call

Signed-off-by: leo <longshuang@msn.cn>

* fix: left margins of text editor do not update after `FontSize` changed (sourcegit-scm#2276)

Signed-off-by: leo <longshuang@msn.cn>

* localization: update Spanish translation (sourcegit-scm#2278)

+ Add missing strings.

* doc: Update translation status and sort locale files

* version: Release 2026.09

Signed-off-by: leo <longshuang@msn.cn>

* enhance: auto-select branch for `Branch Selector` control in custom action (sourcegit-scm#2274)

Signed-off-by: leo <longshuang@msn.cn>

* fix: crashes when trying to close a repository with a action that is still running (sourcegit-scm#2289)

- It's not necessary to implement `IDisposable` interface for class that only contains managed resources
- Do not clear fields of `Repository` and let system GC handle it

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `Use` back to apply ai generated commit message (sourcegit-scm#2287)

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to disable specific remote from auto-fetch (sourcegit-scm#2285)

Add `Enable Auto-Fetch` context menu entry to select remote. This menu item only visible
when you have enable `Fetch remotes automatically` feature in `Preferences` dialog.

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: do not start new auto-fetch action if the last one is still running (sourcegit-scm#2285)

Signed-off-by: leo <longshuang@msn.cn>

* ux: make `About` dialog size to content (sourcegit-scm#2292)

Signed-off-by: leo <longshuang@msn.cn>

* fix: support utf-8 passphrases in askpass (sourcegit-scm#2293)

(cherry picked from commit f5adad5)

* code_style: fix `dotnet format` check warnnings

Signed-off-by: leo <longshuang@msn.cn>

* fix: `Initialize Repository` should apply the bookmark setting from `Open Repository` popup

Signed-off-by: leo <longshuang@msn.cn>

* enhance: write preferences data to a temp file first and then rename it to the final file (sourcegit-scm#2298)

This commit addresses the issue that shutting down the system while the software is running may
cause incomplete data writing to `preference.json`, resulting in the loss of user configurations.

Signed-off-by: leo <longshuang@msn.cn>

* feature: drop Windows 11 Mica support

Signed-off-by: leo <longshuang@msn.cn>

* enhance: write user settings to a temp file first and then rename it to the final file (sourcegit-scm#2298)

Signed-off-by: leo <longshuang@msn.cn>

* fix: disable thinking mode in AI chat (sourcegit-scm#2299)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: improve Linux package build configuration (sourcegit-scm#2302)

* enhance: improve Linux package build configuration

- Dynamically generate ICU dependency versions in package.linux.sh
- Use @ICU_DEPS@ placeholder in control file for easier maintenance
- Add postinst script to update desktop database and icon cache
- Expand appdata.xml with full application description and screenshots

* fix: set executable permission for postinst script

Git on Windows didn't track the executable bit for postinst, causing
dpkg-deb to reject the package with "bad permissions 664" error.

* fix: `NullReferenceException` occurs when `Complete` is called before `AppendLine` (sourcegit-scm#2305)

Signed-off-by: leo <longshuang@msn.cn>

* feature: `ImageSource` supports loading psd files (sourcegit-scm#2304)

* localization: update Russian translation (sourcegit-scm#2306)

* doc: Update translation status and sort locale files

* feature: show the git source revision in `About` dialog (sourcegit-scm#2308)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: when reordering commits for interactive rebasing, the subject must equals (instead of starts with) target's subject (sourcegit-scm#2303)

Signed-off-by: leo <longshuang@msn.cn>

* fix: change default seperator to prevent `/` or `:` being replaced by culture in `DateTime.ToString`  (sourcegit-scm#2307)

Other languages like de_DE have "." as the seperator. On such systems the options with the "/" would still translate to ".". Same problem can be applied to Time.

This fixes the issue by setting default seperators no matter which language is used. This also changes how MMM behaves and does also show the correct value now.

* code_style: run `dotnet format` to fix ci warnings

Signed-off-by: leo <longshuang@msn.cn>

* refactor: keep selection in `HISTORY` page if user only selected one or two commits (sourcegit-scm#2297)

Signed-off-by: leo <longshuang@msn.cn>

* doc: update `README` for `deb` package (sourcegit-scm#2309)

Signed-off-by: leo <longshuang@msn.cn>

* localization: update `Text.About.GitSourceRevision`

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move `Commits` from DataContext to property

Signed-off-by: leo <longshuang@msn.cn>

* refactor: add `HistoriesCommitList` control and move selection code to it

Signed-off-by: leo <longshuang@msn.cn>

* code_style: `HistoriesCommitList` should not depend on `ViewModels.Histories`

Signed-off-by: leo <longshuang@msn.cn>

* enhance: do not change selection if previous one is empty

Signed-off-by: leo <longshuang@msn.cn>

* refactor: always create `HISTORY`, `LOCAL CHANGES` and `STASHES` page to prevent losing selection and scroll offsets

Signed-off-by: leo <longshuang@msn.cn>

* code_style: remove unnecessary code

Signed-off-by: leo <longshuang@msn.cn>

* enhance: leave action to `pick` if there's only `fixup` and `drop` commits to it (sourcegit-scm#2313)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: search position for `fixup!/squash!` commit in reversed order (sourcegit-scm#2314)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: remove binding warnings

Signed-off-by: leo <longshuang@msn.cn>

* fix: selection lost when switch from repo to welcome page

Signed-off-by: leo <longshuang@msn.cn>

* fix: wrong commit order to compare which is introduced by commit c3cbc61

Signed-off-by: leo <longshuang@msn.cn>

* enhance: prevent too many selection changed events being raised while apply selection to commit list

Signed-off-by: leo <longshuang@msn.cn>

* refactor: ignore hard-coded `Enter/Space` key event in AvaloniaUI's `ListBox` and make it can be handled by app

Signed-off-by: leo <longshuang@msn.cn>

* version: 2026.10

Signed-off-by: leo <longshuang@msn.cn>

* refactor: do not disable `thinking mode` but send `reasoning_content` back to the Open-AI service instead (sourcegit-scm#2229) (sourcegit-scm#2318)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: remember selection if it contains less than 11 commits in `HISTORY` page and rewrite the way to auto-scroll

Signed-off-by: leo <longshuang@msn.cn>

* refactor: replace Azure-specific API with general `JsonPatch` to get `reasoning_content` in response

Signed-off-by: leo <longshuang@msn.cn>

* code_style: check null once time

Signed-off-by: leo <longshuang@msn.cn>

* feature: add context menu entry `Copy` to selected REF in commit details panel (sourcegit-scm#2321)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: increase the number of commits when keeping selection

Signed-off-by: leo <longshuang@msn.cn>

* feature: add a new context menu `Compare with <upstream>` to compare selected branch with its upstream directly (sourcegit-scm#2322)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* doc: update `README` (sourcegit-scm#2323)

Signed-off-by: leo <longshuang@msn.cn>

* feature: add a checkbox in `Preferences > GIT` to use `Stash & Reapply` by default when checking-out or merging branches

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: `Left/Right` arrow key navigation in tree view (sourcegit-scm#2300)

Signed-off-by: leo <longshuang@msn.cn>

* localization: change display name of `Compare` in command palette

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: clean up files related to rebasing after running `git rebase --abort` (sourcegit-scm#2320)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: trim blocking code markdown identifier in AI response

Signed-off-by: leo <longshuang@msn.cn>

* fix: navigating to the same commit with current selected does not work any more

Signed-off-by: leo <longshuang@msn.cn>

* ux: makes `BranchSelector` looks like normal `ComboBox`

Signed-off-by: leo <longshuang@msn.cn>

* feature: allow searching for remote branches in pull/push (sourcegit-scm#2283)

Signed-off-by: leo <longshuang@msn.cn>

* ux: change `USE` button to primary style in `AI Assistant` dialog

Signed-off-by: leo <longshuang@msn.cn>

* feature: add keybindings `F2` to rename selected local branch (sourcegit-scm#2294)

Co-authored-by: Hüseyin Aslıtürk <huseyin@asliturk.com>
Signed-off-by: leo <longshuang@msn.cn>

* enhance: generate a better commit message manually when cherry-picking multiple commits with `-n -x` (sourcegit-scm#2295)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: more safe code to decode image resources

Signed-off-by: leo <longshuang@msn.cn>

* ux: change the icon of `Apply Patch`

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* localization: update Spanish translation (sourcegit-scm#2329)

+ Add missing strings.
+ Modify some instances when the ampersand character wasn't need it in spanish.

* doc: Update translation status and sort locale files

* refactor: add `--history <FILE_OR_DIR>` command line and remove the old `--file-history <FILE_PATH>`

Signed-off-by: leo <longshuang@msn.cn>

* enhance: trim the end path seperator

Signed-off-by: leo <longshuang@msn.cn>

* feature: support to collapse commit details panel (only vertical layout)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: hiding invisible controls when commit details panel is collapsed

Signed-off-by: leo <longshuang@msn.cn>

* ux: add button tooltips

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* ux: should use `IsEnabled` instead of `IsVisible`

Signed-off-by: leo <longshuang@msn.cn>

* ux: align source revision in about dialog (sourcegit-scm#2331)

* localization: update Russian translate (sourcegit-scm#2332)

* doc: Update translation status and sort locale files

* ux: new style for `ToggleButton.line_path`

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to open history details panel in a separate window

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* localization: add missing translations for Chinese

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* refactor: reuse `interactive rebase` instead of custom `reword/squash/fixup/drop` popup for HEAD commit

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: `IsDetailsPanelExpanded` must be enabled by default since commit ac2a329

Signed-off-by: leo <longshuang@msn.cn>

* ux: layout of floating buttons

Signed-off-by: leo <longshuang@msn.cn>

* ux: replace icons

Signed-off-by: leo <longshuang@msn.cn>

* refactor: split `HistoriesDetailsStandalone` into two different windows

Signed-off-by: leo <longshuang@msn.cn>

* feature: allows to open commit details panel in a separate window in `Interactive Rebase` dialog

Signed-off-by: leo <longshuang@msn.cn>

* enhance: disable manually interactive rebasing on HEAD

Signed-off-by: leo <longshuang@msn.cn>

* enhance: pressing `DEL` when selected multiple tags will open `Delete Multiple Tags` popup

Signed-off-by: leo <longshuang@msn.cn>

* enhance: better `Left/Right` arrow key navigation in `Welcome` page

Signed-off-by: leo <longshuang@msn.cn>

* code_style: move `Select` from child classes to `ListBoxEx`

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `Ctrl+J/⌘+J` hotkey to expand/collapse details panel in `HISTORY` page (sourcegit-scm#2335)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* refactor: remove unnecessary invisible buttons and move `KeyDown` handler to `HistoriesCommitList`

Signed-off-by: leo <longshuang@msn.cn>

* ux: lighter window shadow on Linux

Signed-off-by: leo <longshuang@msn.cn>

* feature: support `--no-verify` option to bypass `pre-rebase` hook while rebasing (sourcegit-scm#2334)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* ux: scroll to top button style

Signed-off-by: leo <longshuang@msn.cn>

* enhance: fallback `${BRANCH}` and `${BRANCH_FRIENDLY_NAME}` to current branch (sourcegit-scm#2338)

Signed-off-by: leo <longshuang@msn.cn>

* feature: add global hotkey to open terminal (sourcegit-scm#2337)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: we can only use Ctrl+` on macOS

Signed-off-by: leo <longshuang@msn.cn>

* ux: use `^` instead of `Ctrl` on macOS

Signed-off-by: leo <longshuang@msn.cn>

* enhance: improve commit graph render performance

Signed-off-by: leo <longshuang@msn.cn>

* feature: show left/right only commits in `Compare` window

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: cherry-pick commits should be ordered by committer time

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to compare selected commit with current branch (not revision compare) when it is head of some branch/tag

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: support to disable auto-fetch available model-ids and specify the model-id to use directly (sourcegit-scm#2340)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* ux: ref badge foreground

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move `Ctrl+Shift+B/Ctrl+Shift+T` from `HistoriesCommitList` to `Launcher`

Signed-off-by: leo <longshuang@msn.cn>

* ux: hotkey order

Signed-off-by: leo <longshuang@msn.cn>

* fix: remove duplicate branch when overwriting existing branch (sourcegit-scm#2345)

When using OverwriteExisting to reset a local branch to upstream,
the branch list showed two duplicate entries because the old branch
object was not removed before adding the new one.

* feature: add repository page hotkey `Ctrl+E/⌘+E` to open in file browser

Signed-off-by: leo <longshuang@msn.cn>

* refactor: `IsOpenAsStandalone` should depend on `DetailContext`

Signed-off-by: leo <longshuang@msn.cn>

* fix: force disable `InvariantGlobalization` to avoid crashing when `DOTNET_SYSTEM_GLOBALIZATION_INVARIANT` has been enabled in user's environment (sourcegit-scm#2347)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use `Models.Null` instead of `null` to remove warings in Rider

Signed-off-by: leo <longshuang@msn.cn>

* refactor: highlighting in commit graph

Signed-off-by: leo <longshuang@msn.cn>

* ux: move `Show relative time in graph` to `Preferences` dialog

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* project: upgrade `Avalonia` to `11.3.15`

* version: Release 2026.11

Signed-off-by: leo <longshuang@msn.cn>

---------

Signed-off-by: leo <longshuang@msn.cn>
Co-authored-by: leo <longshuang@msn.cn>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Javier J. Martínez M. <56406225+jjesus-dev@users.noreply.github.com>
Co-authored-by: AquariusStar <48148723+AquariusStar@users.noreply.github.com>
Co-authored-by: Shun-ichi Goto <shunichi.goto@gmail.com>
Co-authored-by: heartacker <1876302+heartacker@users.noreply.github.com>
Co-authored-by: Iceflower <iceflower@gmx.de>
Co-authored-by: Gadfly <gadfly@gadfly.vip>
Co-authored-by: Johannes Häggqvist <git@johannesh.se>
Co-authored-by: Nietod <119692307+Nietod@users.noreply.github.com>
Co-authored-by: Hüseyin Aslıtürk <huseyin@asliturk.com>
Co-authored-by: Chiahong <36815907+ChiahongHong@users.noreply.github.com>
UchiTesting added a commit to UchiTesting/sourcegit that referenced this pull request May 18, 2026
* ux: checkout commit popup layout

Signed-off-by: leo <longshuang@msn.cn>

* refactor: enable `CanSwitchBranchDirectly` by default

Signed-off-by: leo <longshuang@msn.cn>

* ux: avoid bounds of item in branch tree change

Signed-off-by: leo <longshuang@msn.cn>

* ux: hide the row to deal with uncommitted local changes when there are no local changes

Signed-off-by: leo <longshuang@msn.cn>

* localization: update English translation

Signed-off-by: leo <longshuang@msn.cn>

* refactor: simplify AI assistant architecture with tool-based integration

- Replace complex OpenAIService with AIProvider model
- Implement tool calling support for AI-generated commit messages
- Remove advanced AI configuration UI (prompts, streaming toggle)
- Add dedicated AI namespace with ChatTools, Service, and ToolCallsBuilder
- Update all view models and views to use new AI architecture
- Improve code organization and maintainability

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* feat: add additional prompt support for AI commit message generation

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* refactor: use non-streaming chat API

Signed-off-by: leo <longshuang@msn.cn>

* doc: update README.md

The AI-based commit message generator is totally rewrited. It is not just a C# port of anjerodev/commitollama

Signed-off-by: leo <longshuang@msn.cn>

* localization: update English translation

Signed-off-by: leo <longshuang@msn.cn>

* code_style: move command to get file changes for AI to `SourceGit.Commands.GetFileChangeForAI`

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move `Models.AIProvider` to `AI.Service`

Signed-off-by: leo <longshuang@msn.cn>

* ux: enable horizontal scroll in AI assistant view

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* code_style: remove unnecessary functions

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use async methods instead of `Task.Run` in `AIAssistant`

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use a single command to get staged files with `--amend` option enabled

Signed-off-by: leo <longshuang@msn.cn>

* feat: improve error handling and cancellation behavior in AI assistant

- Display error (include exception) in current window
- Improve cancellation behavior to preserve current `IsGenerating` state for proper UI updates

Signed-off-by: leo <longshuang@msn.cn>

* feature: show token usage in AI assistant result

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use `git status --porcelain=v2 -b` to get current branch info of a repo

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `Use` context menu entry to apply selected text as commit message

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* ux: better tab navigation

Signed-off-by: leo <longshuang@msn.cn>

* enhance: improve AI commit message generation instructions and tool descriptions

Signed-off-by: leo <longshuang@msn.cn>

* ux: focused visual style for text editor

Signed-off-by: leo <longshuang@msn.cn>

* localization: update Spanish translation (sourcegit-scm#2223)

- Add missing strings.

* doc: Update translation status and sort locale files

* localization: update Russian translate (sourcegit-scm#2225)

* doc: Update translation status and sort locale files

* version: Release 2026.07

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to exclude modifed/deleted files while discarding local changes (sourcegit-scm#2226)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* project: upgrade `AvaloniaUI` to `11.3.13`

Signed-off-by: leo <longshuang@msn.cn>

* code_style: move some code from agent to service; rename async method with `Async` suffix; fix typos

Signed-off-by: leo <longshuang@msn.cn>

* feature: support `git stash branch <branch_name> <stash>` command (sourcegit-scm#2227)

Signed-off-by: leo <longshuang@msn.cn>

* ux: layout of change collection view

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* feature: use custom `BranchSelector` instead of `ComboBox` to select remote branches with searching enabled (sourcegit-scm#2217)

Signed-off-by: leo <longshuang@msn.cn>

* ux: makes `BranchSelector` looks like normal `ComboBox`

Signed-off-by: leo <longshuang@msn.cn>

* ux: simplify data template for branch name in `BranchSelector`

Signed-off-by: leo <longshuang@msn.cn>

* feature: allow Doubao detecting selection in commit message box on Windows

Signed-off-by: leo <longshuang@msn.cn>

* refactor: dynamic loading and choosing AI model in assistant dialog (sourcegit-scm#2228)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: duplicated repo may be added when scanning repositories on case-insensitive platforms (sourcegit-scm#2230)

Signed-off-by: leo <longshuang@msn.cn>

* project: upgrade AvaloniaEdit

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use blank `User-Agent` header when communicating with open-ai compatible service (sourcegit-scm#2216)

Signed-off-by: leo <longshuang@msn.cn>

* ux: keybindings for `BranchSelector`

Signed-off-by: leo <longshuang@msn.cn>

* localization: apply selected datetime format in `About` dialog (sourcegit-scm#2223)

Signed-off-by: leo <longshuang@msn.cn>

* fix: remote's visit url must remove the account info part (sourcegit-scm#2235)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: notifications

- Modal dialog must display error message on top of its self
- Commands should only depends on Models and Native

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move some codes from `App` to `Views.ControlExtensions`

Signed-off-by: leo <longshuang@msn.cn>

* localization: update Russian translate (sourcegit-scm#2240)

* doc: Update translation status and sort locale files

* enhance: auto-select the new HEAD after reword (sourcegit-scm#2236)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: use `string.Equals` instead of operator `==`

Signed-off-by: leo <longshuang@msn.cn>

* localization: update Spanish translation (sourcegit-scm#2244)

+ Add missing strings.

* doc: Update translation status and sort locale files

* feature: allow editing of repository name via tab context menu (sourcegit-scm#2250)

* feature: allow editing of repository name via context menu of repository tab

Now we can edit tab name while seeing repository view.
This is a same feature of 'Edit' action for repository path in welcome view.
Add text resource "Text.PageTabBar.Tab.Edit" and  its translations are copied
from "Text.Welcome.Edit".

Note: The feature of changing bookmark is duplicated in a sub menu and
the edit dialog.

* refactor: remove duplicated menu action 'Bookmark'

Remove the 'Bookmark' sub-menu action because 'Edit'  action contains it.
The text resource "PageTabBar.Tab.Bookmark" and its translations are also removed.

* refactor: use `DirectoryInfo` to get absolute path of repository (sourcegit-scm#2246)

Signed-off-by: leo <longshuang@msn.cn>

* code_style: remove unused namespace using

Signed-off-by: leo <longshuang@msn.cn>

* build: update packages (CommunityToolkit.Mvvm, OpenAI, LiveChartsCore) (sourcegit-scm#2242)

* doc: update third-party readme

Signed-off-by: leo <longshuang@msn.cn>

* feature: better word division for highlighting (sourcegit-scm#2251)

Each line is divided into several chunks to highlight the changes.

The previous implementation splits text at a fixed set of delimiter
characters (spaces, tabs, and common ASCII symbols such as `+-*/=!,;`).
Non-delimiter characters — including CJK ideographs, Hiragana, and
Katakana — are never treated as boundaries, so they tend to form large,
coarse chunks in languages like Japanese or Chinese that do not use
spaces to separate words. A small change within such text causes the
entire surrounding phrase to be highlighted.

This new implementation classifies each character into one of three
categories and groups consecutive characters of the same category into
one chunk, except for the Other category which is always split
character by character:

- Letter (Unicode Ll/Lu/Lt/Lm + digits): ASCII letters, digits, and
  letters with diacritics such as é, ü, ß, ñ, ё. Consecutive Letter
  characters form one chunk, keeping European words intact.
- OtherLetter (Unicode Lo): CJK, Hiragana, Katakana, Hangul, Thai,
  Arabic, Hebrew, etc. Consecutive OtherLetter characters form one
  chunk. CJK punctuation (。、「」…) falls into the Other category
  and therefore acts as a natural boundary between chunks.
- Other (default): whitespace, control characters, punctuation, and
  symbols. This category corresponds to the delimiter characters of
  the previous implementation. Each character is always its own chunk,
  preserving the same per-character precision as before for operators,
  spaces, and punctuation.

Category values for all 65,536 char values are pre-computed into a
static read-only array at startup for lock-free O(1) lookup.

* fix: staged files do not update after committing with `--amend` enabled successfully (sourcegit-scm#2253)

This issue is introduced by commit 26fc29b. And the right way to fix this issue is to force `Command.Commit` finish in UI thread.

Signed-off-by: leo <longshuang@msn.cn>

* feature: auto-fetch now is a global setting instead of per-repo setting (sourcegit-scm#2050)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: avoid pre-edit text box being clipped

Signed-off-by: leo <longshuang@msn.cn>

* version: Release 2026.08

Signed-off-by: leo <longshuang@msn.cn>

* enhance: AI-based commit message generator (sourcegit-scm#2255)

- Make `AI Assistant` window resizable
- Make `AI Assistant` window non-modal dialog
- Clean up code

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to choose group and bookmark when cloning remote repository

Signed-off-by: leo <longshuang@msn.cn>

* refactor: rewrite `Open Local Repository` feature

Signed-off-by: leo <longshuang@msn.cn>

* fix: bad condition to check if auto-fetch is enabled (sourcegit-scm#2257)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* feature: add hotkey `Ctrl+Shift+O/⌘+⇧+O` to open local repository (sourcegit-scm#2256)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* revert: use blank `User-Agent` header when communicating with open-ai compatible service

This reverts commit 26ab0a7.

Signed-off-by: leo <longshuang@msn.cn>

* feature: show a checked icon when sha was copied

Signed-off-by: leo <longshuang@msn.cn>

* enhance: when cloning remote repo or opening local repo, the `Group` is `No Group (Uncategorized)` by default (sourcegit-scm#2258)

Signed-off-by: leo <longshuang@msn.cn>

* feature: reorder fixup commits to its right position when loading commits for interactive rebase (sourcegit-scm#588)

Signed-off-by: leo <longshuang@msn.cn>

* feature: reorder squash commits to its right position when loading commits for interactive rebase (sourcegit-scm#588)

Signed-off-by: leo <longshuang@msn.cn>

* feature: allow partial stage/unstage/discard for non-UTF8 text in diff view (sourcegit-scm#2260)

Current implementation fails on partial stage/unstage/discard operations for
non-UTF8 text because of applying a patch made with broken (replaced) text.
This modification allows these operation by preserving the original raw bytes
from the output of `git diff`, and use it to create patch file.

* code_style: refine diff result parsing

Signed-off-by: leo <longshuang@msn.cn>

* fix: infinite-loop occurs when interactive rebasing with multiple `fixup!`/`squash!` commits target a single commit (sourcegit-scm#2261)

Signed-off-by: leo <longshuang@msn.cn>

* ux: copied icon change duration

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to view details changes of submodule (only if this submodule is initialized and not available for new/delete submodule change) (sourcegit-scm#2264)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: disable `OPEN DETAILS` button when one of submodule revision is lost

Signed-off-by: leo <longshuang@msn.cn>

* enhance: show the `Submodule Change Details` window on the same screen of it's parent (sourcegit-scm#2264)

Signed-off-by: leo <longshuang@msn.cn>

* fix: fetch AI models in background to avoid main window waiting to show (sourcegit-scm#2267)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move some code from `App` to `Views.ControlExtensions`

Signed-off-by: leo <longshuang@msn.cn>

* feature: show uncommitted changes count for submodule (sourcegit-scm#2264)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: do not show `Git LFS` submenu for submodules (sourcegit-scm#2264)

Signed-off-by: leo <longshuang@msn.cn>

* fix: remove `--push` option because it is not valid parameter for `git-flow-next` (sourcegit-scm#2269)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: enable `Set as tracking branch` should be visible when push to a new branch (sourcegit-scm#2273)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: rewrite the way to quit app

Signed-off-by: leo <longshuang@msn.cn>

* fix: directly patch the final file when trying to stage/unstage/discard selected hunk with renamed/copied file (sourcegit-scm#2272)

Signed-off-by: leo <longshuang@msn.cn>

* fix: app will crash when it is quiting from Dock (sourcegit-scm#2271)

Signed-off-by: leo <longshuang@msn.cn>

* code_style: move `App.FixFontFamilyNames` to `StringExtensions.FormatFontNames`

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `Hide Others` app menu on macOS and correct the behaviour of `Show All`

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* feature: add `Local Branch Selector` and `Remote Branch Selector` control type for custom actions (sourcegit-scm#2274)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: replace `${BRANCH}` with current branch name if the custom action's scope is `Repository` (sourcegit-scm#2274)

Signed-off-by: leo <longshuang@msn.cn>

* code_style: remove unnecessary function call

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `String Formatter` for `TextBox` in custom action (sourcegit-scm#2274)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* code_style: remove unnecessary function call

Signed-off-by: leo <longshuang@msn.cn>

* fix: left margins of text editor do not update after `FontSize` changed (sourcegit-scm#2276)

Signed-off-by: leo <longshuang@msn.cn>

* localization: update Spanish translation (sourcegit-scm#2278)

+ Add missing strings.

* doc: Update translation status and sort locale files

* version: Release 2026.09

Signed-off-by: leo <longshuang@msn.cn>

* enhance: auto-select branch for `Branch Selector` control in custom action (sourcegit-scm#2274)

Signed-off-by: leo <longshuang@msn.cn>

* fix: crashes when trying to close a repository with a action that is still running (sourcegit-scm#2289)

- It's not necessary to implement `IDisposable` interface for class that only contains managed resources
- Do not clear fields of `Repository` and let system GC handle it

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `Use` back to apply ai generated commit message (sourcegit-scm#2287)

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to disable specific remote from auto-fetch (sourcegit-scm#2285)

Add `Enable Auto-Fetch` context menu entry to select remote. This menu item only visible
when you have enable `Fetch remotes automatically` feature in `Preferences` dialog.

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: do not start new auto-fetch action if the last one is still running (sourcegit-scm#2285)

Signed-off-by: leo <longshuang@msn.cn>

* ux: make `About` dialog size to content (sourcegit-scm#2292)

Signed-off-by: leo <longshuang@msn.cn>

* fix: support utf-8 passphrases in askpass (sourcegit-scm#2293)

(cherry picked from commit f5adad5)

* code_style: fix `dotnet format` check warnnings

Signed-off-by: leo <longshuang@msn.cn>

* fix: `Initialize Repository` should apply the bookmark setting from `Open Repository` popup

Signed-off-by: leo <longshuang@msn.cn>

* enhance: write preferences data to a temp file first and then rename it to the final file (sourcegit-scm#2298)

This commit addresses the issue that shutting down the system while the software is running may
cause incomplete data writing to `preference.json`, resulting in the loss of user configurations.

Signed-off-by: leo <longshuang@msn.cn>

* feature: drop Windows 11 Mica support

Signed-off-by: leo <longshuang@msn.cn>

* enhance: write user settings to a temp file first and then rename it to the final file (sourcegit-scm#2298)

Signed-off-by: leo <longshuang@msn.cn>

* fix: disable thinking mode in AI chat (sourcegit-scm#2299)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: improve Linux package build configuration (sourcegit-scm#2302)

* enhance: improve Linux package build configuration

- Dynamically generate ICU dependency versions in package.linux.sh
- Use @ICU_DEPS@ placeholder in control file for easier maintenance
- Add postinst script to update desktop database and icon cache
- Expand appdata.xml with full application description and screenshots

* fix: set executable permission for postinst script

Git on Windows didn't track the executable bit for postinst, causing
dpkg-deb to reject the package with "bad permissions 664" error.

* fix: `NullReferenceException` occurs when `Complete` is called before `AppendLine` (sourcegit-scm#2305)

Signed-off-by: leo <longshuang@msn.cn>

* feature: `ImageSource` supports loading psd files (sourcegit-scm#2304)

* localization: update Russian translation (sourcegit-scm#2306)

* doc: Update translation status and sort locale files

* feature: show the git source revision in `About` dialog (sourcegit-scm#2308)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: when reordering commits for interactive rebasing, the subject must equals (instead of starts with) target's subject (sourcegit-scm#2303)

Signed-off-by: leo <longshuang@msn.cn>

* fix: change default seperator to prevent `/` or `:` being replaced by culture in `DateTime.ToString`  (sourcegit-scm#2307)

Other languages like de_DE have "." as the seperator. On such systems the options with the "/" would still translate to ".". Same problem can be applied to Time.

This fixes the issue by setting default seperators no matter which language is used. This also changes how MMM behaves and does also show the correct value now.

* code_style: run `dotnet format` to fix ci warnings

Signed-off-by: leo <longshuang@msn.cn>

* refactor: keep selection in `HISTORY` page if user only selected one or two commits (sourcegit-scm#2297)

Signed-off-by: leo <longshuang@msn.cn>

* doc: update `README` for `deb` package (sourcegit-scm#2309)

Signed-off-by: leo <longshuang@msn.cn>

* localization: update `Text.About.GitSourceRevision`

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move `Commits` from DataContext to property

Signed-off-by: leo <longshuang@msn.cn>

* refactor: add `HistoriesCommitList` control and move selection code to it

Signed-off-by: leo <longshuang@msn.cn>

* code_style: `HistoriesCommitList` should not depend on `ViewModels.Histories`

Signed-off-by: leo <longshuang@msn.cn>

* enhance: do not change selection if previous one is empty

Signed-off-by: leo <longshuang@msn.cn>

* refactor: always create `HISTORY`, `LOCAL CHANGES` and `STASHES` page to prevent losing selection and scroll offsets

Signed-off-by: leo <longshuang@msn.cn>

* code_style: remove unnecessary code

Signed-off-by: leo <longshuang@msn.cn>

* enhance: leave action to `pick` if there's only `fixup` and `drop` commits to it (sourcegit-scm#2313)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: search position for `fixup!/squash!` commit in reversed order (sourcegit-scm#2314)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: remove binding warnings

Signed-off-by: leo <longshuang@msn.cn>

* fix: selection lost when switch from repo to welcome page

Signed-off-by: leo <longshuang@msn.cn>

* fix: wrong commit order to compare which is introduced by commit c3cbc61

Signed-off-by: leo <longshuang@msn.cn>

* enhance: prevent too many selection changed events being raised while apply selection to commit list

Signed-off-by: leo <longshuang@msn.cn>

* refactor: ignore hard-coded `Enter/Space` key event in AvaloniaUI's `ListBox` and make it can be handled by app

Signed-off-by: leo <longshuang@msn.cn>

* version: 2026.10

Signed-off-by: leo <longshuang@msn.cn>

* refactor: do not disable `thinking mode` but send `reasoning_content` back to the Open-AI service instead (sourcegit-scm#2229) (sourcegit-scm#2318)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: remember selection if it contains less than 11 commits in `HISTORY` page and rewrite the way to auto-scroll

Signed-off-by: leo <longshuang@msn.cn>

* refactor: replace Azure-specific API with general `JsonPatch` to get `reasoning_content` in response

Signed-off-by: leo <longshuang@msn.cn>

* code_style: check null once time

Signed-off-by: leo <longshuang@msn.cn>

* feature: add context menu entry `Copy` to selected REF in commit details panel (sourcegit-scm#2321)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: increase the number of commits when keeping selection

Signed-off-by: leo <longshuang@msn.cn>

* feature: add a new context menu `Compare with <upstream>` to compare selected branch with its upstream directly (sourcegit-scm#2322)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* doc: update `README` (sourcegit-scm#2323)

Signed-off-by: leo <longshuang@msn.cn>

* feature: add a checkbox in `Preferences > GIT` to use `Stash & Reapply` by default when checking-out or merging branches

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: `Left/Right` arrow key navigation in tree view (sourcegit-scm#2300)

Signed-off-by: leo <longshuang@msn.cn>

* localization: change display name of `Compare` in command palette

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: clean up files related to rebasing after running `git rebase --abort` (sourcegit-scm#2320)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: trim blocking code markdown identifier in AI response

Signed-off-by: leo <longshuang@msn.cn>

* fix: navigating to the same commit with current selected does not work any more

Signed-off-by: leo <longshuang@msn.cn>

* ux: makes `BranchSelector` looks like normal `ComboBox`

Signed-off-by: leo <longshuang@msn.cn>

* feature: allow searching for remote branches in pull/push (sourcegit-scm#2283)

Signed-off-by: leo <longshuang@msn.cn>

* ux: change `USE` button to primary style in `AI Assistant` dialog

Signed-off-by: leo <longshuang@msn.cn>

* feature: add keybindings `F2` to rename selected local branch (sourcegit-scm#2294)

Co-authored-by: Hüseyin Aslıtürk <huseyin@asliturk.com>
Signed-off-by: leo <longshuang@msn.cn>

* enhance: generate a better commit message manually when cherry-picking multiple commits with `-n -x` (sourcegit-scm#2295)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: more safe code to decode image resources

Signed-off-by: leo <longshuang@msn.cn>

* ux: change the icon of `Apply Patch`

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* localization: update Spanish translation (sourcegit-scm#2329)

+ Add missing strings.
+ Modify some instances when the ampersand character wasn't need it in spanish.

* doc: Update translation status and sort locale files

* refactor: add `--history <FILE_OR_DIR>` command line and remove the old `--file-history <FILE_PATH>`

Signed-off-by: leo <longshuang@msn.cn>

* enhance: trim the end path seperator

Signed-off-by: leo <longshuang@msn.cn>

* feature: support to collapse commit details panel (only vertical layout)

Signed-off-by: leo <longshuang@msn.cn>

* enhance: hiding invisible controls when commit details panel is collapsed

Signed-off-by: leo <longshuang@msn.cn>

* ux: add button tooltips

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* ux: should use `IsEnabled` instead of `IsVisible`

Signed-off-by: leo <longshuang@msn.cn>

* ux: align source revision in about dialog (sourcegit-scm#2331)

* localization: update Russian translate (sourcegit-scm#2332)

* doc: Update translation status and sort locale files

* ux: new style for `ToggleButton.line_path`

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to open history details panel in a separate window

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* localization: add missing translations for Chinese

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* refactor: reuse `interactive rebase` instead of custom `reword/squash/fixup/drop` popup for HEAD commit

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: `IsDetailsPanelExpanded` must be enabled by default since commit ac2a329

Signed-off-by: leo <longshuang@msn.cn>

* ux: layout of floating buttons

Signed-off-by: leo <longshuang@msn.cn>

* ux: replace icons

Signed-off-by: leo <longshuang@msn.cn>

* refactor: split `HistoriesDetailsStandalone` into two different windows

Signed-off-by: leo <longshuang@msn.cn>

* feature: allows to open commit details panel in a separate window in `Interactive Rebase` dialog

Signed-off-by: leo <longshuang@msn.cn>

* enhance: disable manually interactive rebasing on HEAD

Signed-off-by: leo <longshuang@msn.cn>

* enhance: pressing `DEL` when selected multiple tags will open `Delete Multiple Tags` popup

Signed-off-by: leo <longshuang@msn.cn>

* enhance: better `Left/Right` arrow key navigation in `Welcome` page

Signed-off-by: leo <longshuang@msn.cn>

* code_style: move `Select` from child classes to `ListBoxEx`

Signed-off-by: leo <longshuang@msn.cn>

* feature: add `Ctrl+J/⌘+J` hotkey to expand/collapse details panel in `HISTORY` page (sourcegit-scm#2335)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* refactor: remove unnecessary invisible buttons and move `KeyDown` handler to `HistoriesCommitList`

Signed-off-by: leo <longshuang@msn.cn>

* ux: lighter window shadow on Linux

Signed-off-by: leo <longshuang@msn.cn>

* feature: support `--no-verify` option to bypass `pre-rebase` hook while rebasing (sourcegit-scm#2334)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* ux: scroll to top button style

Signed-off-by: leo <longshuang@msn.cn>

* enhance: fallback `${BRANCH}` and `${BRANCH_FRIENDLY_NAME}` to current branch (sourcegit-scm#2338)

Signed-off-by: leo <longshuang@msn.cn>

* feature: add global hotkey to open terminal (sourcegit-scm#2337)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* fix: we can only use Ctrl+` on macOS

Signed-off-by: leo <longshuang@msn.cn>

* ux: use `^` instead of `Ctrl` on macOS

Signed-off-by: leo <longshuang@msn.cn>

* enhance: improve commit graph render performance

Signed-off-by: leo <longshuang@msn.cn>

* feature: show left/right only commits in `Compare` window

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: cherry-pick commits should be ordered by committer time

Signed-off-by: leo <longshuang@msn.cn>

* feature: supports to compare selected commit with current branch (not revision compare) when it is head of some branch/tag

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* enhance: support to disable auto-fetch available model-ids and specify the model-id to use directly (sourcegit-scm#2340)

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* ux: ref badge foreground

Signed-off-by: leo <longshuang@msn.cn>

* refactor: move `Ctrl+Shift+B/Ctrl+Shift+T` from `HistoriesCommitList` to `Launcher`

Signed-off-by: leo <longshuang@msn.cn>

* ux: hotkey order

Signed-off-by: leo <longshuang@msn.cn>

* fix: remove duplicate branch when overwriting existing branch (sourcegit-scm#2345)

When using OverwriteExisting to reset a local branch to upstream,
the branch list showed two duplicate entries because the old branch
object was not removed before adding the new one.

* feature: add repository page hotkey `Ctrl+E/⌘+E` to open in file browser

Signed-off-by: leo <longshuang@msn.cn>

* refactor: `IsOpenAsStandalone` should depend on `DetailContext`

Signed-off-by: leo <longshuang@msn.cn>

* fix: force disable `InvariantGlobalization` to avoid crashing when `DOTNET_SYSTEM_GLOBALIZATION_INVARIANT` has been enabled in user's environment (sourcegit-scm#2347)

Signed-off-by: leo <longshuang@msn.cn>

* refactor: use `Models.Null` instead of `null` to remove warings in Rider

Signed-off-by: leo <longshuang@msn.cn>

* refactor: highlighting in commit graph

Signed-off-by: leo <longshuang@msn.cn>

* ux: move `Show relative time in graph` to `Preferences` dialog

Signed-off-by: leo <longshuang@msn.cn>

* doc: Update translation status and sort locale files

* project: upgrade `Avalonia` to `11.3.15`

* version: Release 2026.11

Signed-off-by: leo <longshuang@msn.cn>

---------

Signed-off-by: leo <longshuang@msn.cn>
Co-authored-by: leo <longshuang@msn.cn>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Javier J. Martínez M. <56406225+jjesus-dev@users.noreply.github.com>
Co-authored-by: AquariusStar <48148723+AquariusStar@users.noreply.github.com>
Co-authored-by: Shun-ichi Goto <shunichi.goto@gmail.com>
Co-authored-by: heartacker <1876302+heartacker@users.noreply.github.com>
Co-authored-by: Iceflower <iceflower@gmx.de>
Co-authored-by: Gadfly <gadfly@gadfly.vip>
Co-authored-by: Johannes Häggqvist <git@johannesh.se>
Co-authored-by: Nietod <119692307+Nietod@users.noreply.github.com>
Co-authored-by: Hüseyin Aslıtürk <huseyin@asliturk.com>
Co-authored-by: Chiahong <36815907+ChiahongHong@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants