zen-gitsync 2.13.24 → 2.13.26
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/package.json +1 -1
- package/scripts/README_COLOR_CONVERTER.md +196 -196
- package/scripts/README_FONTSIZE_CONVERTER.md +278 -278
- package/scripts/README_SPACING_CONVERTER.md +126 -126
- package/scripts/README_STYLE_VARS.md +180 -180
- package/src/config.js +14 -1
- package/src/ui/public/assets/AppVersionBadge-BEeW0AL-.js +2 -0
- package/src/ui/public/assets/AppVersionBadge-CTUXSSX1.css +1 -0
- package/src/ui/public/assets/{BranchSelector-B91Ylbas.js → BranchSelector-c59Odoj0.js} +1 -1
- package/src/ui/public/assets/{CommandConsole-bK4iwZvI.js → CommandConsole-Bbt0wo4y.js} +2 -2
- package/src/ui/public/assets/{CommitForm-CCBME4F0.css → CommitForm-DIGVx-uM.css} +1 -1
- package/src/ui/public/assets/CommitForm-hBWfGKDe.js +6 -0
- package/src/ui/public/assets/{CustomCommandManager-C1lRrp5z.js → CustomCommandManager-B5uJC47H.js} +1 -1
- package/src/ui/public/assets/EditorView-DGwTbiKa.js +0 -0
- package/src/ui/public/assets/{EditorView-BoRRJEFO.css → EditorView-Do_aRkqm.css} +1 -1
- package/src/ui/public/assets/{FileDiffViewer-Ce17WOZ-.js → FileDiffViewer-CJ9hE0rc.js} +1 -1
- package/src/ui/public/assets/FlowExecutionViewer-B5kh7VxS.css +1 -0
- package/src/ui/public/assets/{FlowExecutionViewer-CRK6lIul.js → FlowExecutionViewer-DgzkadXS.js} +1 -1
- package/src/ui/public/assets/{FlowOrchestrationWorkspace-DmBxt5nC.css → FlowOrchestrationWorkspace-BAQDU9Jd.css} +1 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-aX2jblSj.js +21 -0
- package/src/ui/public/assets/{GitStatus-DN4_m6sO.js → GitStatus-Bfo5BFiv.js} +1 -1
- package/src/ui/public/assets/{ImagePreview-D8klNa6F.js → ImagePreview-CYQ1rWsB.js} +1 -1
- package/src/ui/public/assets/{LogList-BshRTCrE.js → LogList-C-b_SAKs.js} +1 -1
- package/src/ui/public/assets/{ProjectStartupButton-C-dXxxMO.js → ProjectStartupButton-J9QJ2l5s.js} +1 -1
- package/src/ui/public/assets/{RemoteRepoCard-DDZcP5-V.js → RemoteRepoCard-9OdXr68_.js} +1 -1
- package/src/ui/public/assets/{ResetToRemoteButton-TXJzvBxE.js → ResetToRemoteButton-BCaqTKWF.js} +1 -1
- package/src/ui/public/assets/{SourceMapView-BUkB6h41.js → SourceMapView-CoxtZ_m3.js} +3 -3
- package/src/ui/public/assets/{TemplateManager-DFVzDiu0.js → TemplateManager-2AgSIFTO.js} +1 -1
- package/src/ui/public/assets/{UserInputNode-CXyV1xG4.js → UserInputNode-DHV_enhz.js} +1 -1
- package/src/ui/public/assets/{WorkbenchView-CEYhsa4O.js → WorkbenchView-CHR2r0tw.js} +1 -1
- package/src/ui/public/assets/_plugin-vue_export-helper-RXm384te.js +9 -0
- package/src/ui/public/assets/{index-CDa9xf0V.css → index-Cn3n2mx6.css} +1 -1
- package/src/ui/public/assets/index-D7_4Vxc8.js +7 -0
- package/src/ui/public/favicon.svg +75 -75
- package/src/ui/public/index.html +22 -20
- package/src/ui/public/logo.svg +74 -74
- package/src/ui/server/routes/config.js +9 -7
- package/src/utils/index.js +11 -2
- package/src/ui/public/assets/AppVersionBadge-CaVphp8E.js +0 -2
- package/src/ui/public/assets/AppVersionBadge-DVn027LE.css +0 -1
- package/src/ui/public/assets/CommitForm-zOCxmZ84.js +0 -6
- package/src/ui/public/assets/EditorView-DYo2oYtk.js +0 -0
- package/src/ui/public/assets/FlowExecutionViewer-DhmllmKH.css +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-BDw7ThWp.js +0 -21
- package/src/ui/public/assets/_plugin-vue_export-helper-BfbhkIv4.js +0 -9
- package/src/ui/public/assets/index-BGmxuKoN.js +0 -7
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<defs>
|
|
3
|
-
<radialGradient id="bgGrad" cx="38%" cy="32%" r="70%">
|
|
4
|
-
<stop offset="0%" stop-color="#1e1b4b"/>
|
|
5
|
-
<stop offset="100%" stop-color="#0d0b1e"/>
|
|
6
|
-
</radialGradient>
|
|
7
|
-
<linearGradient id="mainGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
8
|
-
<stop offset="0%" stop-color="#c4b5fd"/>
|
|
9
|
-
<stop offset="100%" stop-color="#7c3aed"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
<linearGradient id="featGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
12
|
-
<stop offset="0%" stop-color="#7dd3fc"/>
|
|
13
|
-
<stop offset="100%" stop-color="#0284c7"/>
|
|
14
|
-
</linearGradient>
|
|
15
|
-
<filter id="glow" x="-40%" y="-40%" width="180%" height="180%">
|
|
16
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="blur"/>
|
|
17
|
-
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
18
|
-
</filter>
|
|
19
|
-
<filter id="softGlow" x="-20%" y="-20%" width="140%" height="140%">
|
|
20
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="1.5" result="blur"/>
|
|
21
|
-
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
22
|
-
</filter>
|
|
23
|
-
</defs>
|
|
24
|
-
|
|
25
|
-
<!-- 背景圆 -->
|
|
26
|
-
<circle cx="100" cy="100" r="96" fill="url(#bgGrad)"/>
|
|
27
|
-
|
|
28
|
-
<!-- 同步外弧(上半,代表 sync 循环) -->
|
|
29
|
-
<path d="M 100,20 A 80,80 0 1,1 36,153"
|
|
30
|
-
stroke="rgba(167,139,250,0.18)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
31
|
-
<!-- 同步外弧(下半) -->
|
|
32
|
-
<path d="M 36,153 A 80,80 0 0,1 164,153"
|
|
33
|
-
stroke="rgba(56,189,248,0.18)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
34
|
-
<!-- 同步箭头(上) -->
|
|
35
|
-
<path d="M 91,17 L 100,20 L 96,29"
|
|
36
|
-
stroke="rgba(167,139,250,0.55)" stroke-width="2.5" fill="none"
|
|
37
|
-
stroke-linecap="round" stroke-linejoin="round"/>
|
|
38
|
-
<!-- 同步箭头(下) -->
|
|
39
|
-
<path d="M 163,145 L 164,154 L 155,151"
|
|
40
|
-
stroke="rgba(56,189,248,0.55)" stroke-width="2.5" fill="none"
|
|
41
|
-
stroke-linecap="round" stroke-linejoin="round"/>
|
|
42
|
-
|
|
43
|
-
<!-- 主分支竖线 -->
|
|
44
|
-
<line x1="76" y1="44" x2="76" y2="156"
|
|
45
|
-
stroke="url(#mainGrad)" stroke-width="5.5" stroke-linecap="round"
|
|
46
|
-
filter="url(#softGlow)"/>
|
|
47
|
-
|
|
48
|
-
<!-- 特性分支曲线(分出) -->
|
|
49
|
-
<path d="M 76,80 C 98,80 130,96 130,120 L 130,140"
|
|
50
|
-
stroke="url(#featGrad)" stroke-width="4.5" fill="none"
|
|
51
|
-
stroke-linecap="round" filter="url(#softGlow)"/>
|
|
52
|
-
<!-- 特性分支合并回主分支 -->
|
|
53
|
-
<path d="M 130,140 C 130,156 105,159 76,155"
|
|
54
|
-
stroke="url(#featGrad)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
55
|
-
|
|
56
|
-
<!-- 主分支节点 -->
|
|
57
|
-
<circle cx="76" cy="48" r="11" fill="#13103a" stroke="#c4b5fd" stroke-width="3" filter="url(#glow)"/>
|
|
58
|
-
<circle cx="76" cy="48" r="5" fill="#ddd6fe"/>
|
|
59
|
-
|
|
60
|
-
<circle cx="76" cy="84" r="11" fill="#13103a" stroke="#a78bfa" stroke-width="3"/>
|
|
61
|
-
<circle cx="76" cy="84" r="5" fill="#c4b5fd"/>
|
|
62
|
-
|
|
63
|
-
<circle cx="76" cy="120" r="11" fill="#13103a" stroke="#8b5cf6" stroke-width="3"/>
|
|
64
|
-
<circle cx="76" cy="120" r="5" fill="#a78bfa"/>
|
|
65
|
-
|
|
66
|
-
<circle cx="76" cy="155" r="11" fill="#13103a" stroke="#7c3aed" stroke-width="3" filter="url(#glow)"/>
|
|
67
|
-
<circle cx="76" cy="155" r="5" fill="#8b5cf6"/>
|
|
68
|
-
|
|
69
|
-
<!-- 特性分支节点 -->
|
|
70
|
-
<circle cx="130" cy="115" r="11" fill="#13103a" stroke="#38bdf8" stroke-width="3" filter="url(#glow)"/>
|
|
71
|
-
<circle cx="130" cy="115" r="5" fill="#7dd3fc"/>
|
|
72
|
-
|
|
73
|
-
<circle cx="130" cy="143" r="11" fill="#13103a" stroke="#0ea5e9" stroke-width="3" filter="url(#glow)"/>
|
|
74
|
-
<circle cx="130" cy="143" r="5" fill="#38bdf8"/>
|
|
75
|
-
</svg>
|
|
1
|
+
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<radialGradient id="bgGrad" cx="38%" cy="32%" r="70%">
|
|
4
|
+
<stop offset="0%" stop-color="#1e1b4b"/>
|
|
5
|
+
<stop offset="100%" stop-color="#0d0b1e"/>
|
|
6
|
+
</radialGradient>
|
|
7
|
+
<linearGradient id="mainGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
8
|
+
<stop offset="0%" stop-color="#c4b5fd"/>
|
|
9
|
+
<stop offset="100%" stop-color="#7c3aed"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<linearGradient id="featGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
12
|
+
<stop offset="0%" stop-color="#7dd3fc"/>
|
|
13
|
+
<stop offset="100%" stop-color="#0284c7"/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
<filter id="glow" x="-40%" y="-40%" width="180%" height="180%">
|
|
16
|
+
<feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="blur"/>
|
|
17
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
18
|
+
</filter>
|
|
19
|
+
<filter id="softGlow" x="-20%" y="-20%" width="140%" height="140%">
|
|
20
|
+
<feGaussianBlur in="SourceGraphic" stdDeviation="1.5" result="blur"/>
|
|
21
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
22
|
+
</filter>
|
|
23
|
+
</defs>
|
|
24
|
+
|
|
25
|
+
<!-- 背景圆 -->
|
|
26
|
+
<circle cx="100" cy="100" r="96" fill="url(#bgGrad)"/>
|
|
27
|
+
|
|
28
|
+
<!-- 同步外弧(上半,代表 sync 循环) -->
|
|
29
|
+
<path d="M 100,20 A 80,80 0 1,1 36,153"
|
|
30
|
+
stroke="rgba(167,139,250,0.18)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
31
|
+
<!-- 同步外弧(下半) -->
|
|
32
|
+
<path d="M 36,153 A 80,80 0 0,1 164,153"
|
|
33
|
+
stroke="rgba(56,189,248,0.18)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
34
|
+
<!-- 同步箭头(上) -->
|
|
35
|
+
<path d="M 91,17 L 100,20 L 96,29"
|
|
36
|
+
stroke="rgba(167,139,250,0.55)" stroke-width="2.5" fill="none"
|
|
37
|
+
stroke-linecap="round" stroke-linejoin="round"/>
|
|
38
|
+
<!-- 同步箭头(下) -->
|
|
39
|
+
<path d="M 163,145 L 164,154 L 155,151"
|
|
40
|
+
stroke="rgba(56,189,248,0.55)" stroke-width="2.5" fill="none"
|
|
41
|
+
stroke-linecap="round" stroke-linejoin="round"/>
|
|
42
|
+
|
|
43
|
+
<!-- 主分支竖线 -->
|
|
44
|
+
<line x1="76" y1="44" x2="76" y2="156"
|
|
45
|
+
stroke="url(#mainGrad)" stroke-width="5.5" stroke-linecap="round"
|
|
46
|
+
filter="url(#softGlow)"/>
|
|
47
|
+
|
|
48
|
+
<!-- 特性分支曲线(分出) -->
|
|
49
|
+
<path d="M 76,80 C 98,80 130,96 130,120 L 130,140"
|
|
50
|
+
stroke="url(#featGrad)" stroke-width="4.5" fill="none"
|
|
51
|
+
stroke-linecap="round" filter="url(#softGlow)"/>
|
|
52
|
+
<!-- 特性分支合并回主分支 -->
|
|
53
|
+
<path d="M 130,140 C 130,156 105,159 76,155"
|
|
54
|
+
stroke="url(#featGrad)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
55
|
+
|
|
56
|
+
<!-- 主分支节点 -->
|
|
57
|
+
<circle cx="76" cy="48" r="11" fill="#13103a" stroke="#c4b5fd" stroke-width="3" filter="url(#glow)"/>
|
|
58
|
+
<circle cx="76" cy="48" r="5" fill="#ddd6fe"/>
|
|
59
|
+
|
|
60
|
+
<circle cx="76" cy="84" r="11" fill="#13103a" stroke="#a78bfa" stroke-width="3"/>
|
|
61
|
+
<circle cx="76" cy="84" r="5" fill="#c4b5fd"/>
|
|
62
|
+
|
|
63
|
+
<circle cx="76" cy="120" r="11" fill="#13103a" stroke="#8b5cf6" stroke-width="3"/>
|
|
64
|
+
<circle cx="76" cy="120" r="5" fill="#a78bfa"/>
|
|
65
|
+
|
|
66
|
+
<circle cx="76" cy="155" r="11" fill="#13103a" stroke="#7c3aed" stroke-width="3" filter="url(#glow)"/>
|
|
67
|
+
<circle cx="76" cy="155" r="5" fill="#8b5cf6"/>
|
|
68
|
+
|
|
69
|
+
<!-- 特性分支节点 -->
|
|
70
|
+
<circle cx="130" cy="115" r="11" fill="#13103a" stroke="#38bdf8" stroke-width="3" filter="url(#glow)"/>
|
|
71
|
+
<circle cx="130" cy="115" r="5" fill="#7dd3fc"/>
|
|
72
|
+
|
|
73
|
+
<circle cx="130" cy="143" r="11" fill="#13103a" stroke="#0ea5e9" stroke-width="3" filter="url(#glow)"/>
|
|
74
|
+
<circle cx="130" cy="143" r="5" fill="#38bdf8"/>
|
|
75
|
+
</svg>
|
package/src/ui/public/index.html
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="zh-CN" translate="no">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="google" content="notranslate" />
|
|
6
|
-
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
7
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
|
-
<title>Zen GitSync</title>
|
|
9
|
-
<!-- Premium fonts: Plus Jakarta Sans (UI) + JetBrains Mono (code) -->
|
|
10
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
11
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
12
|
-
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN" translate="no">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="google" content="notranslate" />
|
|
6
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
8
|
+
<title>Zen GitSync</title>
|
|
9
|
+
<!-- Premium fonts: Plus Jakarta Sans (UI) + JetBrains Mono (code) -->
|
|
10
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
11
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
12
|
+
<link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-D7_4Vxc8.js"></script>
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-CMxvf4Kt.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/monaco-DC7mqInI.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/element-plus-CJjFCgLP.js">
|
|
17
17
|
<link rel="modulepreload" crossorigin href="/assets/vendor-0YbzMuxw.js">
|
|
18
|
-
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-
|
|
18
|
+
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-RXm384te.js">
|
|
19
19
|
<link rel="modulepreload" crossorigin href="/assets/socket-io-z4n873W1.js">
|
|
20
|
+
<link rel="modulepreload" crossorigin href="/assets/vue-flow-HHfhvx4N.js">
|
|
20
21
|
<link rel="stylesheet" crossorigin href="/assets/monaco-UXx6YYK1.css">
|
|
21
22
|
<link rel="stylesheet" crossorigin href="/assets/element-plus-D36sOm0a.css">
|
|
22
23
|
<link rel="stylesheet" crossorigin href="/assets/vendor-DNI_idR2.css">
|
|
23
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
</
|
|
24
|
+
<link rel="stylesheet" crossorigin href="/assets/vue-flow-CavUTEzp.css">
|
|
25
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Cn3n2mx6.css">
|
|
26
|
+
</head>
|
|
27
|
+
<body>
|
|
28
|
+
<div id="app"></div>
|
|
29
|
+
</body>
|
|
30
|
+
</html>
|
package/src/ui/public/logo.svg
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<defs>
|
|
3
|
-
<radialGradient id="bgGrad" cx="38%" cy="32%" r="70%">
|
|
4
|
-
<stop offset="0%" stop-color="#1e1b4b"/>
|
|
5
|
-
<stop offset="100%" stop-color="#0d0b1e"/>
|
|
6
|
-
</radialGradient>
|
|
7
|
-
<linearGradient id="mainGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
8
|
-
<stop offset="0%" stop-color="#c4b5fd"/>
|
|
9
|
-
<stop offset="100%" stop-color="#7c3aed"/>
|
|
10
|
-
</linearGradient>
|
|
11
|
-
<linearGradient id="featGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
12
|
-
<stop offset="0%" stop-color="#7dd3fc"/>
|
|
13
|
-
<stop offset="100%" stop-color="#0284c7"/>
|
|
14
|
-
</linearGradient>
|
|
15
|
-
<filter id="glow" x="-40%" y="-40%" width="180%" height="180%">
|
|
16
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="blur"/>
|
|
17
|
-
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
18
|
-
</filter>
|
|
19
|
-
<filter id="softGlow" x="-20%" y="-20%" width="140%" height="140%">
|
|
20
|
-
<feGaussianBlur in="SourceGraphic" stdDeviation="1.5" result="blur"/>
|
|
21
|
-
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
22
|
-
</filter>
|
|
23
|
-
</defs>
|
|
24
|
-
|
|
25
|
-
<!-- 背景�?-->
|
|
26
|
-
<circle cx="100" cy="100" r="96" fill="url(#bgGrad)"/>
|
|
27
|
-
|
|
28
|
-
<!-- 同步外弧(上半,代表 sync 循环�?-->
|
|
29
|
-
<path d="M 100,20 A 80,80 0 1,1 36,153"
|
|
30
|
-
stroke="rgba(167,139,250,0.18)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
31
|
-
<!-- 同步外弧(下半) -->
|
|
32
|
-
<path d="M 36,153 A 80,80 0 0,1 164,153"
|
|
33
|
-
stroke="rgba(56,189,248,0.18)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
34
|
-
<!-- 同步箭头(上�?-->
|
|
35
|
-
<path d="M 91,17 L 100,20 L 96,29"
|
|
36
|
-
stroke="rgba(167,139,250,0.55)" stroke-width="2.5" fill="none"
|
|
37
|
-
stroke-linecap="round" stroke-linejoin="round"/>
|
|
38
|
-
<!-- 同步箭头(下�?-->
|
|
39
|
-
<path d="M 163,145 L 164,154 L 155,151"
|
|
40
|
-
stroke="rgba(56,189,248,0.55)" stroke-width="2.5" fill="none"
|
|
41
|
-
stroke-linecap="round" stroke-linejoin="round"/>
|
|
42
|
-
|
|
43
|
-
<!-- 主分支竖�?-->
|
|
44
|
-
<line x1="76" y1="44" x2="76" y2="156"
|
|
45
|
-
stroke="url(#mainGrad)" stroke-width="5.5" stroke-linecap="round"
|
|
46
|
-
filter="url(#softGlow)"/>
|
|
47
|
-
|
|
48
|
-
<!-- 特性分支曲线(分出�?-->
|
|
49
|
-
<path d="M 76,80 C 98,80 130,96 130,120 L 130,140"
|
|
50
|
-
stroke="url(#featGrad)" stroke-width="4.5" fill="none"
|
|
51
|
-
stroke-linecap="round" filter="url(#softGlow)"/>
|
|
52
|
-
<!-- 特性分支合并回主分�?-->
|
|
53
|
-
<path d="M 130,140 C 130,156 105,159 76,155"
|
|
54
|
-
stroke="url(#featGrad)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
55
|
-
|
|
56
|
-
<!-- 主分支节�?-->
|
|
57
|
-
<circle cx="76" cy="48" r="11" fill="#13103a" stroke="#c4b5fd" stroke-width="3" filter="url(#glow)"/>
|
|
58
|
-
<circle cx="76" cy="48" r="5" fill="#ddd6fe"/>
|
|
59
|
-
|
|
60
|
-
<circle cx="76" cy="84" r="11" fill="#13103a" stroke="#a78bfa" stroke-width="3"/>
|
|
61
|
-
<circle cx="76" cy="84" r="5" fill="#c4b5fd"/>
|
|
62
|
-
|
|
63
|
-
<circle cx="76" cy="120" r="11" fill="#13103a" stroke="#8b5cf6" stroke-width="3"/>
|
|
64
|
-
<circle cx="76" cy="120" r="5" fill="#a78bfa"/>
|
|
65
|
-
|
|
66
|
-
<circle cx="76" cy="155" r="11" fill="#13103a" stroke="#7c3aed" stroke-width="3" filter="url(#glow)"/>
|
|
67
|
-
<circle cx="76" cy="155" r="5" fill="#8b5cf6"/>
|
|
68
|
-
|
|
69
|
-
<!-- 特性分支节�?-->
|
|
70
|
-
<circle cx="130" cy="115" r="11" fill="#13103a" stroke="#38bdf8" stroke-width="3" filter="url(#glow)"/>
|
|
71
|
-
<circle cx="130" cy="115" r="5" fill="#7dd3fc"/>
|
|
72
|
-
|
|
73
|
-
<circle cx="130" cy="143" r="11" fill="#13103a" stroke="#0ea5e9" stroke-width="3" filter="url(#glow)"/>
|
|
74
|
-
<circle cx="130" cy="143" r="5" fill="#38bdf8"/>
|
|
1
|
+
<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<radialGradient id="bgGrad" cx="38%" cy="32%" r="70%">
|
|
4
|
+
<stop offset="0%" stop-color="#1e1b4b"/>
|
|
5
|
+
<stop offset="100%" stop-color="#0d0b1e"/>
|
|
6
|
+
</radialGradient>
|
|
7
|
+
<linearGradient id="mainGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
8
|
+
<stop offset="0%" stop-color="#c4b5fd"/>
|
|
9
|
+
<stop offset="100%" stop-color="#7c3aed"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<linearGradient id="featGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
12
|
+
<stop offset="0%" stop-color="#7dd3fc"/>
|
|
13
|
+
<stop offset="100%" stop-color="#0284c7"/>
|
|
14
|
+
</linearGradient>
|
|
15
|
+
<filter id="glow" x="-40%" y="-40%" width="180%" height="180%">
|
|
16
|
+
<feGaussianBlur in="SourceGraphic" stdDeviation="2.5" result="blur"/>
|
|
17
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
18
|
+
</filter>
|
|
19
|
+
<filter id="softGlow" x="-20%" y="-20%" width="140%" height="140%">
|
|
20
|
+
<feGaussianBlur in="SourceGraphic" stdDeviation="1.5" result="blur"/>
|
|
21
|
+
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
|
|
22
|
+
</filter>
|
|
23
|
+
</defs>
|
|
24
|
+
|
|
25
|
+
<!-- 背景�?-->
|
|
26
|
+
<circle cx="100" cy="100" r="96" fill="url(#bgGrad)"/>
|
|
27
|
+
|
|
28
|
+
<!-- 同步外弧(上半,代表 sync 循环�?-->
|
|
29
|
+
<path d="M 100,20 A 80,80 0 1,1 36,153"
|
|
30
|
+
stroke="rgba(167,139,250,0.18)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
31
|
+
<!-- 同步外弧(下半) -->
|
|
32
|
+
<path d="M 36,153 A 80,80 0 0,1 164,153"
|
|
33
|
+
stroke="rgba(56,189,248,0.18)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
34
|
+
<!-- 同步箭头(上�?-->
|
|
35
|
+
<path d="M 91,17 L 100,20 L 96,29"
|
|
36
|
+
stroke="rgba(167,139,250,0.55)" stroke-width="2.5" fill="none"
|
|
37
|
+
stroke-linecap="round" stroke-linejoin="round"/>
|
|
38
|
+
<!-- 同步箭头(下�?-->
|
|
39
|
+
<path d="M 163,145 L 164,154 L 155,151"
|
|
40
|
+
stroke="rgba(56,189,248,0.55)" stroke-width="2.5" fill="none"
|
|
41
|
+
stroke-linecap="round" stroke-linejoin="round"/>
|
|
42
|
+
|
|
43
|
+
<!-- 主分支竖�?-->
|
|
44
|
+
<line x1="76" y1="44" x2="76" y2="156"
|
|
45
|
+
stroke="url(#mainGrad)" stroke-width="5.5" stroke-linecap="round"
|
|
46
|
+
filter="url(#softGlow)"/>
|
|
47
|
+
|
|
48
|
+
<!-- 特性分支曲线(分出�?-->
|
|
49
|
+
<path d="M 76,80 C 98,80 130,96 130,120 L 130,140"
|
|
50
|
+
stroke="url(#featGrad)" stroke-width="4.5" fill="none"
|
|
51
|
+
stroke-linecap="round" filter="url(#softGlow)"/>
|
|
52
|
+
<!-- 特性分支合并回主分�?-->
|
|
53
|
+
<path d="M 130,140 C 130,156 105,159 76,155"
|
|
54
|
+
stroke="url(#featGrad)" stroke-width="4.5" fill="none" stroke-linecap="round"/>
|
|
55
|
+
|
|
56
|
+
<!-- 主分支节�?-->
|
|
57
|
+
<circle cx="76" cy="48" r="11" fill="#13103a" stroke="#c4b5fd" stroke-width="3" filter="url(#glow)"/>
|
|
58
|
+
<circle cx="76" cy="48" r="5" fill="#ddd6fe"/>
|
|
59
|
+
|
|
60
|
+
<circle cx="76" cy="84" r="11" fill="#13103a" stroke="#a78bfa" stroke-width="3"/>
|
|
61
|
+
<circle cx="76" cy="84" r="5" fill="#c4b5fd"/>
|
|
62
|
+
|
|
63
|
+
<circle cx="76" cy="120" r="11" fill="#13103a" stroke="#8b5cf6" stroke-width="3"/>
|
|
64
|
+
<circle cx="76" cy="120" r="5" fill="#a78bfa"/>
|
|
65
|
+
|
|
66
|
+
<circle cx="76" cy="155" r="11" fill="#13103a" stroke="#7c3aed" stroke-width="3" filter="url(#glow)"/>
|
|
67
|
+
<circle cx="76" cy="155" r="5" fill="#8b5cf6"/>
|
|
68
|
+
|
|
69
|
+
<!-- 特性分支节�?-->
|
|
70
|
+
<circle cx="130" cy="115" r="11" fill="#13103a" stroke="#38bdf8" stroke-width="3" filter="url(#glow)"/>
|
|
71
|
+
<circle cx="130" cy="115" r="5" fill="#7dd3fc"/>
|
|
72
|
+
|
|
73
|
+
<circle cx="130" cy="143" r="11" fill="#13103a" stroke="#0ea5e9" stroke-width="3" filter="url(#glow)"/>
|
|
74
|
+
<circle cx="130" cy="143" r="5" fill="#38bdf8"/>
|
|
75
75
|
</svg>
|
|
@@ -1027,6 +1027,7 @@ export function registerConfigRoutes({
|
|
|
1027
1027
|
await configManager.writeRawConfigFile(rawConfig)
|
|
1028
1028
|
res.json({ success: true })
|
|
1029
1029
|
} catch (error) {
|
|
1030
|
+
logger.error('[save-ui-settings] failed:', error)
|
|
1030
1031
|
res.status(500).json({ success: false, error: error.message })
|
|
1031
1032
|
}
|
|
1032
1033
|
})
|
|
@@ -1094,7 +1095,7 @@ export function registerConfigRoutes({
|
|
|
1094
1095
|
const models = Array.isArray(rawConfig.models) ? rawConfig.models : []
|
|
1095
1096
|
const defaultModel = models.find(m => m.isDefault) || models[0]
|
|
1096
1097
|
if (!defaultModel) {
|
|
1097
|
-
return res.json({ success: false, error: '未配置 AI 模型,请先在通用设置中添加模型' })
|
|
1098
|
+
return res.json({ success: false, error: '未配置 AI 模型,请先在通用设置中添加模型', code: 'NO_MODEL' })
|
|
1098
1099
|
}
|
|
1099
1100
|
|
|
1100
1101
|
// 后端自己收集 diff,确保 untracked 文件也能进 prompt
|
|
@@ -1152,7 +1153,7 @@ ${diffText || '(no staged content, please infer from the file list)'}`
|
|
|
1152
1153
|
stream: false
|
|
1153
1154
|
})
|
|
1154
1155
|
const controller = new AbortController()
|
|
1155
|
-
const timer = setTimeout(() => controller.abort(),
|
|
1156
|
+
const timer = setTimeout(() => controller.abort(), 60000)
|
|
1156
1157
|
let response
|
|
1157
1158
|
try {
|
|
1158
1159
|
response = await fetch(url, { method: 'POST', headers, body, signal: controller.signal })
|
|
@@ -1162,7 +1163,7 @@ ${diffText || '(no staged content, please infer from the file list)'}`
|
|
|
1162
1163
|
const data = await response.json().catch(() => ({}))
|
|
1163
1164
|
if (!response.ok) {
|
|
1164
1165
|
const msg = data?.error?.message || data?.message || `HTTP ${response.status}`
|
|
1165
|
-
return res.json({ success: false, error: msg })
|
|
1166
|
+
return res.json({ success: false, error: msg, code: 'HTTP_ERR' })
|
|
1166
1167
|
}
|
|
1167
1168
|
const content = data?.choices?.[0]?.message?.content || ''
|
|
1168
1169
|
// 响应内容只走 debug(默认关闭),前 600 字截断防 token 泄露
|
|
@@ -1175,7 +1176,7 @@ ${diffText || '(no staged content, please infer from the file list)'}`
|
|
|
1175
1176
|
|
|
1176
1177
|
if (!jsonMatch) {
|
|
1177
1178
|
console.error('[generate-commit] no JSON found, full content:', content)
|
|
1178
|
-
return res.json({ success: false, error: 'model returned no valid JSON' })
|
|
1179
|
+
return res.json({ success: false, error: 'model returned no valid JSON', code: 'NO_JSON' })
|
|
1179
1180
|
}
|
|
1180
1181
|
let parsed
|
|
1181
1182
|
try {
|
|
@@ -1192,7 +1193,7 @@ ${diffText || '(no staged content, please infer from the file list)'}`
|
|
|
1192
1193
|
description: (descM?.[1] || '').trim()
|
|
1193
1194
|
})
|
|
1194
1195
|
}
|
|
1195
|
-
return res.json({ success: false, error: 'JSON parse failed' })
|
|
1196
|
+
return res.json({ success: false, error: 'JSON parse failed', code: 'PARSE_FAILED' })
|
|
1196
1197
|
}
|
|
1197
1198
|
res.json({
|
|
1198
1199
|
success: true,
|
|
@@ -1201,8 +1202,9 @@ ${diffText || '(no staged content, please infer from the file list)'}`
|
|
|
1201
1202
|
description: String(parsed.description || '').trim()
|
|
1202
1203
|
})
|
|
1203
1204
|
} catch (error) {
|
|
1204
|
-
const
|
|
1205
|
-
|
|
1205
|
+
const isTimeout = error.name === 'AbortError'
|
|
1206
|
+
const msg = isTimeout ? 'AI 请求超时(60s),请重试或检查模型响应速度' : error.message
|
|
1207
|
+
res.json({ success: false, error: msg, code: isTimeout ? 'TIMEOUT' : 'GENERATE_FAILED' })
|
|
1206
1208
|
}
|
|
1207
1209
|
})
|
|
1208
1210
|
}
|
package/src/utils/index.js
CHANGED
|
@@ -315,8 +315,10 @@ function execGitCommand(command, options = {}) {
|
|
|
315
315
|
}
|
|
316
316
|
|
|
317
317
|
// Add command to history
|
|
318
|
+
// 用 head(已 join)而不是原始 command,确保历史里的 command 永远是字符串
|
|
319
|
+
// 防止 execGitCommand(['status']) 这类数组调用把数组塞进历史 → 前端 item.command.trim() 崩
|
|
318
320
|
const historyItem = {
|
|
319
|
-
command,
|
|
321
|
+
command: head,
|
|
320
322
|
stdout: truncatedStdout || '',
|
|
321
323
|
stderr: truncatedStderr || '',
|
|
322
324
|
error: error ? error.message : null,
|
|
@@ -415,7 +417,14 @@ function getCommandHistory() {
|
|
|
415
417
|
// Function to manually add command to history (for commands not using execGitCommand)
|
|
416
418
|
function addCommandToHistory(command, stdout = '', stderr = '', error = null, executionTime = 0) {
|
|
417
419
|
const MAX_OUTPUT_LENGTH = 5000;
|
|
418
|
-
|
|
420
|
+
|
|
421
|
+
// 防御:历史里的 command 必须始终是字符串,防止前端 item.command.trim() 抛错
|
|
422
|
+
if (Array.isArray(command)) {
|
|
423
|
+
command = command.join(' ')
|
|
424
|
+
} else if (typeof command !== 'string') {
|
|
425
|
+
command = String(command ?? '')
|
|
426
|
+
}
|
|
427
|
+
|
|
419
428
|
// Truncate outputs if too long
|
|
420
429
|
const isStdoutTruncated = stdout.length > MAX_OUTPUT_LENGTH;
|
|
421
430
|
const isStderrTruncated = stderr.length > MAX_OUTPUT_LENGTH;
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,Cn as t,D as n,En as r,Et as i,Fn as a,G as o,In as s,Nn as c,Y as l,Yn as u,Zn as d,_n as f,a as p,cr as m,gn as h,hn as g,hr as _,i as v,mr as y,nt as b,rt as x,vn as S,vr as C,wn as w,yn as T,zn as E}from"./element-plus-CJjFCgLP.js";import{n as D,t as O}from"./_plugin-vue_export-helper-BfbhkIv4.js";async function k(){let e=await fetch(`/api/app-version`);return e.ok?e.json():{success:!1,current:``,latest:null,hasUpdate:!1,error:`HTTP ${e.status}`}}async function A(e){let t=await fetch(`/api/app-upgrade`,{method:`POST`});if(!t.ok){let n=`HTTP ${t.status}`;try{let e=await t.json();e?.error&&(n=e.error)}catch{}e({type:`error`,message:n}),e({type:`done`,code:t.status});return}if(!t.body){e({type:`error`,message:`响应无 body`}),e({type:`done`,code:-1});return}let n=t.body.getReader(),r=new TextDecoder(`utf-8`),i=``;for(;;){let{done:t,value:a}=await n.read();if(t)break;i+=r.decode(a,{stream:!0});let o=i.split(`
|
|
2
|
-
`);i=o.pop()??``;for(let t of o)if(t.trim())try{e(JSON.parse(t))}catch{}}if(i.trim())try{e(JSON.parse(i))}catch{}}async function j(){let e=await fetch(`/api/app-restart`,{method:`POST`});if(!e.ok){let t=`HTTP ${e.status}`;try{let n=await e.json();n?.error&&(t=n.error)}catch{}throw Error(t)}}var M={key:3},N={key:4},P={key:5},F={key:0,class:`upgrade-hint`},I={key:0,class:`upgrade-countdown`},L=O(r({__name:`UpgradeDialog`,props:{modelValue:{type:Boolean},logs:{},status:{},countdown:{default:0}},emits:[`update:modelValue`,`retry`,`restart`,`cancel`],setup(r,{emit:a}){let o=r,s=a,p=m(null);u(()=>o.logs,async()=>{await c(),p.value&&(p.value.scrollTop=p.value.scrollHeight)});function g(){o.status!==`running`&&(o.status===`success`&&o.countdown>0&&s(`cancel`),s(`update:modelValue`,!1))}function v(){s(`retry`)}function O(){s(`restart`)}function k(){s(`cancel`),s(`update:modelValue`,!1)}return(a,o)=>{let c=l,u=e,m=n;return E(),f(m,{"model-value":r.modelValue,"onUpdate:modelValue":o[0]||=e=>s(`update:modelValue`,e),title:y(D)(`@F13B4:升级`),width:`680px`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":r.status!==`running`,onClose:g},{footer:d(()=>[r.status===`failed`?(E(),f(u,{key:0,type:`primary`,onClick:v},{default:d(()=>[t(C(y(D)(`@F13B4:重试`)),1)]),_:1})):S(``,!0),r.status===`success`?(E(),f(u,{key:1,type:`primary`,onClick:O},{default:d(()=>[t(C(y(D)(`@F13B4:立即重启并刷新`)),1)]),_:1})):S(``,!0),r.status===`success`?(E(),f(u,{key:2,onClick:k},{default:d(()=>[t(C(y(D)(`@F13B4:稍后手动重启`)),1)]),_:1})):S(``,!0),r.status===`running`?(E(),f(u,{key:3,disabled:``},{default:d(()=>[t(C(y(D)(`@F13B4:升级中`))+`... `,1)]),_:1})):S(``,!0)]),default:d(()=>[h(`div`,{class:_([`upgrade-status`,`is-${r.status}`])},[r.status===`running`?(E(),f(c,{key:0,class:`is-loading`},{default:d(()=>[w(y(i))]),_:1})):r.status===`success`?(E(),f(c,{key:1,color:`#67c23a`},{default:d(()=>[w(y(b))]),_:1})):(E(),f(c,{key:2,color:`#f56c6c`},{default:d(()=>[w(y(x))]),_:1})),r.status===`running`?(E(),T(`span`,M,C(y(D)(`@F13B4:升级中`)),1)):r.status===`success`?(E(),T(`span`,N,C(y(D)(`@F13B4:升级完成`)),1)):(E(),T(`span`,P,C(y(D)(`@F13B4:升级失败`)),1))],2),r.status===`success`?(E(),T(`p`,F,[t(C(y(D)(`@F13B4:新版本已全局安装,需要重启服务才能生效`))+` `,1),r.countdown>0?(E(),T(`span`,I,C(y(D)(`@F13B4:{seconds} 秒后自动刷新`,{seconds:r.countdown})),1)):S(``,!0)])):S(``,!0),h(`pre`,{ref_key:`logEl`,ref:p,class:`upgrade-log`},C(r.logs||y(D)(`@F13B4:等待日志输出`)),513)]),_:1},8,[`model-value`,`title`,`show-close`])}}}),[[`__scopeId`,`data-v-b2f9992a`]]),R={class:`app-version-badge`},z=[`aria-label`],B=[`aria-label`],V=`https://github.com/xz333221/zen-gitsync/releases`,H=5,U=`app-version-check`,W=3600*1e3,G=O(r({__name:`AppVersionBadge`,setup(n){let r=`2.13.24`,i=m(r),c=g(()=>i.value||r),l=m(null),u=m(!1),_=m(``),b=m(`running`),x=m(0),O=null;function M(){try{let e=sessionStorage.getItem(U);if(!e)return null;let{at:t,data:n}=JSON.parse(e);return Date.now()-t>W?null:n}catch{return null}}function N(e){try{sessionStorage.setItem(U,JSON.stringify({at:Date.now(),data:e}))}catch{}}async function P(e=!1){let t=M();t&&(l.value=t);try{let t=await k();l.value=t,N(t),t.current&&(i.value=t.current),!e&&t.success&&t.hasUpdate&&p({type:`success`,message:D(`@F13B4:发现新版本 {version}`,{version:t.latest??``}),duration:4e3})}catch(t){e||p({type:`warning`,message:D(`@F13B4:检查更新失败 {error}`,{error:t?.message||``})})}}async function F(){if(l.value?.hasUpdate){try{await v.confirm(D(`@F13B4:确定要从 {current} 升级到 {latest} 吗?`,{current:l.value.current,latest:l.value.latest}),D(`@F13B4:升级`),{confirmButtonText:D(`@F13B4:确定升级`),cancelButtonText:D(`@F13B4:取消`),type:`info`})}catch{return}_.value=``,b.value=`running`,u.value=!0,await A(e=>{if(e.type===`done`){if(b.value=e.code===0?`success`:`failed`,e.code===0){try{sessionStorage.removeItem(U)}catch{}l.value?.latest&&(i.value=l.value.latest),I()}}else e.message&&(_.value+=e.message)})}}function I(){G(),x.value=H,O=setInterval(()=>{--x.value,x.value<=0&&(O&&=(clearInterval(O),null),q())},1e3)}function G(){O&&=(clearInterval(O),null),x.value=0}function K(){G()}async function q(){G();try{await j(),setTimeout(()=>{window.location.reload()},600)}catch(e){p({type:`warning`,message:D(`@F13B4:重启失败 {error}`,{error:e?.message||``})})}}return a(()=>{G()}),s(()=>{P(!0)}),(n,r)=>{let i=o,a=e;return E(),T(`div`,R,[w(i,{content:y(D)(`@F13B4:在 GitHub 上查看源码`),placement:`top`,effect:`dark`,"show-after":300},{default:d(()=>[h(`a`,{href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link`,"aria-label":y(D)(`@F13B4:在 GitHub 上查看源码`)},[...r[1]||=[h(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{d:`M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2z`})],-1)]],8,z)]),_:1},8,[`content`]),w(i,{content:y(D)(`@F13B4:在 npm 上查看包`),placement:`top`,effect:`dark`,"show-after":300},{default:d(()=>[h(`a`,{href:`https://www.npmjs.com/package/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link badge-icon-link--npm`,"aria-label":y(D)(`@F13B4:在 npm 上查看包`)},[...r[2]||=[h(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[h(`path`,{d:`M2 2v20h20V2H2zm17.167 17.167H12.5v-10h-3.333v10H4.833V4.833h14.334v14.334z`})],-1)]],8,B)]),_:1},8,[`content`]),w(i,{content:y(D)(`@F13B4:查看更新`),placement:`top`,effect:`dark`,"show-after":300},{default:d(()=>[h(`a`,{href:V,target:`_blank`,rel:`noopener noreferrer`,class:`version-link`},`v`+C(c.value),1)]),_:1},8,[`content`]),l.value?.hasUpdate?(E(),f(i,{key:0,content:y(D)(`@F13B4:发现新版本 {version}`,{version:l.value.latest??``}),placement:`top`,effect:`dark`,"show-after":300},{default:d(()=>[w(a,{class:`upgrade-btn`,size:`small`,type:`primary`,onClick:F},{default:d(()=>[t(C(y(D)(`@F13B4:升级`)),1)]),_:1})]),_:1},8,[`content`])):S(``,!0),w(L,{modelValue:u.value,"onUpdate:modelValue":r[0]||=e=>u.value=e,logs:_.value,status:b.value,countdown:x.value,onRetry:F,onRestart:q,onCancel:K},null,8,[`modelValue`,`logs`,`status`,`countdown`])])}}}),[[`__scopeId`,`data-v-f1bc3386`]]);export{G as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.upgrade-status[data-v-b2f9992a]{align-items:center;gap:var(--spacing-base);margin-bottom:var(--spacing-md);font-size:14px;font-weight:500;display:flex}.upgrade-status.is-running[data-v-b2f9992a]{color:var(--el-color-primary)}.upgrade-status.is-success[data-v-b2f9992a]{color:var(--el-color-success)}.upgrade-status.is-failed[data-v-b2f9992a]{color:var(--el-color-danger)}.upgrade-status .is-loading[data-v-b2f9992a]{animation:2s linear infinite rotating-b2f9992a}.upgrade-log[data-v-b2f9992a]{color:#d4d4d4;white-space:pre-wrap;word-break:break-all;background:#1e1e1e;border-radius:4px;height:320px;margin:0;padding:12px;font-family:JetBrains Mono,Cascadia Code,Consolas,monospace;font-size:12px;line-height:1.6;overflow:auto}.upgrade-hint[data-v-b2f9992a]{margin:0 0 var(--spacing-md) 0;border-left:3px solid var(--el-color-success);color:var(--el-color-success);background:#67c23a14;border-radius:4px;padding:8px 12px;font-size:13px}.upgrade-countdown[data-v-b2f9992a]{background:var(--el-color-success);color:#fff;border-radius:10px;margin-left:8px;padding:1px 8px;font-size:12px;font-weight:600;animation:1s ease-in-out infinite pulse-b2f9992a;display:inline-block}@keyframes pulse-b2f9992a{0%,to{opacity:1}50%{opacity:.55}}@keyframes rotating-b2f9992a{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.app-version-badge[data-v-f1bc3386]{align-items:center;gap:var(--spacing-base);margin-left:auto;display:inline-flex}.badge-icon-link[data-v-f1bc3386]{width:22px;height:22px;color:var(--text-tertiary);opacity:.7;border-radius:4px;justify-content:center;align-items:center;text-decoration:none;transition:color .18s,opacity .18s,background .18s;display:inline-flex}.badge-icon-link[data-v-f1bc3386]:hover{opacity:1;color:var(--text-secondary);background:var(--bg-hover,#0000000f)}.badge-icon-link--npm[data-v-f1bc3386]:hover{color:#cb3837}.badge-icon-link[data-v-f1bc3386]:first-child:hover{color:var(--text-primary)}.version-link[data-v-f1bc3386]{color:#6c757d;border-radius:3px;padding:2px 6px;font-family:monospace;font-size:11px;text-decoration:none;transition:color .2s,background-color .2s}.version-link[data-v-f1bc3386]:hover{color:var(--el-color-primary);background-color:#0000000a}.upgrade-btn[data-v-f1bc3386]{border-radius:3px!important;height:20px!important;padding:0 8px!important;font-size:11px!important}
|