opencastle 0.27.0 → 0.27.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.mjs +6 -0
- package/dist/cli/agents.d.ts +3 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +161 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/baselines.d.ts +3 -0
- package/dist/cli/baselines.d.ts.map +1 -0
- package/dist/cli/baselines.js +128 -0
- package/dist/cli/baselines.js.map +1 -0
- package/dist/cli/convoy/dashboard-types.d.ts +146 -0
- package/dist/cli/convoy/dashboard-types.d.ts.map +1 -0
- package/dist/cli/convoy/dashboard-types.js +2 -0
- package/dist/cli/convoy/dashboard-types.js.map +1 -0
- package/dist/cli/convoy/engine.d.ts +67 -2
- package/dist/cli/convoy/engine.d.ts.map +1 -1
- package/dist/cli/convoy/engine.js +2036 -28
- package/dist/cli/convoy/engine.js.map +1 -1
- package/dist/cli/convoy/engine.test.js +1659 -70
- package/dist/cli/convoy/engine.test.js.map +1 -1
- package/dist/cli/convoy/event-schemas.d.ts +9 -0
- package/dist/cli/convoy/event-schemas.d.ts.map +1 -0
- package/dist/cli/convoy/event-schemas.js +185 -0
- package/dist/cli/convoy/event-schemas.js.map +1 -0
- package/dist/cli/convoy/events.d.ts +12 -1
- package/dist/cli/convoy/events.d.ts.map +1 -1
- package/dist/cli/convoy/events.js +186 -13
- package/dist/cli/convoy/events.js.map +1 -1
- package/dist/cli/convoy/events.test.js +325 -28
- package/dist/cli/convoy/events.test.js.map +1 -1
- package/dist/cli/convoy/expertise.d.ts +16 -0
- package/dist/cli/convoy/expertise.d.ts.map +1 -0
- package/dist/cli/convoy/expertise.js +121 -0
- package/dist/cli/convoy/expertise.js.map +1 -0
- package/dist/cli/convoy/expertise.test.d.ts +2 -0
- package/dist/cli/convoy/expertise.test.d.ts.map +1 -0
- package/dist/cli/convoy/expertise.test.js +96 -0
- package/dist/cli/convoy/expertise.test.js.map +1 -0
- package/dist/cli/convoy/export.test.js +1 -0
- package/dist/cli/convoy/export.test.js.map +1 -1
- package/dist/cli/convoy/formula.d.ts +19 -0
- package/dist/cli/convoy/formula.d.ts.map +1 -0
- package/dist/cli/convoy/formula.js +142 -0
- package/dist/cli/convoy/formula.js.map +1 -0
- package/dist/cli/convoy/formula.test.d.ts +2 -0
- package/dist/cli/convoy/formula.test.d.ts.map +1 -0
- package/dist/cli/convoy/formula.test.js +342 -0
- package/dist/cli/convoy/formula.test.js.map +1 -0
- package/dist/cli/convoy/gates.d.ts +128 -0
- package/dist/cli/convoy/gates.d.ts.map +1 -0
- package/dist/cli/convoy/gates.js +606 -0
- package/dist/cli/convoy/gates.js.map +1 -0
- package/dist/cli/convoy/gates.test.d.ts +2 -0
- package/dist/cli/convoy/gates.test.d.ts.map +1 -0
- package/dist/cli/convoy/gates.test.js +976 -0
- package/dist/cli/convoy/gates.test.js.map +1 -0
- package/dist/cli/convoy/health.d.ts +11 -0
- package/dist/cli/convoy/health.d.ts.map +1 -1
- package/dist/cli/convoy/health.js +54 -0
- package/dist/cli/convoy/health.js.map +1 -1
- package/dist/cli/convoy/health.test.js +56 -1
- package/dist/cli/convoy/health.test.js.map +1 -1
- package/dist/cli/convoy/issues.d.ts +8 -0
- package/dist/cli/convoy/issues.d.ts.map +1 -0
- package/dist/cli/convoy/issues.js +98 -0
- package/dist/cli/convoy/issues.js.map +1 -0
- package/dist/cli/convoy/issues.test.d.ts +2 -0
- package/dist/cli/convoy/issues.test.d.ts.map +1 -0
- package/dist/cli/convoy/issues.test.js +107 -0
- package/dist/cli/convoy/issues.test.js.map +1 -0
- package/dist/cli/convoy/knowledge.d.ts +5 -0
- package/dist/cli/convoy/knowledge.d.ts.map +1 -0
- package/dist/cli/convoy/knowledge.js +116 -0
- package/dist/cli/convoy/knowledge.js.map +1 -0
- package/dist/cli/convoy/knowledge.test.d.ts +2 -0
- package/dist/cli/convoy/knowledge.test.d.ts.map +1 -0
- package/dist/cli/convoy/knowledge.test.js +87 -0
- package/dist/cli/convoy/knowledge.test.js.map +1 -0
- package/dist/cli/convoy/lessons.d.ts +17 -0
- package/dist/cli/convoy/lessons.d.ts.map +1 -0
- package/dist/cli/convoy/lessons.js +149 -0
- package/dist/cli/convoy/lessons.js.map +1 -0
- package/dist/cli/convoy/lessons.test.d.ts +2 -0
- package/dist/cli/convoy/lessons.test.d.ts.map +1 -0
- package/dist/cli/convoy/lessons.test.js +135 -0
- package/dist/cli/convoy/lessons.test.js.map +1 -0
- package/dist/cli/convoy/lock.d.ts +13 -0
- package/dist/cli/convoy/lock.d.ts.map +1 -0
- package/dist/cli/convoy/lock.js +88 -0
- package/dist/cli/convoy/lock.js.map +1 -0
- package/dist/cli/convoy/lock.test.d.ts +2 -0
- package/dist/cli/convoy/lock.test.d.ts.map +1 -0
- package/dist/cli/convoy/lock.test.js +136 -0
- package/dist/cli/convoy/lock.test.js.map +1 -0
- package/dist/cli/convoy/log-merge.test.d.ts +2 -0
- package/dist/cli/convoy/log-merge.test.d.ts.map +1 -0
- package/dist/cli/convoy/log-merge.test.js +147 -0
- package/dist/cli/convoy/log-merge.test.js.map +1 -0
- package/dist/cli/convoy/merge.d.ts +4 -0
- package/dist/cli/convoy/merge.d.ts.map +1 -1
- package/dist/cli/convoy/merge.js +18 -1
- package/dist/cli/convoy/merge.js.map +1 -1
- package/dist/cli/convoy/merge.test.js +6 -7
- package/dist/cli/convoy/merge.test.js.map +1 -1
- package/dist/cli/convoy/partition.d.ts +51 -0
- package/dist/cli/convoy/partition.d.ts.map +1 -0
- package/dist/cli/convoy/partition.js +186 -0
- package/dist/cli/convoy/partition.js.map +1 -0
- package/dist/cli/convoy/partition.test.d.ts +2 -0
- package/dist/cli/convoy/partition.test.d.ts.map +1 -0
- package/dist/cli/convoy/partition.test.js +315 -0
- package/dist/cli/convoy/partition.test.js.map +1 -0
- package/dist/cli/convoy/pipeline.test.js +6 -0
- package/dist/cli/convoy/pipeline.test.js.map +1 -1
- package/dist/cli/convoy/store.d.ts +99 -7
- package/dist/cli/convoy/store.d.ts.map +1 -1
- package/dist/cli/convoy/store.js +764 -31
- package/dist/cli/convoy/store.js.map +1 -1
- package/dist/cli/convoy/store.test.js +1810 -18
- package/dist/cli/convoy/store.test.js.map +1 -1
- package/dist/cli/convoy/types.d.ts +427 -5
- package/dist/cli/convoy/types.d.ts.map +1 -1
- package/dist/cli/convoy/types.js +42 -1
- package/dist/cli/convoy/types.js.map +1 -1
- package/dist/cli/log.d.ts +11 -0
- package/dist/cli/log.d.ts.map +1 -1
- package/dist/cli/log.js +114 -2
- package/dist/cli/log.js.map +1 -1
- package/dist/cli/run/adapters/claude.d.ts +2 -0
- package/dist/cli/run/adapters/claude.d.ts.map +1 -1
- package/dist/cli/run/adapters/claude.js +89 -49
- package/dist/cli/run/adapters/claude.js.map +1 -1
- package/dist/cli/run/adapters/claude.test.d.ts +2 -0
- package/dist/cli/run/adapters/claude.test.d.ts.map +1 -0
- package/dist/cli/run/adapters/claude.test.js +205 -0
- package/dist/cli/run/adapters/claude.test.js.map +1 -0
- package/dist/cli/run/adapters/copilot.d.ts +1 -0
- package/dist/cli/run/adapters/copilot.d.ts.map +1 -1
- package/dist/cli/run/adapters/copilot.js +84 -46
- package/dist/cli/run/adapters/copilot.js.map +1 -1
- package/dist/cli/run/adapters/copilot.test.d.ts +2 -0
- package/dist/cli/run/adapters/copilot.test.d.ts.map +1 -0
- package/dist/cli/run/adapters/copilot.test.js +195 -0
- package/dist/cli/run/adapters/copilot.test.js.map +1 -0
- package/dist/cli/run/adapters/cursor.d.ts +1 -0
- package/dist/cli/run/adapters/cursor.d.ts.map +1 -1
- package/dist/cli/run/adapters/cursor.js +83 -47
- package/dist/cli/run/adapters/cursor.js.map +1 -1
- package/dist/cli/run/adapters/cursor.test.d.ts +2 -0
- package/dist/cli/run/adapters/cursor.test.d.ts.map +1 -0
- package/dist/cli/run/adapters/cursor.test.js +129 -0
- package/dist/cli/run/adapters/cursor.test.js.map +1 -0
- package/dist/cli/run/adapters/opencode.d.ts +1 -0
- package/dist/cli/run/adapters/opencode.d.ts.map +1 -1
- package/dist/cli/run/adapters/opencode.js +81 -47
- package/dist/cli/run/adapters/opencode.js.map +1 -1
- package/dist/cli/run/adapters/opencode.test.d.ts +2 -0
- package/dist/cli/run/adapters/opencode.test.d.ts.map +1 -0
- package/dist/cli/run/adapters/opencode.test.js +119 -0
- package/dist/cli/run/adapters/opencode.test.js.map +1 -0
- package/dist/cli/run/executor.js +1 -1
- package/dist/cli/run/executor.js.map +1 -1
- package/dist/cli/run/schema.d.ts.map +1 -1
- package/dist/cli/run/schema.js +245 -4
- package/dist/cli/run/schema.js.map +1 -1
- package/dist/cli/run/schema.test.js +669 -0
- package/dist/cli/run/schema.test.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +362 -22
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/types.d.ts +85 -2
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/cli/types.js.map +1 -1
- package/dist/cli/watch.d.ts +15 -0
- package/dist/cli/watch.d.ts.map +1 -0
- package/dist/cli/watch.js +279 -0
- package/dist/cli/watch.js.map +1 -0
- package/package.json +5 -1
- package/src/cli/agents.ts +177 -0
- package/src/cli/baselines.ts +143 -0
- package/src/cli/convoy/TELEMETRY.md +203 -0
- package/src/cli/convoy/dashboard-types.ts +141 -0
- package/src/cli/convoy/engine.test.ts +1937 -70
- package/src/cli/convoy/engine.ts +2350 -40
- package/src/cli/convoy/event-schemas.ts +195 -0
- package/src/cli/convoy/events.test.ts +384 -39
- package/src/cli/convoy/events.ts +202 -16
- package/src/cli/convoy/expertise.test.ts +128 -0
- package/src/cli/convoy/expertise.ts +163 -0
- package/src/cli/convoy/export.test.ts +1 -0
- package/src/cli/convoy/formula.test.ts +405 -0
- package/src/cli/convoy/formula.ts +174 -0
- package/src/cli/convoy/gates.test.ts +1169 -0
- package/src/cli/convoy/gates.ts +774 -0
- package/src/cli/convoy/health.test.ts +64 -2
- package/src/cli/convoy/health.ts +80 -2
- package/src/cli/convoy/issues.test.ts +143 -0
- package/src/cli/convoy/issues.ts +136 -0
- package/src/cli/convoy/knowledge.test.ts +101 -0
- package/src/cli/convoy/knowledge.ts +132 -0
- package/src/cli/convoy/lessons.test.ts +188 -0
- package/src/cli/convoy/lessons.ts +164 -0
- package/src/cli/convoy/lock.test.ts +181 -0
- package/src/cli/convoy/lock.ts +103 -0
- package/src/cli/convoy/log-merge.test.ts +179 -0
- package/src/cli/convoy/merge.test.ts +6 -7
- package/src/cli/convoy/merge.ts +19 -1
- package/src/cli/convoy/partition.test.ts +423 -0
- package/src/cli/convoy/partition.ts +232 -0
- package/src/cli/convoy/pipeline.test.ts +6 -0
- package/src/cli/convoy/store.test.ts +2041 -20
- package/src/cli/convoy/store.ts +945 -46
- package/src/cli/convoy/types.ts +278 -4
- package/src/cli/log.ts +120 -2
- package/src/cli/run/adapters/claude.test.ts +234 -0
- package/src/cli/run/adapters/claude.ts +45 -5
- package/src/cli/run/adapters/copilot.test.ts +224 -0
- package/src/cli/run/adapters/copilot.ts +34 -4
- package/src/cli/run/adapters/cursor.test.ts +144 -0
- package/src/cli/run/adapters/cursor.ts +33 -2
- package/src/cli/run/adapters/opencode.test.ts +135 -0
- package/src/cli/run/adapters/opencode.ts +30 -2
- package/src/cli/run/executor.ts +1 -1
- package/src/cli/run/schema.test.ts +758 -0
- package/src/cli/run/schema.ts +300 -25
- package/src/cli/run.ts +341 -21
- package/src/cli/types.ts +86 -1
- package/src/cli/watch.ts +298 -0
- package/src/dashboard/dist/_astro/{index.DtnyD8a5.css → index.6L3_HsPT.css} +1 -1
- package/src/dashboard/dist/data/.gitkeep +0 -0
- package/src/dashboard/dist/data/convoy-list.json +1 -0
- package/src/dashboard/dist/data/overall-stats.json +24 -0
- package/src/dashboard/dist/index.html +701 -3
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/dashboard/public/data/.gitkeep +0 -0
- package/src/dashboard/public/data/convoy-list.json +1 -0
- package/src/dashboard/public/data/overall-stats.json +24 -0
- package/src/dashboard/scripts/etl.test.ts +210 -0
- package/src/dashboard/scripts/etl.ts +108 -0
- package/src/dashboard/scripts/integration-test.ts +504 -0
- package/src/dashboard/src/pages/index.astro +854 -15
- package/src/dashboard/src/styles/dashboard.css +557 -1
- package/src/orchestrator/prompts/generate-convoy.prompt.md +212 -13
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
--text-primary: #f0f0f5;
|
|
16
16
|
--text-secondary: #8a8a9a;
|
|
17
|
-
--text-tertiary: #
|
|
17
|
+
--text-tertiary: #7a7a8e;
|
|
18
18
|
--text-accent: #a78bfa;
|
|
19
19
|
|
|
20
20
|
--gradient-accent: linear-gradient(135deg, #a78bfa 0%, #6366f1 50%, #3b82f6 100%);
|
|
@@ -1713,3 +1713,559 @@ body {
|
|
|
1713
1713
|
min-width: 120px;
|
|
1714
1714
|
}
|
|
1715
1715
|
}
|
|
1716
|
+
|
|
1717
|
+
/* ── Convoy Selector ── */
|
|
1718
|
+
.convoy-selector {
|
|
1719
|
+
display: flex;
|
|
1720
|
+
align-items: center;
|
|
1721
|
+
gap: 0.5rem;
|
|
1722
|
+
}
|
|
1723
|
+
.convoy-selector__label {
|
|
1724
|
+
font-size: 0.75rem;
|
|
1725
|
+
text-transform: uppercase;
|
|
1726
|
+
letter-spacing: 0.05em;
|
|
1727
|
+
color: var(--text-secondary);
|
|
1728
|
+
}
|
|
1729
|
+
.convoy-selector__select {
|
|
1730
|
+
appearance: none;
|
|
1731
|
+
background: var(--bg-tertiary);
|
|
1732
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
1733
|
+
border-radius: 6px;
|
|
1734
|
+
color: var(--text-primary);
|
|
1735
|
+
font-size: 0.8125rem;
|
|
1736
|
+
padding: 0.375rem 2rem 0.375rem 0.75rem;
|
|
1737
|
+
cursor: pointer;
|
|
1738
|
+
max-width: 320px;
|
|
1739
|
+
background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238a8a9a' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
|
|
1740
|
+
background-repeat: no-repeat;
|
|
1741
|
+
background-position: right 0.75rem center;
|
|
1742
|
+
transition: border-color 0.15s;
|
|
1743
|
+
}
|
|
1744
|
+
.convoy-selector__select:hover {
|
|
1745
|
+
border-color: rgba(255, 255, 255, 0.15);
|
|
1746
|
+
}
|
|
1747
|
+
.convoy-selector__select:focus {
|
|
1748
|
+
outline: 2px solid var(--accent-purple);
|
|
1749
|
+
outline-offset: 2px;
|
|
1750
|
+
}
|
|
1751
|
+
|
|
1752
|
+
/* ── Overall Stats Section ── */
|
|
1753
|
+
.overall-stats {
|
|
1754
|
+
margin-bottom: 0;
|
|
1755
|
+
padding: 1.25rem;
|
|
1756
|
+
background: var(--bg-secondary);
|
|
1757
|
+
border-radius: 12px;
|
|
1758
|
+
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
1759
|
+
}
|
|
1760
|
+
.overall-stats__header {
|
|
1761
|
+
display: flex;
|
|
1762
|
+
align-items: center;
|
|
1763
|
+
gap: 0.5rem;
|
|
1764
|
+
margin-bottom: 1rem;
|
|
1765
|
+
}
|
|
1766
|
+
.overall-stats__title {
|
|
1767
|
+
font-size: 1rem;
|
|
1768
|
+
font-weight: 600;
|
|
1769
|
+
color: var(--text-primary);
|
|
1770
|
+
margin: 0;
|
|
1771
|
+
}
|
|
1772
|
+
.overall-stats__grid {
|
|
1773
|
+
display: grid;
|
|
1774
|
+
grid-template-columns: repeat(6, 1fr);
|
|
1775
|
+
gap: 0.75rem;
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
/* ── Overall KPI Card ── */
|
|
1779
|
+
.overall-kpi {
|
|
1780
|
+
display: flex;
|
|
1781
|
+
flex-direction: column;
|
|
1782
|
+
gap: 0.25rem;
|
|
1783
|
+
padding: 0.75rem;
|
|
1784
|
+
background: var(--bg-tertiary);
|
|
1785
|
+
border-radius: 8px;
|
|
1786
|
+
border: 1px solid rgba(255, 255, 255, 0.04);
|
|
1787
|
+
transition: border-color 0.15s;
|
|
1788
|
+
}
|
|
1789
|
+
.overall-kpi:hover {
|
|
1790
|
+
border-color: rgba(255, 255, 255, 0.1);
|
|
1791
|
+
}
|
|
1792
|
+
.overall-kpi__label {
|
|
1793
|
+
font-size: 0.6875rem;
|
|
1794
|
+
text-transform: uppercase;
|
|
1795
|
+
letter-spacing: 0.05em;
|
|
1796
|
+
color: var(--text-secondary);
|
|
1797
|
+
display: flex;
|
|
1798
|
+
align-items: center;
|
|
1799
|
+
gap: 0.25rem;
|
|
1800
|
+
}
|
|
1801
|
+
.overall-kpi__value {
|
|
1802
|
+
font-size: 1.375rem;
|
|
1803
|
+
font-weight: 700;
|
|
1804
|
+
color: var(--text-primary);
|
|
1805
|
+
font-variant-numeric: tabular-nums;
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
/* ── Convoy Detail Header ── */
|
|
1809
|
+
.convoy-detail-header {
|
|
1810
|
+
padding: 1.25rem;
|
|
1811
|
+
background: var(--bg-secondary);
|
|
1812
|
+
border-radius: 12px;
|
|
1813
|
+
border: 1px solid rgba(255, 255, 255, 0.06);
|
|
1814
|
+
}
|
|
1815
|
+
.convoy-detail-header__top {
|
|
1816
|
+
display: flex;
|
|
1817
|
+
align-items: center;
|
|
1818
|
+
gap: 0.75rem;
|
|
1819
|
+
margin-bottom: 0.75rem;
|
|
1820
|
+
}
|
|
1821
|
+
.convoy-detail-header__name {
|
|
1822
|
+
font-size: 1.25rem;
|
|
1823
|
+
font-weight: 700;
|
|
1824
|
+
color: var(--text-primary);
|
|
1825
|
+
margin: 0;
|
|
1826
|
+
}
|
|
1827
|
+
.convoy-detail-header__meta {
|
|
1828
|
+
display: flex;
|
|
1829
|
+
flex-wrap: wrap;
|
|
1830
|
+
gap: 1rem;
|
|
1831
|
+
}
|
|
1832
|
+
.convoy-meta__item {
|
|
1833
|
+
font-size: 0.8125rem;
|
|
1834
|
+
color: var(--text-secondary);
|
|
1835
|
+
}
|
|
1836
|
+
|
|
1837
|
+
/* ── Status Badge ── */
|
|
1838
|
+
.status-badge {
|
|
1839
|
+
display: inline-flex;
|
|
1840
|
+
align-items: center;
|
|
1841
|
+
padding: 0.125rem 0.625rem;
|
|
1842
|
+
border-radius: 999px;
|
|
1843
|
+
font-size: 0.6875rem;
|
|
1844
|
+
font-weight: 600;
|
|
1845
|
+
text-transform: uppercase;
|
|
1846
|
+
letter-spacing: 0.05em;
|
|
1847
|
+
}
|
|
1848
|
+
.status-badge--done {
|
|
1849
|
+
background: rgba(34, 197, 94, 0.15);
|
|
1850
|
+
color: var(--color-success);
|
|
1851
|
+
}
|
|
1852
|
+
.status-badge--running {
|
|
1853
|
+
background: rgba(59, 130, 246, 0.15);
|
|
1854
|
+
color: var(--accent-blue);
|
|
1855
|
+
}
|
|
1856
|
+
.status-badge--failed {
|
|
1857
|
+
background: rgba(239, 68, 68, 0.15);
|
|
1858
|
+
color: var(--color-failed);
|
|
1859
|
+
}
|
|
1860
|
+
.status-badge--gate-failed,
|
|
1861
|
+
.status-badge--gate_failed {
|
|
1862
|
+
background: rgba(245, 158, 11, 0.15);
|
|
1863
|
+
color: var(--color-partial);
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
/* ── Tooltip ── */
|
|
1867
|
+
.tooltip-trigger {
|
|
1868
|
+
position: relative;
|
|
1869
|
+
cursor: help;
|
|
1870
|
+
font-size: 0.75rem;
|
|
1871
|
+
opacity: 0.5;
|
|
1872
|
+
transition: opacity 0.15s;
|
|
1873
|
+
}
|
|
1874
|
+
.tooltip-trigger:hover {
|
|
1875
|
+
opacity: 1;
|
|
1876
|
+
}
|
|
1877
|
+
.tooltip-trigger:hover::after {
|
|
1878
|
+
content: attr(data-tooltip);
|
|
1879
|
+
position: absolute;
|
|
1880
|
+
bottom: 100%;
|
|
1881
|
+
left: 50%;
|
|
1882
|
+
transform: translateX(-50%);
|
|
1883
|
+
padding: 0.375rem 0.625rem;
|
|
1884
|
+
background: var(--bg-primary);
|
|
1885
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
1886
|
+
border-radius: 6px;
|
|
1887
|
+
font-size: 0.75rem;
|
|
1888
|
+
color: var(--text-primary);
|
|
1889
|
+
max-width: 280px;
|
|
1890
|
+
white-space: normal;
|
|
1891
|
+
text-align: left;
|
|
1892
|
+
z-index: 100;
|
|
1893
|
+
pointer-events: none;
|
|
1894
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
|
|
1895
|
+
}
|
|
1896
|
+
.tooltip-trigger:focus {
|
|
1897
|
+
opacity: 1;
|
|
1898
|
+
outline: 2px solid var(--accent-blue);
|
|
1899
|
+
outline-offset: 2px;
|
|
1900
|
+
border-radius: 2px;
|
|
1901
|
+
}
|
|
1902
|
+
.tooltip-trigger:focus::after,
|
|
1903
|
+
.tooltip-trigger:focus-visible::after {
|
|
1904
|
+
content: attr(data-tooltip);
|
|
1905
|
+
position: absolute;
|
|
1906
|
+
bottom: 100%;
|
|
1907
|
+
left: 50%;
|
|
1908
|
+
transform: translateX(-50%);
|
|
1909
|
+
padding: 0.375rem 0.625rem;
|
|
1910
|
+
background: var(--bg-primary);
|
|
1911
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
1912
|
+
border-radius: 6px;
|
|
1913
|
+
font-size: 0.75rem;
|
|
1914
|
+
color: var(--text-primary);
|
|
1915
|
+
max-width: 280px;
|
|
1916
|
+
white-space: normal;
|
|
1917
|
+
text-align: left;
|
|
1918
|
+
z-index: 100;
|
|
1919
|
+
pointer-events: none;
|
|
1920
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
|
|
1921
|
+
}
|
|
1922
|
+
|
|
1923
|
+
/* ── Additional Status Badges ── */
|
|
1924
|
+
.status-badge--pending {
|
|
1925
|
+
background: rgba(100, 116, 139, 0.15);
|
|
1926
|
+
color: #94a3b8;
|
|
1927
|
+
}
|
|
1928
|
+
.status-badge--assigned {
|
|
1929
|
+
background: rgba(59, 130, 246, 0.1);
|
|
1930
|
+
color: #60a5fa;
|
|
1931
|
+
}
|
|
1932
|
+
.status-badge--timed-out {
|
|
1933
|
+
background: rgba(239, 68, 68, 0.12);
|
|
1934
|
+
color: #f87171;
|
|
1935
|
+
}
|
|
1936
|
+
.status-badge--review-blocked {
|
|
1937
|
+
background: rgba(245, 158, 11, 0.12);
|
|
1938
|
+
color: #fbbf24;
|
|
1939
|
+
}
|
|
1940
|
+
.status-badge--skipped {
|
|
1941
|
+
background: rgba(100, 116, 139, 0.1);
|
|
1942
|
+
color: #64748b;
|
|
1943
|
+
}
|
|
1944
|
+
.status-badge--hook-failed {
|
|
1945
|
+
background: rgba(239, 68, 68, 0.1);
|
|
1946
|
+
color: #f87171;
|
|
1947
|
+
}
|
|
1948
|
+
.status-badge--disputed {
|
|
1949
|
+
background: rgba(167, 139, 250, 0.15);
|
|
1950
|
+
color: var(--accent-purple);
|
|
1951
|
+
}
|
|
1952
|
+
.status-badge--wait-for-input {
|
|
1953
|
+
background: rgba(245, 158, 11, 0.1);
|
|
1954
|
+
color: var(--color-partial);
|
|
1955
|
+
}
|
|
1956
|
+
|
|
1957
|
+
/* ── Task Summary Cards ── */
|
|
1958
|
+
.task-summary-cards {
|
|
1959
|
+
display: flex;
|
|
1960
|
+
gap: 12px;
|
|
1961
|
+
flex-wrap: wrap;
|
|
1962
|
+
margin-bottom: 20px;
|
|
1963
|
+
}
|
|
1964
|
+
|
|
1965
|
+
.task-summary-card {
|
|
1966
|
+
flex: 1 1 140px;
|
|
1967
|
+
display: flex;
|
|
1968
|
+
flex-direction: column;
|
|
1969
|
+
gap: 8px;
|
|
1970
|
+
padding: 14px 16px;
|
|
1971
|
+
background: var(--bg-card);
|
|
1972
|
+
border: 1px solid var(--border-color);
|
|
1973
|
+
border-radius: 10px;
|
|
1974
|
+
transition: border-color 0.15s;
|
|
1975
|
+
}
|
|
1976
|
+
.task-summary-card:hover {
|
|
1977
|
+
border-color: rgba(255, 255, 255, 0.12);
|
|
1978
|
+
}
|
|
1979
|
+
.task-summary-card__label {
|
|
1980
|
+
font-size: 0.6875rem;
|
|
1981
|
+
font-weight: 600;
|
|
1982
|
+
text-transform: uppercase;
|
|
1983
|
+
letter-spacing: 0.06em;
|
|
1984
|
+
color: var(--text-tertiary);
|
|
1985
|
+
}
|
|
1986
|
+
.task-summary-card__value {
|
|
1987
|
+
font-size: 1.75rem;
|
|
1988
|
+
font-weight: 700;
|
|
1989
|
+
line-height: 1;
|
|
1990
|
+
color: var(--text-primary);
|
|
1991
|
+
}
|
|
1992
|
+
.task-summary-card--done { border-left: 3px solid var(--color-success); }
|
|
1993
|
+
.task-summary-card--running { border-left: 3px solid var(--accent-blue); }
|
|
1994
|
+
.task-summary-card--errors { border-left: 3px solid var(--color-failed); }
|
|
1995
|
+
.task-summary-card--waiting { border-left: 3px solid #94a3b8; }
|
|
1996
|
+
.task-summary-card--input { border-left: 3px solid var(--color-partial); }
|
|
1997
|
+
|
|
1998
|
+
/* ── Task Table ── */
|
|
1999
|
+
.task-table-wrap {
|
|
2000
|
+
overflow-x: auto;
|
|
2001
|
+
}
|
|
2002
|
+
.task-table .td-num {
|
|
2003
|
+
text-align: right;
|
|
2004
|
+
}
|
|
2005
|
+
.sortable-th {
|
|
2006
|
+
cursor: pointer;
|
|
2007
|
+
user-select: none;
|
|
2008
|
+
}
|
|
2009
|
+
.sortable-th:hover {
|
|
2010
|
+
color: var(--text-secondary);
|
|
2011
|
+
}
|
|
2012
|
+
.sortable-th--active {
|
|
2013
|
+
color: var(--text-primary);
|
|
2014
|
+
}
|
|
2015
|
+
.sort-indicator {
|
|
2016
|
+
margin-left: 4px;
|
|
2017
|
+
font-size: 0.5625rem;
|
|
2018
|
+
opacity: 0.5;
|
|
2019
|
+
}
|
|
2020
|
+
.sortable-th--active .sort-indicator {
|
|
2021
|
+
opacity: 1;
|
|
2022
|
+
color: var(--accent-blue);
|
|
2023
|
+
}
|
|
2024
|
+
|
|
2025
|
+
/* ── Phase Breakdown ── */
|
|
2026
|
+
.phase-breakdown {
|
|
2027
|
+
display: flex;
|
|
2028
|
+
flex-direction: column;
|
|
2029
|
+
gap: 8px;
|
|
2030
|
+
margin-bottom: 20px;
|
|
2031
|
+
}
|
|
2032
|
+
.phase-breakdown__row {
|
|
2033
|
+
display: flex;
|
|
2034
|
+
align-items: center;
|
|
2035
|
+
gap: 12px;
|
|
2036
|
+
}
|
|
2037
|
+
.phase-breakdown__label {
|
|
2038
|
+
font-size: 0.75rem;
|
|
2039
|
+
font-weight: 600;
|
|
2040
|
+
color: var(--text-tertiary);
|
|
2041
|
+
min-width: 60px;
|
|
2042
|
+
}
|
|
2043
|
+
.phase-breakdown__bar {
|
|
2044
|
+
flex: 1;
|
|
2045
|
+
height: 10px;
|
|
2046
|
+
background: rgba(255, 255, 255, 0.04);
|
|
2047
|
+
border-radius: 5px;
|
|
2048
|
+
overflow: hidden;
|
|
2049
|
+
display: flex;
|
|
2050
|
+
}
|
|
2051
|
+
.phase-breakdown__seg {
|
|
2052
|
+
height: 100%;
|
|
2053
|
+
transition: width 0.3s ease;
|
|
2054
|
+
}
|
|
2055
|
+
.phase-breakdown__seg--done { background: var(--color-success); }
|
|
2056
|
+
.phase-breakdown__seg--running { background: var(--accent-blue); }
|
|
2057
|
+
.phase-breakdown__seg--waiting { background: #475569; }
|
|
2058
|
+
.phase-breakdown__seg--failed { background: var(--color-failed); }
|
|
2059
|
+
.phase-breakdown__count {
|
|
2060
|
+
font-size: 0.6875rem;
|
|
2061
|
+
color: var(--text-tertiary);
|
|
2062
|
+
min-width: 52px;
|
|
2063
|
+
text-align: right;
|
|
2064
|
+
}
|
|
2065
|
+
|
|
2066
|
+
/* ── Responsive: Overall Stats ── */
|
|
2067
|
+
@media (max-width: 960px) {
|
|
2068
|
+
.overall-stats__grid {
|
|
2069
|
+
grid-template-columns: repeat(3, 1fr);
|
|
2070
|
+
}
|
|
2071
|
+
}
|
|
2072
|
+
@media (max-width: 640px) {
|
|
2073
|
+
.overall-stats__grid {
|
|
2074
|
+
grid-template-columns: repeat(2, 1fr);
|
|
2075
|
+
}
|
|
2076
|
+
.convoy-detail-header__name {
|
|
2077
|
+
font-size: 1rem;
|
|
2078
|
+
}
|
|
2079
|
+
.convoy-selector__select {
|
|
2080
|
+
max-width: 200px;
|
|
2081
|
+
}
|
|
2082
|
+
}
|
|
2083
|
+
@media (max-width: 480px) {
|
|
2084
|
+
.overall-stats__grid {
|
|
2085
|
+
grid-template-columns: 1fr;
|
|
2086
|
+
}
|
|
2087
|
+
}
|
|
2088
|
+
|
|
2089
|
+
/* ── Quality / Reliability / Drift Sections ── */
|
|
2090
|
+
.reliability-empty {
|
|
2091
|
+
font-size: 0.875rem;
|
|
2092
|
+
color: var(--text-tertiary);
|
|
2093
|
+
padding: 12px 0;
|
|
2094
|
+
margin: 0;
|
|
2095
|
+
}
|
|
2096
|
+
|
|
2097
|
+
/* ── Secret Leak Banner ── */
|
|
2098
|
+
.secret-leak-banner {
|
|
2099
|
+
display: flex;
|
|
2100
|
+
align-items: flex-start;
|
|
2101
|
+
gap: 12px;
|
|
2102
|
+
padding: 14px 16px;
|
|
2103
|
+
background: rgba(245, 158, 11, 0.1);
|
|
2104
|
+
border: 1px solid rgba(245, 158, 11, 0.3);
|
|
2105
|
+
border-radius: 8px;
|
|
2106
|
+
margin-top: 16px;
|
|
2107
|
+
}
|
|
2108
|
+
.secret-leak-banner__icon {
|
|
2109
|
+
font-size: 1.25rem;
|
|
2110
|
+
flex-shrink: 0;
|
|
2111
|
+
line-height: 1.4;
|
|
2112
|
+
}
|
|
2113
|
+
.secret-leak-banner__text {
|
|
2114
|
+
display: flex;
|
|
2115
|
+
flex-direction: column;
|
|
2116
|
+
gap: 4px;
|
|
2117
|
+
}
|
|
2118
|
+
.secret-leak-banner__text strong {
|
|
2119
|
+
font-size: 0.875rem;
|
|
2120
|
+
font-weight: 600;
|
|
2121
|
+
color: var(--color-partial);
|
|
2122
|
+
}
|
|
2123
|
+
.secret-leak-banner__text span {
|
|
2124
|
+
font-size: 0.8125rem;
|
|
2125
|
+
color: var(--text-secondary);
|
|
2126
|
+
}
|
|
2127
|
+
|
|
2128
|
+
/* ── Artifact Type Badges ──────────────────────────────── */
|
|
2129
|
+
.artifact-type-badge {
|
|
2130
|
+
display: inline-block;
|
|
2131
|
+
padding: 2px 8px;
|
|
2132
|
+
border-radius: 4px;
|
|
2133
|
+
font-size: 0.75rem;
|
|
2134
|
+
font-weight: 600;
|
|
2135
|
+
color: #fff;
|
|
2136
|
+
text-transform: uppercase;
|
|
2137
|
+
letter-spacing: 0.03em;
|
|
2138
|
+
}
|
|
2139
|
+
|
|
2140
|
+
/* ── Timeline Filter Chips ─────────────────────────────── */
|
|
2141
|
+
.timeline-filters {
|
|
2142
|
+
display: flex;
|
|
2143
|
+
gap: 8px;
|
|
2144
|
+
flex-wrap: wrap;
|
|
2145
|
+
margin-bottom: 16px;
|
|
2146
|
+
}
|
|
2147
|
+
|
|
2148
|
+
.timeline-filter-chip {
|
|
2149
|
+
display: inline-flex;
|
|
2150
|
+
align-items: center;
|
|
2151
|
+
padding: 6px 14px;
|
|
2152
|
+
border-radius: 20px;
|
|
2153
|
+
border: 1px solid var(--border);
|
|
2154
|
+
background: transparent;
|
|
2155
|
+
color: var(--text-secondary);
|
|
2156
|
+
font-size: 0.8125rem;
|
|
2157
|
+
font-weight: 500;
|
|
2158
|
+
cursor: pointer;
|
|
2159
|
+
transition: all 0.15s ease;
|
|
2160
|
+
}
|
|
2161
|
+
|
|
2162
|
+
.timeline-filter-chip:hover {
|
|
2163
|
+
border-color: var(--accent);
|
|
2164
|
+
color: var(--text-primary);
|
|
2165
|
+
}
|
|
2166
|
+
|
|
2167
|
+
.timeline-filter-chip--active {
|
|
2168
|
+
background: var(--accent);
|
|
2169
|
+
border-color: var(--accent);
|
|
2170
|
+
color: #fff;
|
|
2171
|
+
}
|
|
2172
|
+
|
|
2173
|
+
/* ── Event Timeline ────────────────────────────────────── */
|
|
2174
|
+
.event-timeline-row {
|
|
2175
|
+
padding: 12px 16px;
|
|
2176
|
+
border-bottom: 1px solid var(--border);
|
|
2177
|
+
cursor: pointer;
|
|
2178
|
+
transition: background 0.15s ease;
|
|
2179
|
+
}
|
|
2180
|
+
|
|
2181
|
+
.event-timeline-row:hover {
|
|
2182
|
+
background: rgba(167, 139, 250, 0.05);
|
|
2183
|
+
}
|
|
2184
|
+
|
|
2185
|
+
.event-timeline-row--expanded {
|
|
2186
|
+
background: rgba(167, 139, 250, 0.08);
|
|
2187
|
+
}
|
|
2188
|
+
|
|
2189
|
+
.event-timeline-row__main {
|
|
2190
|
+
display: flex;
|
|
2191
|
+
align-items: center;
|
|
2192
|
+
gap: 12px;
|
|
2193
|
+
flex-wrap: wrap;
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
.event-timeline-ts {
|
|
2197
|
+
font-size: 0.8125rem;
|
|
2198
|
+
color: var(--text-secondary);
|
|
2199
|
+
min-width: 140px;
|
|
2200
|
+
font-variant-numeric: tabular-nums;
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2203
|
+
.event-type-badge {
|
|
2204
|
+
display: inline-block;
|
|
2205
|
+
padding: 2px 8px;
|
|
2206
|
+
border-radius: 4px;
|
|
2207
|
+
font-size: 0.6875rem;
|
|
2208
|
+
font-weight: 600;
|
|
2209
|
+
color: #fff;
|
|
2210
|
+
text-transform: uppercase;
|
|
2211
|
+
letter-spacing: 0.03em;
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
.event-timeline-context {
|
|
2215
|
+
font-size: 0.8125rem;
|
|
2216
|
+
color: var(--text-tertiary, #6b7280);
|
|
2217
|
+
font-family: var(--font-mono, 'SF Mono', 'Fira Code', monospace);
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2220
|
+
.event-timeline-detail {
|
|
2221
|
+
margin-top: 8px;
|
|
2222
|
+
padding: 12px;
|
|
2223
|
+
background: var(--bg-card, #111118);
|
|
2224
|
+
border-radius: 6px;
|
|
2225
|
+
border: 1px solid var(--border);
|
|
2226
|
+
}
|
|
2227
|
+
|
|
2228
|
+
.event-timeline-json {
|
|
2229
|
+
font-size: 0.75rem;
|
|
2230
|
+
color: var(--text-secondary);
|
|
2231
|
+
white-space: pre-wrap;
|
|
2232
|
+
word-break: break-all;
|
|
2233
|
+
margin: 0;
|
|
2234
|
+
font-family: var(--font-mono, 'SF Mono', 'Fira Code', monospace);
|
|
2235
|
+
max-height: 300px;
|
|
2236
|
+
overflow-y: auto;
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
@media (max-width: 640px) {
|
|
2240
|
+
.event-timeline-ts {
|
|
2241
|
+
min-width: auto;
|
|
2242
|
+
font-size: 0.75rem;
|
|
2243
|
+
}
|
|
2244
|
+
.event-timeline-row__main {
|
|
2245
|
+
gap: 8px;
|
|
2246
|
+
}
|
|
2247
|
+
.timeline-filter-chip {
|
|
2248
|
+
padding: 4px 10px;
|
|
2249
|
+
font-size: 0.75rem;
|
|
2250
|
+
}
|
|
2251
|
+
}
|
|
2252
|
+
|
|
2253
|
+
/* ── Focus Styles ── */
|
|
2254
|
+
.dash-btn:focus-visible,
|
|
2255
|
+
.convoy-selector__select:focus-visible,
|
|
2256
|
+
.filter-select:focus-visible,
|
|
2257
|
+
.filter-input:focus-visible,
|
|
2258
|
+
.dash-sidebar__link:focus-visible,
|
|
2259
|
+
.timeline-filter-chip:focus-visible {
|
|
2260
|
+
outline: 2px solid var(--accent-blue);
|
|
2261
|
+
outline-offset: 2px;
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
/* ── Status Explanation ── */
|
|
2265
|
+
.convoy-status-explanation {
|
|
2266
|
+
font-size: 0.8125rem;
|
|
2267
|
+
color: var(--text-secondary);
|
|
2268
|
+
margin-top: 0.25rem;
|
|
2269
|
+
margin-bottom: 0.5rem;
|
|
2270
|
+
font-style: italic;
|
|
2271
|
+
}
|