completion-kit 0.4.2 → 0.4.8

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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/completion_kit/application.css +850 -69
  3. data/app/controllers/completion_kit/runs_controller.rb +31 -18
  4. data/app/controllers/completion_kit/suggestions_controller.rb +24 -0
  5. data/app/jobs/completion_kit/generate_row_job.rb +7 -0
  6. data/app/jobs/completion_kit/judge_review_job.rb +2 -0
  7. data/app/jobs/completion_kit/model_discovery_job.rb +9 -4
  8. data/app/models/completion_kit/dataset.rb +9 -0
  9. data/app/models/completion_kit/provider_credential.rb +1 -1
  10. data/app/models/completion_kit/response.rb +7 -0
  11. data/app/models/completion_kit/run.rb +22 -1
  12. data/app/services/completion_kit/anthropic_client.rb +33 -14
  13. data/app/services/completion_kit/model_discovery_service.rb +35 -9
  14. data/app/services/completion_kit/ollama_client.rb +31 -10
  15. data/app/services/completion_kit/open_ai_client.rb +35 -13
  16. data/app/services/completion_kit/open_router_client.rb +34 -13
  17. data/app/services/completion_kit/worker_health.rb +4 -1
  18. data/app/views/completion_kit/datasets/index.html.erb +1 -1
  19. data/app/views/completion_kit/datasets/show.html.erb +47 -9
  20. data/app/views/completion_kit/metrics/_form.html.erb +1 -1
  21. data/app/views/completion_kit/metrics/index.html.erb +15 -2
  22. data/app/views/completion_kit/metrics/show.html.erb +1 -1
  23. data/app/views/completion_kit/prompts/index.html.erb +27 -8
  24. data/app/views/completion_kit/prompts/show.html.erb +6 -36
  25. data/app/views/completion_kit/provider_credentials/_discovery_status.html.erb +4 -2
  26. data/app/views/completion_kit/provider_credentials/_models_card.html.erb +1 -1
  27. data/app/views/completion_kit/provider_credentials/index.html.erb +1 -1
  28. data/app/views/completion_kit/runs/_actions.html.erb +3 -0
  29. data/app/views/completion_kit/runs/_form.html.erb +114 -20
  30. data/app/views/completion_kit/runs/_response_row.html.erb +58 -35
  31. data/app/views/completion_kit/runs/_row.html.erb +50 -0
  32. data/app/views/completion_kit/runs/_sort_toolbar.html.erb +5 -4
  33. data/app/views/completion_kit/runs/_status_header.html.erb +3 -2
  34. data/app/views/completion_kit/runs/_status_panel.html.erb +55 -21
  35. data/app/views/completion_kit/runs/index.html.erb +4 -16
  36. data/app/views/completion_kit/runs/show.html.erb +110 -16
  37. data/app/views/completion_kit/suggestions/show.html.erb +65 -0
  38. data/app/views/layouts/completion_kit/application.html.erb +71 -0
  39. data/config/routes.rb +8 -2
  40. data/db/migrate/20260507000001_add_discovery_error_to_provider_credentials.rb +5 -0
  41. data/db/migrate/20260507150000_add_temperature_ignored_to_runs.rb +5 -0
  42. data/lib/completion_kit/version.rb +1 -1
  43. metadata +8 -7
  44. data/app/views/completion_kit/runs/suggestion.html.erb +0 -47
@@ -41,6 +41,7 @@
41
41
  html {
42
42
  font-size: 18px;
43
43
  line-height: 1.5;
44
+ scrollbar-gutter: stable;
44
45
  -webkit-font-smoothing: antialiased;
45
46
  -moz-osx-font-smoothing: grayscale;
46
47
  }
@@ -206,11 +207,16 @@ form.button_to {
206
207
  font-family: var(--ck-mono);
207
208
  font-size: 0.8rem;
208
209
  font-weight: 500;
210
+ line-height: 1.2;
209
211
  letter-spacing: 0.08em;
210
212
  text-transform: uppercase;
211
213
  color: var(--ck-dim);
212
214
  }
213
215
 
216
+ .ck-kicker + .ck-results-table {
217
+ margin-top: 0.45rem;
218
+ }
219
+
214
220
  .ck-title,
215
221
  .ck-section-title,
216
222
  .ck-card-title,
@@ -430,6 +436,12 @@ tr:hover .ck-chip--publish {
430
436
  color: var(--ck-danger);
431
437
  }
432
438
 
