zen-gitsync 2.13.30 → 2.13.33

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 (52) hide show
  1. package/package.json +3 -1
  2. package/src/cli/cleanup.js +179 -0
  3. package/src/cli/cleanup.test.js +269 -0
  4. package/src/cli/customCommand.js +94 -0
  5. package/src/cli/customCommand.test.js +143 -0
  6. package/src/cli/ui.js +59 -0
  7. package/src/cli/ui.test.js +115 -0
  8. package/src/config.js +62 -17
  9. package/src/gitCommit.js +73 -25
  10. package/src/ui/public/assets/AppVersionBadge-Dj6H729N.css +1 -0
  11. package/src/ui/public/assets/{AppVersionBadge-CFkZrkhd.js → AppVersionBadge-akyKEMQJ.js} +2 -2
  12. package/src/ui/public/assets/BranchSelector-CWVCURNo.js +1 -0
  13. package/src/ui/public/assets/{CommandConsole-DKwcJRbO.js → CommandConsole-DWvVo1eQ.js} +8 -8
  14. package/src/ui/public/assets/CommandConsole-Da3j09oc.css +1 -0
  15. package/src/ui/public/assets/{CommitForm-w_CCHowb.js → CommitForm-CH_Evj07.js} +2 -2
  16. package/src/ui/public/assets/{CustomCommandManager-C81Su49z.js → CustomCommandManager-1PoZoSfz.js} +1 -1
  17. package/src/ui/public/assets/{EditorView-Do_aRkqm.css → EditorView-BcZ8ToAk.css} +1 -1
  18. package/src/ui/public/assets/EditorView-CUPgONVj.js +0 -0
  19. package/src/ui/public/assets/{FileDiffViewer-ASPmnTdG.css → FileDiffViewer-CLvy7mIG.css} +1 -1
  20. package/src/ui/public/assets/FileDiffViewer-DTGlYSxz.js +13 -0
  21. package/src/ui/public/assets/{FlowExecutionViewer-Bhcnqca8.js → FlowExecutionViewer-D7jcPezN.js} +1 -1
  22. package/src/ui/public/assets/{FlowOrchestrationWorkspace-Cb6C2RyD.js → FlowOrchestrationWorkspace-Box9suz2.js} +2 -2
  23. package/src/ui/public/assets/{GitStatus-D90r1nV4.js → GitStatus-ChKPKq6v.js} +2 -2
  24. package/src/ui/public/assets/{ImagePreview-kHYBPYW5.js → ImagePreview-XjBK0T26.js} +1 -1
  25. package/src/ui/public/assets/{LogList-D6nSWEwN.js → LogList-CAZSFA3k.js} +3 -3
  26. package/src/ui/public/assets/{ProjectStartupButton-BliaT11B.js → ProjectStartupButton-_y5NCPRA.js} +1 -1
  27. package/src/ui/public/assets/{RemoteRepoCard-CUs9RQZg.js → RemoteRepoCard-LiEB5N-H.js} +1 -1
  28. package/src/ui/public/assets/{ResetToRemoteButton-BBsIG2FU.js → ResetToRemoteButton-BMLXv6wR.js} +1 -1
  29. package/src/ui/public/assets/SourceMapView-DjYKJZLj.css +1 -0
  30. package/src/ui/public/assets/SourceMapView-DmLqYNP7.js +3 -0
  31. package/src/ui/public/assets/{TemplateManager-Clov9VqY.js → TemplateManager-l7Q-5uiR.js} +1 -1
  32. package/src/ui/public/assets/{UserInputNode-yVqO69ll.js → UserInputNode-DRroJWUs.js} +1 -1
  33. package/src/ui/public/assets/WorkbenchView-8WkjL7RB.js +12 -0
  34. package/src/ui/public/assets/WorkbenchView-ir769eTr.css +1 -0
  35. package/src/ui/public/assets/{_plugin-vue_export-helper-CpTW8798.js → _plugin-vue_export-helper-BWJlNHzL.js} +3 -3
  36. package/src/ui/public/assets/index-CNhCnXkD.css +1 -0
  37. package/src/ui/public/assets/index-l4Rt9FJk.js +7 -0
  38. package/src/ui/public/index.html +3 -3
  39. package/src/utils/index.js +42 -10
  40. package/src/utils/parseCwdArg.test.js +89 -0
  41. package/src/utils/utils.test.js +200 -0
  42. package/src/ui/public/assets/AppVersionBadge-KZ64lrZQ.css +0 -1
  43. package/src/ui/public/assets/BranchSelector-BzaBCj1X.js +0 -1
  44. package/src/ui/public/assets/CommandConsole-60KxfUE3.css +0 -1
  45. package/src/ui/public/assets/EditorView-Do6ivdLH.js +0 -0
  46. package/src/ui/public/assets/FileDiffViewer-CXMo-Rez.js +0 -13
  47. package/src/ui/public/assets/SourceMapView-Cvp-7LtP.js +0 -3
  48. package/src/ui/public/assets/SourceMapView-DTsSdcgG.css +0 -1
  49. package/src/ui/public/assets/WorkbenchView-BDYbbkM1.js +0 -12
  50. package/src/ui/public/assets/WorkbenchView-zUE7sv6z.css +0 -1
  51. package/src/ui/public/assets/index-B666KMk3.js +0 -7
  52. package/src/ui/public/assets/index-BYAxMGne.css +0 -1
@@ -10,19 +10,19 @@
10
10
  <link rel="preconnect" href="https://fonts.googleapis.com" />
11
11
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
12
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-B666KMk3.js"></script>
13
+ <script type="module" crossorigin src="/assets/index-l4Rt9FJk.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-CRTdimvR.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-BxotT5qN.js">
18
- <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-CpTW8798.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-BWJlNHzL.js">
19
19
  <link rel="modulepreload" crossorigin href="/assets/socket-io-z4n873W1.js">
20
20
  <link rel="modulepreload" crossorigin href="/assets/vue-flow-Bx03URoq.js">
21
21
  <link rel="stylesheet" crossorigin href="/assets/monaco-UXx6YYK1.css">
22
22
  <link rel="stylesheet" crossorigin href="/assets/element-plus-CYGtZ7Nz.css">
23
23
  <link rel="stylesheet" crossorigin href="/assets/vendor-DNI_idR2.css">
24
24
  <link rel="stylesheet" crossorigin href="/assets/vue-flow-CavUTEzp.css">
25
- <link rel="stylesheet" crossorigin href="/assets/index-BYAxMGne.css">
25
+ <link rel="stylesheet" crossorigin href="/assets/index-CNhCnXkD.css">
26
26
  </head>
27
27
  <body>
28
28
  <div id="app"></div>
