fix: harden provider gateway upgrades

This commit is contained in:
Codex
2026-05-06 00:24:17 +00:00
parent af42002f02
commit 2dc46ce056
16 changed files with 1059 additions and 228 deletions
+117 -5
View File
@@ -398,9 +398,9 @@ h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.08em; }
font-size: 11px;
}
.status-badge.online, .status-badge.succeeded, .status-badge.public { color: var(--ok); border-color: rgba(113, 191, 120, 0.45); }
.status-badge.offline, .status-badge.failed { color: var(--danger); border-color: rgba(207, 106, 84, 0.45); }
.status-badge.offline, .status-badge.failed, .status-badge.canceled { color: var(--danger); border-color: rgba(207, 106, 84, 0.45); }
.status-badge.running, .status-badge.dispatched, .status-badge.accepted, .status-badge.internal { color: var(--accent-2); border-color: rgba(78, 183, 168, 0.45); }
.status-badge.queued, .status-badge.warn { color: var(--warn); border-color: rgba(215, 161, 58, 0.45); }
.status-badge.queued, .status-badge.staged, .status-badge.warn { color: var(--warn); border-color: rgba(215, 161, 58, 0.45); }
.status-badge.private, .status-badge.p1, .status-badge.prioritized, .status-badge.verified { color: var(--accent-2); border-color: rgba(78, 183, 168, 0.45); }
.status-badge.stale, .status-badge.invalid, .status-badge.abandoned { color: var(--warn); border-color: rgba(215, 161, 58, 0.45); }
@@ -725,6 +725,17 @@ h2 { font-size: 14px; text-transform: uppercase; letter-spacing: 0.08em; }
color: var(--muted);
}
.upgrade-target-line {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
padding: 6px 7px;
border: 1px solid var(--line-soft);
background: rgba(78, 183, 168, 0.07);
color: var(--muted);
}
.upgrade-actions {
display: flex;
gap: 6px;
@@ -1037,6 +1048,101 @@ input:focus, select:focus, textarea:focus { border-color: var(--accent-2); }
background: linear-gradient(90deg, var(--accent-2), var(--accent));
}
.met-job-table { max-height: 460px; overflow: auto; }
.met-queue-summary {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
margin: 0 0 8px;
color: var(--muted);
font-size: 12px;
}
.met-queue-summary > span:not(.status-badge) {
padding: 4px 8px;
border: 1px solid var(--line-soft);
background: var(--panel-3);
}
.met-action-log {
margin-top: 8px;
padding: 7px 9px;
border: 1px solid var(--line-soft);
background: rgba(78, 183, 168, 0.08);
color: var(--accent-2);
font-size: 12px;
}
.met-control-strip, .met-tabs {
display: flex;
flex-wrap: wrap;
gap: 6px;
align-items: center;
}
.met-control-strip label, .met-fork-card label {
display: grid;
gap: 4px;
color: var(--muted);
font-size: 11px;
letter-spacing: 0.04em;
}
.met-control-strip input, .met-fork-card input, .met-fork-card select {
min-height: 28px;
padding: 4px 8px;
}
.met-control-strip input { width: 130px; }
.met-tabs {
padding: 8px;
border-bottom: 1px solid var(--line-soft);
}
.met-tabs button {
min-height: 28px;
padding: 4px 10px;
border: 1px solid var(--line-soft);
background: var(--panel-3);
color: var(--text);
}
.met-tabs button.active {
border-color: var(--accent);
background: rgba(215, 161, 58, 0.14);
}
.met-workspace { grid-column: 1 / -1; }
.met-form-grid {
display: grid;
grid-template-columns: minmax(280px, 340px) minmax(560px, 1fr);
gap: 10px;
align-items: start;
}
.met-fork-card {
display: grid;
gap: 8px;
padding: 10px;
border: 1px solid var(--line-soft);
background: var(--panel-3);
}
.met-fork-card h3 {
margin: 0 0 2px;
font-size: 13px;
}
.met-project-list {
min-width: 0;
border: 1px solid var(--line-soft);
}
.met-project-table { max-height: 520px; overflow: auto; }
.ghost-btn.mini {
min-height: 22px;
padding: 2px 6px;
font-size: 11px;
}
.pipeline-toolbar {
display: flex;
flex-wrap: wrap;
gap: 6px;
justify-content: flex-end;
align-items: center;
}
.pipeline-toolbar select {
width: min(280px, 42vw);
min-height: 28px;
padding: 4px 8px;
}
.pipeline-flow-frame {
height: min(68vh, 720px);
min-height: 520px;
@@ -1062,10 +1168,10 @@ input:focus, select:focus, textarea:focus { border-color: var(--accent-2); }
background: rgba(8, 13, 18, 0.88);
}
.pipeline-flow-frame .react-flow__edges {
z-index: 5;
z-index: 30 !important;
}
.pipeline-flow-frame .react-flow__nodes {
z-index: 4;
z-index: 20 !important;
}
.pipeline-flow-frame .react-flow__edge-path {
stroke: rgba(129, 147, 159, 0.72);
@@ -1076,7 +1182,7 @@ input:focus, select:focus, textarea:focus { border-color: var(--accent-2); }
}
.pipeline-flow-frame .react-flow__edge {
opacity: 0.82;
z-index: 12;
z-index: 30 !important;
}
.pipeline-flow-frame .react-flow__edge:hover,
.pipeline-flow-frame .react-flow__edge.selected {
@@ -1089,6 +1195,12 @@ input:focus, select:focus, textarea:focus { border-color: var(--accent-2); }
.pipeline-flow-frame .react-flow__edge.succeeded .react-flow__edge-path { stroke: var(--accent-2); }
.pipeline-flow-frame .react-flow__edge.running .react-flow__edge-path { stroke: var(--accent); }
.pipeline-flow-frame .react-flow__edge.failed .react-flow__edge-path { stroke: var(--danger); }
.pipeline-flow-frame .react-flow__edge.feedback .react-flow__edge-path {
stroke-dasharray: 9 7;
}
.pipeline-flow-frame .react-flow__edge.overlap-colored .react-flow__edge-path {
filter: drop-shadow(0 0 6px rgba(215, 161, 58, 0.16));
}
.pipeline-flow-frame .pipeline-flow-handle {
width: 9px;
height: 18px;