439
+ .ck-chip--done {
440
+ background: rgba(52, 211, 153, 0.08);
441
+ border-color: rgba(52, 211, 153, 0.3);
442
+ color: var(--ck-success);
443
+ }
444
+
433
445
  .ck-badge--high {
434
446
  background: var(--ck-success-soft);
435
447
  border: 1px solid rgba(34, 197, 94, 0.25);
@@ -865,7 +877,11 @@ tr:hover .ck-chip--publish {
865
877
 
866
878
  .ck-run-status__action {
867
879
  margin: 0;
868
- display: inline-block;
880
+ flex: 1 0 100%;
881
+ display: flex;
882
+ justify-content: flex-end;
883
+ padding-top: 0.85rem;
884
+ border-top: 1px dashed var(--ck-line);
869
885
  }
870
886
 
871
887
  .ck-run-status__retry {
@@ -889,6 +905,97 @@ tr:hover .ck-chip--publish {
889
905
  border-color: var(--ck-danger);
890
906
  }
891
907
 
908
+ .ck-run-status__cells {
909
+ display: flex;
910
+ align-items: stretch;
911
+ flex-wrap: wrap;
912
+ gap: 2.5rem;
913
+ width: 100%;
914
+ }
915
+
916
+ .ck-run-status__label-row {
917
+ display: inline-flex;
918
+ align-items: center;
919
+ gap: 0.6rem;
920
+ }
921
+
922
+ .ck-run-status__pill {
923
+ margin: 0;
924
+ padding: 0.18rem 0.5rem 0.18rem 0.45rem;
925
+ font-size: 0.62rem;
926
+ letter-spacing: 0.16em;
927
+ background: rgba(0, 0, 0, 0.25);
928
+ border-color: var(--ck-line-strong);
929
+ }
930
+
931
+ .ck-run-status__pill .ck-status-badge__dot {
932
+ width: 6px;
933
+ height: 6px;
934
+ }
935
+
936
+ .ck-run-status__cell {
937
+ display: flex;
938
+ flex-direction: column;
939
+ align-items: flex-start;
940
+ gap: 0.55rem;
941
+ flex-shrink: 0;
942
+ min-width: 0;
943
+ }
944
+
945
+ .ck-run-status__cell--grow {
946
+ flex: 1 1 auto;
947
+ }
948
+
949
+ .ck-run-status__cell-value {
950
+ display: flex;
951
+ align-items: center;
952
+ min-height: 2rem;
953
+ }
954
+
955
+ .ck-run-status__summary-line {
956
+ margin: 0;
957
+ display: flex;
958
+ align-items: baseline;
959
+ flex-wrap: wrap;
960
+ gap: 0.4rem;
961
+ font-family: var(--ck-mono);
962
+ font-size: 0.95rem;
963
+ color: var(--ck-text);
964
+ }
965
+
966
+ .ck-run-status__summary-num {
967
+ font-family: var(--ck-mono);
968
+ font-size: 1.4rem;
969
+ font-weight: 700;
970
+ letter-spacing: -0.02em;
971
+ color: var(--ck-text);
972
+ line-height: 1;
973
+ }
974
+
975
+ .ck-run-status__summary-text {
976
+ font-family: var(--ck-mono);
977
+ color: var(--ck-muted);
978
+ }
979
+
980
+ .ck-run-status__summary-sep {
981
+ color: var(--ck-line-strong);
982
+ margin: 0 0.15rem;
983
+ }
984
+
985
+ .ck-run-status__cell-empty {
986
+ font-family: var(--ck-mono);
987
+ font-size: 1.4rem;
988
+ color: var(--ck-dim);
989
+ line-height: 1;
990
+ }
991
+
992
+ .ck-badge--lg {
993
+ font-size: 1.05rem;
994
+ padding: 0.35rem 0.8rem;
995
+ letter-spacing: 0;
996
+ text-transform: none;
997
+ }
998
+
892
999
  .ck-chip--retry {
893
1000
  appearance: none;
894
1001
  font-family: var(--ck-mono);
@@ -977,16 +1084,6 @@ tr:hover .ck-chip--publish {
977
1084
  }
978
1085
 
979
1086
  .ck-model-table thead th .ck-info-toggle {
980
- width: 16px;
981
- height: 16px;
982
- font-size: 0.7rem;
983
- font-family: var(--ck-sans);
984
- font-weight: 600;
985
- letter-spacing: 0;
986
- text-indent: 0;
987
- line-height: 1;
988
- margin-left: 0.4rem;
989
- vertical-align: middle;
990
1087
  position: relative;
991
1088
  top: -1px;
992
1089
  }
@@ -1144,14 +1241,6 @@ tr:hover .ck-chip--publish {
1144
1241
  color: var(--ck-warning);
1145
1242
  }
1146
1243
 
1147
- .ck-score {
1148
- margin: 0.25rem 0 0;
1149
- font-family: var(--ck-mono);
1150
- font-size: 2rem;
1151
- font-weight: 700;
1152
- letter-spacing: -0.04em;
1153
- color: var(--ck-accent);
1154
- }
1155
1244
 
1156
1245
  .ck-form-card {
1157
1246
  display: grid;
@@ -1163,6 +1252,7 @@ tr:hover .ck-chip--publish {
1163
1252
  font-family: var(--ck-sans);
1164
1253
  font-size: 0.8rem;
1165
1254
  line-height: 1.4;
1255
+ min-height: 1.12rem;
1166
1256
  margin: 0;
1167
1257
  color: var(--ck-muted);
1168
1258
  }
@@ -1197,6 +1287,32 @@ tr:hover .ck-chip--publish {
1197
1287
  color: var(--ck-danger);
1198
1288
  }
1199
1289
 
1290
+ .ck-prompt-summary {
1291
+ margin-top: 0.5rem;
1292
+ display: grid;
1293
+ gap: 0.4rem;
1294
+ }
1295
+
1296
+ .ck-prompt-summary__description {
1297
+ margin: 0;
1298
+ font-family: var(--ck-sans);
1299
+ font-size: 0.82rem;
1300
+ color: var(--ck-muted);
1301
+ }
1302
+
1303
+ .ck-prompt-summary__template {
1304
+ margin: 0;
1305
+ padding: 0.5rem 0.65rem;
1306
+ font-family: var(--ck-mono);
1307
+ font-size: 0.78rem;
1308
+ line-height: 1.45;
1309
+ color: var(--ck-muted);
1310
+ background: var(--ck-bg);
1311
+ border-left: 2px solid var(--ck-line);
1312
+ white-space: pre-wrap;
1313
+ word-break: break-word;
1314
+ }
1315
+
1200
1316
  .ck-run-config {
1201
1317
  display: grid;
1202
1318
  gap: 0;
@@ -1361,8 +1477,8 @@ tr:hover .ck-chip--publish {
1361
1477
  }
1362
1478
 
1363
1479
  .ck-star--filled {
1364
- fill: var(--ck-accent);
1365
- stroke: var(--ck-accent);
1480
+ fill: var(--ck-warning);
1481
+ stroke: var(--ck-warning);
1366
1482
  }
1367
1483
 
1368
1484
  .ck-star--empty {
@@ -1534,6 +1650,136 @@ tr:hover .ck-chip--publish {
1534
1650
  font-weight: 700;
1535
1651
  }
1536
1652
 
1653
+ .ck-banner {
1654
+ display: grid;
1655
+ gap: 0.25rem;
1656
+ margin-bottom: 1rem;
1657
+ padding: 0.85rem 1rem;
1658
+ border-radius: var(--ck-radius);
1659
+ border: 1px solid transparent;
1660
+ font-family: var(--ck-sans);
1661
+ }
1662
+
1663
+ .ck-banner--warn {
1664
+ border-color: rgba(224, 164, 88, 0.3);
1665
+ background: rgba(224, 164, 88, 0.08);
1666
+ color: var(--ck-text);
1667
+ }
1668
+
1669
+ .ck-banner__title {
1670
+ font-family: var(--ck-mono);
1671
+ font-size: 0.78rem;
1672
+ font-weight: 600;
1673
+ letter-spacing: 0.06em;
1674
+ text-transform: uppercase;
1675
+ color: var(--ck-warning);
1676
+ }
1677
+
1678
+ .ck-banner__body {
1679
+ margin: 0;
1680
+ font-size: 0.88rem;
1681
+ line-height: 1.5;
1682
+ color: var(--ck-muted);
1683
+ }
1684
+
1685
+ .ck-csv-table-wrap {
1686
+ margin-top: 0.5rem;
1687
+ border: 1px solid var(--ck-line);
1688
+ border-radius: var(--ck-radius);
1689
+ background: var(--ck-bg-strong);
1690
+ overflow: auto;
1691
+ max-height: 60vh;
1692
+ }
1693
+
1694
+ .ck-modal__body .ck-csv-table-wrap {
1695
+ margin-top: 0;
1696
+ border: none;
1697
+ border-radius: 0;
1698
+ background: transparent;
1699
+ max-height: none;
1700
+ overflow: visible;
1701
+ }
1702
+
1703
+ .ck-csv-table {
1704
+ width: 100%;
1705
+ border-collapse: collapse;
1706
+ font-family: var(--ck-mono);
1707
+ font-size: 0.82rem;
1708
+ }
1709
+
1710
+ .ck-csv-table thead th {
1711
+ position: sticky;
1712
+ top: 0;
1713
+ background: var(--ck-surface);
1714
+ border-bottom: 1px solid var(--ck-line);
1715
+ text-align: left;
1716
+ padding: 0.55rem 0.75rem;
1717
+ font-family: var(--ck-mono);
1718
+ font-size: 0.78rem;
1719
+ font-weight: 600;
1720
+ letter-spacing: 0;
1721
+ text-transform: none;
1722
+ color: var(--ck-muted);
1723
+ white-space: nowrap;
1724
+ z-index: 1;
1725
+ }
1726
+
1727
+ .ck-csv-table tbody td {
1728
+ padding: 0.55rem 0.75rem;
1729
+ border-bottom: 1px solid var(--ck-line);
1730
+ color: var(--ck-text);
1731
+ vertical-align: top;
1732
+ max-width: 32rem;
1733
+ transition: background 0.15s;
1734
+ }
1735
+
1736
+ .ck-csv-table tbody tr:hover td {
1737
+ background: var(--ck-surface-soft);
1738
+ }
1739
+
1740
+ .ck-csv-cell {
1741
+ display: -webkit-box;
1742
+ -webkit-box-orient: vertical;
1743
+ -webkit-line-clamp: 1;
1744
+ line-clamp: 1;
1745
+ overflow: hidden;
1746
+ max-height: 1.55em;
1747
+ transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1748
+ }
1749
+
1750
+ .ck-csv-row--expanded .ck-csv-cell {
1751
+ -webkit-line-clamp: 99;
1752
+ line-clamp: 99;
1753
+ max-height: 30em;
1754
+ }
1755
+
1756
+ .ck-csv-table tbody tr:last-child td {
1757
+ border-bottom: none;
1758
+ }
1759
+
1760
+ .ck-csv-table thead th.ck-csv-table__rownum,
1761
+ .ck-csv-table tbody td.ck-csv-table__rownum {
1762
+ font-family: var(--ck-mono);
1763
+ font-size: 0.72rem;
1764
+ color: var(--ck-dim);
1765
+ white-space: nowrap;
1766
+ text-align: right;
1767
+ padding-right: 0.85rem;
1768
+ user-select: none;
1769
+ width: 1%;
1770
+ }
1771
+
1772
+ .ck-banner__code {
1773
+ display: inline-block;
1774
+ font-family: var(--ck-mono);
1775
+ font-size: 0.82rem;
1776
+ padding: 0.05rem 0.35rem;
1777
+ border-radius: 3px;
1778
+ background: rgba(0, 0, 0, 0.25);
1779
+ border: 1px solid var(--ck-line);
1780
+ color: var(--ck-text);
1781
+ }
1782
+
1537
1783
  .ck-error-list {
1538
1784
  margin: 0.5rem 0 0;
1539
1785
  padding-left: 1.25rem;
@@ -1602,6 +1848,17 @@ select.ck-input {
1602
1848
  text-align: right;
1603
1849
  color: var(--ck-dim);
1604
1850
  font-size: 1.1rem;
1851
+ white-space: nowrap;
1852
+ width: 1%;
1853
+ }
1854
+
1855
+ .ck-results-table td:first-child,
1856
+ .ck-results-table td:has(time[data-relative-time]) {
1857
+ white-space: nowrap;
1858
+ }
1859
+
1860
+ .ck-results-table td:has(time[data-relative-time]) {
1861
+ width: 1%;
1605
1862
  }
1606
1863
 
1607
1864
  .ck-details {
@@ -1652,41 +1909,208 @@ select.ck-input {
1652
1909
  border-top: 1px solid var(--ck-line);
1653
1910
  }
1654
1911
 
1912
+ .ck-run-config__dataset {
1913
+ display: inline-flex;
1914
+ align-items: center;
1915
+ gap: 0.65rem;
1916
+ flex-wrap: wrap;
1917
+ }
1655
1918
 
1656
- .ck-response-list {
1657
- display: grid;
1658
- gap: 0.75rem;
1659
- margin-top: 1.5rem;
1919
+ .ck-run-config__dataset-meta {
1920
+ font-family: var(--ck-mono);
1921
+ font-size: 0.72rem;
1922
+ letter-spacing: 0.04em;
1923
+ color: var(--ck-muted);
1660
1924
  }
1661
1925
 
1662
- .ck-response-card {
1663
- border: 1px solid var(--ck-line);
1664
- border-radius: var(--ck-radius-lg);
1665
- background: var(--ck-surface);
1666
- padding: 1.5rem;
1667
- transition: border-color 0.15s;
1926
+ .ck-run-config__dataset-preview {
1927
+ appearance: none;
1928
+ background: transparent;
1929
+ border: 1px solid rgba(6, 182, 212, 0.4);
1930
+ border-radius: 999px;
1931
+ color: var(--ck-accent);
1932
+ cursor: pointer;
1933
+ font-family: var(--ck-mono);
1934
+ font-size: 0.66rem;
1935
+ font-weight: 600;
1936
+ letter-spacing: 0.14em;
1937
+ text-transform: uppercase;
1938
+ padding: 0.2rem 0.6rem;
1939
+ transition: background 0.15s;
1668
1940
  }
1669
1941
 
1670
- .ck-response-card:hover {
1671
- border-color: var(--ck-line-strong);
1942
+ .ck-run-config__dataset-preview:hover {
1943
+ background: rgba(6, 182, 212, 0.12);
1672
1944
  }
1673
1945
 
1674
- .ck-response-card--low {
1675
- border-color: rgba(239, 68, 68, 0.25);
1946
+ .ck-modal {
1947
+ padding: 0;
1948
+ margin: auto;
1949
+ border: none;
1950
+ background: transparent;
1951
+ max-width: min(92vw, 880px);
1952
+ width: 100%;
1953
+ color: var(--ck-text);
1676
1954
  }
1677
1955
 
1678
- .ck-response-card--low:hover {
1679
- border-color: rgba(239, 68, 68, 0.4);
1956
+ .ck-modal::backdrop {
1957
+ background: rgba(8, 11, 20, 0.72);
1958
+ backdrop-filter: blur(4px);
1680
1959
  }
1681
1960
 
1682
- .ck-response-card__header {
1683
- display: flex;
1684
- align-items: center;
1685
- justify-content: space-between;
1686
- margin-bottom: 1rem;
1961
+ .ck-modal[open] {
1962
+ animation: ck-modal-in 0.18s ease-out;
1687
1963
  }
1688
1964
 
1689
- .ck-response-card__body {
1965
+ @keyframes ck-modal-in {
1966
+ from { opacity: 0; transform: translateY(8px) scale(0.985); }
1967
+ to { opacity: 1; transform: none; }
1968
+ }
1969
+
1970
+ .ck-modal__panel {
1971
+ display: flex;
1972
+ flex-direction: column;
1973
+ max-height: 82vh;
1974
+ background: var(--ck-surface);
1975
+ border: 1px solid var(--ck-line-strong);
1976
+ border-radius: var(--ck-radius-lg);
1977
+ box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55);
1978
+ overflow: hidden;
1979
+ }
1980
+
1981
+ .ck-modal__header {
1982
+ display: flex;
1983
+ align-items: center;
1984
+ justify-content: space-between;
1985
+ gap: 1rem;
1986
+ padding: 1.1rem 1.5rem 0.85rem;
1987
+ }
1988
+
1989
+ .ck-modal__heading {
1990
+ display: inline-flex;
1991
+ align-items: baseline;
1992
+ gap: 0.85rem;
1993
+ min-width: 0;
1994
+ }
1995
+
1996
+ .ck-modal__title {
1997
+ margin: 0;
1998
+ font-family: var(--ck-mono);
1999
+ font-size: 1.05rem;
2000
+ font-weight: 600;
2001
+ letter-spacing: -0.01em;
2002
+ color: var(--ck-text);
2003
+ }
2004
+
2005
+ .ck-modal__meta {
2006
+ margin: 0;
2007
+ font-family: var(--ck-mono);
2008
+ font-size: 0.72rem;
2009
+ letter-spacing: 0.06em;
2010
+ color: var(--ck-dim);
2011
+ text-transform: uppercase;
2012
+ }
2013
+
2014
+ .ck-modal__close {
2015
+ appearance: none;
2016
+ display: inline-flex;
2017
+ align-items: center;
2018
+ justify-content: center;
2019
+ width: 28px;
2020
+ height: 28px;
2021
+ padding: 0;
2022
+ border-radius: 50%;
2023
+ border: none;
2024
+ outline: none;
2025
+ background: transparent;
2026
+ color: var(--ck-dim);
2027
+ font-family: var(--ck-sans);
2028
+ font-size: 1.5rem;
2029
+ line-height: 1;
2030
+ cursor: pointer;
2031
+ transition: color 0.15s, background 0.15s;
2032
+ }
2033
+
2034
+ .ck-modal__close:hover {
2035
+ color: var(--ck-text);
2036
+ background: var(--ck-surface-hover);
2037
+ }
2038
+
2039
+ .ck-modal__close:focus-visible {
2040
+ outline: 2px solid var(--ck-accent);
2041
+ outline-offset: 2px;
2042
+ }
2043
+
2044
+ .ck-modal__body {
2045
+ flex: 1;
2046
+ margin: 0;
2047
+ background: transparent;
2048
+ overflow: auto;
2049
+ padding: 0 1.5rem;
2050
+ }
2051
+
2052
+ .ck-modal__footer {
2053
+ display: flex;
2054
+ justify-content: flex-end;
2055
+ gap: 0.6rem;
2056
+ padding: 0.95rem 1.5rem 1.1rem;
2057
+ }
2058
+
2059
+ .ck-modal__close-btn {
2060
+ appearance: none;
2061
+ font-family: var(--ck-mono);
2062
+ font-size: 0.74rem;
2063
+ font-weight: 600;
2064
+ letter-spacing: 0.12em;
2065
+ text-transform: uppercase;
2066
+ padding: 0.55rem 0.95rem;
2067
+ border: 1px solid var(--ck-line-strong);
2068
+ background: transparent;
2069
+ color: var(--ck-text);
2070
+ border-radius: var(--ck-radius);
2071
+ cursor: pointer;
2072
+ transition: background 0.15s;
2073
+ }
2074
+
2075
+ .ck-modal__close-btn:hover {
2076
+ background: var(--ck-surface-hover);
2077
+ }
2078
+
2079
+
2080
+ .ck-response-list {
2081
+ display: grid;
2082
+ gap: 0.75rem;
2083
+ margin-top: 1.5rem;
2084
+ }
2085
+
2086
+ .ck-response-card {
2087
+ border: 1px solid var(--ck-line);
2088
+ border-radius: var(--ck-radius-lg);
2089
+ background: var(--ck-surface);
2090
+ padding: 1.5rem;
2091
+ transition: border-color 0.15s;
2092
+ }
2093
+
2094
+ .ck-response-card:hover {
2095
+ border-color: var(--ck-line-strong);
2096
+ }
2097
+
2098
+ .ck-response-card--low {
2099
+ border-color: rgba(239, 68, 68, 0.25);
2100
+ }
2101
+
2102
+ .ck-response-card--low:hover {
2103
+ border-color: rgba(239, 68, 68, 0.4);
2104
+ }
2105
+
2106
+ .ck-response-card__header {
2107
+ display: flex;
2108
+ align-items: center;
2109
+ justify-content: space-between;
2110
+ margin-bottom: 1rem;
2111
+ }
2112
+
2113
+ .ck-response-card__body {
1690
2114
  display: grid;
1691
2115
  gap: 1rem;
1692
2116
  }
@@ -1746,41 +2170,49 @@ select.ck-input {
1746
2170
 
1747
2171
  .ck-dot {
1748
2172
  display: inline-block;
1749
- width: 8px;
1750
- height: 8px;
2173
+ width: 10px;
2174
+ height: 10px;
1751
2175
  border-radius: 50%;
1752
2176
  flex-shrink: 0;
1753
2177
  vertical-align: text-top;
1754
2178
  margin-top: 0.3em;
2179
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35);
1755
2180
  }
1756
2181
 
1757
2182
  .ck-dot--pending {
1758
2183
  background: var(--ck-accent);
2184
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35), 0 0 8px rgba(6, 182, 212, 0.45);
1759
2185
  }
1760
2186
 
1761
2187
  .ck-dot--running {
1762
2188
  background: var(--ck-accent);
1763
2189
  animation: ck-pulse 1.5s ease-in-out infinite;
2190
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35), 0 0 10px rgba(6, 182, 212, 0.6);
1764
2191
  }
1765
2192
 
1766
2193
  .ck-dot--completed {
1767
2194
  background: var(--ck-success);
2195
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35), 0 0 8px rgba(45, 212, 168, 0.5);
1768
2196
  }
1769
2197
 
1770
2198
  .ck-dot--high {
1771
2199
  background: var(--ck-success);
2200
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35), 0 0 8px rgba(45, 212, 168, 0.5);
1772
2201
  }
1773
2202
 
1774
2203
  .ck-dot--medium {
1775
2204
  background: var(--ck-warning);
2205
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35), 0 0 8px rgba(224, 164, 88, 0.5);
1776
2206
  }
1777
2207
 
1778
2208
  .ck-dot--low {
1779
2209
  background: var(--ck-danger);
2210
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35), 0 0 8px rgba(248, 113, 113, 0.5);
1780
2211
  }
1781
2212
 
1782
2213
  .ck-dot--failed {
1783
2214
  background: var(--ck-danger);
2215
+ box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.35), 0 0 8px rgba(248, 113, 113, 0.5);
1784
2216
  }
1785
2217
 
1786
2218
  @keyframes ck-pulse {
@@ -1791,7 +2223,12 @@ select.ck-input {
1791
2223
  .ck-run-name {
1792
2224
  display: inline-flex;
1793
2225
  align-items: center;
1794
- gap: 0.5rem;
2226
+ gap: 0.6rem;
2227
+ }
2228
+
2229
+ .ck-run-name .ck-dot {
2230
+ margin: 0;
2231
+ vertical-align: baseline;
1795
2232
  }
1796
2233
 
1797
2234
  .ck-title .ck-run-name {
@@ -2131,24 +2568,200 @@ select.ck-input {
2131
2568
  }
2132
2569
  }
2133
2570
 
2571
+ .ck-metric-groups {
2572
+ display: grid;
2573
+ gap: 0.4rem;
2574
+ margin-bottom: 0.5rem;
2575
+ }
2576
+
2577
+ .ck-metric-groups__label {
2578
+ font-family: var(--ck-mono);
2579
+ font-size: 0.66rem;
2580
+ font-weight: 500;
2581
+ letter-spacing: 0.14em;
2582
+ text-transform: uppercase;
2583
+ color: var(--ck-dim);
2584
+ }
2585
+
2586
+ .ck-metric-groups__row {
2587
+ display: flex;
2588
+ flex-wrap: wrap;
2589
+ gap: 0.4rem;
2590
+ }
2591
+
2592
+ .ck-metric-group-pill {
2593
+ display: inline-flex;
2594
+ align-items: center;
2595
+ gap: 0.4rem;
2596
+ padding: 0.32rem 0.7rem;
2597
+ background: transparent;
2598
+ border: 1px solid var(--ck-line);
2599
+ border-radius: 999px;
2600
+ color: var(--ck-muted);
2601
+ font-family: var(--ck-mono);
2602
+ font-size: 0.78rem;
2603
+ letter-spacing: -0.01em;
2604
+ cursor: pointer;
2605
+ transition: border-color 0.15s, color 0.15s, background 0.15s;
2606
+ }
2607
+
2608
+ .ck-metric-group-pill:hover {
2609
+ border-color: rgba(6, 182, 212, 0.5);
2610
+ color: var(--ck-text);
2611
+ }
2612
+
2613
+ .ck-metric-group-pill__check {
2614
+ display: inline-flex;
2615
+ align-items: center;
2616
+ justify-content: center;
2617
+ width: 13px;
2618
+ height: 13px;
2619
+ border: 1px solid var(--ck-line-strong);
2620
+ border-radius: 3px;
2621
+ font-size: 0.62rem;
2622
+ color: transparent;
2623
+ transition: background 0.15s, border-color 0.15s, color 0.15s;
2624
+ }
2625
+
2626
+ .ck-metric-group-pill__count {
2627
+ font-family: var(--ck-mono);
2628
+ font-size: 0.68rem;
2629
+ letter-spacing: 0.04em;
2630
+ color: var(--ck-dim);
2631
+ padding: 0 0.35rem;
2632
+ border-left: 1px solid var(--ck-line);
2633
+ margin-left: 0.1rem;
2634
+ }
2635
+
2636
+ .ck-metric-group-pill--active {
2637
+ border-color: var(--ck-accent);
2638
+ color: var(--ck-text);
2639
+ background: rgba(6, 182, 212, 0.08);
2640
+ }
2641
+
2642
+ .ck-metric-group-pill--active .ck-metric-group-pill__check {
2643
+ background: var(--ck-accent);
2644
+ border-color: var(--ck-accent);
2645
+ color: var(--ck-bg);
2646
+ }
2647
+
2648
+ .ck-metric-group-pill--active .ck-metric-group-pill__count {
2649
+ color: var(--ck-accent);
2650
+ border-left-color: rgba(6, 182, 212, 0.4);
2651
+ }
2652
+
2653
+ .ck-metric-divider {
2654
+ display: flex;
2655
+ align-items: center;
2656
+ gap: 0.6rem;
2657
+ margin: 0.15rem 0 0.35rem;
2658
+ color: var(--ck-dim);
2659
+ font-family: var(--ck-mono);
2660
+ font-size: 0.66rem;
2661
+ letter-spacing: 0.12em;
2662
+ text-transform: uppercase;
2663
+ }
2664
+
2665
+ .ck-metric-divider::before,
2666
+ .ck-metric-divider::after {
2667
+ content: "";
2668
+ flex: 1;
2669
+ border-top: 1px dashed var(--ck-line);
2670
+ }
2671
+
2134
2672
  .ck-metric-checkboxes {
2135
2673
  display: grid;
2136
- gap: 0.25rem;
2674
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
2675
+ gap: 0.5rem 0.85rem;
2137
2676
  }
2138
2677
 
2139
2678
  .ck-checkbox-label {
2140
2679
  display: flex;
2141
- align-items: center;
2142
- gap: 0.5rem;
2680
+ align-items: flex-start;
2681
+ gap: 0.6rem;
2143
2682
  font-family: var(--ck-sans);
2144
- font-size: 0.9rem;
2145
- color: var(--ck-text);
2683
+ font-size: 0.88rem;
2684
+ color: var(--ck-muted);
2146
2685
  cursor: pointer;
2147
2686
  padding: 0.35rem 0;
2148
2687
  }
2149
2688
 
2150
- .ck-checkbox-label:hover {
2151
- color: var(--ck-accent);
2689
+ .ck-checkbox-label__body {
2690
+ display: flex;
2691
+ flex-direction: column;
2692
+ gap: 0.15rem;
2693
+ min-width: 0;
2694
+ }
2695
+
2696
+ .ck-checkbox-label__text {
2697
+ font-family: var(--ck-mono);
2698
+ font-size: 0.85rem;
2699
+ letter-spacing: -0.01em;
2700
+ }
2701
+
2702
+ .ck-checkbox-label__hint {
2703
+ font-family: var(--ck-sans);
2704
+ font-size: 0.78rem;
2705
+ line-height: 1.4;
2706
+ color: var(--ck-dim);
2707
+ }
2708
+
2709
+ .ck-checkbox-label__box {
2710
+ margin-top: 1px;
2711
+ }
2712
+
2713
+ .ck-checkbox-label input.ck-checkbox {
2714
+ position: absolute;
2715
+ opacity: 0;
2716
+ pointer-events: none;
2717
+ width: 0;
2718
+ height: 0;
2719
+ }
2720
+
2721
+ .ck-checkbox-label__box {
2722
+ display: inline-flex;
2723
+ align-items: center;
2724
+ justify-content: center;
2725
+ width: 16px;
2726
+ height: 16px;
2727
+ border: 1px solid var(--ck-line-strong);
2728
+ border-radius: 4px;
2729
+ background: var(--ck-surface);
2730
+ flex-shrink: 0;
2731
+ transition: border-color 0.15s, background 0.15s;
2732
+ }
2733
+
2734
+ .ck-checkbox-label__box::after {
2735
+ content: "";
2736
+ width: 8px;
2737
+ height: 4px;
2738
+ border-left: 1.5px solid var(--ck-bg);
2739
+ border-bottom: 1.5px solid var(--ck-bg);
2740
+ transform: rotate(-45deg) translate(1px, -1px) scale(0);
2741
+ transition: transform 0.12s ease-out;
2742
+ }
2743
+
2744
+ .ck-checkbox-label input.ck-checkbox:checked + .ck-checkbox-label__box {
2745
+ background: var(--ck-accent);
2746
+ border-color: var(--ck-accent);
2747
+ }
2748
+
2749
+ .ck-checkbox-label input.ck-checkbox:checked + .ck-checkbox-label__box::after {
2750
+ transform: rotate(-45deg) translate(1px, -1px) scale(1);
2751
+ }
2752
+
2753
+ .ck-checkbox-label input.ck-checkbox:focus-visible + .ck-checkbox-label__box {
2754
+ outline: 2px solid var(--ck-accent);
2755
+ outline-offset: 2px;
2756
+ }
2757
+
2758
+ .ck-checkbox-label:hover .ck-checkbox-label__box {
2759
+ border-color: var(--ck-accent);
2760
+ }
2761
+
2762
+ .ck-checkbox-label:hover .ck-checkbox-label__text,
2763
+ .ck-checkbox-label input.ck-checkbox:checked ~ .ck-checkbox-label__text {
2764
+ color: var(--ck-text);
2152
2765
  }
2153
2766
 
2154
2767
  .ck-response-row {
@@ -2187,10 +2800,184 @@ select.ck-input {
2187
2800
  white-space: nowrap;
2188
2801
  }
2189
2802
 
2803
+ .ck-response-row__metrics {
2804
+ flex-shrink: 0;
2805
+ display: inline-flex;
2806
+ align-items: center;
2807
+ }
2808
+
2190
2809
  .ck-response-row__score {
2191
2810
  flex-shrink: 0;
2192
2811
  }
2193
2812
 
2813
+ .ck-prompts-table th {
2814
+ white-space: nowrap;
2815
+ }
2816
+
2817
+ .ck-prompts-table th:nth-child(n+2),
2818
+ .ck-prompts-table td:nth-child(n+2) {
2819
+ width: 1%;
2820
+ white-space: nowrap;
2821
+ }
2822
+
2823
+ .ck-prompts-table__runs {
2824
+ display: flex;
2825
+ flex-direction: column;
2826
+ gap: 0.15rem;
2827
+ line-height: 1.2;
2828
+ }
2829
+
2830
+ .ck-prompts-table__runs-count {
2831
+ font-family: var(--ck-mono);
2832
+ color: var(--ck-text);
2833
+ }
2834
+
2835
+ .ck-prompts-table__runs-when {
2836
+ font-family: var(--ck-sans);
2837
+ font-size: 0.78rem;
2838
+ color: var(--ck-dim);
2839
+ }
2840
+
2841
+ .ck-prompts-table__dim {
2842
+ color: var(--ck-dim);
2843
+ }
2844
+
2845
+ .ck-metrics-table__groups {
2846
+ display: flex;
2847
+ flex-wrap: wrap;
2848
+ gap: 0.35rem;
2849
+ }
2850
+
2851
+ a.ck-metric-group-pill {
2852
+ text-decoration: none;
2853
+ }
2854
+
2855
+ .ck-metrics-table__dim {
2856
+ color: var(--ck-dim);
2857
+ }
2858
+
2859
+ .ck-responses-table th {
2860
+ white-space: nowrap;
2861
+ }
2862
+
2863
+ .ck-responses-table th:first-child {
2864
+ text-align: right;
2865
+ padding-right: 0.85rem;
2866
+ }
2867
+
2868
+ .ck-responses-table th:not(:nth-child(2)),
2869
+ .ck-responses-table td:not(:nth-child(2)) {
2870
+ width: 1%;
2871
+ white-space: nowrap;
2872
+ }
2873
+
2874
+ .ck-runs-table th {
2875
+ vertical-align: middle;
2876
+ white-space: nowrap;
2877
+ }
2878
+
2879
+ .ck-runs-table td {
2880
+ vertical-align: middle;
2881
+ padding-top: 0.7rem;
2882
+ padding-bottom: 0.7rem;
2883
+ }
2884
+
2885
+ .ck-runs-table th:nth-child(n+2),
2886
+ .ck-runs-table td:nth-child(n+2) {
2887
+ width: 1%;
2888
+ white-space: nowrap;
2889
+ }
2890
+
2891
+ .ck-runs-table__identity {
2892
+ display: flex;
2893
+ flex-direction: column;
2894
+ gap: 0.25rem;
2895
+ min-width: 0;
2896
+ }
2897
+
2898
+ .ck-runs-table .ck-run-name {
2899
+ line-height: 1.2;
2900
+ }
2901
+
2902
+ .ck-runs-table__config {
2903
+ display: inline-flex;
2904
+ align-items: baseline;
2905
+ gap: 0.35rem;
2906
+ font-size: 0.78rem;
2907
+ color: var(--ck-muted);
2908
+ padding-left: 1.2rem;
2909
+ white-space: nowrap;
2910
+ }
2911
+
2912
+ .ck-runs-table__config-link {
2913
+ color: var(--ck-muted);
2914
+ text-decoration: none;
2915
+ transition: color 0.15s;
2916
+ }
2917
+
2918
+ .ck-runs-table__config-link:hover {
2919
+ color: var(--ck-accent);
2920
+ }
2921
+
2922
+ .ck-runs-table__version {
2923
+ font-family: var(--ck-mono);
2924
+ font-size: 0.7rem;
2925
+ letter-spacing: 0.04em;
2926
+ color: var(--ck-dim);
2927
+ }
2928
+
2929
+ .ck-runs-table__sep {
2930
+ color: var(--ck-line-strong);
2931
+ }
2932
+
2933
+ .ck-runs-table__dim {
2934
+ color: var(--ck-dim);
2935
+ }
2936
+
2937
+ .ck-runs-table__count {
2938
+ font-family: var(--ck-mono);
2939
+ white-space: nowrap;
2940
+ }
2941
+
2942
+ .ck-runs-table__count-of {
2943
+ color: var(--ck-dim);
2944
+ margin-left: 0.15rem;
2945
+ }
2946
+
2947
+ .ck-runs-table__when {
2948
+ font-family: var(--ck-sans);
2949
+ font-size: 0.95rem;
2950
+ line-height: 1.6;
2951
+ color: var(--ck-muted);
2952
+ white-space: nowrap;
2953
+ }
2954
+
2955
+ .ck-response-cell__index {
2956
+ font-family: var(--ck-mono);
2957
+ font-size: 0.78rem;
2958
+ color: var(--ck-dim);
2959
+ text-align: right;
2960
+ width: 1%;
2961
+ padding-right: 0.85rem !important;
2962
+ }
2963
+
2964
+ .ck-response-cell__text {
2965
+ width: 100%;
2966
+ max-width: 0;
2967
+ overflow: hidden;
2968
+ text-overflow: ellipsis;
2969
+ white-space: nowrap;
2970
+ color: var(--ck-muted);
2971
+ }
2972
+
2973
+ .ck-response-cell__error {
2974
+ color: var(--ck-danger);
2975
+ }
2976
+
2977
+ .ck-response-cell__dim {
2978
+ color: var(--ck-dim);
2979
+ }
2980
+
2194
2981
  .ck-response-row--pending .ck-response-row__text,
2195
2982
  .ck-response-row--retrying .ck-response-row__text {
2196
2983
  color: var(--ck-dim);
@@ -2206,17 +2993,6 @@ select.ck-input {
2206
2993
  font-size: 0.82rem;
2207
2994
  }
2208
2995
 
2209
- .ck-score {
2210
- font-size: 0.85rem;
2211
- color: var(--ck-muted);
2212
- white-space: nowrap;
2213
- }
2214
-
2215
- .ck-score__star {
2216
- font-size: 1rem;
2217
- color: #f59e0b;
2218
- }
2219
-
2220
2996
  .ck-prompt-preview {
2221
2997
  margin-top: 1rem;
2222
2998
  }
@@ -2318,16 +3094,21 @@ select.ck-input {
2318
3094
  display: inline-flex;
2319
3095
  align-items: center;
2320
3096
  justify-content: center;
2321
- width: 18px;
2322
- height: 18px;
3097
+ width: 16px;
3098
+ height: 16px;
2323
3099
  border-radius: 50%;
2324
3100
  border: 1px solid var(--ck-line-strong);
2325
3101
  color: var(--ck-muted);
2326
- font-size: 0.65rem;
2327
- font-weight: 700;
3102
+ font-family: var(--ck-sans);
3103
+ font-size: 0.7rem;
3104
+ font-weight: 600;
3105
+ line-height: 1;
3106
+ letter-spacing: 0;
3107
+ text-indent: 0;
3108
+ text-transform: none;
2328
3109
  cursor: help;
2329
3110
  vertical-align: middle;
2330
- margin-left: 0.35rem;
3111
+ margin-left: 0.4rem;
2331
3112
  position: relative;
2332
3113
  }
2333
3114