feat(git): add upstream tracking and local-only branch UI

This release adds upstream tracking for branches and a local-only
indicator in the UI.
The Git integration now exposes upstreams and supports publish flows.
This enables publishing and remote-tracking configuration.

- Introduces upstream tracking and local-only branch UI markers
- Updates toolbar to reflect publish-local state and status indicators
- Bumps version to 2026.8.3 and updates changelog
This commit is contained in:
Christoph Brandau
2026-08-13 19:32:26 +02:00
parent f43fe00873
commit b6b9964a93
11 changed files with 420 additions and 45 deletions
+111 -1
View File
@@ -736,6 +736,29 @@
}
.repo-action-count.behind { color: #7aacff; }
.repo-action-count.ahead { color: #e0a040; }
.repo-action.sync-primary.publish-local {
color: #f0bd6b;
background: linear-gradient(180deg, rgba(224,160,64,.1), rgba(224,160,64,.045));
}
.repo-action.sync-primary.publish-local:hover:not(:disabled) {
color: #ffd48c;
background: rgba(224,160,64,.14);
}
.repo-action-local-marker {
display: inline-flex;
align-items: center;
gap: 3px;
height: 16px;
padding: 0 4px;
border: 1px dashed rgba(240,189,107,.5);
border-radius: 4px;
color: #f0bd6b;
background: rgba(224,160,64,.08);
font-family: var(--font-mono);
font-size: 7.5px;
font-weight: 900;
letter-spacing: .04em;
}
.repo-toolbar-divider {
width: 1px;
height: 30px;
@@ -1670,6 +1693,27 @@
.sync-stats strong:first-of-type { color: #e0a040; background: rgba(224,160,64,0.13); }
.sync-stats strong:last-of-type { color: #7aacff; background: rgba(122,172,255,0.13); }
.sync-stats span { color: var(--color-ink-dim); background: rgba(94,110,156,0.13); }
.sync-stats .sync-local-only {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 3px 7px;
border: 1px dashed rgba(224,160,64,.38);
color: #f0bd6b;
background: rgba(224,160,64,.09);
}
.sync-stats .sync-local-only strong {
padding: 0;
color: #f0bd6b;
background: transparent;
font-size: 10.5px;
font-weight: 850;
}
.sync-stats .sync-local-only small {
color: var(--color-ink-faint);
font-size: 9px;
font-weight: 650;
}
.top-section {
display: grid;
@@ -2513,6 +2557,12 @@
min-width: 0;
min-height: 20px;
}
.branch-ref-cluster {
display: inline-flex;
align-items: center;
min-width: 0;
margin-left: -10px;
}
.compact-ref-chip {
display: inline-flex;
align-items: center;
@@ -2536,7 +2586,7 @@
flex: 0 1 auto;
max-width: 22px;
height: 20px;
margin-left: -10px;
margin-left: 0;
padding: 0 5px;
border-color: color-mix(in srgb, var(--ref-lane-color, #69a7ff) 34%, transparent);
border-left-width: 2px;
@@ -2552,6 +2602,29 @@
background 140ms ease,
box-shadow 140ms ease;
}
.branch-ref-cluster.local-only .compact-ref-chip.branch {
border-radius: 0 !important;
}
.compact-ref-local-marker {
display: inline-flex;
flex: 0 0 auto;
align-items: center;
gap: 3px;
height: 20px;
margin-left: -1px;
padding: 0 5px 0 4px;
border: 1px dashed rgba(240,189,107,.58);
border-left-style: solid;
border-radius: 0 5px 5px 0;
color: #f0bd6b;
background: linear-gradient(90deg, rgba(224,160,64,.13), rgba(224,160,64,.06));
font-family: var(--font-mono);
font-size: 7.5px;
font-weight: 900;
letter-spacing: .05em;
line-height: 1;
box-shadow: inset 1px 0 0 rgba(240,189,107,.2);
}
.compact-ref-branch-icon {
flex: 0 0 auto;
color: var(--ref-lane-color, #69a7ff);
@@ -2713,6 +2786,12 @@
font-size: 8px;
font-weight: 800;
}
.commit-ref-detail-item small.local-only {
display: inline-flex;
align-items: center;
gap: 3px;
color: #d99532;
}
.commit-files {
display: grid;
@@ -5905,6 +5984,17 @@ input:focus, textarea:focus, select:focus { box-shadow: 0 0 0 3px color-mix(in s
.workspace-health.clean > span { background: #2da44e; }
.workspace-statusbar .ahead { color: #d9891b; }
.workspace-statusbar .behind { color: var(--color-primary); }
.workspace-statusbar .workspace-local-only {
padding: 2px 6px;
border: 1px dashed rgba(224,160,64,.42);
border-radius: 4px;
color: #f0bd6b;
background: rgba(224,160,64,.08);
font-family: var(--font-mono);
font-size: 9px;
font-weight: 850;
letter-spacing: .02em;
}
.workspace-auto i { width: 7px; height: 7px; border-radius: 50%; background: var(--color-ink-faint); }
.workspace-auto.active i { background: #2da44e; }
.app-version {
@@ -6140,6 +6230,13 @@ input:focus, textarea:focus, select:focus { box-shadow: 0 0 0 3px color-mix(in s
linear-gradient(90deg, color-mix(in srgb, var(--ref-lane-color, #315fd6) 14%, #f7faff), #f7faff);
}
:root[data-theme="light"] .compact-ref-local-marker {
border-color: rgba(154,82,0,.46);
color: #8b5207;
background: linear-gradient(90deg, rgba(217,137,27,.14), rgba(217,137,27,.06));
box-shadow: inset 1px 0 0 rgba(154,82,0,.14);
}
:root[data-theme="light"] .compact-ref-chip.current {
border-color: color-mix(in srgb, var(--ref-lane-color, #315fd6) 58%, rgba(49,95,214,.2));
color: #18345f;
@@ -6709,6 +6806,19 @@ input:focus, textarea:focus, select:focus { box-shadow: 0 0 0 3px color-mix(in s
color: #0755c8;
font-weight: 800;
}
:root[data-theme="light"] .repo-action.sync-primary.publish-local,
:root[data-theme="light"] .repo-action-local-marker,
:root[data-theme="light"] .workspace-statusbar .workspace-local-only {
color: #8b5207;
border-color: rgba(154,82,0,.4);
background: rgba(217,137,27,.09);
}
:root[data-theme="light"] .sync-stats .sync-local-only {
border-color: rgba(154,82,0,.36);
color: #8b5207;
background: rgba(217,137,27,.09);
}
:root[data-theme="light"] .sync-stats .sync-local-only strong { color: #8b5207; }
/* AI pre-commit review --------------------------------------------------- */
.commit-review-button {