Add local/remote classes to the group header buttons and introduce a
--group-accent CSS variable used with color-mix for background, text tint,
hover state, and an inset accent shadow. Local headers use --color-info and
remote headers use --color-accent.
This is a visual-only change (no toggle/behavior changes): group headers now
have a subtle, distinct accent for local vs. remote sections instead of a
uniform muted surface.
Add a new Tauri command to produce a diff between the working file and a historical commit (get_file_restore_patch) and support a new apply action ("restore-lines") that validates and applies only text-line changes for a single regular file.
Behavior changes and constraints:
- Fetch a filtered reverse diff for a file in a commit so UI can display selectable lines from an older revision.
- Applying "restore-lines" verifies the target is a regular file, rejects binary/metadata patches, and ensures the patch only modifies the selected file.
- Restored lines are applied to the working tree without staging other changes; the index is preserved.
- The operation rejects stale patches or patches targeting the wrong file.
UI wiring:
- Compare dialog gets a "Restore lines…" action for applicable modified files and opens the line-patch dialog in restore mode.
- Line-patch dialog gains a restore mode (restoreCommit) with adjusted UI/rendering to pair removed/added lines, helper text, and dedicated "Restore selected" / "Restore hunk" actions.
- App integration handles fetching the restore patch, applying selected lines, and refreshing views.
Tests:
- Add tests covering correct behavior (preserve unstaged/staged changes and index) and guard cases (stale/wrong-file patches).
Annotate file history entries with matches_working_tree and surface that
information in the UI so the most recent commit can be identified as
"current version" when its content equals the working tree.
- Backend: add FileHistoryCommit and annotate_file_history(...) which checks
(only for regular files) whether the newest commit's blob matches the
working tree via `git diff --quiet`. list_file_history now returns the
annotated commits.
- Types: add optional matches_working_tree to GitCommit shape used by the UI.
- UI: show a "Current version"/"Aktueller Stand" badge and disable Diff/Restore
actions for entries that match the working tree (text localized for de/en).
Also add a test that verifies the matching behavior across file edits,
staging, committing and deletion. No external API breaking changes.
Previously the enabled repository select used cursor:grab, which could
mislead users into thinking the tab was draggable even when reordering
wasn't active. Change the non-disabled state to cursor:pointer to more
accurately indicate clickability. The grabbing cursor is still used
while reordering, so no change to drag UX.
Add a floating SidebarSectionMenu component and wiring in App.svelte to let users show/hide individual left-sidebar panels (worktrees, tags, stashes, files). Visibility is tracked in new sidebarVisibility state and persisted to localStorage under SIDEBAR_VISIBILITY_KEY. The menu opens via contextmenu on the left sidebar and returns focus to the invoking element when closed.
- Panels and resize handles now respect visibility (buildLeftSidebarRows, sidebarHandleVisible, expandedSidebarPanels).
- Branch panel remains always visible and cannot be toggled; stored preferences only apply to the other panels.
- Safe fallbacks: localStorage errors are ignored so the feature still works without persistence; menu includes keyboard navigation and appropriate ARIA roles.
Add a new git::review_cleanup module that implements a CleanupPlan with
prepare() and finish() routines to safely remove/clean tracking and local
branches after a PR/MR is merged. The cleanup logic validates branch names,
ensures a clean worktree, checks remotes/URLs, verifies commits/ancestry,
protects against concurrent worktrees or divergent local/remote commits, and
performs authenticated fetch/push and ref updates. Unit tests for the cleanup
behavior are included.
Wire provider-side cleanup into integrations:
- add an integrations/cleanup module to read provider PR payloads and derive
cleanup inputs
- run cleanup::prepare(...) before performing a merge when an optional
cleanup_path is provided
- after a successful provider merge, run cleanup::finish(...); any failure is
reported as MERGE_ACCEPTED_CLEANUP_FAILED
Also:
- export the new git review_cleanup module (src-tauri/src/git.rs)
- accept an optional cleanup_path parameter in run_integration_review_action
- remove the previous REVIEW_REQUEST_TIMEOUT wrapper around the spawned
blocking task (the integration action is no longer wrapped with the 35s timeout)
Introduce dedicated merge handling for integration review merges:
- Add src-tauri/src/integrations/merge.rs: implements merge_options (read provider repo settings), merge_payload (build provider-specific merge body) and a Tauri command get_integration_review_merge_options. Includes unit tests for behavior.
- Wire merge module into integrations.rs and pass an optional merge_method into provider-specific review action functions (GitHub, GitLab, Gitea, Azure DevOps). run_integration_review_action now accepts an optional merge_method, validates it early, and includes provider-specific merge payloads when performing a merge.
- Export the new command in src-tauri/src/main.rs so the frontend can request merge options.
Frontend changes to support selecting a merge method before merging:
- ConfirmDialog.svelte: add SelectMenu support and a select field to confirm requests.
- ReviewCenter.svelte: fetch integration merge options, show a merge-method selector in the merge confirmation, and pass the chosen method to the review action.
- Update types and git bindings to surface IntegrationMergeOptions / IntegrationMergeMethod and the getIntegrationReviewMergeOptions call (git.ts / types.ts changes staged).
Effect: users can pick a merge method appropriate to the provider/project; the integration layer generates the correct API payload per provider. Tests added for merge logic.
Replace the plain textarea in CreateReviewDialog with CommentEditor bound to
the description. The dialog now passes language, disabled, rows, ariaLabel,
previewLabel and placeholder so the description field gains markdown preview
and consistent accessible labels/placeholders.
Make CommentEditor props optional and configurable:
- onSend is now (() => void | Promise<void>) | undefined; Enter/Cmd+Enter and
the send button are guarded/hidden when onSend is not provided.
- Add placeholder, ariaLabel, previewLabel and rows (default 5) to allow
parent components to control appearance and accessibility.
Also add a small documentation tweak in commit_ai's cloud template: remind
authors to keep the title plain text and expand guidance on Markdown formatting.
Replace self-referential CSS variables with explicit hex values for status tokens (--color-sync-ahead, --color-success, --color-warning) and change --color-on-status to white. This makes the theme colors deterministic (avoids circular var() references) and ensures consistent contrast.
Also increase the accent mix used for avatar backgrounds in the review center from 35% to 45% so avatars have a stronger accent tint.
Introduce semantic theme variables (e.g. --color-success, --color-danger,
--color-warning, --color-info) and a set of overlay/tint/shadow variables
(--app-hover-tint, --app-raise-tint, --app-soft-tint, --app-overlay-shadow,
--app-menu-shadow, --app-float-shadow, etc.) and use them throughout
app.css in place of many hard-coded color, background and shadow values.
This change:
- replaces literal color tokens used for badges, pills, buttons, menus,
toasts, borders and file icons with the new semantic variables
- switches several box-shadow and overlay usages to the new shadow vars
- harmonizes light-theme surface, border and scrollbar values to explicit
variables for easier maintenance
No structural or behavioral changes; this is purely a visual/theming
refactor to make future theme adjustments and dark/light parity simpler.
Add an optional optionMeta snippet to SelectMenu to render richer,
right-aligned content per option (falls back to option.meta when not
provided). Update SelectMenu markup to render optionMeta if present.
Style adjustments for .select-menu-option-meta to align items, allow
inline SVGs, and preserve spacing/coloring.
Use the new slot in CreateReviewDialog:
- supply grouped repository options (owner + name) instead of raw names
- show a branch icon for each option and a lock icon + last-updated date
in the option meta
- add helpers repositoryById and formatUpdatedAt to resolve repository
data for the meta snippet
No breaking changes: legacy option.meta still works when optionMeta is
not supplied.
Add a repository picker to the Review Center and wire it into the request
filtering logic. Introduces repositoryFilter state and a derived
repositoryOptions list (grouped by owner and carrying counts). If the
chosen repository disappears from the options, the filter is cleared
automatically.
Enhance SelectMenu to support per-option meta text and an optional
optionIcon snippet. Render options as [icon] label [meta] with updated
markup and CSS to align and style icon/label/meta. Adjust toolbar grid
and responsive CSS to make room for the new repository picker and to
tweak select popup/option styles.
Introduce richer confirmation dialogs and wire them through the UI so actions
can collect an optional single-line input and a checkbox option.
- ConfirmDialog: support optional input and checkbox (with defaultChecked),
expose onConfirm(result: {checked, value}). Focus/selects input when present
and blocks confirm while required inputs/checkboxes are missing.
- App: add askConfirmation(...) returning {confirmed, value, checked} and keep
requestConfirmation(...) as a convenience boolean wrapper. Update answer flow
to pass the full result. Use the new prompt in stashStatusFiles to collect a
stash message and "include untracked" option before saving.
- Status/Explorer/Worktree: add multi-selection support for stop-tracking and
stash operations. onStopTracking now accepts an array of paths and a new
"selection" kind; status context menu shows selection counts and uses a
CopyCheck icon for selections. Added corresponding i18n messages.
This change keeps existing UX but enables collecting extra confirmation data
and acting on multi-file selections.
Replace per-panel height constants, state, loaders and resize handlers with a single
model for all left sidebar panels. Panel sizes are now stored/read as a JSON
object under "gitlite.sidebarPanelHeights.v2" and managed via shared helpers.
Key changes and behavior:
- Introduce SIDEBAR_PANEL_ORDER, per-panel MIN/DEFAULT heights and a shared MAX/STEP.
- Single in-memory map sidebarPanelHeights with clamp/load/persist helpers.
- One pointer/keyboard resize flow: startSidebarPanelResize, onSidebarPanelResizeMove,
endSidebarPanelResize and onSidebarPanelResizeKeydown. Dragging moves the border
between the panel above (grows) and the next expanded panel below (shrinks).
The last expanded panel is flexible (1fr) and follows automatically.
- Double-click on a handle resets the above/below panels to their defaults.
- buildLeftSidebarRows now derives grid rows from the unified state; template uses
new handlers and aria attributes.
- LocalStorage remains best-effort; persistence failures are ignored as before.
Removes many duplicate functions/variables for individual panels and simplifies
the UI logic for showing/hiding resize handles and resizing behavior.
Update color token values in src/app.css. The change tweaks muted ink shades
and replaces the accent color hex, affecting primary/hero gradients and the
security-note icon color.
- Modified --color-ink-faint, --color-ink-dim, --color-ink-quiet in theme and
light theme variants.
- Replaced --color-accent (#0f8fb5 -> #0c7691) and updated its uses in
.btn-primary gradients, .cred-hero-icon gradient, and .cred-security-note svg.
Move and consolidate scrollbar styling into a single block at the end of app.css.
Remove the scattered top-level rule and the left-sidebar-specific overrides and
replace them with a unified set of rules that use ::-webkit-scrollbar pseudo-
elements and reset scrollbar-width/color to auto so WebKit styling wins.
- Set WebKit scrollbar size to 8px, rounded thumb with min-height/border and
color-mix background.
- Unify hover/active thumb colors to use --app-scrollbar-thumb and
--app-scrollbar-thumb-hover.
- Keep hidden scrollbars for .repo-tabs-scroll.
Introduce a generic ConfirmDialog and a promise-based requestConfirmation API in
App.svelte so callers can await user responses instead of using window.confirm.
Provide helper builders (branchDeleteConfirmRequest, discardConfirmRequest) to
create dialog content for common cases. Many call sites were switched to use
requestConfirmation and now render the in-app ConfirmDialog; the previous
specialized confirm components (BranchDeleteConfirmDialog, DiscardConfirmDialog)
were removed.
Add lightweight i18n support (setLanguage, t()) and new messages/i18n modules,
and replace hardcoded English strings in several components (e.g. AiSettingsPage,
BlameDialog and many confirmation prompts) with translated keys.
Summary of effects:
- Replaces native window.confirm with awaitable in-app ConfirmDialog dialogs.
- Centralizes confirmation UI and content construction in App.svelte.
- Adds i18n plumbing and updates UI text to use t().
- Removes two specialized confirm dialog components and adds src/lib/components/ConfirmDialog.svelte.
Add credential-aware submodule operations and a command to checkout a specific
tag or commit in a submodule without staging the parent repository.
- Backend (src-tauri):
- Export checkout_submodule_revision and implement checkout_revision which
validates tag vs commit inputs, verifies refs locally, and checks out the
submodule in detached mode without modifying the parent's index.
- Add optional username/password parameters to add_submodule and submodule_action
flows. Implement submodule_git to call run_git_authenticated when credentials
are supplied and classify auth failures by prefixing errors with "AUTH_FAILED:".
- Wire authenticated variants (operate_authenticated, add_authenticated) and
update fetch/update actions to use credentials where needed.
- Add unit tests covering authenticated submodule commands, auth failure
classification, and checkout-by-tag/commit behavior.
- Frontend:
- App.svelte: introduce credential prompt flow (withSubmoduleCredentials,
submit/cancel handlers), surface credential dialog on auth failures, and
wire credentialed calls for initialize/add/update/fetch operations. Hook up
checkoutSubmoduleRevision and listTags to the submodule dialog.
- SubmoduleDialog.svelte: add UI for selecting destination folder, loading
tags and checking out revisions; expose fetch action.
- CredentialDialog.svelte: include "submodule" action and adjust labels.
- Docs:
- README: document "Change commit or tag" and "Fetch tags & commits" behaviors.
The commit focuses only on enabling credentialed submodule interactions and
safe local checkouts of tags/commits; no other git behavior changes are made.
Add CSS rules for the PR badge in RepositoryDashboard.svelte to provide a compact, padded hit area and a soft outlined hover/focus treatment (using color-mix) instead of a hard filled block. Sizes are tuned for list- and tiles-view, transitions are added for color/border/background, and a .pr-error hover variant applies an error accent. This is a purely presentational change.
- Add a text filter with highlight and clear (Esc to clear) that narrows visible branches and auto-opens folders while filtering.
- Persist panel view state (local/remote open + collapsed folders) to localStorage under "gitlite.branchPanelView.v2" so folder open/collapse and section visibility survive reloads.
- Reveal current branch action: clears filter, expands path to current branch, scrolls it into view and briefly flashes it.
- Rework branch list rendering: unified folder/branch ids, scope-aware rows, tracking status computation (tracked/gone/local/remote-tracked), richer titles/tooltips, updated icons, and better context-menu positioning/behavior (separate showBranchMenuAt + open-from-button).
- Prevent toggling folder collapse while filtering; folder rows are implicitly open when a filter is active.
- Add slim, rounded custom scrollbars for the left sidebar in src/app.css.
No external APIs changed; behavior is additive and intended to improve branch navigation and discoverability.
Add two new sidebar components (WorktreePanel, TagsPanel) and integrate them
into the compact left navigation layout:
- Wire up imports and rendering in App.svelte, including collapse toggles and
resize handles for both panels. Persisted heights (localStorage) and keyboard
resizing are supported; heights are clamped between 80 and 420px with a 140px
default.
- Extend buildLeftSidebarRows and left-sidebar grid/template styles to include
the new panels and reduce panel-handle thickness. Add extensive CSS for the
compact accordion navigation, worktree and tags lists.
- Move tag and worktree management UI out of BranchPanel (remove tag props),
and add dedicated handlers in App.svelte for the new panels.
- Refactor worktree loading: introduce a worktreeLoadId to guard async
refreshWorktrees() calls and avoid race conditions. refreshWorktrees(path?)
now takes an optional path and updates worktree state only when the request
is still relevant.
- Small behavioral tweaks: stash panel default collapsed state changed to true
and the explorer resize-handle visibility condition adjusted.
This commit only adds the UI/UX integration and local persistence for the new
panels and their resizing/refresh behavior.
Add a new backend module to manage Git submodules (list, initialize/update,
stage, sync, add) and expose Tauri commands (list_submodules,
submodule_action, add_submodule). The implementation enforces safe relative
paths, a maximum nesting depth, and guards (dirty/conflicted checks and
initialization/no-op semantics) to avoid unsafe operations.
Refactor clone logic to a testable run_git_clone_command and enable
automatic initialization of submodules during clone by passing
--recurse-submodules. Also disallow certain submodule-related custom clone
flags so callers cannot override this behaviour.
Update README with a Submodules section and add frontend components and types
to surface submodule UI (dialogs, toolbar badge). Unit tests were added for
submodule discovery, initialization/update semantics, and recursive clone
behavior.
Add the generated Gitty runtime architecture documentation produced by archify: rendered HTML, JSON specification and delivery/browser receipts, visual-check screenshots and contact sheets, and accompanying diagram JSON/visual files under docs/diagrams. These are auto-generated static documentation artifacts (archify metadata present) and should not be edited by hand.
When switching workspaces, skip calling openRepo if the current activeView
is "management". Previously a session.activePath would be opened even
when the user was on the Management/dashboard view, causing an unwanted
navigate-away. Now a keepDashboard flag prevents openRepo from running
in that case, preserving the dashboard state.
Introduce a reusable providerLogo snippet to consolidate logo markup (normal
and large variants) and to render the instance badge for self-hosted GitLab.
Replace duplicated inline SVG spans with {@render providerLogo(...)} calls.
Also:
- update the Azure DevOps SVG path (comment notes simple-icons v11.15.0 as source)
- add providerColor cases for gitea and azure-devops and expose light-theme
CSS vars for their colors
- overhaul provider logo CSS (sizes, brand-icon class, instance badge, borders
and theme-aware vars) to unify appearance and spacing.
Introduce a shared dialog header style (.unified-dialog-header) in app.css and opt dialog components into the new chrome by updating their header markup. Headers now use unified-dialog-icon and unified-dialog-text elements (and import the matching Lucide icons where needed), which standardizes icon placement, title/eyebrow layout, close button styling and responsive behavior. The Command Palette layout was adjusted to include the new header and its grid rows.
The CSS is explicitly opt-in (so page/section headers remain unchanged) and includes hover/focus styles and a theme-sensitive close color variable. This commit is a UI refactor only — no API or behavior logic changes.
Add pull request draft generation to the commit_ai crate and expose it
via a new Tauri command. The backend builds a branch-range context from
published remote-tracking refs only, calls the chosen AI provider, and
parses a JSON {"title","description"} draft (with validation). Also
register the command in the app and add unit tests for parsing and the
branch-context behavior.
Consolidate AI settings in the frontend by renaming the dialog to an
AiSettingsPage and integrating AI options into the main AppSettings
dialog. Persisted AI preferences are merged with existing localStorage
rather than replacing it, and the settings UI now supports opening the
app settings to a specific initial page ("integrations" or "ai").
Other changes:
- Replace the commit-message system prompt used by build_messages with
the updated, more detailed guidance text.
Introduce an iterative visibleParentResolver for commit-graph rendering,
replacing a recursive traversal. It preserves first-parent ordering,
deduplicates converging paths, and avoids stack overflows; a test suite
validates correctness and performance. Additionally, streamline background
fetch handling in the UI to reuse fetchRemote's returned status and avoid
unnecessary status reads and tab invalidation, and refactor Git status
handling in Rust to build a file_status_index that preserves rename and
first-match semantics while speeding lookups.
- Add visibleParentResolver + comprehensive tests for ancestry handling
- Reuse fetchRemote result to apply status and skip unchanged updates
- Replace status_for_file with file_status_index to improve performance
Remove hardcoded stroke and drop-shadow for "behind" graph segments.
This allows the lane color provided by the graph to determine the stroke.
Keep the dashed stroke pattern so "behind" status remains visually clear.
- Remove explicit stroke and filter for behind segments
- Add clarifying comment and retain dash pattern
Introduce workspace support to group repositories and store per-workspace
open tabs and the last active repository. Integrate a workspace picker into
the repository tab bar and add workspace controls to the dashboard to
create, edit, switch and delete workspaces. Persist and migrate workspace
preferences robustly and include tests for migration, corruption and edge
cases.
- Persist per-workspace sessions and active repo to localStorage
- Add workspace picker in tabs and dashboard management hooks
- Include migration/validation logic and unit tests for edge cases
Add pointer-driven drag-and-drop reordering for repository tabs. A
drag state tracks source and target, supports auto-scrolling, and shows
a live animated preview while dragging; accidental clicks are suppressed.
Reorders commit on pointerup and can be cancelled via Escape, blur, or
pointercancel, and reordering is disabled while the app is busy. The
new order is persisted through a callback to the main app.
- Implement pointer handlers, drag lifecycle, and click suppression
- Add transform-based preview, transitional styling, and reduced-motion support
- Wire reorder callback to persist the updated tab order
Change undo-last-commit behavior to perform a soft reset instead of a
mixed reset. This preserves the index and working tree so the undone
commit's changes remain staged and ready to recommit. The confirmation
dialog text was updated to accurately reflect the new behavior.
- Perform git reset --soft HEAD~1 to move HEAD while preserving index
- Update UI confirmation copy to state that changes remain staged and
files are preserved
Add creation flow for integration issues and Azure work items.
Expose Tauri commands to list Azure projects and types.
Also add a command to create integration issues and return the created item.
Preserve the target repository when provider responses omit it and return
the created issue information to the UI.
- Implement Azure-specific URL and payload handling and creation logic
- Add a Svelte CreateIssueDialog and integrate it into IssueCenter
- Add tests to validate creation requests and created-issue parsing
Generalize the repository grouping logic so grouping is driven by a single
derived flag and not tied to a single provider. Replace the Azure-specific
group variable with a generic repositoryGroups value and use a shared
usesRepositoryGroups switch so grouping can be enabled for other providers.
- Add usesRepositoryGroups derived flag to centralize grouping logic
- Replace azure-only grouping with repositoryGroups and enable Gitea grouping
Add support for listing and setting Azure DevOps work item states from the
integration layer. New helpers build and validate JSON-patch payloads and
expose two Tauri commands so the frontend can enumerate available states
and apply state changes. The Issue Center now loads Azure states and can
change an issue's state; dialog dismiss controls and related CSS were
consolidated and board UI feedback was simplified for clarity.
- Add Tauri commands to list and set Azure work item states.
- Load and present Azure states in Issue Center and allow state changes.
- Unify dialog dismiss attributes and refine hover/focus styling.
Add a lightweight workspace preferences helper to store optional UI
settings in localStorage and integrate it with the issues views so
filters, queries, and view mode are restored per source. The
integration board now remembers repository and query filters, and the
Issue Center restores state filters and view mode across sessions.
Also disable drag and drop for the main Tauri window to avoid accidental
file drops.
- Add read/write helpers for workspace preferences in localStorage
- Persist and restore filters, queries, and view mode for issue views
- Disable window drag-and-drop to prevent accidental file drops
Introduce a shared page-header/page-heading pattern and CSS to
standardize headers across top-level sections. Components were
updated to adopt the new classes and slightly smaller icon sizing
for a more compact, consistent header appearance. This improves
visual consistency and makes future header adjustments simpler.
- Add reusable page-header styles for spacing, borders, and bg
- Standardize icon sizing and heading layout across screens
Refactor the integration board UI to improve board discovery, loading,
and the card detail experience. Introduce a compact assignee mode and
apply it in list views to save horizontal space, and make several
accessibility and labeling improvements for board links and authors.
- Add a compact prop for assignee rendering and use it across lists.
- Improve board URL handling and add Azure DevOps board label parsing.
- Replace the old inspector with a focused detail drawer and sidebar.
Replace the legacy repository tab bar with a compact workspace
navigation that groups primary views and exposes a dedicated
"Repositories" action. The repository list is shown only when the
repository view is active and supports per-repo selection and closing.
Also add a Repositories open handler in the app to select the active
repo or prompt to choose a repository folder when none is available.
- Introduce top-level navigation (Dashboard, PRs, Issues, Repositories)
- Add onOpenRepositories hook and app logic to select or choose repo
- Update icons, styles, and accessibility attributes for the nav
Add client-side wrappers for creating integration review requests and
for listing repository branches, and wire native command imports so the
app can call those integration endpoints. Update the review center UI to
include a create-review dialog import and refine table and provider
button layout for improved spacing and readability.
- Add wrappers for create review requests and branch listing
- Wire native integration imports and prepare the create-review dialog
- Adjust table sizing and provider button layout for better spacing
Adjust CSS to make the review center more robust at mid and narrow
viewports. This increases several min-width thresholds, tweaks grid
column sizing and padding, and refines toolbar/button sizing to avoid
content wrapping and truncated actions. The result keeps lists and
controls visible and aligned across a wider range of window sizes.
- Raise table/group min-widths and adjust column widths to prevent wrap
- Increase provider button min-width and disable shrinking for clarity
Add a backend command to enumerate a repository's branches and default
branch for configured integrations, and expose it to the UI. The create
review dialog now fetches branches, shows loading and error states, and
uses searchable SelectMenu controls for repositories and branches. If a
local repository path is available the dialog will try to match remotes
and preselect a local branch that exists on the remote to streamline
review creation.
- Add integration branch listing command and wire it into the dialog
- Replace plain selects with searchable SelectMenu and improved UX
- Attempt to detect and suggest a matching local source branch when possible
Add a new Tauri command and front-end flow to create PRs/MRs.
The backend builds and validates provider-specific payloads and
endpoints, sends creation requests, and parses responses into the
app's review model. A Svelte dialog and a JS wrapper wire the UI to the
command so users can create requests from the Review Center.
- Implement provider payload and endpoint logic with unit tests
- Expose create_integration_review_request as a Tauri command
- Add CreateReviewDialog UI and integrate a creation button in Review Center
Add backend integration modules to discover, read, and modify
provider-hosted boards, issues, and comments across multiple providers.
Expose Tauri commands for board discovery, listing, and card moves,
and implement safe issue actions and comment APIs.
Wire new Svelte UI components to render boards, issue centers,
comments, labels, and assignees, and add sanitized markdown rendering.
- Add board discovery, board reading, and card-move APIs
- Add Svelte components and styles for integrated board UI
- Use marked + DOMPurify for safe markdown rendering
Move pull-request discovery and caching into a dedicated background
loader component. The repository dashboard no longer performs the
network/keychain work itself and instead receives a shared badge state
that is refreshed and persisted independently. The app wires the loader
into top-level state and binds badge data into the dashboard view.
- Add a background loader to fetch, group and cache open PR counts.
- Simplify dashboard to accept and render pull-request badge state.
- Wire loader into app-level state and bind badges to the dashboard.
Revamp the line patch dialog to improve usability and clarity.
Improve accessibility and German/English localization for UI text.
Add toolbar, hunk navigation, per-line checkbox selection and footer.
Extract merge-in-progress UI into a reusable merge progress notice.
- Replace selection UI with checkboxes, range selection, and counts
- Add hunk navigation, active-hunk tracking, and scroll synchronization
- Extract merge-in-progress UI into a reusable notice component
Introduce --color-sync-ahead and --color-sync-behind and update sync
indicators to use those variables. Replace hardcoded sync colors with
var() and color-mix() to unify backgrounds, shadows, and graph accents
across themes, and add light-theme overrides to preserve contrast.
- Add theme-level variables for ahead/behind sync colors
- Replace literal color values with var() and color-mix() usages
- Update dashboard styles to reference the new sync variables
Add a view switcher to the repository dashboard so users can
toggle between compact list and tile (cards) layouts. The
choice is saved to localStorage so preferences persist
across sessions. Also adjust card layout, sync/branch indicators and
accessibility attributes, and refactor pullRequestTitle to accept
badge state directly for more accurate aria labels.
- Persist viewMode with STORAGE_KEY and add setViewMode helper.
- Add view toggle UI with ARIA states and new icons.
- Introduce list/table and tiles CSS and refine status display.
Refactor the Review Center component to improve layout, accessibility,
and user flow. Add a SelectMenu integration picker and reorganize state
tabs and search into a cleaner toolbar. Bind the detail panel, close it
on outside pointer events, and introduce richer merge/conflict UI with a
local-resolution flow plus comment formatting helpers and action tweaks.
- Add SelectMenu for integration selection and cleaner toolbar layout
- Bind detail panel, handle outside-click closing, and focus helpers
- Improve conflict/merge presentation and action menu behaviors
Coordinate local conflict resolutions with automated push and provider-
side merge status checks. When a local resolution completes the app
advances the merge workflow, pushes the updated branch, and attempts to
continue the merge. The UI shows a checking state and disables relevant
actions while the provider rechecks to prevent duplicate operations.
This streamlines finishing conflict resolution and keeps PR status in
sync with remote providers.
- Automatically push and continue merge when local resolutions finish
- Poll provider for updated mergeability and refresh request details
- Add guards to disable UI actions while waiting for remote status
Add a local conflict resolution workflow that allows resolving PR
merge conflicts from the review center. The change implements host and
repository matching, prepares and merges branches locally, opens the
resolve editor, and tracks a multi-phase state machine to continue,
abort, or push the resolved branch back to the remote.
- Core resolution logic to locate matching repos, prepare merges,
and manage phases (preparing → conflicts → ready-to-push → complete).
- UI wiring and callbacks to start, reopen, continue, abort, and push
local resolutions from the review center.
- Helpers to open the conflict editor, monitor merge state, and mark
completion after a successful push.
Add pull request badges to the repository dashboard and enable deep-
linking to the Review Center with a repository and source pre-filter.
Badges are populated by resolving remotes, matching them to configured
integration sources, and querying providers for open PRs while handling
loading, error, and unavailable states. The dashboard badge opens the
Review Center pre-filled and the app stores initial query/source values
to support the deep-link.
- Resolve and normalize remotes to match integration sources reliably.
- Query provider APIs using stored credentials with sensible timeouts.
- Expose a badge action that navigates to the Review Center pre-filtered.
Add a cross-provider Review Center and improve credential handling.
Backend integrations fetch and normalize PRs from GitHub, GitLab,
Gitea, and Azure DevOps with improved timeouts and parsing. Credentials
now use a global lock and support secret-tool on Linux to avoid races.
- Normalize review data across providers (GitHub/GitLab/Gitea/Azure)
- Serialize credential access with OnceLock and use secret-tool on Linux
- Add frontend ReviewCenter component and related UI updates
Restructure the bisect dialog to group the search range and make the
known-good and known-bad fields more distinct and informative. The UI
and CSS were overhauled to improve spacing, sizing, color cues and
responsiveness for clearer interaction and readability.
- Introduce a labeled search-range block with dedicated good/bad fields
- Add icons, compact tags and adjusted placeholders for clarity
- Replace and simplify styles to improve layout and mobile behavior
Add interactive Git bisect support to the Tauri backend and UI.
Introduce BisectState and BisectCommit types for structured state.
Expose Tauri commands to query, start, mark, and reset sessions.
Add parsers, unit tests, and a Bisect dialog with toolbar and App wiring.
- Backend: new Tauri commands, state types, and helpers to parse bisect.
- Frontend: Bisect dialog, toolbar entry, and App integration to control flow.
Move the inline repository management UI into a new RepositoryDashboard component
and wire it into the application. Refactor app state to compute a reactive
dashboardRepos list and update tab-closing logic so tabs can be closed while
preserving the management view when appropriate.
- Add a full dashboard with search, categories, workspaces and persisted prefs.
- Refactor close behavior to support keeping the management view open.
- Improve UI/CSS and accessibility for the management tab (compact layout and label).
Introduce a modal dialog to configure and confirm branch merges. It
replaces the old prompt-based workflow and lets users choose a merge
strategy with localized labels. Confirming the dialog runs the merge,
refreshes views, and clears the pending merge target.
- Add a merge dialog UI with strategy options and keyboard support.
- Replace prompt-based merge flow with a state-driven confirm dialog.
- Include CSS for dialog layout, responsive sizing, and styling.
Add a modal dialog to initialize a new Git repository, replacing the
previous prompt-based flow. It integrates with the app state and invokes
the initialization operation then opens the repository on confirmation.
Also adds styles, keyboard handling, accessibility hints, a folder
browser, initial-branch input, and German/English labels with busy state.
- New dialog component with folder picker, branch input, and i18n.
- Wire dialog open/close and confirm handler to init and open actions.
- Add CSS rules for dialog layout, controls, and error/busy states.
Add advanced clone options support across the frontend and backend.
Users can specify a branch, shallow limits, blobless mode, sparse paths,
and custom clone flags when initiating a clone operation. The backend
validates inputs, parses custom flags without invoking a shell, and
configures sparse checkouts after a successful clone. A small parsing
dependency was added and tracked-file parsing was improved to better
handle git ls-files output.
- Introduce CloneRunOptions and validation helpers for clone inputs
- Parse custom flags with a shell-like tokenizer and block managed flags
- Support sparse checkout configuration and shallow clone constraints
Adjust spacing and sizing for repo tabs and close controls. Add
transitions, larger hit areas, and updated hover/focus styles. Introduce
theme-aware variants and neutral dialog close styling for consistency.
Also update help overlay close to match the new behavior.
- increase close button size and tweak padding for alignment
- add transitions and inset focus/hover visuals with themes
- normalize dialog and help close appearance for consistency
Adjust grid templates and overflow rules to improve layout.
Replace fixed heights with flexible rows so content fills space.
Hide overflow and tweak alignment to avoid double scrollbars.
- Use grid-template-rows to allocate header, controls, and list area
- Make repository list shell and list use height: 100% and overflow:auto
- Align URL field to the top to prevent unexpected scrolling
Adjust the fixed loading overlay to avoid overlapping the repo tab bar.
The top offset now adds the app titlebar and repo tabbar heights using
CSS calc with reasonable fallbacks. This keeps the overlay aligned with
top UI elements when a repository tab bar is present.
- Offset top by titlebar plus repo tabbar heights via CSS calc.
- Provide sensible fallback values to maintain stable layout.
Remove the extra vertical offset so the loading overlay aligns with the
app titlebar. Update the backdrop color mix and increase blur to improve
contrast and perceived depth while the overlay is visible.
- Align overlay using the titlebar height variable instead of adding a
fixed offset
- Use a denser color mix and stronger blur for a clearer backdrop effect
Rework CloneRepositoryDialog into a two-column layout with a source
sidebar and focused content area to make browsing sources easier.
Group Azure DevOps repositories by project with a new derived value
and render sticky project headers for clearer navigation.
Replace showIntegrations with selectIntegrationSource to load the
chosen integration, refresh repositories, and update labels and styles.
- Introduce source sidebar and refreshed dialog layout
- Add azureRepositoryGroups and project grouping UI
- Rename flow to selectIntegrationSource and improve loading logic
Allow pulling repositories with unrelated commit histories when the user
explicitly opts in. The pull argument construction was refactored and
branch resolution made more robust so the backend can include the
--allow-unrelated-histories flag when requested.
- Extract pull argument logic and add support for allowing unrelated histories.
- Prompt users in the UI to confirm merging separate histories and retry pull.
- Restyle and improve the update toast UI for better layout and responsiveness.
Remove local on-device model support and related IPC commands,
consolidating commit-generation to cloud providers and simplifying the
AI crate surface. Local-specific types, generation profiles, caching,
and the local prompt builder were removed while message sanitization and
diff-echo detection were preserved. Also harden repository handling and
runtime: unborn HEADs are handled gracefully so empty repos still report
files, Git LFS sync is skipped for repositories without commits, and
tokio runtime features were enabled.
- Remove local model engine, load/status commands, and local profile code
- Handle unborn HEAD and skip LFS sync for repos without commits
- Enable tokio runtime features and route AI generation to cloud only
Add integrations for GitHub, GitLab (cloud & self-hosted), Azure DevOps,
and Gitea, storing personal access tokens in the operating system
keychain. Azure DevOps supports multiple independently configurable
organizations, and the Clone → Integrations tab loads, filters, sorts,
and clones repositories using stored credentials. Update the API
contract, help overlay, README, changelog, and application version
metadata to document and ship the feature.
- Add list_integration_repositories API command and related types
- New Clone → Integrations UI with search, refresh, and direct clone
- Store tokens in OS keychain and support multiple Azure DevOps orgs
Add GitHub repository support to integrations and update related tests.
Implement server-side GitHub API calls and normalize GitHub base URLs.
Improve the repository browser UI with compact tabs and updated icons.
Add a custom, accessible scrollbar with pointer and keyboard support.
- Add paging, auth headers, and error handling when listing GitHub repos.
- Default GitHub token username to "x-access-token" when saving credentials.
- Introduce compact repo tab styles, new icons, and a draggable scrollbar.
Add support for integrating with external Git hosts (GitLab, Gitea,
and Azure DevOps). The backend gains a client to fetch paginated
repository lists, normalise base URLs, and surface provider errors.
Credentials are loaded from the OS keychain and a Tauri command is
exposed for the frontend to list integration repositories.
- Implement integration client with pagination, deserialization,
and provider-specific handling.
- Centralise keychain credential loading and expose listing command.
- Update UI to manage integration metadata, persist settings, and
save/remove tokens to the OS keychain for cloning and operations.
Update the repository loading overlay and related UI styles to use
design tokens, improve contrast, and reduce visual bulk. Sizes,
spacing, radii, and icon dimensions were tuned to create a more
compact, consistent card. Backgrounds, grid textures, and shadows
were switched to CSS variables and color-mix; subtle backdrop-filter
and opacity tweaks improve legibility across themes.
- Replace hardcoded colors with theme variables and color-mix
- Reduce component dimensions and tighten spacing for a compact UI
- Add backdrop blur, adjust grid opacity, and simplify shadows
Saving sync settings with no upstream could cause a fatal Git
error when unsetting upstream on a branch that never had tracking
information. This change guards the operation by checking for an existing
merge configuration before unsetting, making it idempotent. A test was
added to verify that clearing an unconfigured upstream is a no-op.
- Add test ensuring clearing an unconfigured upstream is a no-op
Add CSS custom properties for dialog backdrop, shadows, and panel
highlights to centralize visual theming. Refactor the status panel
overlay to consume these tokens and use color-mix instead of hardcoded
rgba values. This improves visual consistency and lets overlays adapt
cleanly to appearance changes and theme variants.
- Centralize dialog and panel visuals with new CSS variables
- Replace fixed rgba values with tokenized colors and color-mix
- Move borders, shadows, and gradients to use the new theme tokens
Add collapsible local and remote branch groups to the branch
visibility dialog, including toggle buttons and selection counts.
Introduce comprehensive dialog styling and responsive rules to match
the app UI. Opening the dialog now defaults to local open and remote
closed for faster access.
- Add CSS for branch-filter dialog layout, theming, and responsiveness
- Implement group toggles with chevrons and visible selected counts
- Default to local group open and remote group closed on dialog open
Introduce an appearance preference with modern, classic, and custom
modes and a persisted custom theme palette. Add helpers to load,
persist, and apply appearance and custom colors, and wire them into the
app settings lifecycle. Implement a comprehensive light theme and
appearance presets using CSS variables so custom palettes are applied
consistently across the UI, and include appearance in analytics when
settings are saved.
- Persist and apply appearance and custom color palette to :root
- Add muted light theme plus classic/modern presets and custom mapping
- Include appearance and customTheme in settings save and analytics payload
Update the dark theme tokens and UI surfaces to improve legibility
and clarify interactive boundaries across the app. Controls such as
buttons, inputs, and focus outlines were standardized and simplified
to reduce visual noise while preserving hierarchy.
- Overhaul color tokens and surface backgrounds for consistent tones
- Simplify primary button treatment and adjust focus/outline behavior
- Add targeted dark-mode rules to separate chrome (tabs, toolbars)
Introduce a square UI language by resetting border-radius on
controls and surfaces to create consistent square corners app-wide.
Add explicit exceptions to preserve circular markers and keep
branch-flag shapes so avatars, dots, and graph connections remain
recognizable. Remove a few unnecessary !important modifiers to
simplify overrides.
- Reset border-radius globally for elements and pseudo-elements.
- Preserve circular avatars, graph dots, and similar markers.
- Keep curved branch flag shapes and targeted corner rules.
Increase the compact reference overflow to 20px and slightly raise its
mono font to improve legibility and vertical alignment. Add explicit
square sizing and an aspect-ratio for the repo tab close control so
its icon and layout remain consistent across breakpoints and overrides.
Use !important on the size rules to ensure they take precedence.
- bump .compact-ref-overflow height and font-size for alignment
- add fixed sizing and aspect-ratio for repo tab close button
The app now supports opening a repository at startup by
reading a --repo argument and passing the path to the UI.
A new startup repository state is managed in the backend and
exposed via a tauri command and event, enabling the frontend
to auto-open the repository when ready. The UI adds a small
startup flow with retry handling to ensure the path is
consumed once available.
- Reads --repo or --repo=PATH and resolves relative paths
- Signals UI to open startup repo via open-startup-repository
- Frontend retries opening the repo until it succeeds
Update release workflow to detect and attach the native Arch package.
Switch the binary AUR recipe to repackage the .pkg.tar.zst. Adjust
checksums and packaging steps so the output carries only the native
payload without bundling upstream package metadata.
- Attach the native .pkg.tar.zst to Gitea releases.
- Rework binary AUR recipe to extract usr from the native package.
- Update README to document using the native Arch package.
The app builder workflow now includes fuse2 among Arch packages.
This provides FUSE support in the build environment for tools and
mounts used during builds and tests. It prevents failures caused by
a missing FUSE runtime.
- Add fuse2 to ARCH_PACKAGES to satisfy FUSE-dependent tooling
Replace unauthenticated artifact lookup with an authenticated Gitea
release API call that fetches release JSON and asset metadata.
Require a Gitea token (with optional fallback), use it to locate the
AppImage asset in the release JSON, extract its name and download URL,
and download the file with an Authorization header.
Fail early when no token is present and verify the downloaded asset
checksum to ensure integrity; this enables access to protected releases
and improves asset selection robustness.
- Enforce token presence and use Authorization header for API calls.
- Parse release JSON to select .appimage asset and determine filename.
- Remove dependency on unauthenticated artifact base URL lookup.
Add a CI step that finds the built Arch binary and attaches it
to the matching Gitea release using the repository API. The step
validates that the package was created, requires a Gitea token,
and skips upload if the asset already exists to avoid duplicates.
- Export artifact path to the environment and validate its presence
- Query the release to obtain its ID and upload the asset if missing
Add support for authenticated deletion of remote branches and folders.
The backend adds a batch delete command that queries the remote,
performs an atomic push --delete when possible with a fallback, and
prunes stale tracking refs; it accepts optional credentials. The
frontend and JS API integrate credential handling and prompt users when
authentication is required.
- New batch deletion command with optional username/password for auth.
- Uses ls-remote to scope deletions, tries --atomic then falls back.
- Frontend updates: credential dialog/action, pendingRemoteDelete state.
Add a context-menu action to delete all branches in a folder at once.
Top-level remote folders are protected and the currently checked-out branch
is preserved. The BranchPanel API now includes folder depth to prevent
accidental bulk-deletes and summarizes individual failures after processing.
UI polish and localization were applied, and the package/version metadata,
changelog, and help overlay were updated for the 2026.8.4 release.
- Bulk delete with top-level remote protection and failure summaries.
- BranchPanel now tracks folder depth and disables unsafe context menus.
- Version bump, changelog/help overlay updates, and UI/localization tweaks.
Add German labels to compare select options and refine styles.
Group names and the current marker are localized for German.
Style tweaks adjust spacing, weights, and muted colors for better
readability and visual consistency.
- Localize option groups and current marker to German.
- Refine dialog typography, spacing, and muted color tokens.