Add embedded PTY terminal, keyboard shortcuts, and assignee/label integrations #53

Merged
Christoph merged 9 commits from UI-UX into main 2026-09-22 19:13:07 +00:00
3 changed files with 181 additions and 4 deletions
Showing only changes of commit 8bac03e3fc - Show all commits
+174
View File
@@ -4,6 +4,180 @@ All notable user-facing changes to Gitty are documented in this file.
The project uses calendar-style versions in the form `YYYY.M.PATCH`.
## [Unreleased]
### Added
- Ctrl/Cmd + 1 to 4 switch between Dashboard, Repositories, Pull Requests,
and Issues & Boards.
- Ctrl/Cmd + A selects every file in the focused status lane; Esc clears the
selection again.
- Issues can be assigned to people, and labels are managed directly from the
Issue Center.
### Changed
- The description field of the Create Issue dialog uses the full comment
editor instead of a plain text area.
- The help center no longer carries a "What's new" section. Release notes are
maintained in this file.
### Fixed
- Long file paths no longer displace the header controls of the file history
dialog.
## [2026.9.8] - 2026-09-18
### Added
- Submodule management: submodules are listed, initialized, updated, and
cloned recursively, including authentication and checkout of a specific
submodule revision.
- Worktrees and tags are available as collapsible panels in the left sidebar,
and a section menu toggles which panels are shown.
- Individual lines can be restored from a historical commit instead of
restoring the whole file.
- The branch panel supports filtering, remembers its view state, and groups
branches with their own accent color.
- Pull request merges offer a merge-method selection with provider-specific
payloads and can delete the source branch automatically.
- The Review Center filters by repository, and select menus show repository
details next to each option.
### Changed
- File history marks the entry that is identical to the working tree.
- Confirmation dialogs are centralized, translated, and can carry inputs,
checkboxes, and multi-selection actions.
- Left sidebar panels share one sizing and resize implementation, and global
scrollbar styles were consolidated.
- Status colors, overlay tints, and theme tokens for ink and accent moved to
CSS variables.
### Fixed
- The repository selector in the tab bar shows a pointer cursor.
## [2026.9.7] - 2026-09-11
### Added
- Pull request drafts can be generated with AI; all AI settings live on one
page.
- The commit history resolves visible parents, which keeps the graph correct
when commits are filtered.
### Changed
- Dialogs share unified header chrome.
- Provider icons were restyled and share one implementation.
### Fixed
- Switching to the Management view no longer opens a repository on its own.
## [2026.9.6] - 2026-09-11
### Added
- Workspaces group repositories into sessions that can be saved, switched,
and managed; their UI filters persist.
- Repository tabs can be reordered by drag and drop.
- Issues can be created from the app, including Azure DevOps work items with
state management.
- Gitea repositories are grouped in the Clone dialog like the other
providers.
### Changed
- Undoing the last commit uses a soft reset, so the changes stay staged.
- Behind segments in the commit graph use the lane color supplied by the
graph.
## [2026.9.5] - 2026-09-09
### Changed
- All main views share one page-header layout.
- The integration board view was refined, and assignees are displayed more
compactly.
## [2026.9.4] - 2026-09-08
### Added
- Boards and issues from multiple providers, including moving cards between
columns.
- Pull requests can be created from the app; the dialog loads the repository
branches and suggests the current local branch.
- Repository tabs became a workspace navigation bar.
- Pull request status is loaded separately and surfaced as badges.
### Changed
- The Review Center table and toolbar adapt to narrow windows.
## [2026.9.3] - 2026-09-08
### Added
- The dashboard offers a list and a card view, and remembers the choice.
- A notice shows the progress of a running merge.
### Changed
- The line patch dialog was redesigned.
- Sync colors are defined once as CSS variables.
## [2026.9.2] - 2026-09-07
### Added
- Guided Git bisect with a dedicated dialog for the commit range.
- The Review Center loads pull requests from the configured integrations,
with a detail panel, actions, and search.
- Conflicts from a pull request merge can be resolved locally; the merge
continues automatically and the provider is polled after the push.
- The dashboard shows pull request badges and links into the Review Center.
### Changed
- Repository management moved into its own dashboard component.
- Credentials use the Linux keyring.
## [2026.9.1] - 2026-09-01
### Added
- A dialog for initializing a repository.
- A Merge Branch dialog with a confirmation step.
- Advanced clone options: shallow, sparse, blobless, and custom flags.
## [2026.8.10] - 2026-08-31
### Changed
- The Clone dialog was redesigned and groups Azure DevOps repositories by
project.
- Tab and dialog close buttons were visually refined.
### Fixed
- The Clone dialog no longer breaks its layout or scrolling on small windows.
- The loading overlay accounts for the repository tab bar.
## [2026.8.9] - 2026-08-30
### Added
- Pulling histories without a common ancestor is possible as an explicit
opt-in.
### Changed
- The AI commit flow was simplified; local models are no longer supported.
## [2026.8.8] - 2026-08-29
### Added
+4 -4
View File
@@ -503,9 +503,9 @@
</div>
<div class="status-lane-actions">
{#if selectedUnstagedCount > 1}
<span class="status-selection-count">{selectedUnstagedCount} selected</span>
<span class="status-selection-count">{t("status.selectionCount", { count: selectedUnstagedCount })}</span>
<button class="btn-sm" type="button" onclick={() => onStage(changedFiles.filter((file) => selectedStatusPaths.has(fileKey(file)) && file.unstaged !== null))} disabled={isBusy} title={t("status.stageSelected", { count: selectedUnstagedCount })}>
<ArrowRight size={13} aria-hidden="true" /> Stage {selectedUnstagedCount}
<ArrowRight size={13} aria-hidden="true" /> {t("status.stageCount", { count: selectedUnstagedCount })}
</button>
{/if}
<button class="btn-sm" type="button" onclick={onStageAll} disabled={isBusy || !hasUnstaged} title={t("status.stageAllHint")}>
@@ -560,9 +560,9 @@
</div>
<div class="status-lane-actions">
{#if selectedStagedCount > 1}
<span class="status-selection-count">{selectedStagedCount} selected</span>
<span class="status-selection-count">{t("status.selectionCount", { count: selectedStagedCount })}</span>
<button class="btn-sm" type="button" onclick={() => onUnstage(changedFiles.filter((file) => selectedStatusPaths.has(fileKey(file)) && file.staged !== null))} disabled={isBusy} title={t("status.unstageSelected", { count: selectedStagedCount })}>
<ArrowLeft size={13} aria-hidden="true" /> Unstage {selectedStagedCount}
<ArrowLeft size={13} aria-hidden="true" /> {t("status.unstageCount", { count: selectedStagedCount })}
</button>
{/if}
<button class="btn-sm" type="button" onclick={onUnstageAll} disabled={isBusy || !hasStaged} title={t("status.unstageAllHint")}>
+3
View File
@@ -216,6 +216,9 @@ export const messages = {
"status.discardUnstagedSelected": { en: "Discard unstaged changes in {count} selected files", de: "Ungestagte Änderungen in {count} ausgewählten Dateien verwerfen" },
"status.discardStagedSelected": { en: "Discard staged changes in {count} selected files", de: "Gestagte Änderungen in {count} ausgewählten Dateien verwerfen" },
"status.discard": { en: "Discard", de: "Verwerfen" },
"status.selectionCount": { en: "{count} selected", de: "{count} ausgewählt" },
"status.stageCount": { en: "Stage {count}", de: "{count} stagen" },
"status.unstageCount": { en: "Unstage {count}", de: "{count} entstagen" },
"status.selectInExplorer": { en: "Select {path} in Explorer", de: "{path} im Explorer auswählen" },
"status.stageFile": { en: "Stage file", de: "Datei stagen" },
"status.unstageFile": { en: "Unstage file", de: "Datei entstagen" },