@@ -241,7 +241,13 @@ function execSyncGitCommand(command, options = {}) {
241
241
  // Add a command history array to store commands and their results
242
242
  const commandHistory = [];
243
243
  const MAX_HISTORY_SIZE = 100;
244
- const MAX_OUTPUT_LENGTH = 5000; // Limit the output length to avoid memory issues
244
+ // 输出截断上限 单点常量,避免在 execGitCommand / addCommandToHistory /
245
+ // 其他未来 history 写入点之间漂移导致截断行为不一致。
246
+ // 截断提示也集中在这里,所有调用方用同一个文案,便于后续 i18n 替换。
247
+ const MAX_OUTPUT_LENGTH = 5000;
248
+ const TRUNCATED_SUFFIX_STDOUT = '\n... (output truncated)';
249
+ const TRUNCATED_SUFFIX_STDERR = '\n... (error output truncated)';
250
+ const TRUNCATED_SUFFIX_MANUAL = '...[truncated]';
245
251
 
246
252
  // 添加一个变量来保存Socket.io实例
247
253
  let ioInstance = null;
@@ -303,14 +309,14 @@ function execGitCommand(command, options = {}) {
303
309
  let truncatedStderr = stderr;
304
310
  let isStdoutTruncated = false;
305
311
  let isStderrTruncated = false;
306
-
312
+
307
313
  if (stdout && stdout.length > MAX_OUTPUT_LENGTH) {
308
- truncatedStdout = stdout.substring(0, MAX_OUTPUT_LENGTH) + '\n... (output truncated)';
314
+ truncatedStdout = truncateForHistory(stdout, MAX_OUTPUT_LENGTH, TRUNCATED_SUFFIX_STDOUT);
309
315
  isStdoutTruncated = true;
310
316
  }
311
-
317
+
312
318
  if (stderr && stderr.length > MAX_OUTPUT_LENGTH) {
313
- truncatedStderr = stderr.substring(0, MAX_OUTPUT_LENGTH) + '\n... (error output truncated)';
319
+ truncatedStderr = truncateForHistory(stderr, MAX_OUTPUT_LENGTH, TRUNCATED_SUFFIX_STDERR);
314
320
  isStderrTruncated = true;
315
321
  }
316
322
 
@@ -416,8 +422,6 @@ function getCommandHistory() {
416
422
 
417
423
  // Function to manually add command to history (for commands not using execGitCommand)
418
424
  function addCommandToHistory(command, stdout = '', stderr = '', error = null, executionTime = 0) {
419
- const MAX_OUTPUT_LENGTH = 5000;
420
-
421
425
  // 防御:历史里的 command 必须始终是字符串,防止前端 item.command.trim() 抛错
422
426
  if (Array.isArray(command)) {
423
427
  command = command.join(' ')
@@ -428,8 +432,8 @@ function addCommandToHistory(command, stdout = '', stderr = '', error = null, ex
428
432
  // Truncate outputs if too long
429
433
  const isStdoutTruncated = stdout.length > MAX_OUTPUT_LENGTH;
430
434
  const isStderrTruncated = stderr.length > MAX_OUTPUT_LENGTH;
431
- const truncatedStdout = isStdoutTruncated ? stdout.substring(0, MAX_OUTPUT_LENGTH) + '...[truncated]' : stdout;
432
- const truncatedStderr = isStderrTruncated ? stderr.substring(0, MAX_OUTPUT_LENGTH) + '...[truncated]' : stderr;
435
+ const truncatedStdout = isStdoutTruncated ? truncateForHistory(stdout, MAX_OUTPUT_LENGTH, TRUNCATED_SUFFIX_MANUAL) : stdout;
436
+ const truncatedStderr = isStderrTruncated ? truncateForHistory(stderr, MAX_OUTPUT_LENGTH, TRUNCATED_SUFFIX_MANUAL) : stderr;
433
437
 
434
438
  const historyItem = {
435
439
  command,
@@ -619,11 +623,38 @@ async function printGitLog() {
619
623
  }
620
624
 
621
625
  function exec_exit(exit) {
622
- if (exit) {
626
+ // 仅当显式传 true 时退出;空值/0/'false'/'no'/其他非真值都按"不退出"处理。
627
+ // 之前的 truthy 判断会把字符串 'false' 误判为 true(非空字符串都是 truthy),
628
+ // 调用方传 '--exit=false' 等解析出来的字符串时会错误退出。
629
+ if (exit === true) {
623
630
  process.exit()
624
631
  }
625
632
  }
626
633
 
634
+ /**
635
+ * 按 char 边界安全截断,避免切断 UTF-16 代理对(emoji / 辅助平面 CJK)。
636
+ * 原 substring(0, N) 在 N-1 是 high surrogate 时会把半个字符拼到末尾,
637
+ * 前端 history 渲染可能显示 '�'。本函数检测这种情况并向前回退 1 个码元。
638
+ *
639
+ * @param {string} str
640
+ * @param {number} limit - 最大字符数(<=0 视为"不截断",原样返回)
641
+ * @param {string} suffix - 截断提示后缀
642
+ * @returns {string}
643
+ */
644
+ function truncateForHistory(str, limit, suffix) {
645
+ if (typeof str !== 'string') return str;
646
+ if (!Number.isFinite(limit) || limit <= 0 || str.length <= limit) return str;
647
+ // 码元 = UTF-16 code unit;length 已经是码元数,但 surrogate pair 占 2 个码元。
648
+ const cutAt = limit;
649
+ const code = str.charCodeAt(cutAt - 1);
650
+ // 0xD800–0xDBFF = high surrogate,后面必须跟 low surrogate 才完整;
651
+ // 如果在 limit 处正好停在 high surrogate,回退一格避免半个 emoji/罕见汉字。
652
+ if (code >= 0xD800 && code <= 0xDBFF) {
653
+ return str.substring(0, cutAt - 1) + suffix;
654
+ }
655
+ return str.substring(0, cutAt) + suffix;
656
+ }
657
+
627
658
  function judgeUnmerged(statusOutput) {
628
659
  const hasUnmerged = statusOutput.includes('You have unmerged paths');
629
660
  if (hasUnmerged) {
@@ -1091,6 +1122,7 @@ export {
1091
1122
  coloredLog, errorLog, execSyncGitCommand,
1092
1123
  execGitCommand, getCommandHistory, addCommandToHistory, // Add command history exports
1093
1124
  clearCommandHistory,
1125
+ truncateForHistory, // 暴露便于测试与外部复用(单测会 import 这个验证 surrogate-pair 回退)
1094
1126
  checkAndClearGitLock,
1095
1127
  registerSocketIO, // 导出注册Socket.io的函数
1096
1128
  getCwd, parseCwdArg, judgePlatform, showHelp, judgeLog, printGitLog,
@@ -83,4 +83,93 @@ test('--cwd 优先 --path 之前出现', () => {
83
83
  parseCwdArg(['--cwd=/c', '--path=/p']),
84
84
  '/c'
85
85
  )
86
+ })
87
+
88
+ // ========== 边界用例扩展(2026-06-26 增补) ==========
89
+
90
+ test('带空格的路径(带引号包裹)', () => {
91
+ // POSIX/macOS 常见: --path="/Users/me/My Project"
92
+ // 解析行为:eqIdx 取第一个 `=`,整段 `--path=` 之后保留引号本身,
93
+ // 由下游 getCwd → process.chdir 或 exec cwd 自行去引号(shell 词法在 child_process 那层)
94
+ assert.equal(
95
+ parseCwdArg(['node', 'g.js', '--path="/Users/me/My Project"']),
96
+ '"/Users/me/My Project"'
97
+ )
98
+ })
99
+
100
+ test('带空格的路径(无引号 + 空格分隔形式)', () => {
101
+ // --path <value> 形式,value 含空格
102
+ assert.equal(
103
+ parseCwdArg(['node', 'g.js', '--path', '/Users/me/My Project']),
104
+ '/Users/me/My Project'
105
+ )
106
+ })
107
+
108
+ test('相对路径 ./ 与 ../', () => {
109
+ // 用户在子目录下用 --path=./repo 触发相对路径解析,
110
+ // parseCwdArg 只做字符串切片,不解析;是否 resolve 由 getCwd 决定
111
+ assert.equal(parseCwdArg(['--path=./repo']), './repo')
112
+ assert.equal(parseCwdArg(['--path=../sibling']), '../sibling')
113
+ assert.equal(parseCwdArg(['--path', './inner']), './inner')
114
+ })
115
+
116
+ test('Windows 盘符 C:\\Project 不被特殊处理', () => {
117
+ // 解析器对盘符大小写不敏感,字符串原样返回;
118
+ // 真正的 case-insensitive 去重在 normalizeProjectPath(config.js)层做
119
+ assert.equal(
120
+ parseCwdArg(['node', 'g.js', '--path=C:\\Project']),
121
+ 'C:\\Project'
122
+ )
123
+ assert.equal(
124
+ parseCwdArg(['node', 'g.js', '--path=c:\\project']),
125
+ 'c:\\project'
126
+ )
127
+ assert.equal(
128
+ parseCwdArg(['node', 'g.js', '--path=D:/work']),
129
+ 'D:/work'
130
+ )
131
+ })
132
+
133
+ test('value 中嵌入等号不被截断', () => {
134
+ // --path=/a=b → indexOf 取第一个 `=`,value 保留嵌入等号
135
+ // 例: --path=/opt/some=weird-name
136
+ assert.equal(
137
+ parseCwdArg(['--path=/opt/some=weird-name']),
138
+ '/opt/some=weird-name'
139
+ )
140
+ // 多重等号同理
141
+ assert.equal(
142
+ parseCwdArg(['--path=x=y=z']),
143
+ 'x=y=z'
144
+ )
145
+ })
146
+
147
+ test('--path= 仅在 argv 末尾也安全返回 null', () => {
148
+ // 防御:argv 解析不抛
149
+ assert.equal(parseCwdArg(['--path=']), null)
150
+ })
151
+
152
+ test('argv 中混入无关 unicode 不影响解析', () => {
153
+ // 中间混 emoji / CJK,只关心 --path 的值
154
+ assert.equal(
155
+ parseCwdArg(['node', 'g.js', '🚀', '--path=/repo', '中文']),
156
+ '/repo'
157
+ )
158
+ })
159
+
160
+ test('--path 等号紧贴无空格', () => {
161
+ // --path=/repo(无空格) vs --path /repo(空格)
162
+ // 行为应一致
163
+ assert.equal(
164
+ parseCwdArg(['--path=/repo']),
165
+ parseCwdArg(['--path', '/repo'])
166
+ )
167
+ })
168
+
169
+ test('重复 --path 取首个出现', () => {
170
+ // 已经测过,这里再确认带空格的重复
171
+ assert.equal(
172
+ parseCwdArg(['--path=/first with space', '--path=/second']),
173
+ '/first with space'
174
+ )
86
175
  })
@@ -0,0 +1,200 @@
1
+ // Copyright 2026 xz333221
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // utils/index.js 中暴露的工具函数测试(node:test 内置)。
16
+ // 覆盖 truncateForHistory(surrogate-pair 安全截断)+ exec_exit(字符串 'false' 回归)。
17
+ import { test } from 'node:test'
18
+ import assert from 'node:assert/strict'
19
+ import { truncateForHistory, exec_exit } from './index.js'
20
+
21
+ // ========== truncateForHistory ==========
22
+
23
+ test('truncateForHistory: 短字符串原样返回', () => {
24
+ assert.equal(truncateForHistory('hello', 100, '...[t]'), 'hello')
25
+ })
26
+
27
+ test('truncateForHistory: 长度等于 limit 原样返回', () => {
28
+ // 边界条件:不超 limit 就保持原状
29
+ assert.equal(truncateForHistory('hello', 5, '...[t]'), 'hello')
30
+ })
31
+
32
+ test('truncateForHistory: 长 ASCII 字符串按 limit 截断 + suffix', () => {
33
+ const out = truncateForHistory('abcdefghijklmnop', 10, '...[t]')
34
+ assert.equal(out, 'abcdefghij...[t]')
35
+ })
36
+
37
+ test('truncateForHistory: 不会切断 UTF-16 代理对(emoji)', () => {
38
+ // 🦄 = U+1F984,UTF-16 编码是 0xD83E 0xDD84(一对 surrogate)。
39
+ // 如果 limit=1,substring(0,1) 会拿到 0xD83E(孤立 high surrogate),
40
+ // 截断函数应识别并回退 1 位,返回 suffix。
41
+ const out = truncateForHistory('🦄hello', 1, '...[t]')
42
+ // 不应包含未配对的 high surrogate
43
+ assert.ok(!out.startsWith('\uD83E'), '不应以孤立 high surrogate 开头')
44
+ assert.ok(out.endsWith('...[t]'), '应以 suffix 收尾')
45
+ })
46
+
47
+ test('truncateForHistory: 完整 emoji 不会被切坏', () => {
48
+ // 🦄🐢🐲 = 3 个 supplementary plane 字符,每个 2 码元,共 6 码元
49
+ // limit=7 → cutAt=7,正好停在 'r' 上,完整保留 3 emoji
50
+ const out = truncateForHistory('🦄🐢🐲rest', 7, '...[t]')
51
+ // 高低位 surrogate 总是成对出现 → 数 codepoint 数应等于 emoji 数
52
+ // 不应出现奇数个 surrogate(否则有孤立的)
53
+ const codeUnits = [...out].map(c => c.codePointAt(0))
54
+ const highSurrogates = codeUnits.filter(c => c >= 0xD800 && c <= 0xDBFF).length
55
+ const lowSurrogates = codeUnits.filter(c => c >= 0xDC00 && c <= 0xDFFF).length
56
+ assert.equal(highSurrogates, lowSurrogates, 'high/low surrogate 必须成对')
57
+ assert.ok(out.startsWith('🦄🐢🐲'), '前 3 个 emoji 应完整保留')
58
+ assert.ok(out.endsWith('...[t]'))
59
+ })
60
+
61
+ test('truncateForHistory: 截断位置恰好在 emoji 边界时回退', () => {
62
+ // helper: 数 surrogate 是否成对(无孤立)
63
+ const checkPaired = (s) => {
64
+ const codeUnits = [...s].map(c => c.codePointAt(0))
65
+ const high = codeUnits.filter(c => c >= 0xD800 && c <= 0xDBFF).length
66
+ const low = codeUnits.filter(c => c >= 0xDC00 && c <= 0xDFFF).length
67
+ return high === low
68
+ }
69
+ // 🦄 = 2 码元,limit=2 想保留前 2 码元 → 完整 emoji → 不回退
70
+ const out1 = truncateForHistory('🦄hello', 2, '...[t]')
71
+ assert.ok(out1.startsWith('🦄'), 'limit=2 应保留完整 emoji')
72
+ assert.ok(checkPaired(out1), '应无孤立 surrogate')
73
+ // limit=3 想保留前 3 码元 = 高+低+'h',emoji 已完整,直接切
74
+ const out2 = truncateForHistory('🦄hello', 3, '...[t]')
75
+ assert.ok(out2.startsWith('🦄h'), 'limit=3 应保留 emoji + 后续字符')
76
+ assert.ok(checkPaired(out2), '应无孤立 surrogate')
77
+ })
78
+
79
+ test('truncateForHistory: 中日韩 BMP 字符不被切断(单码元)', () => {
80
+ // 中文 = BMP 字符,每个 1 码元,substring 不会切坏
81
+ // '你好世界你好世界' 共 10 字符,substring(0, 6) = '你好世界你好'
82
+ const out = truncateForHistory('你好世界你好世界', 6, '...[t]')
83
+ assert.equal(out, '你好世界你好' + '...[t]')
84
+ })
85
+
86
+ test('truncateForHistory: 非字符串输入安全返回原值', () => {
87
+ // 防御:execGitCommand 失败时 stdout/stderr 可能 undefined
88
+ assert.equal(truncateForHistory(undefined, 100, '...[t]'), undefined)
89
+ assert.equal(truncateForHistory(null, 100, '...[t]'), null)
90
+ assert.equal(truncateForHistory(123, 100, '...[t]'), 123)
91
+ })
92
+
93
+ test('truncateForHistory: limit=0 / 负数返回原值(防御退化)', () => {
94
+ // limit<=0 没有合理的"保留 N 码元"语义,直接原样返回,避免误返回空+suffix
95
+ assert.equal(truncateForHistory('abc', 0, '...[t]'), 'abc')
96
+ assert.equal(truncateForHistory('abc', -1, '...[t]'), 'abc')
97
+ })
98
+
99
+ // ========== exec_exit ==========
100
+
101
+ test('exec_exit: 显式 true 触发 process.exit', () => {
102
+ const original = process.exit
103
+ let exitCode = null
104
+ process.exit = (code) => {
105
+ exitCode = code
106
+ // 不真退出,抛个特殊标记让测试断言
107
+ const e = new Error('__test_exit_called__')
108
+ e.__isExitStub = true
109
+ throw e
110
+ }
111
+ try {
112
+ try {
113
+ exec_exit(true)
114
+ } catch (e) {
115
+ assert.ok(e.__isExitStub, '应调用 process.exit')
116
+ }
117
+ assert.equal(exitCode, undefined, 'process.exit 默认无参')
118
+ } finally {
119
+ process.exit = original
120
+ }
121
+ })
122
+
123
+ test('exec_exit: false 不退出', () => {
124
+ const original = process.exit
125
+ let called = false
126
+ process.exit = () => {
127
+ called = true
128
+ const e = new Error('__test_exit_called__')
129
+ e.__isExitStub = true
130
+ throw e
131
+ }
132
+ try {
133
+ exec_exit(false)
134
+ assert.equal(called, false, 'false 不应触发 exit')
135
+ } finally {
136
+ process.exit = original
137
+ }
138
+ })
139
+
140
+ test('exec_exit: 字符串 "false" 不退出(回归)', () => {
141
+ // 修复前:if (exit) 会把 'false' 当 true → 错误退出
142
+ // 修复后:if (exit === true) 只接受 boolean true
143
+ const original = process.exit
144
+ let called = false
145
+ process.exit = () => {
146
+ called = true
147
+ const e = new Error('__test_exit_called__')
148
+ e.__isExitStub = true
149
+ throw e
150
+ }
151
+ try {
152
+ exec_exit('false')
153
+ assert.equal(called, false, '字符串 "false" 不应触发 exit')
154
+ } finally {
155
+ process.exit = original
156
+ }
157
+ })
158
+
159
+ test('exec_exit: 字符串 "true" 也不退出(严格 boolean 契约)', () => {
160
+ // 修复策略:严格 === true,任何非 boolean true 都不退,
161
+ // 包括 "true" / 1 / {} 等 truthy 值 — 防止调用方传字符串/数字的歧义
162
+ const original = process.exit
163
+ let called = false
164
+ process.exit = () => {
165
+ called = true
166
+ const e = new Error('__test_exit_called__')
167
+ e.__isExitStub = true
168
+ throw e
169
+ }
170
+ try {
171
+ exec_exit('true')
172
+ assert.equal(called, false, '字符串 "true" 不应触发 exit')
173
+ exec_exit(1)
174
+ assert.equal(called, false, '数字 1 不应触发 exit')
175
+ exec_exit({})
176
+ assert.equal(called, false, '空对象不应触发 exit')
177
+ } finally {
178
+ process.exit = original
179
+ }
180
+ })
181
+
182
+ test('exec_exit: undefined / null 不退出', () => {
183
+ const original = process.exit
184
+ let called = false
185
+ process.exit = () => {
186
+ called = true
187
+ const e = new Error('__test_exit_called__')
188
+ e.__isExitStub = true
189
+ throw e
190
+ }
191
+ try {
192
+ exec_exit(undefined)
193
+ exec_exit(null)
194
+ exec_exit(0)
195
+ exec_exit('')
196
+ assert.equal(called, false, 'falsy 值不应触发 exit')
197
+ } finally {
198
+ process.exit = original
199
+ }
200
+ })
@@ -1 +0,0 @@
1
- .upgrade-status[data-v-3de8edac]{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-3de8edac]{color:var(--el-color-primary)}.upgrade-status.is-success[data-v-3de8edac]{color:var(--el-color-success)}.upgrade-status.is-failed[data-v-3de8edac]{color:var(--el-color-danger)}.upgrade-status .is-loading[data-v-3de8edac]{animation:2s linear infinite rotating-3de8edac}.upgrade-log[data-v-3de8edac]{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-3de8edac]{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-3de8edac]{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-3de8edac;display:inline-block}@keyframes pulse-3de8edac{0%,to{opacity:1}50%{opacity:.55}}@keyframes rotating-3de8edac{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.app-version-badge[data-v-0c224808]{align-items:center;gap:var(--spacing-base);margin-left:auto;display:inline-flex}.badge-icon-link[data-v-0c224808]{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-0c224808]:hover{opacity:1;color:var(--text-secondary);background:var(--bg-hover,#0000000f)}.badge-icon-link--npm[data-v-0c224808]:hover{color:#cb3837}.badge-icon-link[data-v-0c224808]:first-child:hover{color:var(--text-primary)}.version-link[data-v-0c224808]{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-0c224808]:hover{color:var(--el-color-primary);background-color:#0000000a}.upgrade-btn[data-v-0c224808]{appearance:none;cursor:pointer;color:#fff;background:linear-gradient(135deg, var(--color-primary) 0%, #3a8ee6 100%);height:22px;box-shadow:var(--shadow-sm);transition:transform var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom), filter var(--transition-fast) var(--ease-custom);white-space:nowrap;-webkit-user-select:none;user-select:none;border:0;border-radius:11px;outline:none;align-items:center;gap:5px;margin:0;padding:0 10px 0 8px;font-family:inherit;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.upgrade-btn[data-v-0c224808]:hover{filter:brightness(1.08);box-shadow:var(--shadow-md);transform:translateY(-1px)}.upgrade-btn[data-v-0c224808]:active{filter:brightness(.96);box-shadow:var(--shadow-sm);transform:translateY(0)}.upgrade-btn[data-v-0c224808]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.upgrade-btn__dot[data-v-0c224808]{background:#fff;border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:1.6s ease-in-out infinite upgrade-pulse-0c224808;box-shadow:0 0 0 2px #ffffff59}.upgrade-btn__label[data-v-0c224808]{letter-spacing:.5px}.upgrade-btn__version[data-v-0c224808]{background:#ffffff38;border-radius:6px;padding:1px 5px;font-family:monospace;font-size:10px;font-weight:500;line-height:1.2}@keyframes upgrade-pulse-0c224808{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.8)}}
@@ -1 +0,0 @@
1
- import"./rolldown-runtime-CMxvf4Kt.js";import{In as e,It as t,K as n,L as ee,Nt as r,Ot as i,R as a,Rn as o,Sn as s,W as te,Y as ne,_n as c,dr as l,gn as u,hn as d,ir as f,ln as p,mn as m,mr as h,pn as g,q as re,qn as _,r as ie,sn as v,tt as y,ur as b,wn as x}from"./element-plus-CRTdimvR.js";import{n as S,t as C}from"./_plugin-vue_export-helper-CpTW8798.js";import{a as w,i as T,l as ae,r as oe}from"./index-B666KMk3.js";var E={key:0,class:`branch-info`},D={class:`branch-wrapper`},O={class:`branch-btn`},k={class:`branch-btn-name`},A={class:`branch-btn-caret`},j={class:`branch-popover-inner`},M={class:`branch-search`},N={class:`branch-list`},P=[`onClick`],F={key:1,class:`branch-item-check-placeholder`},I={class:`branch-item-name`},L={key:0,class:`branch-empty`},R={class:`branch-popover-footer`},z={class:`create-branch-content`},B={class:`form-label`},V={class:`form-label`},se={class:`dialog-footer`},H={class:`footer-actions`},U=[`disabled`],W=C(x({__name:`BranchSelector`,emits:[`branchChanged`],setup(x,{emit:C}){let W=w(),G=C,K=f(!1),q=f(``),J=g(()=>{let e=q.value.trim().toLowerCase();return e?W.allBranches.filter(t=>t.toLowerCase().includes(e)):W.allBranches});async function ce(e){if(e===W.currentBranch){K.value=!1;return}K.value=!1,await W.changeBranch(e)&&(G(`branchChanged`),W.refreshLog())}let Y=f(!1),X=f(``),Z=f(``);function le(){K.value=!1,Z.value=W.currentBranch,Y.value=!0}async function Q(){await W.createBranch(X.value,Z.value)&&(Y.value=!1,X.value=``,G(`branchChanged`))}let $=f(!1);async function ue(){if(!$.value){$.value=!0;try{await Promise.all([W.getCurrentBranch(!0),W.getBranchStatus(!0),W.getAllBranches()]),G(`branchChanged`),W.refreshLog()}finally{$.value=!1}}}return(f,g)=>{let x=ne,C=te,w=ie,G=re,de=ee,fe=a,pe=n;return b(W).currentBranch?(e(),c(`div`,E,[m(`div`,D,[s(w,{visible:K.value,"onUpdate:visible":g[1]||=e=>K.value=e,placement:`top-start`,width:260,trigger:`click`,"popper-class":`branch-popover`,"show-arrow":!1,onShow:g[2]||=e=>q.value=``},{reference:_(()=>[m(`button`,O,[s(T,{"icon-class":`git-branch`,"class-name":`branch-btn-icon`}),m(`span`,k,h(b(W).currentBranch),1),m(`span`,A,[s(x,null,{default:_(()=>[...g[7]||=[m(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[m(`path`,{fill:`currentColor`,d:`M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.776a29.12 29.12 0 0 0 0-41.6 30.592 30.592 0 0 0-42.752 0z`})],-1)]]),_:1})])])]),default:_(()=>[m(`div`,j,[m(`div`,M,[s(C,{modelValue:q.value,"onUpdate:modelValue":g[0]||=e=>q.value=e,placeholder:b(S)(`@F13B4:搜索或签出分支`),size:`small`,clearable:``,autofocus:``},null,8,[`modelValue`,`placeholder`])]),m(`div`,N,[(e(!0),c(p,null,o(J.value,t=>(e(),c(`div`,{key:t,class:l([`branch-item`,{"is-active":t===b(W).currentBranch}]),onClick:e=>ce(t)},[t===b(W).currentBranch?(e(),d(x,{key:0,class:`branch-item-check`},{default:_(()=>[s(b(y))]),_:1})):(e(),c(`span`,F)),s(T,{"icon-class":`git-branch`,"class-name":`branch-item-icon`}),m(`span`,I,h(t),1)],10,P))),128)),J.value.length===0?(e(),c(`div`,L,h(b(S)(`@F13B4:没有匹配的分支`)),1)):u(``,!0)]),m(`div`,R,[m(`button`,{class:`branch-create-btn`,onClick:le},[s(x,null,{default:_(()=>[s(b(r))]),_:1}),m(`span`,null,h(b(S)(`@F13B4:创建新分支`)),1)])])])]),_:1},8,[`visible`]),s(oe,{tooltip:b(S)(`@CMDCON:刷新`),onClick:ue},{default:_(()=>[s(x,{class:l({"is-loading":$.value})},{default:_(()=>[s(b(t))]),_:1},8,[`class`])]),_:1},8,[`tooltip`])]),s(ae,{modelValue:Y.value,"onUpdate:modelValue":g[6]||=e=>Y.value=e,title:b(S)(`@F13B4:创建新分支`),size:`small`,"destroy-on-close":!0,"append-to-body":!0,"custom-class":`create-branch-dialog`},{footer:_(()=>[m(`div`,se,[m(`div`,H,[m(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:g[5]||=e=>Y.value=!1},h(b(S)(`@F13B4:取消`)),1),m(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:Q,disabled:b(W).isCreatingBranch},[b(W).isCreatingBranch?(e(),d(x,{key:1,class:`is-loading`},{default:_(()=>[...g[8]||=[m(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[m(`path`,{fill:`currentColor`,d:`M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32z`})],-1)]]),_:1})):(e(),d(x,{key:0},{default:_(()=>[s(b(y))]),_:1})),m(`span`,null,h(b(S)(`@F13B4:创建`)),1)],8,U)])])]),default:_(()=>[m(`div`,z,[s(pe,{model:{newBranchName:X.value,selectedBaseBranch:Z.value},"label-position":`top`},{default:_(()=>[s(G,null,{label:_(()=>[m(`div`,B,[s(x,{class:`label-icon`},{default:_(()=>[s(b(r))]),_:1}),m(`span`,null,h(b(S)(`@F13B4:新分支名称`)),1)])]),default:_(()=>[s(C,{modelValue:X.value,"onUpdate:modelValue":g[3]||=e=>X.value=e,placeholder:b(S)(`@F13B4:请输入新分支名称`),class:`modern-input`,size:`large`,onKeyup:v(Q,[`enter`])},null,8,[`modelValue`,`placeholder`])]),_:1}),s(G,null,{label:_(()=>[m(`div`,V,[s(x,{class:`label-icon`},{default:_(()=>[s(b(i))]),_:1}),m(`span`,null,h(b(S)(`@F13B4:基于分支`)),1)])]),default:_(()=>[s(fe,{modelValue:Z.value,"onUpdate:modelValue":g[4]||=e=>Z.value=e,placeholder:b(S)(`@F13B4:选择基础分支`),class:`modern-select`,size:`large`,style:{width:`100%`}},{default:_(()=>[(e(!0),c(p,null,o(b(W).allBranches,t=>(e(),d(de,{key:t,label:t,value:t},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1})]),_:1},8,[`model`])])]),_:1},8,[`modelValue`,`title`])])):u(``,!0)}}}),[[`__scopeId`,`data-v-665171bc`]]);export{W as default};
@@ -1 +0,0 @@
1
- .command-console[data-v-79447e6c]{background:var(--bg-console);box-shadow:var(--console-shadow);border-radius:10px;flex-direction:column;height:100%;padding:0;transition:all .3s;display:flex;overflow:hidden}.command-console[data-v-79447e6c]:hover{box-shadow:var(--console-shadow-hover);border-color:var(--border-console-hover)}.command-console .console-content[data-v-79447e6c]{flex:1;min-height:0;overflow:hidden}.command-console .termial-session[data-v-79447e6c]{background:var(--bg-console-output);height:100%;overflow:hidden}.command-console .console-content-main[data-v-79447e6c]{flex-direction:column;height:100%;display:flex;overflow:hidden}.command-console .console-content-main .orchestration-flow-panel[data-v-79447e6c],.command-console .console-content-main .orchestration-steps-panel[data-v-79447e6c],.command-console .console-content-main .console-input-row[data-v-79447e6c]{flex-shrink:0}.command-console .console-content-main .console-output[data-v-79447e6c]{flex:1;min-height:80px;max-height:none}.command-console.fullscreen[data-v-79447e6c]{z-index:9999;border-radius:0;flex-direction:column;max-height:100vh;margin:0;display:flex;position:fixed;inset:0}.command-console.fullscreen .console-content[data-v-79447e6c]{flex:1;display:flex;overflow:hidden}.command-console.fullscreen .console-output[data-v-79447e6c]{flex:1;max-height:none;overflow:auto}.console-header[data-v-79447e6c]{background:var(--bg-console-header);justify-content:space-between;align-items:center;padding:6px 12px;display:flex}.console-window-dots[data-v-79447e6c]{flex-shrink:0;align-items:center;gap:6px;margin-right:10px;display:flex}.console-window-dots .dot[data-v-79447e6c]{opacity:.85;border-radius:50%;width:12px;height:12px}.console-window-dots .dot-red[data-v-79447e6c]{background:#ff5f57}.console-window-dots .dot-yellow[data-v-79447e6c]{background:#ffbd2e}.console-window-dots .dot-green[data-v-79447e6c]{background:#28c840}.header-left[data-v-79447e6c]{align-items:center;gap:var(--spacing-base);display:flex}.console-title[data-v-79447e6c]{font-size:var(--font-size-sm);color:var(--text-console-secondary);letter-spacing:.3px;font-weight:500;font-family:var(--font-mono)}.terminal-sessions-panel[data-v-79447e6c]{background:var(--bg-console-output);border-bottom:none;flex-direction:column;height:100%;display:flex}.terminal-sessions-header[data-v-79447e6c]{background:var(--bg-console-cmd);justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.terminal-sessions-title[data-v-79447e6c]{color:var(--text-console-secondary);align-items:baseline;gap:6px;font-weight:600;display:flex}.terminal-sessions-count[data-v-79447e6c]{color:var(--text-console-muted);font-weight:500}.terminal-sessions-actions[data-v-79447e6c]{align-items:center;gap:4px;display:flex}.terminal-sessions-body[data-v-79447e6c]{background:var(--bg-console-output);flex:1;padding:8px 12px 12px;overflow:auto}.terminal-sessions-empty[data-v-79447e6c]{color:var(--text-console-muted);padding:10px 0;font-size:13px}.terminal-sessions-list[data-v-79447e6c]{flex-direction:column;gap:8px;display:flex}.terminal-session-item[data-v-79447e6c]{background:var(--bg-console-subtle);border:1px solid var(--border-console);border-radius:8px;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;display:flex}.terminal-session-main[data-v-79447e6c]{flex:1;min-width:0}.terminal-session-command[data-v-79447e6c]{font-size:var(--font-size-md);color:var(--text-console);white-space:nowrap;text-overflow:ellipsis;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;overflow:hidden}.terminal-session-meta[data-v-79447e6c]{color:var(--text-console-muted);flex-direction:column;align-items:flex-start;gap:4px;margin-top:6px;font-size:12px;display:flex}.terminal-session-dir[data-v-79447e6c]{text-overflow:ellipsis;align-items:center;gap:4px;width:100%;font-size:12px;display:inline-flex;overflow:hidden}.terminal-session-pid[data-v-79447e6c]{white-space:nowrap;color:#bfdbfee6;vertical-align:middle;background:#3b82f62e;border:1px solid #3b82f64d;border-radius:999px;align-items:center;margin-left:6px;padding:1px 6px;font-size:11px;font-weight:600;line-height:1;display:inline-flex}.terminal-session-actions[data-v-79447e6c]{align-items:center;gap:4px;display:flex}.terminal-sessions-collapsed[data-v-79447e6c]{background:var(--bg-console-cmd);padding:8px 12px}[data-v-79447e6c] .el-splitter-panel{background:var(--bg-console-output)}[data-v-79447e6c] .el-splitter-bar{background:var(--border-console)}.header-actions[data-v-79447e6c]{align-items:center;gap:var(--spacing-md);display:flex}.header-actions[data-v-79447e6c] .icon-button,.header-actions[data-v-79447e6c] .el-button.is-text{color:var(--text-console-muted)}.header-actions[data-v-79447e6c] .icon-button:hover,.header-actions[data-v-79447e6c] .el-button.is-text:hover{color:var(--text-console)}.header-actions[data-v-79447e6c] .icon-button.is-active,.header-actions[data-v-79447e6c] .el-button.is-text.is-active{color:var(--color-primary-light)}.terminal-toggle-btn[data-v-79447e6c]{width:36px;height:36px;padding:var(--spacing-base);border-radius:var(--radius-md);transition:all .3s}.terminal-toggle-btn .el-icon[data-v-79447e6c]{color:var(--text-tertiary);transition:all .3s}.terminal-toggle-btn[data-v-79447e6c]:hover{background-color:#409eff1a}.terminal-toggle-btn:hover .el-icon[data-v-79447e6c]{color:var(--color-primary)}.terminal-toggle-btn.is-active[data-v-79447e6c]{background-color:#409eff26}.terminal-toggle-btn.is-active .el-icon[data-v-79447e6c]{color:var(--color-primary)}.terminal-toggle-btn.is-active[data-v-79447e6c]:hover{background-color:#409eff33}.execution-controls[data-v-79447e6c]{align-items:center;gap:var(--spacing-base);display:flex}.pause-btn[data-v-79447e6c],.stop-btn[data-v-79447e6c]{font-weight:500}.command-manager-btn[data-v-79447e6c]:hover{color:var(--color-success);background:#67c23a1a}.project-startup-btn[data-v-79447e6c]:hover{color:var(--color-primary);background:#409eff1a}.orchestrator-btn[data-v-79447e6c]:hover{color:var(--color-warning);background:#e6a23c1a}.orchestrator-manager-btn[data-v-79447e6c]:hover{color:var(--color-primary);background:#409eff1a}.toggle-console-btn[data-v-79447e6c]{padding:var(--spacing-sm) var(--spacing-base);font-size:var(--font-size-sm);color:var(--text-secondary);transition:all .3s}.toggle-console-btn[data-v-79447e6c]:hover{color:var(--color-primary);background:#409eff1a}.toggle-console-btn .el-icon[data-v-79447e6c]{font-size:var(--font-size-md);transition:transform .3s}.toggle-console-btn .rotate-icon[data-v-79447e6c]{transform:rotate(-90deg)}.console-content-slide-enter-active[data-v-79447e6c],.console-content-slide-leave-active[data-v-79447e6c]{transition:all .3s;overflow:hidden}.console-content-slide-enter-from[data-v-79447e6c],.console-content-slide-leave-to[data-v-79447e6c]{opacity:0;max-height:0}.console-content-slide-enter-to[data-v-79447e6c],.console-content-slide-leave-from[data-v-79447e6c]{opacity:1;max-height:500px}.console-input-row[data-v-79447e6c]{padding:var(--spacing-xs) var(--spacing-sm);background:var(--bg-console-input);border:1px solid var(--border-console-input);align-items:center;gap:8px;transition:all .3s;display:flex}.console-input-row[data-v-79447e6c]:focus-within{border-color:#4ade8066;box-shadow:0 0 0 2px #4ade801f}.prompt[data-v-79447e6c]{font-family:var(--font-mono);font-size:var(--font-size-sm);color:var(--color-success);border-radius:var(--radius-md);text-overflow:ellipsis;white-space:nowrap;cursor:help;max-width:45%;font-weight:500;transition:all .3s;overflow:hidden}.console-input[data-v-79447e6c]{flex:1}.console-input[data-v-79447e6c] .el-input__wrapper{padding:var(--spacing-sm) var(--spacing-base);font-family:var(--font-mono);font-size:var(--font-size-sm);background-color:#0000;border:none;box-shadow:none!important}.console-input[data-v-79447e6c] .el-input__inner{color:var(--text-console)}.console-input[data-v-79447e6c] .el-input__inner::placeholder{color:var(--text-console-faint);font-style:italic}.console-input-row .el-button[data-v-79447e6c]{padding:var(--spacing-base) var(--spacing-xl);border-radius:var(--radius-md);font-weight:500;transition:all .3s}.console-input-row .el-button[data-v-79447e6c]:hover{box-shadow:var(--shadow-md);transform:scale(1.02)}.console-input-row .el-button[data-v-79447e6c]:active{transform:scale(.98)}.console-input-row .el-button[data-v-79447e6c]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.stdin-input-row[data-v-79447e6c]{align-items:center;gap:var(--spacing-base);padding:var(--spacing-base) var(--spacing-md);margin:var(--spacing-base) 0 0 0;border-radius:var(--radius-md);background:linear-gradient(135deg,#67c23a0d,#67c23a05);border:1px solid #67c23a4d;transition:all .3s;display:flex}.stdin-input-row[data-v-79447e6c]:focus-within{border-color:var(--color-success);background:linear-gradient(135deg,#67c23a14,#67c23a08);box-shadow:0 0 0 2px #67c23a1a}.stdin-icon[data-v-79447e6c]{color:var(--color-success);font-size:var(--font-size-md);flex-shrink:0}.stdin-input[data-v-79447e6c]{flex:1}.stdin-input[data-v-79447e6c] .el-input__wrapper{padding:var(--spacing-sm) var(--spacing-base);font-family:var(--font-mono);font-size:var(--font-size-sm);background-color:#0000;border:none;box-shadow:none!important}.stdin-input[data-v-79447e6c] .el-input__inner{color:var(--text-primary)}.stdin-input[data-v-79447e6c] .el-input__inner::placeholder{color:#67c23a80;font-style:italic}.console-output[data-v-79447e6c]{background:var(--bg-console-output);max-height:280px;overflow:auto}.console-output[data-v-79447e6c]::-webkit-scrollbar{width:8px;height:8px}.console-output[data-v-79447e6c]::-webkit-scrollbar-track{border-radius:var(--radius-base);background:0 0}.console-output[data-v-79447e6c]::-webkit-scrollbar-thumb{background:var(--console-scrollbar);border-radius:var(--radius-base);transition:background .3s}.console-output[data-v-79447e6c]::-webkit-scrollbar-thumb:hover{background:var(--console-scrollbar-hover)}.console-record[data-v-79447e6c]{border-bottom:1px solid var(--border-console-faint);transition:background .2s}.console-record[data-v-79447e6c]:hover{background:var(--bg-console-soft)}.console-record[data-v-79447e6c]:last-child{border-bottom:none}.cmd-header[data-v-79447e6c]{padding:10px var(--spacing-md);justify-content:space-between;align-items:center;gap:var(--spacing-base);background:var(--bg-console-cmd);display:flex}.cmd-actions[data-v-79447e6c]{align-items:center;gap:var(--spacing-sm);display:flex}.stop-btn[data-v-79447e6c]{padding:var(--spacing-sm) var(--spacing-base)}.stop-btn[data-v-79447e6c]:hover{background:#f56c6c1a}.cmd-line[data-v-79447e6c]{font-family:var(--font-mono);font-size:var(--font-size-sm);align-items:center;gap:var(--spacing-base);flex:1;min-width:0;font-weight:500;display:flex}.cmd-prefix[data-v-79447e6c]{color:var(--color-primary);flex-shrink:0;font-weight:600}.cmd-text[data-v-79447e6c]{color:var(--text-console);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.cmd-dir[data-v-79447e6c]{color:var(--text-console-muted);font-size:var(--font-size-sm);padding:0 var(--spacing-sm);text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;max-width:420px;font-weight:400;overflow:hidden}.cmd-dir-icon[data-v-79447e6c]{vertical-align:-2px;margin-right:2px;font-size:14px}.running-icon[data-v-79447e6c]{color:var(--color-primary);margin-left:var(--spacing-sm);flex-shrink:0}.ts[data-v-79447e6c]{color:var(--text-console-very-faint);font-size:var(--font-size-sm);padding:0 var(--spacing-sm);flex-shrink:0;font-weight:400}.toggle-output-btn[data-v-79447e6c]{padding:var(--spacing-sm);min-width:auto;color:var(--text-secondary);flex-shrink:0;transition:all .3s}.toggle-output-btn[data-v-79447e6c]:hover{color:var(--color-primary);background:#409eff1a}.toggle-output-btn .el-icon[data-v-79447e6c]{transition:transform .3s}.toggle-output-btn .rotate-icon[data-v-79447e6c]{transform:rotate(-90deg)}.output-content[data-v-79447e6c]{padding:0 var(--spacing-md) 10px var(--spacing-md)}.output-slide-enter-active[data-v-79447e6c],.output-slide-leave-active[data-v-79447e6c]{transition:all .3s;overflow:hidden}.output-slide-enter-from[data-v-79447e6c],.output-slide-leave-to[data-v-79447e6c]{opacity:0;max-height:0}.output-slide-enter-to[data-v-79447e6c],.output-slide-leave-from[data-v-79447e6c]{opacity:1;max-height:500px}pre.stdout[data-v-79447e6c],pre.stderr[data-v-79447e6c]{padding:var(--spacing-base);font-family:var(--font-mono);font-size:var(--font-size-sm);white-space:pre-wrap;word-break:break-word;border-radius:var(--radius-base);color:var(--text-console);background:0 0;margin:0;line-height:1.5}pre.stderr[data-v-79447e6c]{background:#f56c6c14}.icon-btn[data-v-79447e6c]{width:18px;height:18px;color:var(--text-secondary)}.toggle-console-btn:hover .icon-btn[data-v-79447e6c]{color:var(--color-primary)}.orchestration-flow-panel[data-v-79447e6c]{margin-bottom:var(--spacing-md);background:var(--bg-panel);border:1px solid var(--border-card);border-radius:var(--radius-lg);position:relative}.flow-panel-header[data-v-79447e6c]{justify-content:space-between;align-items:center;gap:var(--spacing-md);padding:8px 10px;display:flex}.flow-panel-title[data-v-79447e6c]{min-width:0;font-size:var(--font-size-lg);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:600;overflow:hidden}.flow-panel-close-btn[data-v-79447e6c]{flex-shrink:0}.terminal-waiting-panel[data-v-79447e6c]{margin:var(--spacing-sm) var(--spacing-md);padding:var(--spacing-md) var(--spacing-lg);border:2px solid var(--color-primary);border-radius:var(--radius-md);align-items:center;gap:var(--spacing-lg);background:linear-gradient(135deg,#409eff14 0%,#409eff05 100%);animation:.3s ease-out slideDown-79447e6c;display:flex}.waiting-content[data-v-79447e6c]{align-items:center;gap:var(--spacing-md);flex:1;display:flex}.waiting-icon[data-v-79447e6c]{color:var(--color-primary);flex-shrink:0;font-size:24px}.waiting-text[data-v-79447e6c]{flex-direction:column;flex:1;gap:4px;display:flex}.waiting-title[data-v-79447e6c]{font-size:var(--font-size-base);color:var(--color-primary);font-weight:600;line-height:1.3}.waiting-desc[data-v-79447e6c]{font-size:var(--font-size-sm);color:var(--text-secondary);line-height:1.4}.waiting-desc strong[data-v-79447e6c]{color:var(--text-primary);font-weight:600}.waiting-actions[data-v-79447e6c]{gap:var(--spacing-sm);flex-shrink:0;display:flex}@keyframes slideDown-79447e6c{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.steps-header[data-v-79447e6c]{padding:var(--spacing-sm) var(--spacing-md);background:linear-gradient(135deg, var(--bg-container), var(--bg-panel))}.steps-title[data-v-79447e6c]{font-size:var(--font-size-sm);color:var(--text-secondary);letter-spacing:.5px;font-weight:600}.steps-list[data-v-79447e6c]{gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);scrollbar-width:thin;scrollbar-color:var(--border-card) transparent;display:flex;overflow-x:auto}.steps-list[data-v-79447e6c]::-webkit-scrollbar{height:5px}.steps-list[data-v-79447e6c]::-webkit-scrollbar-track{background:0 0}.steps-list[data-v-79447e6c]::-webkit-scrollbar-thumb{background:var(--border-card);border-radius:var(--radius-full)}.steps-list[data-v-79447e6c]::-webkit-scrollbar-thumb:hover{background:var(--border-component)}.step-item[data-v-79447e6c]{align-items:center;gap:var(--spacing-xs);background:var(--bg-container);border:1.5px solid var(--border-card);border-radius:var(--radius-md);cursor:default;flex-shrink:0;min-width:120px;max-width:200px;padding:8px 12px;transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;position:relative;box-shadow:0 1px 2px #0000000a}.step-item.step-type-command[data-v-79447e6c]:not(.step-current):not(.step-completed){border-left:3px solid #409eff66}.step-item.step-type-wait[data-v-79447e6c]:not(.step-current):not(.step-completed){border-left:3px solid #e6a23c66}.step-item.step-type-version[data-v-79447e6c]:not(.step-current):not(.step-completed){border-left:3px solid #67c23a66}.step-item[data-v-79447e6c]:hover:not(.step-disabled){transform:scale(1.02);box-shadow:0 2px 6px #00000014}.step-item[data-v-79447e6c]:active:not(.step-disabled){transform:scale(.98)}.step-item[data-v-79447e6c]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.step-item.step-current[data-v-79447e6c]{border-color:var(--color-primary);border-width:2px;box-shadow:0 2px 8px #409eff33,0 0 0 2px #409eff1f}.step-item.step-current.step-type-command[data-v-79447e6c]{background:linear-gradient(135deg,#409eff26 0%,#409eff0d 100%)}.step-item.step-current.step-type-wait[data-v-79447e6c]{border-color:var(--color-warning);background:linear-gradient(135deg,#e6a23c26 0%,#e6a23c0d 100%);box-shadow:0 2px 8px #e6a23c33,0 0 0 2px #e6a23c1f}.step-item.step-current.step-type-wait .step-indicator[data-v-79447e6c]{background:linear-gradient(135deg, var(--color-warning), #f0ad4e);animation:1.8s ease-in-out infinite pulse-ring-warning-79447e6c;box-shadow:0 0 6px #e6a23c59,0 0 0 2px #e6a23c26}.step-item.step-current.step-type-wait .step-name[data-v-79447e6c]{color:var(--color-warning)}.step-item.step-current.step-type-version[data-v-79447e6c]{border-color:var(--color-success);background:linear-gradient(135deg,#67c23a26 0%,#67c23a0d 100%);box-shadow:0 2px 8px #67c23a33,0 0 0 2px #67c23a1f}.step-item.step-current.step-type-version .step-indicator[data-v-79447e6c]{background:linear-gradient(135deg, var(--color-success), #5cb85c);animation:1.8s ease-in-out infinite pulse-ring-success-79447e6c;box-shadow:0 0 6px #67c23a59,0 0 0 2px #67c23a26}.step-item.step-current.step-type-version .step-name[data-v-79447e6c]{color:var(--color-success)}.step-item.step-current .step-indicator[data-v-79447e6c]{background:linear-gradient(135deg, var(--color-primary), #3a9eff);color:#fff;font-weight:700;animation:1.8s ease-in-out infinite pulse-ring-79447e6c;box-shadow:0 0 6px #409eff59,0 0 0 2px #409eff26}.step-item.step-current .step-indicator .step-type-icon[data-v-79447e6c]{color:#fff}.step-item.step-current .step-name[data-v-79447e6c]{color:var(--color-primary);font-weight:600}.step-item.step-completed[data-v-79447e6c]{opacity:.75;background:#67c23a0a;border-color:#67c23a4d}.step-item.step-completed .step-indicator[data-v-79447e6c]{background:linear-gradient(135deg, var(--color-success), #5cb85c);color:#fff;font-weight:600}.step-item.step-completed .step-name[data-v-79447e6c]{color:var(--text-tertiary);opacity:.8}.step-item.step-completed .step-type-tag[data-v-79447e6c]{opacity:.6}.step-item.step-pending[data-v-79447e6c]{opacity:.65;background:var(--bg-container)}.step-item.step-pending .step-indicator[data-v-79447e6c]{background:var(--bg-panel);border:2px solid var(--border-component);color:var(--text-tertiary);font-weight:500}.step-item.step-pending .step-name[data-v-79447e6c]{color:var(--text-secondary)}.step-item.step-pending .step-type-tag[data-v-79447e6c]{opacity:.7}.step-item.step-disabled[data-v-79447e6c]{opacity:.4;filter:grayscale(.5);cursor:not-allowed}.step-item.step-disabled .step-indicator[data-v-79447e6c]{background:var(--bg-panel);color:var(--text-disabled)}.step-item.step-disabled .step-name[data-v-79447e6c]{color:var(--text-disabled);text-decoration:line-through}.step-indicator[data-v-79447e6c]{background:var(--bg-panel);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:26px;height:26px;transition:all .3s cubic-bezier(.4,0,.2,1);display:flex;position:relative}.step-indicator .step-type-icon[data-v-79447e6c]{color:var(--text-tertiary);font-size:14px}.step-indicator .step-icon-check[data-v-79447e6c]{color:#fff;font-size:14px}.step-number[data-v-79447e6c]{font-size:var(--font-size-xs);font-weight:600}.step-content[data-v-79447e6c]{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.step-header[data-v-79447e6c]{align-items:center;gap:4px;display:flex}.step-type-tag[data-v-79447e6c]{border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.3px;padding:2px 6px;font-size:10px;font-weight:600;line-height:1}.step-type-tag.type-command[data-v-79447e6c]{color:var(--color-primary);background:#409eff1f}.step-type-tag.type-wait[data-v-79447e6c]{color:var(--color-warning);background:#e6a23c1f}.step-type-tag.type-version[data-v-79447e6c]{color:var(--color-success);background:#67c23a1f}.step-terminal-tag[data-v-79447e6c]{color:#0ea5e9;background:#0ea5e91f;border:1px solid #0ea5e940;border-radius:5px;align-items:center;gap:4px;margin-left:6px;padding:1px 5px;font-size:9px;font-weight:600;line-height:1;display:inline-flex}.step-terminal-icon[data-v-79447e6c]{font-size:11px}.step-name[data-v-79447e6c]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;line-height:1.3;transition:all .3s;overflow:hidden}.step-disabled-tag[data-v-79447e6c]{color:var(--text-disabled);background:var(--bg-panel);border-radius:var(--radius-sm);align-self:flex-start;padding:1px 4px;font-size:10px}.user-input-dialog-content[data-v-79447e6c]{padding:8px 2px}.user-input-empty[data-v-79447e6c]{color:var(--text-tertiary);padding:10px 0;font-size:13px}.user-input-form[data-v-79447e6c]{gap:var(--spacing-md);flex-direction:column;max-height:55vh;padding-right:6px;display:flex;overflow:auto}.user-input-row[data-v-79447e6c]{gap:var(--spacing-md);grid-template-columns:160px 1fr;align-items:center;display:grid}.user-input-label[data-v-79447e6c]{color:var(--color-text);word-break:break-all;font-size:13px;line-height:1.2}.user-input-label .required[data-v-79447e6c]{color:var(--color-danger);margin-right:4px}@keyframes pulse-ring-79447e6c{0%,to{box-shadow:0 0 6px #409eff59,0 0 0 2px #409eff40}50%{box-shadow:0 0 8px #409eff80,0 0 0 4px #409eff00}}@keyframes pulse-ring-warning-79447e6c{0%,to{box-shadow:0 0 6px #e6a23c59,0 0 0 2px #e6a23c40}50%{box-shadow:0 0 8px #e6a23c80,0 0 0 4px #e6a23c00}}@keyframes pulse-ring-success-79447e6c{0%,to{box-shadow:0 0 6px #67c23a59,0 0 0 2px #67c23a40}50%{box-shadow:0 0 8px #67c23a80,0 0 0 4px #67c23a00}}
@@ -1,13 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/monaco-DC7mqInI.js","assets/rolldown-runtime-CMxvf4Kt.js","assets/monaco-UXx6YYK1.css"])))=>i.map(i=>d[i]);
2
- import"./rolldown-runtime-CMxvf4Kt.js";import{B as e,Bn as t,Et as n,G as r,Gn as i,In as a,Jn as o,Nn as s,Pn as c,Rn as l,Rt as u,S as d,Sn as f,U as p,Vn as m,W as h,Xt as g,Y as _,_n as v,a as y,bn as b,c as x,dr as S,ft as ee,gn as C,hn as w,ir as T,ln as E,mn as D,mr as O,nt as te,o as ne,ot as k,pn as A,pr as re,qn as j,qt as M,s as ie,ur as N,wn as P,xn as F,yt as ae,zn as oe,zt as se}from"./element-plus-CRTdimvR.js";import{n as I,t as L}from"./_plugin-vue_export-helper-CpTW8798.js";import{a as R,i as z,l as B,n as ce,r as le,t as V}from"./monaco-DC7mqInI.js";import{i as ue,r as de,s as fe}from"./index-B666KMk3.js";import{r as pe,t as me}from"./fileIcon-B5p5pGN9.js";import{n as he,t as ge}from"./ImagePreview-kHYBPYW5.js";var _e=[`width`,`height`],ve=P({__name:`TreeIcon`,props:{size:{default:`1em`}},setup(e){return(t,n)=>(a(),v(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,width:e.size,height:e.size,fill:`none`,stroke:`currentColor`,"stroke-width":`1.5`,"stroke-linecap":`round`},[...n[0]||=[b(`<line x1="3" y1="2" x2="3" y2="14"></line><line x1="3" y1="4" x2="6" y2="4"></line><rect x="2" y="3" width="8" height="2" rx="0.5" fill="currentColor" stroke="none"></rect><line x1="3" y1="8" x2="6" y2="8"></line><rect x="4" y="7" width="8" height="2" rx="0.5" fill="currentColor" stroke="none"></rect><line x1="3" y1="12" x2="6" y2="12"></line><rect x="6" y="11" width="8" height="2" rx="0.5" fill="currentColor" stroke="none"></rect>`,7)]],8,_e))}}),H=[`width`,`height`],ye=P({__name:`ListIcon`,props:{size:{default:`1em`}},setup(e){return(t,n)=>(a(),v(`svg`,{viewBox:`0 0 16 16`,xmlns:`http://www.w3.org/2000/svg`,width:e.size,height:e.size,fill:`currentColor`,stroke:`none`},[...n[0]||=[D(`rect`,{x:`2`,y:`3`,width:`12`,height:`2`,rx:`0.5`},null,-1),D(`rect`,{x:`2`,y:`7`,width:`12`,height:`2`,rx:`0.5`},null,-1),D(`rect`,{x:`2`,y:`11`,width:`12`,height:`2`,rx:`0.5`},null,-1)]],8,H))}});function be(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#039;`)}function xe(e){if(!e)return``;let t=e.split(`
3
- `),n=!1,r=null;return t.map(e=>{let t=be(e);return e.startsWith(`diff --git`)||e.startsWith(`diff --cc`)||e.startsWith(`diff --combined`)?`<div class="diff-header">${t}</div>`:e.startsWith(`---`)?`<div class="diff-old-file">${t}</div>`:e.startsWith(`+++`)?`<div class="diff-new-file">${t}</div>`:e.startsWith(`@@`)?`<div class="diff-hunk-header">${t}</div>`:e.match(/^[+\-\s]*<{7,}\s+(HEAD|.*)/)?(n=!0,r=`current`,`<div class="diff-conflict-start">${t}</div>`):e.match(/^[+\-\s]*={7,}\s*$/)?(r=`incoming`,`<div class="diff-conflict-separator">${t}</div>`):e.match(/^[+\-\s]*>{7,}\s+.*/)?(n=!1,r=null,`<div class="diff-conflict-end">${t}</div>`):n&&r?r===`current`?`<div class="diff-conflict-current">${t}</div>`:`<div class="diff-conflict-incoming">${t}</div>`:e.startsWith(`+`)?`<div class="diff-added">${` `+t.substring(1)}</div>`:e.startsWith(`-`)?`<div class="diff-removed">${` `+t.substring(1)}</div>`:`<div class="diff-context">${t}</div>`}).join(``)}function Se(e){if(!e)return``;let t=e.match(/^(feat|fix|docs|style|refactor|perf|test|chore|build|ci|revert)(\([^)]+\))?\s*:\s*(.+)$/s);return t?t[3].trim():e.trim()}var Ce={class:`file-action-buttons`},we={key:1,style:{"font-size":`var(--font-size-md)`,"font-weight":`bold`}},Te=L(P({__name:`FileActionButtons`,props:{filePath:{},fileType:{},isLocked:{type:Boolean,default:!1},isLocking:{type:Boolean,default:!1},showLockButton:{type:Boolean,default:!0}},emits:[`toggleLock`,`stage`,`unstage`,`revert`,`manageLockedFiles`],setup(t,{emit:i}){let o=t,s=i,c=A(()=>{switch(o.fileType){case`added`:return[{type:`unstage`,tooltip:I(`@0883F:取消暂存`),buttonType:`warning`,icon:`-`,handler:()=>s(`unstage`,o.filePath)}];case`modified`:case`deleted`:return[{type:`stage`,tooltip:I(`@0883F:添加到暂存区`),buttonType:`success`,icon:`+`,handler:()=>s(`stage`,o.filePath)},{type:`revert`,tooltip:I(`@0883F:撤回修改`),buttonType:`danger`,icon:u,handler:()=>s(`revert`,o.filePath)}];case`untracked`:return[{type:`stage`,tooltip:I(`@0883F:添加到暂存区`),buttonType:`success`,icon:`+`,handler:()=>s(`stage`,o.filePath)},{type:`delete`,tooltip:I(`@0883F:删除文件`),buttonType:`danger`,icon:k,handler:()=>s(`revert`,o.filePath)}];default:return[]}});function d(e){e.stopPropagation(),s(`toggleLock`,o.filePath)}function p(e,t){t.stopPropagation(),e()}function h(e){e.stopPropagation(),s(`manageLockedFiles`)}return(i,o)=>{let s=_,u=e,g=r;return a(),v(`div`,Ce,[t.showLockButton?(a(),w(g,{key:0,content:t.isLocking?N(I)(`@0883F:处理中...`):t.isLocked?N(I)(`@0883F:解锁文件`):N(I)(`@0883F:锁定文件`),placement:`top`,disabled:t.isLocking,"show-after":200},{default:j(()=>[f(u,{type:t.isLocked?`danger`:`info`,size:`small`,text:``,loading:t.isLocking,disabled:t.isLocking,onClick:d,class:`file-action-btn`},{default:j(()=>[t.isLocking?C(``,!0):(a(),w(s,{key:0,size:`16`},{default:j(()=>[(a(),w(m(t.isLocked?N(n):N(M))))]),_:1}))]),_:1},8,[`type`,`loading`,`disabled`])]),_:1},8,[`content`,`disabled`])):C(``,!0),t.isLocked?(a(),w(g,{key:1,content:N(I)(`@13D1C:管理锁定文件`),placement:`top`,"show-after":200},{default:j(()=>[f(u,{type:`warning`,size:`small`,text:``,onClick:h,class:`file-action-btn`},{default:j(()=>[f(s,{size:`16`},{default:j(()=>[...o[0]||=[D(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[D(`path`,{fill:`currentColor`,d:`M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296L315.2 220.096c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384zm0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256z`})],-1)]]),_:1})]),_:1})]),_:1},8,[`content`])):C(``,!0),t.isLocked?C(``,!0):(a(!0),v(E,{key:2},l(c.value,e=>(a(),w(g,{key:e.type,content:e.tooltip,placement:`top`,"show-after":200},{default:j(()=>[f(u,{type:e.buttonType,size:`small`,text:``,onClick:t=>p(e.handler,t),class:`file-action-btn`},{default:j(()=>[typeof e.icon==`string`?(a(),v(`span`,we,O(e.icon),1)):(a(),w(s,{key:0,size:`16`},{default:j(()=>[(a(),w(m(e.icon)))]),_:2},1024))]),_:2},1032,[`type`,`onClick`])]),_:2},1032,[`content`]))),128))])}}}),[[`__scopeId`,`data-v-50559605`]]);function Ee(e){let t=[],n=new Map;return[...e].sort((e,t)=>e.path.localeCompare(t.path)).forEach(e=>{let r=e.path.split(`/`).filter(e=>e),i=``,a=t;r.forEach((t,o)=>{let s=o===r.length-1;i=i?`${i}/${t}`:t;let c=n.get(i);c||(c={name:t,path:i,isDirectory:!s,expanded:!0},s?(c.file=e,c.type=e.type,c.locked=e.locked):c.children=[],n.set(i,c),a.push(c)),!s&&c.children&&(a=c.children)})}),t}function De(e){e.expanded=!e.expanded}function Oe(e,t){let n=new Map,r=e=>{e.forEach(e=>{e.isDirectory&&(n.set(e.path,e.expanded||!1),e.children&&r(e.children))})},i=e=>{e.forEach(e=>{if(e.isDirectory){let t=n.get(e.path);t!==void 0&&(e.expanded=t),e.children&&i(e.children)}})};r(t),i(e)}var ke={class:`tree-node-wrapper`},U=[`xlink:href`],W={class:`node-name`},G={key:0,class:`file-type-tag`},K={key:2,class:`file-actions`},q={key:0,class:`tree-children`},J=L(P({__name:`TreeNodeItem`,props:{node:{},level:{},selectedFile:{default:``},showActionButtons:{type:Boolean,default:!1},isFileLocked:{type:Function,default:()=>!1},isLocking:{type:Function,default:()=>!1}},emits:[`file-select`,`toggle-lock`,`stage`,`unstage`,`revert`,`node-click`],setup(e,{emit:i}){let o=e,s=i;function c(e){return`${e*20+10}px`}function u(e){return pe(e.name,e.isDirectory,!!e.expanded)}function d(e){return!e.isDirectory&&e.path===o.selectedFile}function p(){s(`node-click`,o.node)}return(i,o)=>{let m=t(`TreeNodeItem`,!0);return a(),v(`div`,ke,[D(`div`,{class:S([`tree-node`,{"is-directory":e.node.isDirectory,"is-file":!e.node.isDirectory,"is-selected":d(e.node),"is-locked":e.node.locked,[`file-type-${e.node.type}`]:e.node.type}]),style:re({paddingLeft:c(e.level)}),onClick:p},[(a(),v(`svg`,{class:S([`node-icon mit-icon`,{"folder-icon":u(e.node).key.startsWith(`folder-`)}]),"aria-hidden":`true`},[D(`use`,{"xlink:href":`#${u(e.node).spriteId}`},null,8,U)],2)),f(N(r),{content:e.node.path,placement:`top`,disabled:e.node.name.length<=35,"show-after":200},{default:j(()=>[D(`span`,W,O(e.node.name),1)]),_:1},8,[`content`,`disabled`]),e.node.isDirectory?C(``,!0):(a(),v(`span`,G,O(e.node.type||`modified`),1)),e.node.locked?(a(),w(N(r),{key:1,content:N(I)(`@E80AC:该文件已被锁定,提交时会被跳过`),placement:`top`,"show-after":200},{default:j(()=>[f(N(_),{class:`lock-icon`,color:`var(--color-warning)`},{default:j(()=>[f(N(n))]),_:1})]),_:1},8,[`content`])):C(``,!0),e.showActionButtons&&!e.node.isDirectory&&e.node.file?(a(),v(`div`,K,[f(Te,{"file-path":e.node.path,"file-type":e.node.type||`modified`,"is-locked":e.isFileLocked(e.node.path),"is-locking":e.isLocking(e.node.path),onToggleLock:o[0]||=e=>s(`toggle-lock`,e),onStage:o[1]||=e=>s(`stage`,e),onUnstage:o[2]||=e=>s(`unstage`,e),onRevert:o[3]||=e=>s(`revert`,e)},null,8,[`file-path`,`file-type`,`is-locked`,`is-locking`])])):C(``,!0)],6),e.node.isDirectory&&e.node.expanded&&e.node.children&&e.node.children.length>0?(a(),v(`div`,q,[(a(!0),v(E,null,l(e.node.children,t=>(a(),w(m,{key:t.path+`-`+(t.expanded?`open`:`closed`),node:t,level:e.level+1,"selected-file":e.selectedFile,"show-action-buttons":e.showActionButtons,"is-file-locked":e.isFileLocked,"is-locking":e.isLocking,onFileSelect:o[4]||=e=>s(`file-select`,e),onToggleLock:o[5]||=e=>s(`toggle-lock`,e),onStage:o[6]||=e=>s(`stage`,e),onUnstage:o[7]||=e=>s(`unstage`,e),onRevert:o[8]||=e=>s(`revert`,e),onNodeClick:o[9]||=e=>s(`node-click`,e)},null,8,[`node`,`level`,`selected-file`,`show-action-buttons`,`is-file-locked`,`is-locking`]))),128))])):C(``,!0)])}}}),[[`__scopeId`,`data-v-0f783b58`]]),Ae={class:`file-tree-view`},je=L(P({__name:`FileTreeView`,props:{treeData:{},selectedFile:{default:``},showActionButtons:{type:Boolean,default:!1},isFileLocked:{type:Function,default:()=>!1},isLocking:{type:Function,default:()=>!1}},emits:[`file-select`,`toggle-lock`,`stage`,`unstage`,`revert`],setup(e,{emit:t}){let n=t,r=T(0);function i(e){e.isDirectory?(De(e),r.value++):e.file&&n(`file-select`,e.path)}return(t,r)=>(a(),v(`div`,Ae,[(a(!0),v(E,null,l(e.treeData,t=>(a(),w(J,{key:t.path+`-`+(t.expanded?`open`:`closed`),node:t,level:0,"selected-file":e.selectedFile,"show-action-buttons":e.showActionButtons,"is-file-locked":e.isFileLocked,"is-locking":e.isLocking,onFileSelect:r[0]||=e=>n(`file-select`,e),onToggleLock:r[1]||=e=>n(`toggle-lock`,e),onStage:r[2]||=e=>n(`stage`,e),onUnstage:r[3]||=e=>n(`unstage`,e),onRevert:r[4]||=e=>n(`revert`,e),onNodeClick:i},null,8,[`node`,`selected-file`,`show-action-buttons`,`is-file-locked`,`is-locking`]))),128))]))}}),[[`__scopeId`,`data-v-267015cf`]]),Me=L(P({__name:`MonacoDiffViewer`,props:{original:{},modified:{},language:{default:`plaintext`},filePath:{default:``},theme:{default:`auto`},readOnly:{type:Boolean,default:!0}},setup(e){let t=e,n=T(null),r=null,o=null,l=null,u=null,d=null,f=null;async function p(){return r||f||(f=(async()=>{let e=self;return e.MonacoEnvironment||={getWorker(e,t){return t===`json`?new z:t===`css`||t===`scss`||t===`less`?new le:t===`html`||t===`handlebars`||t===`razor`?new ce:t===`typescript`||t===`javascript`?new V:new R}},r=await B(()=>import(`./monaco-DC7mqInI.js`).then(e=>e.o),__vite__mapDeps([0,1,2])),r})(),f)}function m(e){let t=(e||``).toLowerCase().match(/\.([a-z0-9]+)$/),n=t?t[1]:``;return n===`ts`||n===`tsx`?`typescript`:n===`js`||n===`jsx`||n===`cjs`||n===`mjs`?`javascript`:n===`json`?`json`:n===`html`||n===`htm`||n===`vue`?`html`:n===`css`?`css`:n===`scss`?`scss`:n===`less`?`less`:n===`md`||n===`markdown`?`markdown`:n===`yml`||n===`yaml`?`yaml`:n===`xml`?`xml`:n===`sh`?`shell`:n===`ps1`?`powershell`:n===`go`?`go`:n===`rs`?`rust`:n===`py`?`python`:n===`java`?`java`:n===`cpp`||n===`cc`||n===`cxx`||n===`hpp`||n===`h`?`cpp`:n===`cs`?`csharp`:`plaintext`}function h(){return t.language===`auto`?m(t.filePath||``):t.language||`plaintext`}function g(){return t.theme&&t.theme!==`auto`?t.theme:document.documentElement.getAttribute(`data-theme`)===`dark`?`vs-dark`:`vs`}function _(){if(!r)return;let e=g();r.editor.setTheme(e)}function y(){if(!r)return;l?.dispose(),u?.dispose();let e=h();l=r.editor.createModel(t.original||``,e),u=r.editor.createModel(t.modified||``,e)}function b(){!o||!l||!u||o.setModel({original:l,modified:u})}function x(){l&&l.getValue()!==(t.original||``)&&l.setValue(t.original||``),u&&u.getValue()!==(t.modified||``)&&u.setValue(t.modified||``)}return c(async()=>{n.value&&(r=await p(),_(),y(),o=r.editor.createDiffEditor(n.value,{automaticLayout:!0,readOnly:t.readOnly,renderSideBySide:!0,minimap:{enabled:!1},fontSize:13,wordWrap:`on`,scrollBeyondLastLine:!1,renderWhitespace:`selection`,originalEditable:!t.readOnly}),b(),d=new MutationObserver(()=>{_()}),d.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]}))}),i(()=>t.language,()=>{if(!r)return;let e=h();l&&r.editor.setModelLanguage(l,e),u&&r.editor.setModelLanguage(u,e)}),i(()=>t.filePath,()=>{if(!r||t.language!==`auto`)return;let e=h();l&&r.editor.setModelLanguage(l,e),u&&r.editor.setModelLanguage(u,e)}),i(()=>t.theme,()=>{_()}),i(()=>[t.original,t.modified],()=>{x()}),s(()=>{d?.disconnect(),d=null,o?.dispose(),o=null,l?.dispose(),u?.dispose(),l=null,u=null}),(e,t)=>(a(),v(`div`,{ref_key:`containerRef`,ref:n,class:`monaco-diff-container`},null,512))}}),[[`__scopeId`,`data-v-edc8f052`]]),Y=L(P({__name:`MonacoEditor`,props:{modelValue:{},language:{default:`plaintext`},filePath:{default:``},theme:{default:`auto`},readOnly:{type:Boolean,default:!1},minHeight:{default:`360px`},revealLine:{default:null},highlightRange:{default:null},dimHighlightRanges:{default:null},highlightKind:{default:``},gutterPlacement:{default:`glyph`},gutterItems:{default:()=>[]},rightActions:{default:()=>[]},appliedBlocks:{default:()=>[]},syncGroup:{default:null},syncScrollTop:{default:null}},emits:[`update:modelValue`,`gutter-click`,`scroll-change`],setup(e,{emit:t}){let n=e,r=t,o=T(null),l=null,u=null,d=null,f=null,p=null,m=!1,h=[],g=[],_=[],y=null,b=null,x=new Map,S=null,ee=null;function C(){if(!u)return;let e=n.gutterItems||[],t=n.gutterPlacement===`glyph`&&e.length>0;try{u.updateOptions({glyphMargin:t})}catch{}}function w(){if(!u||b)return;let e=u.getDomNode?.();e&&(b=document.createElement(`div`),b.className=`merge-right-actions`,e.appendChild(b))}function E(){b&&(b.innerHTML=``,x.clear())}function D(){if(!u||!l||!b)return;let e=n.rightActions||[];if(!e.length)return;let t=u.getLayoutInfo?.(),r=t?.contentLeft??0,i=t?.contentWidth??0,a=Math.max(0,r+i-44);for(let t of e){let e=x.get(t.blockId);if(!e)continue;let n=d?.getLineMaxColumn?.(t.line)??1,r=u.getScrolledVisiblePosition?.({lineNumber:t.line,column:n});if(!r){e.style.display=`none`;continue}e.style.display=``,e.style.top=`${r.top}px`,e.style.left=`${a}px`,e.style.height=`${r.height}px`}}function O(e,t){let r=(n.appliedBlocks||[]).find(t=>t.blockId===e);return r?t===`current`?r.choice===`current`||r.choice===`both`:r.choice===`incoming`||r.choice===`both`:!1}function te(e,t){let r=(n.appliedBlocks||[]).find(t=>t.blockId===e);return r?t===`current`?r.choice===`incoming`:r.choice===`current`:!1}function ne(e,t,n){e.setAttribute(`role`,`button`),e.setAttribute(`tabindex`,`0`),e.setAttribute(`aria-label`,t),n&&e.setAttribute(`aria-pressed`,`true`),e.addEventListener(`keydown`,t=>{(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),e.click())})}function k(){if(!u||(w(),!b))return;let e=(n.rightActions||[]).filter(e=>e&&e.line&&e.line>0);if(!e.length){E();return}E();for(let t of e){let e=O(t.blockId,t.kind),n=te(t.blockId,t.kind),i=document.createElement(`div`);if(i.className=`merge-right-action-wrapper`,t.kind===`current`){let a=document.createElement(`div`);a.className=`merge-right-action merge-right-action-current${e?` is-applied`:``}`,a.textContent=e?`✓`:`→`,a.title=e?`已采用当前更改`:`采用当前更改`,ne(a,a.title,e),a.addEventListener(`mousedown`,e=>{e.preventDefault(),e.stopPropagation()}),a.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),r(`gutter-click`,t.blockId,`accept`)});let o=document.createElement(`div`);o.className=`merge-right-action merge-right-action-close${n?` is-discarded`:``}`,o.textContent=`✕`,o.title=n?`已丢弃当前更改`:`丢弃当前更改`,ne(o,o.title,n),o.addEventListener(`mousedown`,e=>{e.preventDefault(),e.stopPropagation()}),o.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),r(`gutter-click`,t.blockId,`discard`)}),i.appendChild(a),i.appendChild(o)}else{let a=document.createElement(`div`);a.className=`merge-right-action merge-right-action-close${n?` is-discarded`:``}`,a.textContent=`✕`,a.title=n?`已丢弃传入更改`:`丢弃传入更改`,ne(a,a.title,n),a.addEventListener(`mousedown`,e=>{e.preventDefault(),e.stopPropagation()}),a.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),r(`gutter-click`,t.blockId,`discard`)});let o=document.createElement(`div`);o.className=`merge-right-action merge-right-action-incoming${e?` is-applied`:``}`,o.textContent=e?`✓`:`←`,o.title=e?`已采用传入更改`:`采用传入更改`,ne(o,o.title,e),o.addEventListener(`mousedown`,e=>{e.preventDefault(),e.stopPropagation()}),o.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),r(`gutter-click`,t.blockId,`accept`)}),i.appendChild(a),i.appendChild(o)}b.appendChild(i),x.set(t.blockId,i)}D()}async function A(){return l||p||(p=(async()=>{let e=self;return e.MonacoEnvironment||={getWorker(e,t){return t===`json`?new z:t===`css`||t===`scss`||t===`less`?new le:t===`html`||t===`handlebars`||t===`razor`?new ce:t===`typescript`||t===`javascript`?new V:new R}},l=await B(()=>import(`./monaco-DC7mqInI.js`).then(e=>e.o),__vite__mapDeps([0,1,2])),l})(),p)}function j(e){let t=(e||``).toLowerCase().match(/\.([a-z0-9]+)$/),n=t?t[1]:``;return n===`ts`||n===`tsx`?`typescript`:n===`js`||n===`jsx`||n===`cjs`||n===`mjs`?`javascript`:n===`json`?`json`:n===`html`||n===`htm`||n===`vue`?`html`:n===`css`?`css`:n===`scss`?`scss`:n===`less`?`less`:n===`md`||n===`markdown`?`markdown`:n===`yml`||n===`yaml`?`yaml`:n===`xml`?`xml`:n===`sh`?`shell`:n===`ps1`?`powershell`:n===`go`?`go`:n===`rs`?`rust`:n===`py`?`python`:n===`java`?`java`:n===`cpp`||n===`cc`||n===`cxx`||n===`hpp`||n===`h`?`cpp`:n===`cs`?`csharp`:`plaintext`}function M(){return n.language===`auto`?j(n.filePath||``):n.language||`plaintext`}function ie(){return n.theme&&n.theme!==`auto`?n.theme:document.documentElement.getAttribute(`data-theme`)===`dark`?`vs-dark`:`vs`}function N(){l&&l.editor.setTheme(ie())}function P(){if(!l)return;let e=M();if(!d){d=l.editor.createModel(n.modelValue||``,e);return}try{l.editor.setModelLanguage(d,e)}catch{}}function F(){if(!d)return;let e=n.modelValue||``;d.getValue()!==e&&(m=!0,d.setValue(e),m=!1)}function ae(){if(!u)return;let e=n.revealLine;if(!(!e||e<=0))try{u.revealLineInCenter(e)}catch{}}function oe(){if(!l||!u)return;if(!n.dimHighlightRanges||!n.dimHighlightRanges.length||!n.highlightKind)g=u.deltaDecorations(g,[]);else{let e=n.highlightKind===`current`?`merge-highlight-current-dim`:n.highlightKind===`incoming`?`merge-highlight-incoming-dim`:`merge-highlight-merged-dim`;g=u.deltaDecorations(g,n.dimHighlightRanges.filter(e=>e&&e.startLine>0&&e.endLine>0).map(t=>{let n=Math.max(1,t.startLine),r=Math.max(n,t.endLine);return{range:new l.Range(n,1,r,1),options:{isWholeLine:!0,className:e,linesDecorationsClassName:e}}}))}if(!n.highlightRange||!n.highlightKind){h=u.deltaDecorations(h,[]);return}let e=Math.max(1,n.highlightRange.startLine),t=Math.max(e,n.highlightRange.endLine),r=n.highlightKind===`current`?`merge-highlight-current`:n.highlightKind===`incoming`?`merge-highlight-incoming`:`merge-highlight-merged`;h=u.deltaDecorations(h,[{range:new l.Range(e,1,t,1),options:{isWholeLine:!0,className:r,linesDecorationsClassName:r}}])}function se(){if(!l||!u)return;let e=n.gutterItems||[];if(!e.length){_=u.deltaDecorations(_,[]),C();return}C();let t=n.gutterPlacement===`line`;_=u.deltaDecorations(_,e.filter(e=>e&&e.line&&e.line>0).map(e=>{let n=O(e.blockId,e.kind),r=e.kind===`current`?n?`merge-glyph-current is-applied`:`merge-glyph-current`:n?`merge-glyph-incoming is-applied`:`merge-glyph-incoming`;return{range:new l.Range(e.line,1,e.line,1),options:{isWholeLine:!0,...t?{linesDecorationsClassName:r}:{glyphMarginClassName:r}}}}))}return c(async()=>{o.value&&(l=await A(),N(),P(),u=l.editor.create(o.value,{automaticLayout:!0,readOnly:n.readOnly,glyphMargin:!1,minimap:{enabled:!1},fontSize:13,wordWrap:`on`,scrollBeyondLastLine:!1,renderWhitespace:`selection`,scrollbar:{verticalScrollbarSize:10,horizontalScrollbarSize:10}}),u.setModel(d),u.onDidChangeModelContent(()=>{m||r(`update:modelValue`,d?.getValue?.()??``)}),f=new MutationObserver(()=>{N()}),f.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]}),ae(),oe(),se(),k(),S=u.onDidScrollChange(e=>{D(),n.syncGroup&&e.scrollTopChanged&&r(`scroll-change`,e.scrollTop)}),ee=u.onDidLayoutChange(()=>{D()}),y=u.onMouseDown(e=>{try{let t=e?.target,i=t?.position;if(!i?.lineNumber)return;let a=t?.type;if(a!==l.editor.MouseTargetType.GUTTER_GLYPH_MARGIN&&a!==l.editor.MouseTargetType.GUTTER_LINE_DECORATIONS)return;let o=i.lineNumber,s=(n.gutterItems||[]).find(e=>e.line===o);if(!s)return;r(`gutter-click`,s.blockId)}catch{}}))}),i(()=>n.modelValue,()=>{F()}),i(()=>n.revealLine,()=>{ae()}),i(()=>[n.highlightRange,n.highlightKind],()=>{oe()},{deep:!0}),i(()=>n.dimHighlightRanges,()=>{oe()},{deep:!0}),i(()=>n.gutterItems,()=>{se()},{deep:!0}),i(()=>n.rightActions,()=>{k()},{deep:!0}),i(()=>n.appliedBlocks,()=>{k(),se()},{deep:!0}),i(()=>n.syncScrollTop,e=>{if(e!=null&&u){let t=u.getScrollTop();Math.abs(t-e)>5&&u.setScrollTop(e)}}),i(()=>n.gutterPlacement,()=>{se()}),i(()=>[n.language,n.filePath],()=>{l&&P()}),i(()=>n.theme,()=>{N()}),i(()=>n.readOnly,e=>{u&&u.updateOptions({readOnly:e})}),s(()=>{f?.disconnect(),f=null;try{y?.dispose?.()}catch{}y=null;try{S?.dispose?.()}catch{}S=null;try{ee?.dispose?.()}catch{}ee=null;try{b?.remove?.()}catch{}b=null,x.clear(),u?.dispose(),u=null,g=[],d?.dispose(),d=null}),(t,n)=>(a(),v(`div`,{ref_key:`containerRef`,ref:o,class:`monaco-editor-container`,style:re(e.minHeight?{minHeight:e.minHeight}:{flex:1,minHeight:`200px`})},null,4))}}),[[`__scopeId`,`data-v-c3f70549`]]),Ne={class:`files-panel`},Pe={class:`panel-header`},Fe={class:`header-left`},Ie={key:0,class:`file-count`},Le={class:`view-mode-toggle`},Re={class:`search-box`},ze={class:`files-list`},Be=[`onClick`],Ve={class:`file-icon mit-icon`,"aria-hidden":`true`},He=[`xlink:href`],Ue={key:0,class:`conflict-marker`,title:`冲突文件`},We={class:`file-name`},Ge=[`title`],Ke={class:`file-directory path-badge`},qe={key:2,class:`file-actions`},Je={class:`diff-panel`},Ye={class:`panel-header`},Xe={class:`header-right`},Ze={class:`selected-file`},Qe={class:`path-dir`},$e={class:`path-name`},et={key:1,class:`diff-stats-badge`},tt={class:`stats-added`},nt={class:`stats-deleted`},rt={key:2,class:`action-buttons`},it={key:0,class:`conflict-resolution-container`},at={key:0,class:`resolution-mode-switch`},ot={key:1,class:`block-conflict-resolution`},st={class:`merge-three-pane`},ct={class:`pane`},lt={class:`pane-header`},ut={class:`pane-title`},dt={class:`pane-body`},ft={class:`pane pane-merged`},pt={class:`pane-header`},mt={class:`pane-title`},ht={class:`pane-subhint`},gt={class:`pane-body`},_t={class:`pane`},vt={class:`pane-header`},yt={class:`pane-title`},bt={class:`pane-body`},xt={class:`save-resolution-bar`},St={key:2,class:`global-conflict-wrapper`},Ct={class:`global-conflict-resolution`},wt={class:`conflict-warning`},Tt={class:`conflict-buttons`},Et={class:`diff-content`},Dt=[`textContent`],Ot=[`innerHTML`],kt={key:1,class:`conflict-resolved-container`},At={class:`resolved-notice`},jt={class:`notice-text`},Mt={class:`diff-content`},Nt=[`textContent`],Pt=[`innerHTML`],Ft={key:2,class:`diff-content`},It={key:2,class:`compare-view`},Lt=[`textContent`],Rt=[`innerHTML`],zt={key:1,class:`diff-panel full-width`},Bt={class:`panel-header`},Vt={class:`header-right`},Ht={class:`selected-file`},Ut={class:`path-dir`},Wt={class:`path-name`},Gt={key:1,class:`action-buttons`},Kt={key:0,class:`conflict-resolution-container`},qt={key:0,class:`resolution-mode-switch`},Jt={key:1,class:`block-conflict-resolution`},Yt={class:`merge-three-pane`},Xt={class:`pane`},Zt={class:`pane-header`},Qt={class:`pane-title`},$t={class:`pane-body`},en={class:`pane pane-merged`},tn={class:`pane-header`},nn={class:`pane-title`},rn={class:`pane-subhint`},an={class:`pane-body`},on={class:`pane`},sn={class:`pane-header`},cn={class:`pane-title`},ln={class:`pane-body`},un={class:`save-resolution-bar`},dn={key:2,class:`global-conflict-wrapper`},fn={class:`global-conflict-resolution`},pn={class:`conflict-warning`},mn={class:`conflict-buttons`},hn={class:`diff-content`},gn=[`textContent`],_n=[`innerHTML`],vn={key:1,class:`diff-content`},yn={key:2,class:`compare-view`},bn=[`textContent`],xn=[`innerHTML`],Sn=`merge-three-pane`,Cn=L(P({__name:`FileDiffViewer`,props:{files:{},emptyText:{default:I(`@E80AC:没有找到变更文件`)},diffContent:{default:``},diffStats:{default:null},selectedFile:{default:``},isLoading:{type:Boolean,default:!1},plainText:{type:Boolean,default:!1},compareMode:{type:Boolean,default:!1},compareOriginal:{default:``},compareModified:{default:``},height:{default:`100%`},showFileList:{type:Boolean,default:!0},context:{default:`git-status`},showOpenButton:{type:Boolean,default:!0},showActionButtons:{type:Boolean,default:!1},isFileLocked:{type:Function,default:()=>!1},isLocking:{type:Function,default:()=>!1}},emits:[`file-select`,`open-file`,`open-with-vscode`,`toggle-lock`,`stage`,`unstage`,`revert`],setup(t,{emit:n}){let s=t,u=n,m=fe(),b=T(``),k=T(``),M=e=>Math.min(85,Math.max(15,e)),P=A({get:()=>m.ui.fileListViewMode,set:e=>{m.ui.fileListViewMode=e}}),L=A({get:()=>M(m.ui.fileDiffSplitPercent),set:e=>{m.ui.fileDiffSplitPercent=M(e)}}),R=A(()=>s.selectedFile||b.value),z=A(()=>he(R.value||``)),B=A(()=>R.value?s.files.find(e=>e.path===R.value)?.type===`conflicted`:!1),ce=A(()=>U.value.length>0),le=A(()=>s.files.map(e=>{let t=e.name||e.path.split(`/`).pop()||e.path;return{...e,displayName:t,dirPath:(()=>{let t=(e.path||``).split(`/`);return t.length>1?t.slice(0,-1).join(`/`):``})(),iconClass:me(t)}})),V=A(()=>{if(!k.value.trim())return le.value;let e=k.value.toLowerCase().trim();return le.value.filter(t=>t.displayName.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))}),pe=T([]);function _e(){let e=Ee(V.value);pe.value.length>0&&Oe(e,pe.value),pe.value=e}i(V,()=>{P.value===`tree`&&_e()},{deep:!0}),i(P,e=>{e===`tree`&&_e(),window.dispatchEvent(new CustomEvent(`file-list-view-mode-change`,{detail:{mode:e}}))});let H=A(()=>s.compareMode?!0:s.diffContent&&s.diffContent.trim()!==``),be=A(()=>{if(!R.value)return``;let e=R.value.split(`/`);return e.slice(0,-1).join(`/`)+(e.length>1?`/`:``)}),Se=A(()=>{if(!R.value)return``;let e=R.value.split(`/`);return e[e.length-1]||R.value});function Ce(e){b.value=e,u(`file-select`,e)}function we(){if(!R.value){y.warning(I(`@E80AC:请先选择一个文件`));return}u(`open-file`,R.value,s.context)}function De(){if(!R.value){y.warning(I(`@E80AC:请先选择一个文件`));return}navigator.clipboard.writeText(R.value).then(()=>{y.success(I(`@E80AC:文件路径已复制到剪贴板`))}).catch(()=>{y.error(I(`@E80AC:复制失败`))})}function ke(){if(!R.value){y.warning(I(`@E80AC:请先选择一个文件`));return}u(`open-with-vscode`,R.value,s.context)}let U=T([]),W=T(!0),G=T(``),K=T(!1),q=T(``),J=T(``),Ae=T(``),Cn=T(``),X=T(new Map),Z=T(null),Q=T(null),wn=T(new Map),$=T(new Map),Tn=T(new Map);async function En(e){let t=await(await fetch(`/api/file-content?file=${encodeURIComponent(e)}`)).json();if(!t.success)throw Error(t.error||I(`@E80AC:无法读取文件内容`));return String(t.content??``)}function Dn(e,t){let n=e.split(`
4
- `),r=[],i=new Map,a=0,o=0;for(;a<n.length;){let e=n[a];if(e.includes(`<<<<<<<`)){o++;let e=[],s=[];for(a++;a<n.length&&!n[a].includes(`=======`);)e.push(n[a]),a++;for(a++;a<n.length&&!n[a].includes(`>>>>>>>`);)s.push(n[a]),a++;a<n.length&&n[a].includes(`>>>>>>>`)&&a++;let c=t(o),l=[];l=c===`incoming`?s:c===`both`?[...e,...s]:c===`none`?[]:e;let u=r.length+1;r.push(...l);let d=Math.max(u,r.length);i.set(o,{startLine:u,endLine:d});continue}r.push(e),a++}return{text:r.join(`
5
- `),anchors:i}}let On=A(()=>Z.value&&wn.value.get(Z.value)||null),kn=A(()=>Z.value&&$.value.get(Z.value)||null),An=A(()=>Z.value&&Tn.value.get(Z.value)||null),jn=A(()=>{let e=Z.value;return U.value.filter(t=>t.id!==e).map(e=>wn.value.get(e.id)).filter(Boolean)}),Mn=A(()=>{let e=Z.value;return U.value.filter(t=>t.id!==e).map(e=>$.value.get(e.id)).filter(Boolean)}),Nn=A(()=>{let e=Z.value;return U.value.filter(t=>t.id!==e).map(e=>Tn.value.get(e.id)).filter(Boolean)}),Pn=A(()=>On.value?.startLine??null),Fn=A(()=>kn.value?.startLine??null),In=A(()=>An.value?.startLine??null),Ln=A(()=>U.value.map(e=>{let t=wn.value.get(e.id);return t?{blockId:e.id,line:t.startLine,kind:`current`}:null}).filter(Boolean)),Rn=A(()=>U.value.map(e=>{let t=$.value.get(e.id);return t?{blockId:e.id,line:t.startLine,kind:`incoming`}:null}).filter(Boolean)),zn=A(()=>{let e=[];return X.value.forEach((t,n)=>{t!==`none`&&e.push({blockId:n,choice:t})}),e});function Bn(){if(!Cn.value)return;let{text:e,anchors:t}=Dn(Cn.value,e=>X.value.get(e)||`current`);G.value=e,Tn.value=t,K.value=!0}function Vn(e,t,n){let r=X.value.get(e),i=null;if(t===`current`)if(n===`discard`)switch(r){case`current`:case null:case void 0:i=`none`;break;case`incoming`:i=`incoming`;break;case`both`:i=`incoming`;break;case`none`:i=`none`;break}else switch(r){case`current`:i=`current`;break;case null:case void 0:i=`current`;break;case`incoming`:i=`both`;break;case`both`:i=`both`;break;case`none`:i=`current`;break}else if(t===`incoming`)if(n===`discard`)switch(r){case`incoming`:i=`none`;break;case null:case void 0:i=`current`;break;case`current`:i=`current`;break;case`both`:i=`current`;break;case`none`:i=`none`;break}else switch(r){case`incoming`:i=`incoming`;break;case null:case void 0:i=`incoming`;break;case`current`:i=`both`;break;case`both`:i=`both`;break;case`none`:i=`incoming`;break}i===null?X.value.delete(e):X.value.set(e,i),Z.value=e,Bn()}function Hn(e){let t=[],n=e.split(`
6
- `),r=0,i=0;for(;i<n.length;){let e=n[i];if(e.includes(`<<<<<<<`)){r++;let a=e.replace(/^<<<<<<< /,``).trim()||`HEAD`,o=[],s=[],c=[],l=[],u=Math.max(0,i-3);for(let e=u;e<i;e++)o.push(n[e]);let d=i+1;for(i++;i<n.length&&!n[i].includes(`=======`);)s.push(n[i]),i++;i++;let f=``;for(;i<n.length&&!n[i].includes(`>>>>>>>`);)c.push(n[i]),i++;i<n.length&&n[i].includes(`>>>>>>>`)&&(f=n[i].replace(/^>>>>>>> /,``).trim()||`incoming`,i++);let p=Math.min(n.length,i+3);for(let e=i;e<p&&e<n.length;e++)l.push(n[e]);t.push({id:r,startLine:d,currentLines:s,incomingLines:c,beforeLines:o,afterLines:l,currentLabel:a,incomingLabel:f})}else i++}return t}function Un(e){let t=[],n=e.split(`
7
- `),r=`common`,i=[];for(let e=0;e<n.length;e++){let a=n[e];a.includes(`<<<<<<<`)?(i.length>0&&(t.push({type:`common`,lines:[...i]}),i=[]),r=`current`):a.includes(`=======`)?(i.length>0&&(t.push({type:`current`,lines:[...i]}),i=[]),t.push({type:`separator`,lines:[a]}),r=`incoming`):a.includes(`>>>>>>>`)?(i.length>0&&(t.push({type:`incoming`,lines:[...i]}),i=[]),r=`common`):i.push(a)}return i.length>0&&t.push({type:r,lines:[...i]}),t}async function Wn(){if(R.value)try{let e=await(await fetch(`/api/file-content?file=${encodeURIComponent(R.value)}`)).json();if(!e.success||!e.content){y.error(I(`@E80AC:无法读取文件内容`));return}let t=e.content,n=Un(t),r=``;for(let e of n)if(e.type===`current`||e.type===`common`)r+=e.lines.join(`
8
- `)+`
9
- `;else if(e.type===`separator`||e.type===`incoming`)continue;await qn(r.trim())}catch(e){y.error(`${I(`@E80AC:解决冲突失败: `)}${e.message}`)}}async function Gn(){if(R.value)try{let e=await(await fetch(`/api/file-content?file=${encodeURIComponent(R.value)}`)).json();if(!e.success||!e.content){y.error(I(`@E80AC:无法读取文件内容`));return}let t=e.content,n=Un(t),r=``;for(let e of n)if(e.type===`incoming`||e.type===`common`)r+=e.lines.join(`
10
- `)+`
11
- `;else if(e.type===`separator`||e.type===`current`)continue;await qn(r.trim())}catch(e){y.error(`${I(`@E80AC:解决冲突失败: `)}${e.message}`)}}async function Kn(){if(R.value)try{let e=await(await fetch(`/api/file-content?file=${encodeURIComponent(R.value)}`)).json();if(!e.success||!e.content){y.error(I(`@E80AC:无法读取文件内容`));return}let t=e.content,n=Un(t),r=``;for(let e of n)(e.type===`common`||e.type===`current`||e.type===`incoming`)&&(r+=e.lines.join(`
12
- `)+`
13
- `);await qn(r.trim())}catch(e){y.error(`${I(`@E80AC:解决冲突失败: `)}${e.message}`)}}async function qn(e){if(R.value)try{let t=await(await fetch(`/api/resolve-conflict`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({filePath:R.value,content:e})})).json();t.success?(y.success(I(`@E80AC:冲突已解决,文件已更新`)),window.dispatchEvent(new CustomEvent(`git-status-refresh`)),setTimeout(()=>{u(`file-select`,R.value)},500)):y.error(t.error||I(`@E80AC:保存失败`))}catch(e){y.error(`${I(`@E80AC:保存失败: `)}${e.message}`)}}let Jn=A(()=>{switch(s.context){case`git-status`:return I(`@E80AC:在系统默认编辑器中打开文件`);case`commit-detail`:return I(`@E80AC:打开该提交时的文件版本`);case`stash-detail`:return I(`@E80AC:打开该stash中的文件版本`);default:return I(`@E80AC:打开文件`)}});async function Yn(){if(R.value&&W.value){if(G.value.trim().length===0){y.warning(I(`@E80AC:保存失败`));return}await qn(G.value),K.value=!1;return}}i(()=>s.selectedFile,e=>{e!==void 0&&(b.value=e)}),i([()=>s.diffContent,R,B],async([e,t,n])=>{if(U.value=[],G.value=``,K.value=!1,q.value=``,J.value=``,Ae.value=``,Cn.value=``,X.value.clear(),Z.value=null,wn.value=new Map,$.value=new Map,Tn.value=new Map,n&&t)try{console.log(`[ConflictParse] Fetching content for conflicted file:`,t);let e=await En(t);if(e){console.log(`[ConflictParse] File content loaded, parsing blocks...`),Cn.value=e;let t=Hn(e);console.log(`[ConflictParse] Parsed blocks:`,t.length),U.value=t,Z.value=t.length>0?t[0].id:null;let n=Dn(e,()=>`current`),r=Dn(e,()=>`incoming`),i=Dn(e,()=>`both`),a=Dn(e,e=>X.value.get(e)||`current`);q.value=n.text,J.value=r.text,Ae.value=i.text,G.value=a.text,wn.value=n.anchors,$.value=r.anchors,Tn.value=a.anchors}else console.error(`[ConflictParse] Failed to load file content`)}catch(e){console.error(`[ConflictParse] Error fetching file content:`,e)}else console.log(`[ConflictParse] File is not conflicted or no file selected`)},{immediate:!0}),i(()=>s.files,e=>{if(e.length>0&&!R.value){let t=e[0];Ce(t.path)}},{immediate:!0}),c(()=>{P.value===`tree`&&_e();let e=e=>{let t=e.detail.mode;P.value!==t&&(P.value=t)};return window.addEventListener(`file-list-view-mode-change`,e),()=>{window.removeEventListener(`file-list-view-mode-change`,e)}});let Xn=T(null),Zn=()=>{let e=Xn.value?.$el??Xn.value;if(e&&e.clientWidth)return e.clientWidth;try{return e?.getBoundingClientRect?.().width??0}catch{return 0}},Qn=()=>{let e=Xn.value?.$el??Xn.value;if(!e)return;let t=e.querySelectorAll?.(`.el-splitter__panel`),n=Zn();if(!t||t.length<1||n<=0)return;let r=t[0]?.getBoundingClientRect?.().width??0;if(r>0){let e=M(r/n*100);e!==L.value&&(L.value=e)}},$n=A({get(){return`${M(L.value)}%`},set(e){let t=NaN;if(typeof e==`number`){let n=e,r=Zn();r>0&&!isNaN(n)&&(t=n/r*100)}else if(typeof e==`string`){if(e.endsWith(`%`))t=parseFloat(e);else if(e.endsWith(`px`)){let n=parseFloat(e),r=Zn();r>0&&!isNaN(n)&&(t=n/r*100)}}isNaN(t)||(L.value=M(t))}});return(n,i)=>{let s=x,c=ne;return a(),v(`div`,{class:`file-diff-viewer`,style:re({height:t.height})},[t.showFileList?(a(),w(N(ie),{key:0,ref_key:`splitterRef`,ref:Xn,layout:`horizontal`,style:{height:`100%`},onResize:Qn,onResizeEnd:Qn},{default:j(()=>[f(s,{size:$n.value,"onUpdate:size":i[11]||=e=>$n.value=e,min:`15%`,max:`85%`},{default:j(()=>[D(`div`,Ne,[D(`div`,Pe,[D(`div`,Fe,[D(`h4`,null,O(N(I)(`@E80AC:变更文件`)),1),t.files.length>0?(a(),v(`span`,Ie,`(`+O(t.files.length)+`)`,1)):C(``,!0)]),D(`div`,Le,[f(de,{tooltip:N(I)(`@E80AC:列表视图`),size:`small`,active:P.value===`list`,onClick:i[0]||=e=>P.value=`list`},{default:j(()=>[f(ye,{style:{width:`1em`,height:`1em`}})]),_:1},8,[`tooltip`,`active`]),f(de,{tooltip:N(I)(`@E80AC:树状视图`),size:`small`,active:P.value===`tree`,onClick:i[1]||=e=>P.value=`tree`},{default:j(()=>[f(ve,{style:{width:`1em`,height:`1em`}})]),_:1},8,[`tooltip`,`active`])])]),D(`div`,Re,[f(N(h),{modelValue:k.value,"onUpdate:modelValue":i[2]||=e=>k.value=e,placeholder:N(I)(`@E80AC:搜索文件名或路径...`),"prefix-icon":N(se),clearable:``,size:`small`},null,8,[`modelValue`,`placeholder`,`prefix-icon`])]),D(`div`,ze,[f(N(p),{height:`100%`},{default:j(()=>[t.files.length===0?(a(),w(N(d),{key:0,description:t.emptyText,"image-size":60},null,8,[`description`])):V.value.length===0?(a(),w(N(d),{key:1,description:N(I)(`@E80AC:没有找到匹配的文件`),"image-size":60},null,8,[`description`])):P.value===`list`?(a(!0),v(E,{key:2},l(V.value,e=>(a(),v(`div`,{key:e.path,class:S([`file-item`,{active:e.path===R.value,[`file-type-${e.type}`]:e.type,"is-locked":e.locked}]),onClick:t=>Ce(e.path)},[(a(),v(`svg`,Ve,[D(`use`,{"xlink:href":`#${e.iconClass}`},null,8,He)])),e.type===`conflicted`?(a(),v(`span`,Ue,`⚠`)):C(``,!0),f(N(r),{content:e.path,placement:`top`,disabled:e.displayName.length<=35,"show-after":200},{default:j(()=>[D(`span`,We,O(e.displayName),1)]),_:2},1032,[`content`,`disabled`]),e.dirPath?(a(),v(`div`,{key:1,class:`file-path-section`,title:e.dirPath},[f(N(r),{content:e.dirPath,placement:`top`,disabled:e.dirPath.length<=30,"show-after":200},{default:j(()=>[D(`div`,Ke,O(e.dirPath),1)]),_:2},1032,[`content`,`disabled`])],8,Ge)):C(``,!0),t.showActionButtons?(a(),v(`div`,qe,[f(Te,{"file-path":e.path,"file-type":e.type||`modified`,"is-locked":t.isFileLocked(e.path),"is-locking":t.isLocking(e.path),onToggleLock:i[3]||=e=>u(`toggle-lock`,e),onStage:i[4]||=e=>u(`stage`,e),onUnstage:i[5]||=e=>u(`unstage`,e),onRevert:i[6]||=e=>u(`revert`,e)},null,8,[`file-path`,`file-type`,`is-locked`,`is-locking`])])):C(``,!0)],10,Be))),128)):(a(),w(je,{key:3,"tree-data":pe.value,"selected-file":R.value,"show-action-buttons":t.showActionButtons,"is-file-locked":t.isFileLocked,"is-locking":t.isLocking,onFileSelect:Ce,onToggleLock:i[7]||=e=>u(`toggle-lock`,e),onStage:i[8]||=e=>u(`stage`,e),onUnstage:i[9]||=e=>u(`unstage`,e),onRevert:i[10]||=e=>u(`revert`,e)},null,8,[`tree-data`,`selected-file`,`show-action-buttons`,`is-file-locked`,`is-locking`]))]),_:1})])])]),_:1},8,[`size`]),f(s,{min:`15%`,max:`85%`},{default:j(()=>[D(`div`,Je,[D(`div`,Ye,[D(`h4`,null,O(N(I)(`@E80AC:文件差异`)),1),D(`div`,Xe,[oe(n.$slots,`header-extra`,{},void 0,!0),R.value?(a(),w(N(r),{key:0,content:R.value,placement:`top`,effect:`light`,"show-after":200},{default:j(()=>[D(`span`,Ze,[D(`span`,Qe,O(be.value),1),D(`span`,$e,O(Se.value),1)])]),_:1},8,[`content`])):C(``,!0),t.diffStats?(a(),v(`div`,et,[D(`span`,tt,`+`+O(t.diffStats.added),1),D(`span`,nt,`-`+O(t.diffStats.deleted),1)])):C(``,!0),t.showOpenButton&&R.value?(a(),v(`div`,rt,[f(N(r),{content:N(I)(`@E80AC:复制文件路径`),placement:`top`,effect:`light`},{default:j(()=>[D(`button`,{class:`modern-btn btn-icon-24`,onClick:De},[f(N(_),{class:`btn-icon`},{default:j(()=>[f(N(ee))]),_:1})])]),_:1},8,[`content`]),f(N(r),{content:Jn.value,placement:`top`,effect:`light`},{default:j(()=>[D(`button`,{class:`modern-btn btn-icon-24`,onClick:we},[f(N(_),{class:`btn-icon`},{default:j(()=>[f(N(ae))]),_:1})])]),_:1},8,[`content`]),f(N(r),{content:N(I)(`@E80AC:用VSCode打开文件`),placement:`top`,effect:`light`},{default:j(()=>[D(`button`,{class:`modern-btn btn-icon-24`,onClick:ke},[f(ue,{"icon-class":`vscode`,class:`btn-icon`})])]),_:1},8,[`content`])])):C(``,!0)])]),B.value&&ce.value?(a(),v(`div`,it,[U.value.length>0?(a(),v(`div`,at,[f(N(e),{type:W.value?`primary`:`default`,size:`small`,onClick:i[12]||=e=>W.value=!0},{default:j(()=>[F(O(N(I)(`@E80AC:逐块解决`)),1)]),_:1},8,[`type`]),f(N(e),{type:W.value?`default`:`primary`,size:`small`,onClick:i[13]||=e=>W.value=!1},{default:j(()=>[F(O(N(I)(`@E80AC:全局解决`)),1)]),_:1},8,[`type`])])):C(``,!0),U.value.length>0&&W.value?(a(),v(`div`,ot,[D(`div`,st,[D(`div`,ct,[D(`div`,lt,[D(`div`,ut,O(N(I)(`@E80AC:当前更改`)),1)]),i[30]||=D(`div`,{class:`pane-subhint placeholder`},null,-1),D(`div`,dt,[f(Y,{"model-value":q.value,language:`auto`,"file-path":R.value,theme:`auto`,"read-only":!0,"min-height":`280px`,"reveal-line":Pn.value,"highlight-range":On.value,"dim-highlight-ranges":jn.value,"highlight-kind":`current`,onGutterClick:i[14]||=(e,t)=>Vn(e,`current`,t),"right-actions":Ln.value,"applied-blocks":zn.value,"sync-group":Sn,"sync-scroll-top":Q.value,onScrollChange:i[15]||=e=>Q.value=e,"onUpdate:modelValue":()=>{}},null,8,[`model-value`,`file-path`,`reveal-line`,`highlight-range`,`dim-highlight-ranges`,`right-actions`,`applied-blocks`,`sync-scroll-top`])])]),D(`div`,ft,[D(`div`,pt,[D(`div`,mt,O(N(I)(`@E80AC:合并结果`)),1)]),D(`div`,ht,O(N(I)(`@E80AC:可直接编辑合并结果(整文件)`)),1),D(`div`,gt,[f(Y,{modelValue:G.value,"onUpdate:modelValue":[i[16]||=e=>G.value=e,i[18]||=()=>K.value=!0],language:`auto`,"file-path":R.value,theme:`auto`,"read-only":!1,"min-height":`280px`,"reveal-line":In.value,"highlight-range":An.value,"dim-highlight-ranges":Nn.value,"highlight-kind":`merged`,"sync-group":Sn,"sync-scroll-top":Q.value,onScrollChange:i[17]||=e=>Q.value=e},null,8,[`modelValue`,`file-path`,`reveal-line`,`highlight-range`,`dim-highlight-ranges`,`sync-scroll-top`])])]),D(`div`,_t,[D(`div`,vt,[D(`div`,yt,O(N(I)(`@E80AC:传入的更改`)),1)]),i[31]||=D(`div`,{class:`pane-subhint placeholder`},null,-1),D(`div`,bt,[f(Y,{"model-value":J.value,language:`auto`,"file-path":R.value,theme:`auto`,"read-only":!0,"min-height":`280px`,"reveal-line":Fn.value,"highlight-range":kn.value,"dim-highlight-ranges":Mn.value,"highlight-kind":`incoming`,"right-actions":Rn.value,"applied-blocks":zn.value,"sync-group":Sn,"sync-scroll-top":Q.value,onScrollChange:i[19]||=e=>Q.value=e,onGutterClick:i[20]||=(e,t)=>Vn(e,`incoming`,t),"onUpdate:modelValue":()=>{}},null,8,[`model-value`,`file-path`,`reveal-line`,`highlight-range`,`dim-highlight-ranges`,`right-actions`,`applied-blocks`,`sync-scroll-top`])])])]),D(`div`,xt,[f(N(e),{type:`primary`,size:`large`,onClick:Yn},{default:j(()=>[F(O(N(I)(`@E80AC:保存所有解决方案`)),1)]),_:1})])])):C(``,!0),!W.value||U.value.length===0?(a(),v(`div`,St,[D(`div`,Ct,[D(`div`,wt,[f(N(_),{class:`warning-icon`},{default:j(()=>[f(N(g))]),_:1}),D(`span`,null,O(N(I)(`@E80AC:检测到冲突,请选择解决方式`)),1)]),D(`div`,Tt,[f(N(e),{type:`primary`,size:`small`,onClick:Wn},{default:j(()=>[F(O(N(I)(`@E80AC:接受当前版本`)),1)]),_:1}),f(N(e),{type:`success`,size:`small`,onClick:Gn},{default:j(()=>[F(O(N(I)(`@E80AC:接受传入版本`)),1)]),_:1}),f(N(e),{type:`warning`,size:`small`,onClick:Kn},{default:j(()=>[F(O(N(I)(`@E80AC:接受两者`)),1)]),_:1})])]),o((a(),v(`div`,Et,[!H.value&&!t.isLoading?(a(),w(N(d),{key:0,description:N(I)(`@E80AC:该文件没有差异内容`),"image-size":80},null,8,[`description`])):H.value&&t.plainText?(a(),v(`pre`,{key:1,class:`diff-text plain-text`,textContent:O(t.diffContent)},null,8,Dt)):H.value?(a(),v(`div`,{key:2,class:`diff-text`,innerHTML:N(xe)(t.diffContent)},null,8,Ot)):C(``,!0)])),[[c,t.isLoading]])])):C(``,!0)])):B.value&&!ce.value?(a(),v(`div`,kt,[D(`div`,At,[f(N(_),{class:`success-icon`,style:{color:`var(--color-success)`,"font-size":`var(--font-size-xl)`}},{default:j(()=>[f(N(te))]),_:1}),D(`span`,jt,O(N(I)(`@E80AC:冲突已解决,可以添加到暂存区`)),1),f(N(e),{type:`success`,size:`default`,onClick:i[21]||=e=>u(`stage`,R.value)},{default:j(()=>[F(O(N(I)(`@E80AC:添加到暂存区`)),1)]),_:1})]),o((a(),v(`div`,Mt,[!H.value&&!t.isLoading?(a(),w(N(d),{key:0,description:N(I)(`@E80AC:该文件没有差异内容`),"image-size":80},null,8,[`description`])):H.value&&t.plainText?(a(),v(`pre`,{key:1,class:`diff-text plain-text`,textContent:O(t.diffContent)},null,8,Nt)):H.value?(a(),v(`div`,{key:2,class:`diff-text`,innerHTML:N(xe)(t.diffContent)},null,8,Pt)):C(``,!0)])),[[c,t.isLoading]])])):B.value?C(``,!0):o((a(),v(`div`,Ft,[z.value?(a(),w(ge,{key:0,"file-path":R.value||``},null,8,[`file-path`])):!H.value&&!t.isLoading?(a(),w(N(d),{key:1,description:R.value?N(I)(`@E80AC:该文件没有差异内容`):N(I)(`@E80AC:请选择文件查看差异`),"image-size":80},null,8,[`description`])):t.compareMode&&!z.value?(a(),v(`div`,It,[f(Me,{original:t.compareOriginal,modified:t.compareModified,language:`auto`,"file-path":R.value,theme:`auto`,"read-only":!0},null,8,[`original`,`modified`,`file-path`])])):H.value&&t.plainText?(a(),v(`pre`,{key:3,class:`diff-text plain-text`,textContent:O(t.diffContent)},null,8,Lt)):H.value?(a(),v(`div`,{key:4,class:`diff-text`,innerHTML:N(xe)(t.diffContent)},null,8,Rt)):C(``,!0)])),[[c,t.isLoading]])])]),_:3})]),_:3},512)):(a(),v(`div`,zt,[D(`div`,Bt,[D(`h4`,null,O(N(I)(`@E80AC:文件差异`)),1),D(`div`,Vt,[oe(n.$slots,`header-extra`,{},void 0,!0),R.value?(a(),w(N(r),{key:0,content:R.value,placement:`top`,effect:`light`,"show-after":200},{default:j(()=>[D(`span`,Ht,[D(`span`,Ut,O(be.value),1),D(`span`,Wt,O(Se.value),1)])]),_:1},8,[`content`])):C(``,!0),t.showOpenButton&&R.value?(a(),v(`div`,Gt,[f(N(r),{content:N(I)(`@E80AC:复制文件路径`),placement:`top`,effect:`light`},{default:j(()=>[D(`button`,{class:`modern-btn btn-icon-24`,onClick:De},[f(N(_),{class:`btn-icon`},{default:j(()=>[f(N(ee))]),_:1})])]),_:1},8,[`content`]),f(N(r),{content:Jn.value,placement:`top`,effect:`light`},{default:j(()=>[D(`button`,{class:`modern-btn btn-icon-24 btn-primary`,onClick:we},[f(N(_),{class:`btn-icon`},{default:j(()=>[f(N(ae))]),_:1})])]),_:1},8,[`content`]),f(N(r),{content:N(I)(`@E80AC:用VSCode打开文件`),placement:`top`,effect:`light`},{default:j(()=>[D(`button`,{class:`modern-btn btn-icon-24 btn-success`,onClick:ke},[f(ue,{"icon-class":`vscode`,class:`btn-icon`})])]),_:1},8,[`content`])])):C(``,!0)])]),B.value?(a(),v(`div`,Kt,[U.value.length>0?(a(),v(`div`,qt,[f(N(e),{type:W.value?`primary`:`default`,size:`small`,onClick:i[22]||=e=>W.value=!0},{default:j(()=>[F(O(N(I)(`@E80AC:逐块解决`)),1)]),_:1},8,[`type`]),f(N(e),{type:W.value?`default`:`primary`,size:`small`,onClick:i[23]||=e=>W.value=!1},{default:j(()=>[F(O(N(I)(`@E80AC:全局解决`)),1)]),_:1},8,[`type`])])):C(``,!0),U.value.length>0&&W.value?(a(),v(`div`,Jt,[D(`div`,Yt,[D(`div`,Xt,[D(`div`,Zt,[D(`div`,Qt,O(N(I)(`@E80AC:当前更改`)),1)]),D(`div`,$t,[f(Y,{modelValue:q.value,"onUpdate:modelValue":[i[24]||=e=>q.value=e,()=>{}],language:`auto`,"file-path":R.value,theme:`auto`,"read-only":!0,"min-height":`360px`,"reveal-line":Pn.value,"highlight-range":On.value,"dim-highlight-ranges":jn.value,"highlight-kind":`current`,"right-actions":Ln.value,"applied-blocks":zn.value,onGutterClick:i[25]||=(e,t)=>Vn(e,`current`,t)},null,8,[`modelValue`,`file-path`,`reveal-line`,`highlight-range`,`dim-highlight-ranges`,`right-actions`,`applied-blocks`])])]),D(`div`,en,[D(`div`,tn,[D(`div`,nn,O(N(I)(`@E80AC:合并结果`)),1)]),D(`div`,rn,O(N(I)(`@E80AC:可直接编辑合并结果(整文件)`)),1),D(`div`,an,[f(Y,{modelValue:G.value,"onUpdate:modelValue":[i[26]||=e=>G.value=e,i[27]||=()=>K.value=!0],language:`auto`,"file-path":R.value,theme:`auto`,"read-only":!1,"min-height":`360px`,"reveal-line":In.value,"highlight-range":An.value,"dim-highlight-ranges":Nn.value,"highlight-kind":`merged`},null,8,[`modelValue`,`file-path`,`reveal-line`,`highlight-range`,`dim-highlight-ranges`])])]),D(`div`,on,[D(`div`,sn,[D(`div`,cn,O(N(I)(`@E80AC:传入的更改`)),1)]),D(`div`,ln,[f(Y,{modelValue:J.value,"onUpdate:modelValue":[i[28]||=e=>J.value=e,()=>{}],language:`auto`,"file-path":R.value,theme:`auto`,"read-only":!0,"min-height":`360px`,"reveal-line":Fn.value,"highlight-range":kn.value,"dim-highlight-ranges":Mn.value,"highlight-kind":`incoming`,"right-actions":Rn.value,"applied-blocks":zn.value,onGutterClick:i[29]||=(e,t)=>Vn(e,`incoming`,t)},null,8,[`modelValue`,`file-path`,`reveal-line`,`highlight-range`,`dim-highlight-ranges`,`right-actions`,`applied-blocks`])])])]),D(`div`,un,[f(N(e),{type:`primary`,size:`large`,onClick:Yn},{default:j(()=>[F(O(N(I)(`@E80AC:保存所有解决方案`)),1)]),_:1})])])):C(``,!0),!W.value||U.value.length===0?(a(),v(`div`,dn,[D(`div`,fn,[D(`div`,pn,[f(N(_),{class:`warning-icon`},{default:j(()=>[f(N(g))]),_:1}),D(`span`,null,O(N(I)(`@E80AC:检测到冲突,请选择解决方式`)),1)]),D(`div`,mn,[f(N(e),{type:`primary`,size:`small`,onClick:Wn},{default:j(()=>[F(O(N(I)(`@E80AC:接受当前版本`)),1)]),_:1}),f(N(e),{type:`success`,size:`small`,onClick:Gn},{default:j(()=>[F(O(N(I)(`@E80AC:接受传入版本`)),1)]),_:1}),f(N(e),{type:`warning`,size:`small`,onClick:Kn},{default:j(()=>[F(O(N(I)(`@E80AC:接受两者`)),1)]),_:1})])]),o((a(),v(`div`,hn,[!H.value&&!t.isLoading?(a(),w(N(d),{key:0,description:N(I)(`@E80AC:该文件没有差异内容`),"image-size":80},null,8,[`description`])):H.value&&t.plainText?(a(),v(`pre`,{key:1,class:`diff-text plain-text`,textContent:O(t.diffContent)},null,8,gn)):H.value?(a(),v(`div`,{key:2,class:`diff-text`,innerHTML:N(xe)(t.diffContent)},null,8,_n)):C(``,!0)])),[[c,t.isLoading]])])):C(``,!0)])):B.value?C(``,!0):o((a(),v(`div`,vn,[z.value?(a(),w(ge,{key:0,"file-path":R.value||``},null,8,[`file-path`])):!H.value&&!t.isLoading?(a(),w(N(d),{key:1,description:R.value?N(I)(`@E80AC:该文件没有差异内容`):N(I)(`@E80AC:请选择文件查看差异`),"image-size":80},null,8,[`description`])):t.compareMode&&!z.value?(a(),v(`div`,yn,[f(Me,{original:t.compareOriginal,modified:t.compareModified,language:`auto`,"file-path":R.value,theme:`auto`,"read-only":!0},null,8,[`original`,`modified`,`file-path`])])):H.value&&t.plainText?(a(),v(`pre`,{key:3,class:`diff-text plain-text`,textContent:O(t.diffContent)},null,8,bn)):H.value?(a(),v(`div`,{key:4,class:`diff-text`,innerHTML:N(xe)(t.diffContent)},null,8,xn)):C(``,!0)])),[[c,t.isLoading]])]))],4)}}}),[[`__scopeId`,`data-v-f7b34abf`]]);export{Te as a,ve as c,Oe as i,je as n,Se as o,Ee as r,ye as s,Cn as t};