@norman-else/dsh-claude 0.1.21 → 0.1.22

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/lib/client.js CHANGED
@@ -577,15 +577,15 @@ window.__ModuleLoader__.load({
577
577
  const settingsBody = {
578
578
  margin: 0,
579
579
  color: "var(--dsw-alias-label-secondary)",
580
- fontSize: 13,
581
- lineHeight: "20px"
580
+ fontSize: 14,
581
+ lineHeight: "22px"
582
582
  };
583
583
  const settingsCard = {
584
584
  display: "flex",
585
585
  flexDirection: "column",
586
586
  gap: 14,
587
587
  padding: 18,
588
- border: "1px solid var(--dsw-alias-border-l2)",
588
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
589
589
  borderRadius: 14,
590
590
  background: "var(--dsw-alias-bg-layer-1)"
591
591
  };
@@ -600,8 +600,8 @@ window.__ModuleLoader__.load({
600
600
  gridTemplateColumns: "minmax(130px, 0.36fr) minmax(0, 1fr)",
601
601
  gap: "10px 18px",
602
602
  padding: "14px 0",
603
- borderTop: "1px solid var(--dsw-alias-border-l2)",
604
- borderBottom: "1px solid var(--dsw-alias-border-l2)",
603
+ borderTop: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
604
+ borderBottom: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
605
605
  fontSize: 13
606
606
  };
607
607
  const diagnosticLabel = { color: "var(--dsw-alias-label-tertiary)" };
@@ -620,13 +620,13 @@ window.__ModuleLoader__.load({
620
620
  boxSizing: "border-box",
621
621
  minHeight: 38,
622
622
  padding: "7px 13px",
623
- border: "1px solid var(--dsw-alias-border-l2)",
623
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
624
624
  borderRadius: 10,
625
625
  background: "var(--dsw-alias-bg-layer-2)",
626
626
  color: "var(--dsw-alias-label-primary)",
627
627
  font: "inherit",
628
- fontSize: 13,
629
- lineHeight: "20px"
628
+ fontSize: 14,
629
+ lineHeight: "22px"
630
630
  };
631
631
  const settingSelectTrigger = {
632
632
  width: "100%",
@@ -636,14 +636,14 @@ window.__ModuleLoader__.load({
636
636
  justifyContent: "space-between",
637
637
  gap: 12,
638
638
  padding: "7px 11px 7px 13px",
639
- border: "1px solid var(--dsw-alias-border-l2)",
639
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
640
640
  borderRadius: 10,
641
641
  background: "var(--dsw-alias-bg-layer-2)",
642
642
  color: "var(--dsw-alias-label-primary)",
643
643
  boxShadow: "0 1px 2px color-mix(in srgb, var(--dsw-alias-label-primary) 5%, transparent)",
644
644
  font: "inherit",
645
- fontSize: 13,
646
- lineHeight: "20px",
645
+ fontSize: 14,
646
+ lineHeight: "22px",
647
647
  textAlign: "left",
648
648
  cursor: "pointer",
649
649
  transition: "border-color 120ms ease, box-shadow 120ms ease, background 120ms ease"
@@ -678,7 +678,7 @@ window.__ModuleLoader__.load({
678
678
  maxHeight: 240,
679
679
  overflowY: "auto",
680
680
  padding: 5,
681
- border: "1px solid var(--dsw-alias-border-l2)",
681
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
682
682
  borderRadius: 11,
683
683
  background: "var(--dsw-alias-bg-layer-1)",
684
684
  boxShadow: "0 12px 32px color-mix(in srgb, var(--dsw-alias-label-primary) 16%, transparent), 0 2px 8px color-mix(in srgb, var(--dsw-alias-label-primary) 8%, transparent)"
@@ -695,8 +695,8 @@ window.__ModuleLoader__.load({
695
695
  background: "transparent",
696
696
  color: "var(--dsw-alias-label-primary)",
697
697
  font: "inherit",
698
- fontSize: 13,
699
- lineHeight: "20px",
698
+ fontSize: 14,
699
+ lineHeight: "22px",
700
700
  textAlign: "left",
701
701
  cursor: "pointer"
702
702
  };
@@ -728,7 +728,7 @@ window.__ModuleLoader__.load({
728
728
  flex: "none",
729
729
  minHeight: 34,
730
730
  padding: "6px 14px",
731
- border: "1px solid var(--dsw-alias-border-l2)",
731
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
732
732
  borderRadius: 9,
733
733
  background: "var(--dsw-alias-bg-layer-2)",
734
734
  color: "var(--dsw-alias-label-primary)",
@@ -752,7 +752,7 @@ window.__ModuleLoader__.load({
752
752
  minWidth: 0,
753
753
  margin: 8,
754
754
  overflow: "hidden",
755
- border: "1px solid var(--dsw-alias-border-l2)",
755
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
756
756
  borderRadius: 12,
757
757
  background: "var(--dsw-alias-bg-layer-1)",
758
758
  boxShadow: "0 4px 16px color-mix(in srgb, #000 12%, transparent)"
@@ -766,7 +766,7 @@ window.__ModuleLoader__.load({
766
766
  justifyContent: "space-between",
767
767
  gap: 10,
768
768
  padding: "9px 12px",
769
- borderBottom: "1px solid var(--dsw-alias-border-l2)"
769
+ borderBottom: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))"
770
770
  };
771
771
  const tasksHeading = {
772
772
  display: "block",
@@ -830,8 +830,8 @@ window.__ModuleLoader__.load({
830
830
  alignItems: "center",
831
831
  gap: 6,
832
832
  color: "var(--dsw-alias-label-secondary)",
833
- fontSize: 13,
834
- lineHeight: "20px",
833
+ fontSize: 14,
834
+ lineHeight: "22px",
835
835
  fontWeight: 600
836
836
  };
837
837
  const tasksGroupToggle = {
@@ -843,8 +843,8 @@ window.__ModuleLoader__.load({
843
843
  background: "transparent",
844
844
  color: "var(--dsw-alias-label-secondary)",
845
845
  font: "inherit",
846
- fontSize: 13,
847
- lineHeight: "20px",
846
+ fontSize: 14,
847
+ lineHeight: "22px",
848
848
  fontWeight: 600,
849
849
  cursor: "pointer"
850
850
  };
@@ -868,7 +868,7 @@ window.__ModuleLoader__.load({
868
868
  const tasksFinishedSection = {
869
869
  marginTop: 12,
870
870
  paddingTop: 8,
871
- borderTop: "1px solid var(--dsw-alias-border-l2)"
871
+ borderTop: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))"
872
872
  };
873
873
  const taskCardList = {
874
874
  display: "flex",
@@ -878,12 +878,12 @@ window.__ModuleLoader__.load({
878
878
  };
879
879
  const taskCard = {
880
880
  padding: "11px 12px",
881
- border: "1px solid var(--dsw-alias-border-l2)",
881
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
882
882
  borderRadius: 10,
883
883
  background: "var(--dsw-alias-bg-layer-1)",
884
884
  boxShadow: "0 1px 3px color-mix(in srgb, #000 7%, transparent)"
885
885
  };
886
- const taskCardRunning = { borderColor: "var(--dsw-alias-border-l3)" };
886
+ const taskCardRunning = { borderColor: "var(--dsw-alias-border-l3, color-mix(in srgb, currentColor 24%, transparent))" };
887
887
  const taskCardTop = {
888
888
  display: "flex",
889
889
  alignItems: "flex-start",
@@ -994,7 +994,7 @@ window.__ModuleLoader__.load({
994
994
  };
995
995
  const tasksBadgeWrap = {
996
996
  display: "flex",
997
- justifyContent: "flex-end",
997
+ justifyContent: "flex-start",
998
998
  margin: "8px 0 4px"
999
999
  };
1000
1000
  const tasksBadgeSeat = {
@@ -1009,15 +1009,15 @@ window.__ModuleLoader__.load({
1009
1009
  border: "none",
1010
1010
  borderRadius: 6,
1011
1011
  background: "transparent",
1012
- color: "var(--dsw-alias-label-tertiary)",
1012
+ color: "var(--dsw-static-blue-450)",
1013
1013
  font: "inherit",
1014
- fontSize: 11,
1015
- lineHeight: "16px",
1014
+ fontSize: 14,
1015
+ lineHeight: "22px",
1016
1016
  fontVariantNumeric: "tabular-nums",
1017
1017
  cursor: "pointer",
1018
1018
  transition: "color 120ms ease, opacity 120ms ease"
1019
1019
  };
1020
- const tasksBadgeHovered = { color: "var(--dsw-alias-label-secondary)" };
1020
+ const tasksBadgeHovered = { textDecoration: "underline" };
1021
1021
  const tasksBadgeDone = { opacity: .7 };
1022
1022
  const tasksBadgeDot = {
1023
1023
  width: 8,
@@ -1028,10 +1028,10 @@ window.__ModuleLoader__.load({
1028
1028
  };
1029
1029
  const tasksBadgeDotError = { background: "var(--dsw-alias-state-error-primary)" };
1030
1030
  const tasksBadgeDotDone = { background: "var(--dsw-alias-state-success-primary, var(--dsw-static-green-500))" };
1031
- const tasksBadgeCount = { fontWeight: 600 };
1031
+ const tasksBadgeLabel = { fontWeight: 500 };
1032
1032
  const tasksHoverCard = {
1033
1033
  position: "absolute",
1034
- right: 0,
1034
+ left: 0,
1035
1035
  bottom: "calc(100% + 8px)",
1036
1036
  zIndex: 40,
1037
1037
  minWidth: 240,
@@ -1041,7 +1041,7 @@ window.__ModuleLoader__.load({
1041
1041
  flexDirection: "column",
1042
1042
  gap: 6,
1043
1043
  padding: "10px 12px",
1044
- border: "1px solid var(--dsw-alias-border-l2)",
1044
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1045
1045
  borderRadius: 12,
1046
1046
  background: "var(--dsw-alias-bg-layer-2)",
1047
1047
  boxShadow: "0 8px 24px color-mix(in srgb, #000 24%, transparent)",
@@ -1087,7 +1087,7 @@ window.__ModuleLoader__.load({
1087
1087
  const tasksHoverHint = {
1088
1088
  marginTop: 2,
1089
1089
  paddingTop: 6,
1090
- borderTop: "1px solid var(--dsw-alias-border-l1)",
1090
+ borderTop: "1px solid var(--dsw-alias-border-l1, color-mix(in srgb, currentColor 12%, transparent))",
1091
1091
  color: "var(--dsw-alias-label-tertiary)",
1092
1092
  fontSize: 11
1093
1093
  };
@@ -1104,7 +1104,7 @@ window.__ModuleLoader__.load({
1104
1104
  alignItems: "center",
1105
1105
  minWidth: 0,
1106
1106
  padding: 2,
1107
- border: "1px solid var(--dsw-alias-border-l1)",
1107
+ border: "1px solid var(--dsw-alias-border-l1, color-mix(in srgb, currentColor 12%, transparent))",
1108
1108
  borderRadius: 10,
1109
1109
  background: "var(--dsw-alias-interactive-bg-base, var(--dsw-alias-bg-layer-1))",
1110
1110
  color: "var(--dsw-alias-label-secondary)"
@@ -1149,7 +1149,7 @@ window.__ModuleLoader__.load({
1149
1149
  flexDirection: "column",
1150
1150
  gap: 4,
1151
1151
  padding: 4,
1152
- border: "1px solid var(--dsw-alias-border-inverted)",
1152
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1153
1153
  borderRadius: 10,
1154
1154
  background: "var(--dsw-specific-menu)",
1155
1155
  boxShadow: "var(--dsw-shadow-lv3)"
@@ -1161,7 +1161,7 @@ window.__ModuleLoader__.load({
1161
1161
  alignItems: "center",
1162
1162
  gap: 6,
1163
1163
  padding: "0 8px",
1164
- border: "1px solid var(--dsw-alias-border-l2)",
1164
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1165
1165
  borderRadius: 7,
1166
1166
  background: "var(--dsw-alias-bg-layer-1)",
1167
1167
  color: "var(--dsw-alias-label-tertiary)"
@@ -1221,7 +1221,7 @@ window.__ModuleLoader__.load({
1221
1221
  width: 1,
1222
1222
  height: 16,
1223
1223
  flex: "none",
1224
- background: "var(--dsw-alias-border-l2)"
1224
+ background: "var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))"
1225
1225
  };
1226
1226
  const heroWorktreeToggle = {
1227
1227
  height: 26,
@@ -1253,7 +1253,7 @@ window.__ModuleLoader__.load({
1253
1253
  display: "grid",
1254
1254
  placeItems: "center",
1255
1255
  flex: "none",
1256
- border: "1px solid var(--dsw-alias-border-inverted)",
1256
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1257
1257
  borderRadius: 4,
1258
1258
  background: "var(--dsw-alias-bg-layer-2)",
1259
1259
  boxShadow: "inset 0 1px 1px rgba(0, 0, 0, 0.08)",
@@ -1281,7 +1281,7 @@ window.__ModuleLoader__.load({
1281
1281
  flexDirection: "column",
1282
1282
  gap: 12,
1283
1283
  padding: 14,
1284
- border: "1px solid var(--dsw-alias-border-l2)",
1284
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1285
1285
  borderRadius: 12,
1286
1286
  background: "var(--dsw-alias-bg-layer-1)",
1287
1287
  boxShadow: "var(--dsw-shadow-lv3)"
@@ -1401,18 +1401,18 @@ window.__ModuleLoader__.load({
1401
1401
  alignItems: "center",
1402
1402
  gap: 9,
1403
1403
  padding: "7px 11px",
1404
- border: "1px solid var(--dsw-alias-border-l2)",
1404
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1405
1405
  borderRadius: 11,
1406
1406
  background: "var(--dsw-alias-bg-layer-1)",
1407
1407
  color: "var(--dsw-alias-label-primary)",
1408
1408
  boxShadow: "0 1px 2px color-mix(in srgb, var(--dsw-alias-label-primary) 4%, transparent)",
1409
1409
  font: "inherit",
1410
- fontSize: 13,
1411
- lineHeight: "20px",
1410
+ fontSize: 14,
1411
+ lineHeight: "22px",
1412
1412
  textAlign: "left"
1413
1413
  };
1414
1414
  const repositoryBarMerged = {
1415
- borderColor: "color-mix(in srgb, #a78bfa 30%, var(--dsw-alias-border-l2))",
1415
+ borderColor: "color-mix(in srgb, #a78bfa 30%, var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent)))",
1416
1416
  background: "color-mix(in srgb, #a78bfa 5%, var(--dsw-alias-bg-layer-1))"
1417
1417
  };
1418
1418
  const repositoryPrIcon = {
@@ -1457,7 +1457,7 @@ window.__ModuleLoader__.load({
1457
1457
  flexDirection: "column",
1458
1458
  gap: 10,
1459
1459
  padding: "13px 14px",
1460
- border: "1px solid var(--dsw-alias-border-l2)",
1460
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1461
1461
  borderRadius: 12,
1462
1462
  background: "var(--dsw-alias-bg-layer-1)",
1463
1463
  boxShadow: "0 14px 38px color-mix(in srgb, #000 34%, transparent)",
@@ -1632,7 +1632,7 @@ window.__ModuleLoader__.load({
1632
1632
  gap: 4,
1633
1633
  minHeight: 26,
1634
1634
  padding: "3px 8px",
1635
- border: "1px solid var(--dsw-alias-border-l2)",
1635
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1636
1636
  borderRadius: 7,
1637
1637
  background: "var(--dsw-alias-bg-layer-2)",
1638
1638
  font: "inherit",
@@ -1645,6 +1645,23 @@ window.__ModuleLoader__.load({
1645
1645
  background: "transparent",
1646
1646
  color: "var(--dsw-alias-label-tertiary)"
1647
1647
  };
1648
+ const repositoryMergeTrigger = {
1649
+ flex: "none",
1650
+ display: "inline-flex",
1651
+ alignItems: "center",
1652
+ gap: 4,
1653
+ minHeight: 26,
1654
+ padding: "3px 8px",
1655
+ border: "1px solid color-mix(in srgb, var(--dsw-alias-state-success-primary) 45%, transparent)",
1656
+ borderRadius: 7,
1657
+ background: "color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)",
1658
+ color: "var(--dsw-alias-state-success-primary)",
1659
+ font: "inherit",
1660
+ fontSize: 12,
1661
+ lineHeight: "18px",
1662
+ fontWeight: 650,
1663
+ cursor: "pointer"
1664
+ };
1648
1665
  const diffAdd = { color: "var(--dsw-alias-state-success-primary)" };
1649
1666
  const diffDelete = { color: "var(--dsw-alias-state-error-primary)" };
1650
1667
  const diffCommentButtonClass = "dshClaudeDiffCommentButton";
@@ -1690,7 +1707,7 @@ window.__ModuleLoader__.load({
1690
1707
  left: 62,
1691
1708
  margin: "4px 8px 8px 62px",
1692
1709
  padding: "8px 10px",
1693
- border: "1px solid var(--dsw-alias-border-l2)",
1710
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1694
1711
  borderRadius: 8,
1695
1712
  background: "var(--dsw-alias-bg-layer-1)",
1696
1713
  fontFamily: "var(--dsw-font-family, system-ui)",
@@ -1717,7 +1734,7 @@ window.__ModuleLoader__.load({
1717
1734
  minHeight: 56,
1718
1735
  boxSizing: "border-box",
1719
1736
  padding: "6px 8px",
1720
- border: "1px solid var(--dsw-alias-border-l2)",
1737
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1721
1738
  borderRadius: 6,
1722
1739
  background: "var(--dsw-alias-bg-base)",
1723
1740
  color: "var(--dsw-alias-label-primary)",
@@ -1733,7 +1750,7 @@ window.__ModuleLoader__.load({
1733
1750
  const diffCommentActionButton = {
1734
1751
  minHeight: 24,
1735
1752
  padding: "2px 10px",
1736
- border: "1px solid var(--dsw-alias-border-l2)",
1753
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1737
1754
  borderRadius: 6,
1738
1755
  background: "transparent",
1739
1756
  color: "var(--dsw-alias-label-secondary)",
@@ -1768,7 +1785,7 @@ window.__ModuleLoader__.load({
1768
1785
  alignItems: "center",
1769
1786
  gap: 8,
1770
1787
  padding: "7px 11px",
1771
- border: "1px solid var(--dsw-alias-border-l2)",
1788
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1772
1789
  borderRadius: 11,
1773
1790
  background: "var(--dsw-alias-bg-layer-1)",
1774
1791
  boxShadow: "0 1px 2px color-mix(in srgb, var(--dsw-alias-label-primary) 4%, transparent)",
@@ -1856,7 +1873,7 @@ window.__ModuleLoader__.load({
1856
1873
  minWidth: 0,
1857
1874
  margin: 8,
1858
1875
  overflow: "hidden",
1859
- border: "1px solid var(--dsw-alias-border-l2)",
1876
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1860
1877
  borderRadius: 12,
1861
1878
  background: "var(--dsw-alias-bg-layer-1)",
1862
1879
  boxShadow: "0 4px 16px color-mix(in srgb, #000 12%, transparent)"
@@ -1875,7 +1892,7 @@ window.__ModuleLoader__.load({
1875
1892
  justifyContent: "space-between",
1876
1893
  gap: 10,
1877
1894
  padding: "9px 12px",
1878
- borderBottom: "1px solid var(--dsw-alias-border-l2)"
1895
+ borderBottom: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))"
1879
1896
  };
1880
1897
  const diffHeaderTitle = {
1881
1898
  minWidth: 0,
@@ -1939,7 +1956,7 @@ window.__ModuleLoader__.load({
1939
1956
  alignItems: "center",
1940
1957
  gap: 7,
1941
1958
  padding: "6px 12px",
1942
- borderBottom: "1px solid var(--dsw-alias-border-l2)",
1959
+ borderBottom: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
1943
1960
  color: "var(--dsw-alias-label-tertiary)",
1944
1961
  fontSize: 12
1945
1962
  };
@@ -1949,7 +1966,7 @@ window.__ModuleLoader__.load({
1949
1966
  overflow: "auto",
1950
1967
  background: "var(--dsw-alias-bg-base)"
1951
1968
  };
1952
- const diffFile = { borderBottom: "1px solid var(--dsw-alias-border-l2)" };
1969
+ const diffFile = { borderBottom: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))" };
1953
1970
  const diffFileHeader = {
1954
1971
  width: "100%",
1955
1972
  minHeight: 38,
@@ -1984,8 +2001,8 @@ window.__ModuleLoader__.load({
1984
2001
  padding: "4px 0 8px",
1985
2002
  background: "var(--dsw-alias-bg-base)",
1986
2003
  fontFamily: "var(--dsw-font-family-mono, ui-monospace, SFMono-Regular, Consolas, monospace)",
1987
- fontSize: 13,
1988
- lineHeight: "20px"
2004
+ fontSize: 14,
2005
+ lineHeight: "22px"
1989
2006
  };
1990
2007
  const diffLine = {
1991
2008
  minHeight: 17,
@@ -2099,7 +2116,7 @@ window.__ModuleLoader__.load({
2099
2116
  maxHeight: 300,
2100
2117
  overflowX: "hidden",
2101
2118
  overflowY: "auto",
2102
- border: "1px solid var(--dsw-alias-border-l2)",
2119
+ border: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
2103
2120
  borderRadius: 8
2104
2121
  };
2105
2122
  const diffModalFile = {
@@ -2108,7 +2125,7 @@ window.__ModuleLoader__.load({
2108
2125
  gap: 12,
2109
2126
  minWidth: 0,
2110
2127
  padding: "10px 14px",
2111
- borderBottom: "1px solid var(--dsw-alias-border-l2)",
2128
+ borderBottom: "1px solid var(--dsw-alias-border-l2, color-mix(in srgb, currentColor 16%, transparent))",
2112
2129
  color: "var(--dsw-alias-label-secondary)",
2113
2130
  fontSize: 15,
2114
2131
  lineHeight: "22px"
@@ -2576,8 +2593,8 @@ window.__ModuleLoader__.load({
2576
2593
  },
2577
2594
  "aria-hidden": "true"
2578
2595
  }), /* @__PURE__ */ jsx("span", {
2579
- style: tasksBadgeCount,
2580
- children: turnTasks.length
2596
+ style: tasksBadgeLabel,
2597
+ children: label
2581
2598
  })]
2582
2599
  })]
2583
2600
  })
@@ -3033,8 +3050,8 @@ window.__ModuleLoader__.load({
3033
3050
  ".dsh-claude-transcript-text{color:var(--dsw-alias-label-primary);font-size:15px;line-height:24px;overflow-wrap:anywhere}",
3034
3051
  ".dsh-claude-tool-group-native{overflow:visible}",
3035
3052
  ".dsh-claude-tool-group-native>.dsh-claude-flow-row{padding:0}",
3036
- ".dsh-claude-tool-list{max-height:min(420px,calc(100vh - 320px));overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;margin-top:4px;border:1px solid var(--dsw-alias-border-l1);border-radius:10px;scrollbar-gutter:stable}",
3037
- ".dsh-claude-tool-item{border-top:1px solid var(--dsw-alias-border-l1)}",
3053
+ ".dsh-claude-tool-list{max-height:min(420px,calc(100vh - 320px));overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;margin-top:4px;border:1px solid var(--dsw-alias-border-l1, color-mix(in srgb, currentColor 12%, transparent));border-radius:10px;scrollbar-gutter:stable}",
3054
+ ".dsh-claude-tool-item{border-top:1px solid var(--dsw-alias-border-l1, color-mix(in srgb, currentColor 12%, transparent))}",
3038
3055
  ".dsh-claude-tool-item:first-child{border-top:0}",
3039
3056
  ".dsh-claude-tool-summary-row{display:flex;align-items:center;min-height:34px;gap:8px;padding:0 10px;cursor:pointer;list-style:none}",
3040
3057
  ".dsh-claude-tool-summary-row::-webkit-details-marker{display:none}",
@@ -3051,7 +3068,7 @@ window.__ModuleLoader__.load({
3051
3068
  ".dsh-claude-tool-path{overflow-wrap:anywhere;color:var(--dsw-alias-label-primary)}",
3052
3069
  ".dsh-claude-tool-code{max-height:260px;overflow:auto;margin:0;padding:8px 0;border-radius:8px;background:var(--dsw-alias-markdown-code-block);font:var(--dsw-font-markdown-code-block-small)}",
3053
3070
  ".dsh-claude-tool-code-line{display:grid;grid-template-columns:44px minmax(max-content,1fr);min-height:18px}",
3054
- ".dsh-claude-tool-line-number{padding-right:10px;text-align:right;user-select:none;color:var(--dsw-alias-label-caption);border-right:1px solid var(--dsw-alias-border-l1)}",
3071
+ ".dsh-claude-tool-line-number{padding-right:10px;text-align:right;user-select:none;color:var(--dsw-alias-label-caption);border-right:1px solid var(--dsw-alias-border-l1, color-mix(in srgb, currentColor 12%, transparent))}",
3055
3072
  ".dsh-claude-tool-line-text{padding:0 10px;white-space:pre}",
3056
3073
  ".dsh-claude-tool-label{width:72px;flex:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:20px;color:var(--dsw-alias-label-tertiary)}",
3057
3074
  ".dsh-claude-tool-description{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;line-height:20px;color:var(--dsw-alias-label-primary)}",
@@ -3069,7 +3086,7 @@ window.__ModuleLoader__.load({
3069
3086
  ".dsh-claude-flow-summary{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-tertiary);font-size:14px;line-height:24px;flex:auto}",
3070
3087
  ".dsh-claude-flow-summary[data-error]{color:var(--dsw-alias-state-error-primary)}",
3071
3088
  ".dsh-claude-flow-body{margin:4px 0 4px 22px;color:var(--dsw-alias-label-tertiary);font-size:14px;line-height:24px;white-space:pre-wrap;overflow-wrap:anywhere}",
3072
- ".dsh-claude-flow-detail{max-height:260px;overflow:auto;margin:4px 0 4px 4px;padding:12px 16px;border:1px solid var(--dsw-alias-border-l1);border-radius:12px;background:var(--dsw-alias-markdown-code-block);color:var(--dsw-alias-label-primary);font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap}",
3089
+ ".dsh-claude-flow-detail{max-height:260px;overflow:auto;margin:4px 0 4px 4px;padding:12px 16px;border:1px solid var(--dsw-alias-border-l1, color-mix(in srgb, currentColor 12%, transparent));border-radius:12px;background:var(--dsw-alias-markdown-code-block);color:var(--dsw-alias-label-primary);font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap}",
3073
3090
  ".dsh-claude-flow-subcalls{display:flex;flex-direction:column;gap:2px;margin:4px 0 4px 22px;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:22px}",
3074
3091
  ".dsh-claude-act-running{animation:dsh-claude-act-pulse 1.2s ease-in-out infinite}",
3075
3092
  "@keyframes dsh-claude-act-pulse{0%,100%{opacity:1}50%{opacity:.3}}"
@@ -3935,6 +3952,84 @@ window.__ModuleLoader__.load({
3935
3952
  });
3936
3953
  }
3937
3954
  //#endregion
3955
+ //#region src/client/repository-action-api.ts
3956
+ var RepositoryActionClientError = class extends Error {
3957
+ code;
3958
+ commit;
3959
+ constructor(message, code, commit) {
3960
+ super(message);
3961
+ this.name = "RepositoryActionClientError";
3962
+ if (code !== void 0) this.code = code;
3963
+ if (commit !== void 0) this.commit = commit;
3964
+ }
3965
+ };
3966
+ function record$2(value) {
3967
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
3968
+ }
3969
+ async function response$1(pending) {
3970
+ const result = await pending;
3971
+ const body = await result.json();
3972
+ if (!result.ok) {
3973
+ const error = record$2(body);
3974
+ throw new RepositoryActionClientError(typeof error?.message === "string" ? error.message : "Repository action failed.", typeof error?.error === "string" ? error.error : void 0, typeof error?.commit === "string" ? error.commit : void 0);
3975
+ }
3976
+ return body;
3977
+ }
3978
+ function preview(value) {
3979
+ const input = record$2(value);
3980
+ if (input === void 0 || typeof input.root !== "string" || typeof input.branch !== "string" || typeof input.head !== "string" || typeof input.fingerprint !== "string" || !Array.isArray(input.files) || typeof input.patch !== "string" || typeof input.truncated !== "boolean" || typeof input.hasStaged !== "boolean" || typeof input.hasUnstaged !== "boolean" || typeof input.hasUntracked !== "boolean" || input.upstream !== void 0 && typeof input.upstream !== "string" || !Array.isArray(input.unpushedCommits) || typeof input.unpushedTruncated !== "boolean") throw new Error("Invalid repository action preview.");
3981
+ for (const file of input.files) {
3982
+ const item = record$2(file);
3983
+ if (item === void 0 || typeof item.path !== "string" || typeof item.staged !== "boolean" || typeof item.unstaged !== "boolean" || typeof item.untracked !== "boolean") throw new Error("Invalid repository action file.");
3984
+ }
3985
+ for (const commit of input.unpushedCommits) {
3986
+ const item = record$2(commit);
3987
+ if (item === void 0 || typeof item.hash !== "string" || typeof item.subject !== "string") throw new Error("Invalid repository action commit.");
3988
+ }
3989
+ return input;
3990
+ }
3991
+ function result(value) {
3992
+ const input = record$2(value);
3993
+ if (input === void 0 || typeof input.commit !== "string" || typeof input.pushed !== "boolean" || input.pullRequestUrl !== void 0 && typeof input.pullRequestUrl !== "string") throw new Error("Invalid repository action result.");
3994
+ return input;
3995
+ }
3996
+ function endpoint(path, sessionId) {
3997
+ return `${CLAUDE_REPOSITORY_ACTION_PATH}${path}?sessionId=${encodeURIComponent(sessionId)}`;
3998
+ }
3999
+ async function loadRepositoryActionPreview(sessionId, signal) {
4000
+ return preview(await response$1(fetch(endpoint("/preview", sessionId), {
4001
+ method: "GET",
4002
+ credentials: "same-origin",
4003
+ headers: { accept: "application/json" },
4004
+ ...signal === void 0 ? {} : { signal }
4005
+ })));
4006
+ }
4007
+ async function generateCommitMessage(sessionId, fingerprint, signal) {
4008
+ const value = record$2(await response$1(fetch(endpoint("/message", sessionId), {
4009
+ method: "POST",
4010
+ credentials: "same-origin",
4011
+ headers: {
4012
+ accept: "application/json",
4013
+ "content-type": "application/json"
4014
+ },
4015
+ body: JSON.stringify({ fingerprint }),
4016
+ ...signal === void 0 ? {} : { signal }
4017
+ })));
4018
+ if (typeof value?.message !== "string") throw new Error("Invalid generated commit message.");
4019
+ return value.message;
4020
+ }
4021
+ function executeRepositoryAction(sessionId, request) {
4022
+ return response$1(fetch(endpoint("", sessionId), {
4023
+ method: "POST",
4024
+ credentials: "same-origin",
4025
+ headers: {
4026
+ accept: "application/json",
4027
+ "content-type": "application/json"
4028
+ },
4029
+ body: JSON.stringify(request)
4030
+ })).then(result);
4031
+ }
4032
+ //#endregion
3938
4033
  //#region src/client/ClaudeRepositoryStatus.tsx
3939
4034
  const RATE_LIMIT_TITLE_PREFIX = "Claude rate limit";
3940
4035
  const RATE_LIMIT_BLOCKING_TITLE = "Claude rate limit is blocking requests";
@@ -4153,6 +4248,175 @@ window.__ModuleLoader__.load({
4153
4248
  })]
4154
4249
  });
4155
4250
  }
4251
+ const MERGE_METHODS = [
4252
+ "merge",
4253
+ "squash",
4254
+ "rebase"
4255
+ ];
4256
+ function MergePullRequestControl({ sessionId, repository, t }) {
4257
+ const [menuOpen, setMenuOpen] = useState(false);
4258
+ const [dialog, setDialog] = useState();
4259
+ const controller = useRef();
4260
+ const pullRequest = repository.pullRequest;
4261
+ useEffect(() => () => controller.current?.abort(), []);
4262
+ useEffect(() => {
4263
+ if (dialog?.merged !== true || dialog.error !== void 0) return;
4264
+ const timer = setTimeout(() => setDialog(void 0), 1200);
4265
+ return () => clearTimeout(timer);
4266
+ }, [dialog?.error, dialog?.merged]);
4267
+ if (pullRequest === void 0 || pullRequest.state !== "open" || pullRequest.draft || repository.detached === true) return null;
4268
+ const openMerge = (method) => {
4269
+ controller.current?.abort();
4270
+ setMenuOpen(false);
4271
+ setDialog({
4272
+ method,
4273
+ loading: true,
4274
+ submitting: false
4275
+ });
4276
+ const aborter = new AbortController();
4277
+ controller.current = aborter;
4278
+ loadRepositoryActionPreview(sessionId, aborter.signal).then((preview) => {
4279
+ setDialog({
4280
+ method,
4281
+ loading: false,
4282
+ submitting: false,
4283
+ fingerprint: preview.fingerprint
4284
+ });
4285
+ }, (error) => {
4286
+ if (!aborter.signal.aborted) setDialog({
4287
+ method,
4288
+ loading: false,
4289
+ submitting: false,
4290
+ error: error instanceof Error ? error.message : t("diffActionFailed")
4291
+ });
4292
+ });
4293
+ };
4294
+ const closeDialog = () => {
4295
+ if (dialog?.submitting === true) return;
4296
+ controller.current?.abort();
4297
+ controller.current = void 0;
4298
+ setDialog(void 0);
4299
+ };
4300
+ const confirmMerge = () => {
4301
+ if (dialog?.fingerprint === void 0 || dialog.submitting) return;
4302
+ const { error: _error, ...pending } = dialog;
4303
+ setDialog({
4304
+ ...pending,
4305
+ submitting: true
4306
+ });
4307
+ executeRepositoryAction(sessionId, {
4308
+ action: "merge-pr",
4309
+ fingerprint: dialog.fingerprint,
4310
+ message: "",
4311
+ includeUnstaged: false,
4312
+ mergeMethod: dialog.method
4313
+ }).then(() => {
4314
+ setDialog({
4315
+ ...pending,
4316
+ submitting: false,
4317
+ merged: true
4318
+ });
4319
+ }, (error) => {
4320
+ setDialog({
4321
+ ...pending,
4322
+ submitting: false,
4323
+ error: error instanceof Error ? error.message : t("diffActionFailed")
4324
+ });
4325
+ });
4326
+ };
4327
+ const items = MERGE_METHODS.map((method) => ({
4328
+ id: method,
4329
+ label: t(`diffMerge_${method}`)
4330
+ }));
4331
+ const merged = dialog?.merged === true;
4332
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
4333
+ /* @__PURE__ */ jsx(Menu, {
4334
+ open: menuOpen,
4335
+ items,
4336
+ onSelect: (id) => openMerge(id),
4337
+ onClose: () => setMenuOpen(false),
4338
+ align: "end",
4339
+ portal: true,
4340
+ anchor: /* @__PURE__ */ jsxs("button", {
4341
+ type: "button",
4342
+ style: repositoryMergeTrigger,
4343
+ "aria-label": t("repositoryMergeMenu"),
4344
+ "aria-haspopup": "menu",
4345
+ "aria-expanded": menuOpen,
4346
+ onClick: () => setMenuOpen((value) => !value),
4347
+ children: [t("diffMergePr"), /* @__PURE__ */ jsx(IconChevronDownOutline14, {})]
4348
+ })
4349
+ }),
4350
+ dialog === void 0 ? null : /* @__PURE__ */ jsx("style", {
4351
+ "data-dsh-claude-repository-modal-styles": true,
4352
+ children: diffModalCss
4353
+ }),
4354
+ /* @__PURE__ */ jsx(Modal, {
4355
+ className: "dshClaudeRepositoryActionModal",
4356
+ contentClassName: "dshClaudeRepositoryActionModalContent",
4357
+ open: dialog !== void 0,
4358
+ onClose: closeDialog,
4359
+ title: t("diffMergePr"),
4360
+ closeLabel: t("diffCancel"),
4361
+ description: t("diffMergeDescription"),
4362
+ footer: /* @__PURE__ */ jsxs("div", {
4363
+ style: diffModalFooter,
4364
+ children: [/* @__PURE__ */ jsx("button", {
4365
+ type: "button",
4366
+ style: {
4367
+ ...button,
4368
+ ...diffModalButton
4369
+ },
4370
+ disabled: dialog?.submitting === true,
4371
+ onClick: closeDialog,
4372
+ children: merged ? t("diffDone") : t("diffCancel")
4373
+ }), !merged ? /* @__PURE__ */ jsx("button", {
4374
+ type: "button",
4375
+ style: {
4376
+ ...primaryButton,
4377
+ ...diffModalButton
4378
+ },
4379
+ disabled: dialog?.loading === true || dialog?.submitting === true || dialog?.fingerprint === void 0,
4380
+ onClick: confirmMerge,
4381
+ children: dialog?.submitting === true ? t("diffSubmitting") : t("diffConfirm")
4382
+ }) : null]
4383
+ }),
4384
+ children: dialog === void 0 ? null : /* @__PURE__ */ jsxs("div", {
4385
+ style: diffModalBody,
4386
+ children: [
4387
+ /* @__PURE__ */ jsxs("div", {
4388
+ style: diffModalMeta,
4389
+ children: [/* @__PURE__ */ jsxs("strong", {
4390
+ style: diffModalMetaText,
4391
+ title: pullRequest.title,
4392
+ children: [
4393
+ t("repositoryPr", { number: pullRequest.number }),
4394
+ " → ",
4395
+ pullRequest.baseBranch ?? t("diffPrBaseDefault")
4396
+ ]
4397
+ }), /* @__PURE__ */ jsx("span", {
4398
+ style: diffModalFileState,
4399
+ children: t(`diffMerge_${dialog.method}`)
4400
+ })]
4401
+ }),
4402
+ /* @__PURE__ */ jsx("p", {
4403
+ style: diffModalStatus,
4404
+ children: pullRequest.title
4405
+ }),
4406
+ merged ? /* @__PURE__ */ jsx("p", {
4407
+ style: diffModalSuccess,
4408
+ children: t("diffMergeCompleted", { number: pullRequest.number })
4409
+ }) : null,
4410
+ dialog.error === void 0 ? null : /* @__PURE__ */ jsx("p", {
4411
+ role: "alert",
4412
+ style: diffModalError,
4413
+ children: dialog.error
4414
+ })
4415
+ ]
4416
+ })
4417
+ })
4418
+ ] });
4419
+ }
4156
4420
  function ClaudeRepositoryStatus({ sessionId, useSessions, useClaudeProjection, t, openDiff }) {
4157
4421
  const blank = useSessions((value) => value.byId[sessionId]?.blank === true);
4158
4422
  const projection = useClaudeProjection((value) => value);
@@ -4256,13 +4520,21 @@ window.__ModuleLoader__.load({
4256
4520
  children: ["· ", t("repositoryMergedAgo", { age: mergedAge })]
4257
4521
  })
4258
4522
  ]
4259
- }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(StatusItem, {
4260
- label: t(`repositoryChecks_${pullRequest.checks}`),
4261
- tone: pullRequest.checks === "passing" ? "success" : pullRequest.checks === "failing" ? "error" : pullRequest.checks === "pending" ? "warning" : "neutral"
4262
- }), /* @__PURE__ */ jsx(StatusItem, {
4263
- label: t(`repositoryReview_${pullRequest.review}`),
4264
- tone: pullRequest.review === "approved" ? "success" : pullRequest.review === "changes-requested" ? "error" : "neutral"
4265
- })] })
4523
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
4524
+ /* @__PURE__ */ jsx(StatusItem, {
4525
+ label: t(`repositoryChecks_${pullRequest.checks}`),
4526
+ tone: pullRequest.checks === "passing" ? "success" : pullRequest.checks === "failing" ? "error" : pullRequest.checks === "pending" ? "warning" : "neutral"
4527
+ }),
4528
+ /* @__PURE__ */ jsx(StatusItem, {
4529
+ label: t(`repositoryReview_${pullRequest.review}`),
4530
+ tone: pullRequest.review === "approved" ? "success" : pullRequest.review === "changes-requested" ? "error" : "neutral"
4531
+ }),
4532
+ /* @__PURE__ */ jsx(MergePullRequestControl, {
4533
+ sessionId,
4534
+ repository,
4535
+ t
4536
+ })
4537
+ ] })
4266
4538
  ]
4267
4539
  })
4268
4540
  ]
@@ -4271,7 +4543,7 @@ window.__ModuleLoader__.load({
4271
4543
  }
4272
4544
  //#endregion
4273
4545
  //#region src/client/review-comment-api.ts
4274
- function record$2(value) {
4546
+ function record$1(value) {
4275
4547
  return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
4276
4548
  }
4277
4549
  async function post(path, sessionId, body) {
@@ -4286,13 +4558,13 @@ window.__ModuleLoader__.load({
4286
4558
  });
4287
4559
  const value = await response.json();
4288
4560
  if (!response.ok) {
4289
- const error = record$2(value);
4561
+ const error = record$1(value);
4290
4562
  throw new Error(typeof error?.message === "string" ? error.message : "Review comment request failed.");
4291
4563
  }
4292
4564
  return value;
4293
4565
  }
4294
4566
  async function addReviewComment(sessionId, comment) {
4295
- const created = record$2(record$2(await post("", sessionId, comment))?.comment);
4567
+ const created = record$1(record$1(await post("", sessionId, comment))?.comment);
4296
4568
  if (created === void 0 || typeof created.id !== "string") throw new Error("Invalid review comment response.");
4297
4569
  return created;
4298
4570
  }
@@ -4446,84 +4718,6 @@ window.__ModuleLoader__.load({
4446
4718
  });
4447
4719
  }
4448
4720
  //#endregion
4449
- //#region src/client/repository-action-api.ts
4450
- var RepositoryActionClientError = class extends Error {
4451
- code;
4452
- commit;
4453
- constructor(message, code, commit) {
4454
- super(message);
4455
- this.name = "RepositoryActionClientError";
4456
- if (code !== void 0) this.code = code;
4457
- if (commit !== void 0) this.commit = commit;
4458
- }
4459
- };
4460
- function record$1(value) {
4461
- return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
4462
- }
4463
- async function response$1(pending) {
4464
- const result = await pending;
4465
- const body = await result.json();
4466
- if (!result.ok) {
4467
- const error = record$1(body);
4468
- throw new RepositoryActionClientError(typeof error?.message === "string" ? error.message : "Repository action failed.", typeof error?.error === "string" ? error.error : void 0, typeof error?.commit === "string" ? error.commit : void 0);
4469
- }
4470
- return body;
4471
- }
4472
- function preview(value) {
4473
- const input = record$1(value);
4474
- if (input === void 0 || typeof input.root !== "string" || typeof input.branch !== "string" || typeof input.head !== "string" || typeof input.fingerprint !== "string" || !Array.isArray(input.files) || typeof input.patch !== "string" || typeof input.truncated !== "boolean" || typeof input.hasStaged !== "boolean" || typeof input.hasUnstaged !== "boolean" || typeof input.hasUntracked !== "boolean" || input.upstream !== void 0 && typeof input.upstream !== "string" || !Array.isArray(input.unpushedCommits) || typeof input.unpushedTruncated !== "boolean") throw new Error("Invalid repository action preview.");
4475
- for (const file of input.files) {
4476
- const item = record$1(file);
4477
- if (item === void 0 || typeof item.path !== "string" || typeof item.staged !== "boolean" || typeof item.unstaged !== "boolean" || typeof item.untracked !== "boolean") throw new Error("Invalid repository action file.");
4478
- }
4479
- for (const commit of input.unpushedCommits) {
4480
- const item = record$1(commit);
4481
- if (item === void 0 || typeof item.hash !== "string" || typeof item.subject !== "string") throw new Error("Invalid repository action commit.");
4482
- }
4483
- return input;
4484
- }
4485
- function result(value) {
4486
- const input = record$1(value);
4487
- if (input === void 0 || typeof input.commit !== "string" || typeof input.pushed !== "boolean" || input.pullRequestUrl !== void 0 && typeof input.pullRequestUrl !== "string") throw new Error("Invalid repository action result.");
4488
- return input;
4489
- }
4490
- function endpoint(path, sessionId) {
4491
- return `${CLAUDE_REPOSITORY_ACTION_PATH}${path}?sessionId=${encodeURIComponent(sessionId)}`;
4492
- }
4493
- async function loadRepositoryActionPreview(sessionId, signal) {
4494
- return preview(await response$1(fetch(endpoint("/preview", sessionId), {
4495
- method: "GET",
4496
- credentials: "same-origin",
4497
- headers: { accept: "application/json" },
4498
- ...signal === void 0 ? {} : { signal }
4499
- })));
4500
- }
4501
- async function generateCommitMessage(sessionId, fingerprint, signal) {
4502
- const value = record$1(await response$1(fetch(endpoint("/message", sessionId), {
4503
- method: "POST",
4504
- credentials: "same-origin",
4505
- headers: {
4506
- accept: "application/json",
4507
- "content-type": "application/json"
4508
- },
4509
- body: JSON.stringify({ fingerprint }),
4510
- ...signal === void 0 ? {} : { signal }
4511
- })));
4512
- if (typeof value?.message !== "string") throw new Error("Invalid generated commit message.");
4513
- return value.message;
4514
- }
4515
- function executeRepositoryAction(sessionId, request) {
4516
- return response$1(fetch(endpoint("", sessionId), {
4517
- method: "POST",
4518
- credentials: "same-origin",
4519
- headers: {
4520
- accept: "application/json",
4521
- "content-type": "application/json"
4522
- },
4523
- body: JSON.stringify(request)
4524
- })).then(result);
4525
- }
4526
- //#endregion
4527
4721
  //#region src/client/ClaudeDiffPanel.tsx
4528
4722
  function pathFromHeader(line) {
4529
4723
  return /^diff --git a\/(.+) b\/(.+)$/u.exec(line)?.[2];
@@ -4710,7 +4904,7 @@ window.__ModuleLoader__.load({
4710
4904
  });
4711
4905
  }
4712
4906
  function actionLabel(action, t) {
4713
- return (action === "commit" ? t("diffCommit") : action === "commit-push" ? t("diffCommitPush") : action === "push" ? t("diffPush") : t("diffCreatePr")).replace(/[….]+$/u, "");
4907
+ return (action === "commit" ? t("diffCommit") : action === "commit-push" ? t("diffCommitPush") : action === "push" ? t("diffPush") : action === "merge-pr" ? t("diffMergePr") : t("diffCreatePr")).replace(/[….]+$/u, "");
4714
4908
  }
4715
4909
  function repositoryActionAvailability(repository) {
4716
4910
  const ready = repository?.status === "ready" && repository.detached !== true;
@@ -4722,7 +4916,8 @@ window.__ModuleLoader__.load({
4722
4916
  "commit": committable,
4723
4917
  "commit-push": committable && hasRemote,
4724
4918
  "push": pushable,
4725
- "create-pr": (committable || pushable) && hasRemote && !hasOpenPullRequest
4919
+ "create-pr": (committable || pushable) && hasRemote && !hasOpenPullRequest,
4920
+ "merge-pr": ready && hasOpenPullRequest && repository?.pullRequest?.draft !== true
4726
4921
  };
4727
4922
  }
4728
4923
  function RestorePanelIcon() {
@@ -6429,6 +6624,13 @@ window.__ModuleLoader__.load({
6429
6624
  diffCommitCompleted: "已创建 commit {commit}",
6430
6625
  diffCommitPreserved: "本地 commit {commit} 已保留。",
6431
6626
  diffOpenPr: "打开 Pull Request",
6627
+ diffMergePr: "Merge",
6628
+ repositoryMergeMenu: "打开 PR 合并选项",
6629
+ diffMerge_merge: "合并提交 (merge)",
6630
+ diffMerge_squash: "Squash 合并",
6631
+ diffMerge_rebase: "Rebase 合并",
6632
+ diffMergeDescription: "使用所选方式合并当前分支的 Pull Request。",
6633
+ diffMergeCompleted: "已合并 PR #{number}",
6432
6634
  reviewCommentAdd: "添加行评论",
6433
6635
  reviewCommentPlaceholder: "请求更改",
6434
6636
  reviewCommentSubmit: "注释",
@@ -6631,6 +6833,13 @@ window.__ModuleLoader__.load({
6631
6833
  diffCommitCompleted: "Created commit {commit}",
6632
6834
  diffCommitPreserved: "Local commit {commit} was preserved.",
6633
6835
  diffOpenPr: "Open pull request",
6836
+ diffMergePr: "Merge",
6837
+ repositoryMergeMenu: "Open merge options",
6838
+ diffMerge_merge: "Create a merge commit",
6839
+ diffMerge_squash: "Squash and merge",
6840
+ diffMerge_rebase: "Rebase and merge",
6841
+ diffMergeDescription: "Merge the pull request for this branch with the selected method.",
6842
+ diffMergeCompleted: "Merged PR #{number}",
6634
6843
  reviewCommentAdd: "Add line comment",
6635
6844
  reviewCommentPlaceholder: "Request changes",
6636
6845
  reviewCommentSubmit: "Comment",