Adds a built-in terminal dock that runs a real pseudo-terminal per repository tab.
- Backend: new src-tauri/src/terminal.rs implements TerminalState and Tauri commands
terminal_open, terminal_write, terminal_resize and terminal_close using the
portable-pty crate. Terminal output is emitted via "terminal:data" and exits
via "terminal:exit". Includes unit tests for UTF-8 chunk handling. Cargo.toml
updated to depend on portable-pty and main.rs registers the state/commands.
- Frontend: App.svelte/UI and app.css updated to show a resizable terminal dock,
toggleable with Ctrl+` and persisted open/height state. TerminalPanel.svelte is
lazy-loaded per repo tab (frontend provides session ids like repo:<path>).
package.json adds @xterm/xterm and @xterm/addon-fit for the frontend terminal
surface.
- Docs: CHANGELOG.md notes the new embedded terminal feature.
Behavior: each repository tab has its own PTY-backed shell started in the repo
cwd; the user's shell (SHELL/COMSPEC) is used so prompts, aliases and interactive
behavior work as in a normal terminal.
Replace hard-coded "X selected" and "Stage/Unstage X" labels in the status panel
with i18n lookups. Adds three message keys with English and German texts:
- status.selectionCount
- status.stageCount
- status.unstageCount
StatusPanel.svelte now uses t(...) with the count for the selection badge and the
stage/unstage action buttons. CHANGELOG.md was also updated (Unreleased and
recent release entries).
Remove the large static "changelog" entries previously spliced into enCategories and deCategories in HelpOverlay.svelte, and drop the now-unused Sparkles import from @lucide/svelte.
Before: the help overlay injected a multi-version "What's new / Neu in Gitty" category with many release notes.
After: that category and its content are no longer added, and the unused icon import is removed (reduces clutter/unused code).
Add keyboard shortcuts (Ctrl/Cmd + 1–4) to jump to the four main views:
Dashboard, Repositories, Pull Requests and Issues & Boards.
- Handler runs in the capture phase so editors/dialogs can still trap keys.
- Switching is blocked when the app is busy or any modal/overlay is open; repeats
and combinations with Alt/Shift are ignored.
- When switching to the repository view the shortcut selects an existing repo
tab (it will not open a native file dialog if no repo is available).
Also update tab button titles to surface the shortcuts and add entries to the
help overlay (English and German).
Make status lanes keyboard-manageable and add select-all / clear-selection shortcuts.
- Implement Ctrl/Cmd+A to select every file in the focused status lane (unstaged or staged),
setting the selection set and anchor. The handler ignores events from inputs/contenteditable
and respects modifier keys.
- Make Escape back out one step: close an open status context menu first; if none, clear the
current multi-selection. Escape does not call preventDefault so overlays/dialogs can still close.
- Allow clicking a lane to receive focus (tabindex="-1" + pointerdown handler) and add a focused
visual treatment in CSS. Add a title/hint and update the help center text and i18n messages.
Constrain the dialog header/body layout so very long file paths don't push
or wrap the dialog controls. Results: the title is truncated with an
ellipsis but the full name is available on hover.
- CSS: add grid-template-columns and min-width:0 to dialog/body; force
unified-dialog-header to avoid wrapping and set unified-dialog-text
flex-basis:0; truncate h2 with overflow/ellipsis.
- Svelte: add a title attribute to the h2 so the full filename is shown
on hover.
Add a new labels integration (src-tauri/src/integrations/labels.rs) that implements listing,
reading and updating issue labels for multiple providers (GitHub, Gitea, GitLab and Azure
DevOps). The new module provides Tauri commands:
- list_integration_labels
- get_integration_issue_labels
- set_integration_issue_labels
Refactor assignees integration to make core HTTP helpers reusable:
- Rename AssignmentApi -> IntegrationApi and make its fields/methods pub(super).
- Make helper functions api_url, repository_parts and target_url pub(super) so labels.rs
can construct and call provider endpoints.
- Adjust wording of a few error messages (e.g. "Assignment request..." -> "Integration request...")
and genericize some page/result error text.
Export the new labels module from integrations.rs and relax test helper visibility
(pub(crate)) so the labels tests can reuse the existing fixture utilities.
This commit introduces provider-specific parsing and payload logic for labels and
reuses the shared IntegrationApi to perform authenticated requests.
Add a new integrations/assignees backend (src-tauri/src/integrations/assignees.rs)
and expose commands to list, read and set assignees:
- list_integration_assignees
- get_integration_assignees
- set_integration_assignees
Introduce IntegrationAssignee and AssignmentTarget types and provider-specific
URL/payload logic (GitHub, Gitea, GitLab / self-hosted, Azure DevOps). The code
handles pagination, provider quirks (Gitea legacy fields, GitLab assignee_ids,
Azure reviewer vs work-item differences) and validates/verifies assignments.
Unit tests cover routing and payload behavior.
Add UI components AssigneePicker.svelte and AssignmentEditor.svelte and update
CreateIssueDialog, CreateReviewDialog, IssueCenter, ReviewCenter, git types and
git.ts to use the new assignment functionality.
Replace the simple <textarea> with the CommentEditor component (imported at
top) and bind description to it. Pass locale-aware props (language,
ariaLabel, previewLabel, placeholder) and keep disabled/rows bindings so the
dialog behavior is unchanged.
Also adjust styles to remove textarea-specific rules (resize/line-height and
focus handling) and update the selector sets to reflect the component change.