zen-gitsync 2.17.19 → 2.17.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -8
- package/package.json +3 -1
- package/src/config.js +3 -0
- package/src/ui/public/assets/AgentEngineSelector-DR3r5eQE.css +1 -0
- package/src/ui/public/assets/AgentEngineSelector-D_8VedA0.js +1 -0
- package/src/ui/public/assets/AgentView-CpKIfQLq.js +1 -0
- package/src/ui/public/assets/AgentView-DnN-vCMi.css +1 -0
- package/src/ui/public/assets/{AppVersionBadge-DDYQqoy7.css → AppVersionBadge--5If494j.css} +1 -1
- package/src/ui/public/assets/AppVersionBadge-kyk4Mmvf.js +2 -0
- package/src/ui/public/assets/{BranchSelector-F4ibldMN.css → BranchSelector-BTCMYwG0.css} +1 -1
- package/src/ui/public/assets/BranchSelector-BUPiKcdW.js +1 -0
- package/src/ui/public/assets/CommitForm-C-cL8_vz.css +1 -0
- package/src/ui/public/assets/CommitForm-CMe1gjY-.js +6 -0
- package/src/ui/public/assets/CommonDialog-Bzi5ISqT.css +1 -0
- package/src/ui/public/assets/CommonDialog-DMWtstZq.js +1 -0
- package/src/ui/public/assets/EditorView-C6msf9YP.js +1 -0
- package/src/ui/public/assets/EditorView-mUmFBb7H.css +1 -0
- package/src/ui/public/assets/FileDiffViewer-B6zy6NiA.css +1 -0
- package/src/ui/public/assets/FileDiffViewer-CvN5b1ZC.js +14 -0
- package/src/ui/public/assets/FlowExecutionViewer-B5kh7VxS.css +1 -0
- package/src/ui/public/assets/FlowExecutionViewer-Ynr4q8qE.js +1 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CM2_9TW3.css +1 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-DPDZc9uf.js +21 -0
- package/src/ui/public/assets/IconButton-CFJkDLVG.js +1 -0
- package/src/ui/public/assets/IconButton-W2X09OKH.css +1 -0
- package/src/ui/public/assets/LogList-C7q0Y4J_.css +1 -0
- package/src/ui/public/assets/LogList-CbfsCVsy.js +7 -0
- package/src/ui/public/assets/MindmapView-C4xg3TwX.css +1 -0
- package/src/ui/public/assets/MindmapView-D8A1V-Fd.js +1 -0
- package/src/ui/public/assets/MonitorView-BWOQfPtI.css +1 -0
- package/src/ui/public/assets/MonitorView-Bm_vUP8Y.js +1 -0
- package/src/ui/public/assets/ProjectStartupButton-BBND5XcZ.js +1 -0
- package/src/ui/public/assets/ProjectStartupButton-VoQqFee4.css +1 -0
- package/src/ui/public/assets/RecentDirectoriesChat-BQbncY1L.css +1 -0
- package/src/ui/public/assets/RecentDirectoriesChat-D9fMFh8r.js +1 -0
- package/src/ui/public/assets/RemoteManagerDialog-BSOph2h2.css +1 -0
- package/src/ui/public/assets/RemoteManagerDialog-BVQeIr8U.js +1 -0
- package/src/ui/public/assets/RemoteRepoCard-CG9WPcA_.css +1 -0
- package/src/ui/public/assets/RemoteRepoCard-vuCu_cpA.js +1 -0
- package/src/ui/public/assets/SourceMapView-BZjgxQM8.js +3 -0
- package/src/ui/public/assets/SourceMapView-CO_BZJKu.css +1 -0
- package/src/ui/public/assets/{SvgIcon-CDNsk4-Q.css → SvgIcon-BQ6bR7l0.css} +1 -1
- package/src/ui/public/assets/SvgIcon-D0hK-p1U.js +1 -0
- package/src/ui/public/assets/TemplateManager-DiM3vrbf.css +1 -0
- package/src/ui/public/assets/TemplateManager-XoPZv_i6.js +1 -0
- package/src/ui/public/assets/UserInputNode-CZarmsrv.js +1 -0
- package/src/ui/public/assets/UserInputNode-d-oRXM_J.css +1 -0
- package/src/ui/public/assets/WorkbenchView-BLyXsdYw.css +1 -0
- package/src/ui/public/assets/WorkbenchView-CPur8WEj.js +6 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-Ut942ckG.js → _plugin-vue_export-helper-N8Vc5eEs.js} +5 -5
- package/src/ui/public/assets/{agentConversations-C2864Cya.js → agentConversations-Da7zLPfP.js} +2 -2
- package/src/ui/public/assets/configStore-BFb0I8eP.js +1 -0
- package/src/ui/public/assets/element-plus-Bx3j6vzG.js +28 -0
- package/src/ui/public/assets/{flow-mindmap-DnzM9SlK.css → flow-mindmap-BMpmHdqh.css} +1 -1
- package/src/ui/public/assets/flow-mindmap-OPE_D4da.js +257 -0
- package/src/ui/public/assets/{gitStore-DyaXgTSR.js → gitStore-grKwgyHH.js} +1 -1
- package/src/ui/public/assets/index-BHYAwndE.js +29 -0
- package/src/ui/public/assets/index-DVJITdth.css +1 -0
- package/src/ui/public/assets/office-docx-B0sJQnr-.js +31 -0
- package/src/ui/public/assets/{office-excel-BOjWK-1x.js → office-excel-DMRySOdK.js} +1 -1
- package/src/ui/public/assets/office-pptx-Do2blxao.js +60 -0
- package/src/ui/public/assets/previewSandbox-D4455rKO.js +9 -0
- package/src/ui/public/assets/previewSandbox-SqNQvuHv.css +1 -0
- package/src/ui/public/assets/socket-io-TBtw0msS.js +1 -0
- package/src/ui/public/assets/{toolsStore-DrPVMxvn.js → toolsStore-B49mCaQ_.js} +1 -1
- package/src/ui/public/assets/{useThemeObserver-CiUpR4zj.js → useThemeObserver-DYxFoHh1.js} +1 -1
- package/src/ui/public/assets/{vendor-B5GNSK12.js → vendor-CyWsJd6S.js} +252 -109
- package/src/ui/public/assets/vue-flow-fVVGZspa.js +39 -0
- package/src/ui/public/index.html +25 -25
- package/src/ui/server/index.js +8 -0
- package/src/ui/server/routes/fs.js +98 -0
- package/src/ui/server/routes/workbench/index.js +156 -7
- package/src/ui/server/routes/workbench/jobStore.js +141 -48
- package/src/ui/server/routes/workbench/jobStore.test.js +139 -2
- package/src/ui/server/routes/workbench/liveJobs.js +226 -0
- package/src/ui/server/routes/workbench/liveJobs.test.js +215 -0
- package/src/ui/server/routes/workbench/orchestratorStore.js +113 -2
- package/src/ui/server/routes/workbench/progressReport.js +293 -0
- package/src/ui/server/routes/workbench/progressReport.test.js +344 -0
- package/src/ui/server/routes/workbench/shared.js +28 -0
- package/src/ui/server/routes/workbench/taskRunner.js +8 -0
- package/src/ui/public/assets/AgentEngineSelector-DUf0TfaU.css +0 -1
- package/src/ui/public/assets/AgentEngineSelector-j7LYtcCD.js +0 -2
- package/src/ui/public/assets/AgentView-B8zgTjEM.js +0 -10
- package/src/ui/public/assets/AgentView-phgvR10P.css +0 -1
- package/src/ui/public/assets/AppVersionBadge-eo7ROtED.js +0 -2
- package/src/ui/public/assets/BranchSelector-BwrAEUNg.js +0 -1
- package/src/ui/public/assets/CommitForm-4kI2csgs.css +0 -1
- package/src/ui/public/assets/CommitForm-BIx30QyK.js +0 -6
- package/src/ui/public/assets/CommonDialog-CXmqa6q4.js +0 -1
- package/src/ui/public/assets/CommonDialog-w6EmBEXv.css +0 -1
- package/src/ui/public/assets/EditorView-Bo176FOY.js +0 -31
- package/src/ui/public/assets/EditorView-D10uW5AV.css +0 -1
- package/src/ui/public/assets/FileDiffViewer-DXnoEMNi.js +0 -15
- package/src/ui/public/assets/FileDiffViewer-n5ea9qMe.css +0 -1
- package/src/ui/public/assets/FlowExecutionViewer-D_pSWT0R.js +0 -1
- package/src/ui/public/assets/FlowExecutionViewer-jNHI5zdm.css +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CcG6dBBg.js +0 -21
- package/src/ui/public/assets/FlowOrchestrationWorkspace-DwuSSxJ1.css +0 -1
- package/src/ui/public/assets/IconButton-RlXqKOeu.css +0 -1
- package/src/ui/public/assets/IconButton-jqB5gLxI.js +0 -1
- package/src/ui/public/assets/LogList-CtrKeYUA.js +0 -7
- package/src/ui/public/assets/LogList-XspUhx-C.css +0 -1
- package/src/ui/public/assets/MindmapView-DUWUbAgc.js +0 -2
- package/src/ui/public/assets/MindmapView-Diq2Cu4O.css +0 -1
- package/src/ui/public/assets/MonitorView-CLW2-HBy.js +0 -1
- package/src/ui/public/assets/MonitorView-DwUwJXnY.css +0 -1
- package/src/ui/public/assets/ProjectStartupButton-CB8IOg1E.css +0 -1
- package/src/ui/public/assets/ProjectStartupButton-CErZT4zR.js +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-CO7G6tRt.css +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-cVsO1elA.js +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-D4WphMtO.css +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-sksn2MmQ.js +0 -4
- package/src/ui/public/assets/RemoteRepoCard-Cz_aoLZb.js +0 -7
- package/src/ui/public/assets/RemoteRepoCard-o01IrbVz.css +0 -1
- package/src/ui/public/assets/SourceMapView-CfDydtsu.css +0 -1
- package/src/ui/public/assets/SourceMapView-D5qkdXhn.js +0 -3
- package/src/ui/public/assets/SvgIcon-D54dZy2f.js +0 -1
- package/src/ui/public/assets/TemplateManager-DO7EPfj8.css +0 -1
- package/src/ui/public/assets/TemplateManager-DRHRpB64.js +0 -1
- package/src/ui/public/assets/UserInputNode-C4NV2vaL.js +0 -1
- package/src/ui/public/assets/UserInputNode-DDNSarag.css +0 -1
- package/src/ui/public/assets/WorkbenchView-B3VcBlk7.js +0 -70
- package/src/ui/public/assets/WorkbenchView-ZDvzGafG.css +0 -1
- package/src/ui/public/assets/configStore-DG0VBR3h.js +0 -1
- package/src/ui/public/assets/element-plus-AaVXaSqv.js +0 -48
- package/src/ui/public/assets/flow-mindmap-j-zhcNPe.js +0 -139
- package/src/ui/public/assets/index-B5MKbT-v.css +0 -1
- package/src/ui/public/assets/index-Dq6OyCrE.js +0 -127
- package/src/ui/public/assets/office-docx-CJ6JSCs6.js +0 -32
- package/src/ui/public/assets/office-pptx-CF43ZwXE.js +0 -74
- package/src/ui/public/assets/previewSandbox-CxLaNg4X.css +0 -1
- package/src/ui/public/assets/previewSandbox-D2ioUBVm.js +0 -0
- package/src/ui/public/assets/socket-io-BFqQXqAp.js +0 -1
- package/src/ui/public/assets/vue-flow-DwYB6Myr.js +0 -39
package/README.md
CHANGED
|
@@ -199,7 +199,7 @@ When the GUI is opened on a directory that is not a Git repository, the right pa
|
|
|
199
199
|
|
|
200
200
|
The same list carries a short note underneath the cards — in the **full-screen** directory switcher dialog the path field and the **常用目录** cards take the left side, and that note lives in a right-hand column beside them. With an AI model configured it is an **AI status summary** — one paragraph written by the model from the freshly fetched states, naming the projects that need a pull, have unpushed commits or uncommitted changes, and saying so when everything is in sync. It is generated once per distinct state right after the **刷新全部** pass finishes (never mid-refresh), cached for the page, and there is a regenerate button on the right; the summary is shared between the panel and the dialog, so opening the switcher never triggers a second call. Without a model configured it falls back to a static note explaining what the badges mean.
|
|
201
201
|
|
|
202
|
-
In the switcher dialog, that right column continues with a **g ai** follow-up box: ask which project to handle first, or how far one of them is behind, and it answers from the very same status the cards show — every turn carries the current directory states (plus the summary text) as request-scoped context, so there is no need to restate the background. It always runs on the built-in **g ai**, and each time the dialog opens it starts a fresh session, so the context is never a stale snapshot.
|
|
202
|
+
In the switcher dialog, that right column continues with a **g ai** follow-up box: ask which project to handle first, or how far one of them is behind, and it answers from the very same status the cards show — every turn carries the current directory states (plus the summary text) as request-scoped context, so there is no need to restate the background. Four one-click question cards sit in the empty state (what to handle first / who is behind / pull everything behind / what is uncommitted) — clicking one sends it straight away, for the same reason the box exists: you should not have to retype the background. It always runs on the built-in **g ai**, and each time the dialog opens it starts a fresh session, so the context is never a stale snapshot.
|
|
203
203
|
|
|
204
204
|
---
|
|
205
205
|
|
|
@@ -373,9 +373,10 @@ A dedicated view for running coding agents across one or many projects. Every ta
|
|
|
373
373
|
|---|---|
|
|
374
374
|
| Task list | Create, edit, delete tasks. Rows are grouped by project (current project first), each a single line — the title, or the first characters of the description (ellipsised) when the title is empty. Tasks with neither a title nor a description count as drafts that are never saved (switching away drops them) |
|
|
375
375
|
| Multi-project board | Three resizable / collapsible panes: the project list with its run monitor, the kanban board, and the master-agent console. Drag a divider to resize (project list 180–420 px, console 260–560 px), double-click it to reset the responsive default, or fold a side away — the top-bar button folds the project list, the console folds into a 32 px rail that expands on click. The run monitor has its own divider (120 px up to half the viewport height) for when several jobs run at once. All widths / heights are remembered across sessions |
|
|
376
|
-
| Kanban board | **Todo / Doing / Done** columns with the done column sorted newest-first; a filter checkbox narrows the board to tasks whose last run failed, and a table view is one click away for a denser listing |
|
|
376
|
+
| Kanban board | **Todo / Doing / Done** columns with the done column sorted newest-first; a filter checkbox narrows the board to tasks whose last run failed, and a table view is one click away for a denser listing. A **New task** entry sits at the end of the Todo column whether or not that column already holds cards (it doubles as the empty state, and opens the same create dialog as the top-right button) |
|
|
377
377
|
| Master-agent console | Give the master agent an instruction and it dispatches a new task, deciding the target project itself (or honouring the project you selected). Enter dispatches, Shift+Enter starts a new line. Dispatching can be paused and resumed — while paused, a dispatch creates the task without running it |
|
|
378
|
-
|
|
|
378
|
+
| Progress report | The console's **Instruction** pane reports where your running tasks actually stand instead of listing what was dispatched and what finished (the board already shows that). The master agent reads each running job — elapsed time, tool calls, latest output — and writes a short paragraph per report: what each task is doing, how far it has got, and whether it looks stuck. Reports appear on an interval you pick (5 / 10 / 15 / 30 / 60 minutes, or off) or whenever you hit **Report now**, and the newest one is shown with the facts behind it (project, elapsed, last tool call) while earlier ones stay browsable from the history list. Automatic reports are generated **server-side**, so the history keeps filling up while the tab is closed and is waiting for you when you come back; with nothing running they are skipped entirely (no empty entries, no model call). The paragraph is written in the UI language and, when a task's output is inconclusive, it says so rather than inventing progress |
|
|
379
|
+
| Dispatch default prompts | Give every dispatch a standing prompt: one **global** entry that applies to all projects, plus one **per project** that is appended after it whenever you dispatch to that project (it supplements the global one rather than replacing it). Both are edited from the gear button in the console's composer; the combined text is prepended to the instruction, a "Default prompt (global + this project)" checkbox appears next to **Run now** so a single dispatch can opt out, and the instruction log records which level was attached. The prompt is copied onto the task at dispatch time, so editing the setting later never rewrites tasks that already exist; it lands in the task's own prompt field, where you can still edit it per task |
|
|
379
380
|
| Open-with menu per project | Hovering a project row in the board's project list reveals two buttons: **Open folder** (straight to your file manager) and **Open with**, a menu holding file manager / terminal / `g ui` in a new tab plus every editor and AI tool (VS Code, Codex, OpenCode, Kimi Code, ZCode, DeepSeek Harness, and Claude Code in default or fully-approved mode). Tools that are not installed are dimmed and labelled "Not installed" — clicking one opens the very same install guide the top bar uses. Every action applies to that row's project only; the board's selection is never touched |
|
|
380
381
|
| Task editor overlay | Clicking a board card opens the editor as an overlay: a flat sidebar holding the task list and prompt presets, then the task header, preset selector, executor split-button, the execution-log / clear-execution actions, and a chat-style execution body. The description collapses into a one-line "Task description (optional)" summary until clicked, showing a "Filled" badge and the attachment count once there is content |
|
|
381
382
|
| Executor choice | Run each task with **Claude Code**, **OpenCode** or **Codex**. The global default is set in **Settings → General → Task executor** (`config.taskExecutor`); the split-button next to the run button switches it for the next run and remembers that pick in the browser. A continued conversation always stays on the executor that started it — Claude's `--resume`, OpenCode's `--session` and Codex's thread id are not interchangeable |
|
|
@@ -393,7 +394,7 @@ A dedicated view for running coding agents across one or many projects. Every ta
|
|
|
393
394
|
| Continue chat | After a task reaches a done / error / cancelled state, a follow-up composer appears; sending a message resumes the previous session (`claude --resume <session_id>` for Claude Code, `--session` for OpenCode, `codex exec resume <thread_id>` for Codex), and each new turn stacks into the same chat-style flow |
|
|
394
395
|
| Local tool detection | On startup + every 10 min the server probes 7 CLIs (`code`, `claude`, `codex`, `opencode`, `kimi`, `zcode`, `dsh`). Tools that are missing are dimmed and labelled "Not installed" — clicking one opens the install guide, and right-clicking a tool button offers an update to the latest published version |
|
|
395
396
|
|
|
396
|
-
Prompt presets and tasks are persisted to `~/.zen-gitsync/prompts.json` and `~/.zen-gitsync/tasks.json` (cross-project, shared across repos); run history and the retention policy live in `jobs.json` / `jobs-config.json`, the master-agent console state in `orchestrator.json
|
|
397
|
+
Prompt presets and tasks are persisted to `~/.zen-gitsync/prompts.json` and `~/.zen-gitsync/tasks.json` (cross-project, shared across repos); run history and the retention policy live in `jobs.json` / `jobs-config.json`, the master-agent console state in `orchestrator.json` (with its report history in `orchestrator-reports.json` — kept apart so the polled state file stays small), and task attachments under `~/.zen-gitsync/workbench-images/_task-<taskId>/`.
|
|
397
398
|
|
|
398
399
|
---
|
|
399
400
|
|
|
@@ -855,7 +856,7 @@ $ ZEN_ALLOWED_ORIGINS="https://zen.example.com,http://10.0.0.5:8080" g ui
|
|
|
855
856
|
|
|
856
857
|
这份列表(以及切换目录弹窗里的 **常用目录**)在卡片下方还有一段说明;切换目录弹窗是**全屏**的,左栏放路径输入框与 **常用目录** 卡片,这段说明则落在右侧一列。配置了 AI 模型时,它是模型根据刚刷新的状态写成的 **AI 项目状态解读**:一段话说清哪些项目该 pull、哪些有未推送的提交、哪些只是工作区脏了,全都同步干净时也会明确说明。它在「刷新全部」跑完的那一刻按状态生成一次(刷新途中不会生成),整页缓存复用,右侧带重新生成按钮;面板与弹窗共用同一份解读,打开弹窗不会多问一次模型。没配模型时退回一段静态说明,讲清徽标里的数字各是什么意思。
|
|
857
858
|
|
|
858
|
-
切换目录弹窗里,这一列的解读底下还接着一个 **g ai** 追问框:可以直接问「先处理哪个」「某个项目落后了多少」,它答的就是卡片上这份状态 ——
|
|
859
|
+
切换目录弹窗里,这一列的解读底下还接着一个 **g ai** 追问框:可以直接问「先处理哪个」「某个项目落后了多少」,它答的就是卡片上这份状态 —— 每一轮都会把当前的目录状态(连同这段解读原文)作为请求级上下文带给模型,不用重新复述背景。空态下还摆着四张一键问题卡(先处理哪个 / 谁落后 / 落后的都拉一下 / 未提交的改了什么),点一下直接发出去 —— 和这个框存在的理由是同一个:不该让人把背景再敲一遍。这块固定跑内置 **g ai**,每次打开弹窗都是一次新会话,上下文因此永远是界面上这一刻的状态。
|
|
859
860
|
|
|
860
861
|
---
|
|
861
862
|
|
|
@@ -1029,10 +1030,11 @@ Activity Bar 第四个视图,在 GUI 内直接浏览并编辑项目文件:
|
|
|
1029
1030
|
|---|---|
|
|
1030
1031
|
| 任务列表 | 新建、编辑、删除任务;按项目分组(当前项目排在最前),每条任务只占一行 —— 有标题显示标题,没标题则显示描述前若干字符(超出省略);标题和描述都没填的任务视为草稿,切走时直接丢弃、不落盘 |
|
|
1031
1032
|
| 多项目看板 | 三栏均可拖动 / 可折叠:项目列表(含执行监控)、看板、主 Agent 控制台。拖动分隔条调整宽度(项目列表 180–420 px、控制台 260 px ~ `min(900, 视口 46%)`),双击恢复响应式默认值;两侧也都能收起 —— 顶栏按钮收项目列表,控制台自己的按钮把它收成 32px 收纳条、点一下展开。项目列表下方的执行监控有独立分隔条(120 px ~ 视口高度一半),并行跑多个任务时上下拖动即可加高。所有宽高跨会话记住 |
|
|
1032
|
-
| 看板视图 | **待处理 / 进行中 / 已完成**
|
|
1033
|
+
| 看板视图 | **待处理 / 进行中 / 已完成** 三列,已完成列按完成时间倒序;顶部勾选可只看「最近一次执行报错」的任务;一键切换成表格视图,信息密度更高。待处理列末尾常驻一个「新建任务」入口 —— 列里已有卡片时它照样在(列空时它还兼任空状态),点开的是和右上角按钮同一个新建弹窗 |
|
|
1033
1034
|
| 主 Agent 控制台 | 两种工作方式,拨片切换、选择记在浏览器里:**对话** —— 直接跟内置 g ai 聊,由它按需把活派给某个项目(可多轮、可先问清再派);**指令** —— 你自己写一句话,落点由主 Agent 判断(或遵从此前选中的项目),Enter 派发、Shift+Enter 换行。两种方式落到**同一条派发链路与同一条指令流水**,差别只在"谁决定派什么"。调度可暂停 / 恢复,暂停期间派发只建任务不执行 |
|
|
1035
|
+
| 进度报告 | 「指令」模式下这块报的是**正在跑的任务现在到哪一步了**,而不是"谁派发了、谁完成了"(那些看板本身就能看出来)。主 Agent 会读一遍每个在跑的 job —— 已运行多久、最近调了什么工具、最近一行输出 —— 写一段汇报:每个任务在做什么、走到哪一步、有没有卡住的迹象。报告按你设的间隔自动生成(5 / 10 / 15 / 30 / 60 分钟,也可以关掉),也能随时点「立即报告」;面板上展示最新那份及其依据(项目、已运行时长、最近一次工具调用),更早的从下方历史列表里点开回看。自动报告由**服务端**定时产生,所以标签页关着也照样攒历史,回来就能看到;没有任务在跑时自动报告直接跳过(不记空条目、也不白调一次模型)。汇报按界面语言生成,输出看不出进度时会直说,而不是编一段像模像样的进展 |
|
|
1034
1036
|
| 派发执行器 | 派出去的任务由哪个 CLI 跑:**对话模式**在输入框下方选,**指令模式**在派发栏选 —— 两处是同一个组件、同一份选择,与执行按钮的临时切换也共用。注意「引擎」和「执行器」不是一回事:只有**内置 g ai** 能在服务端跑工具循环、才有派发能力,所以对话模式下把引擎切成外部 CLI 时,执行器选择会换成一句「当前引擎只能对话,不能派发任务 —— 切到内置 g ai 才能派活」的说明,而不是让你点了个不会生效的下拉 |
|
|
1035
|
-
| 派发默认提示词 | 给每次派发配一段常驻提示词:一条**全局**的(所有项目都附加)+ 每个项目一条(派发到该项目时追加在全局之后,是补充而不是覆盖)。两者都在控制台输入区的齿轮按钮里设置;拼好的正文放在指令**之前**,「立即执行」旁边会多出一个「默认提示词(全局 +
|
|
1037
|
+
| 派发默认提示词 | 给每次派发配一段常驻提示词:一条**全局**的(所有项目都附加)+ 每个项目一条(派发到该项目时追加在全局之后,是补充而不是覆盖)。两者都在控制台输入区的齿轮按钮里设置;拼好的正文放在指令**之前**,「立即执行」旁边会多出一个「默认提示词(全局 + 本项目)」勾选,单次派发可以取消勾选,指令流水里也记下这条指令附带的是哪一级。提示词在派发那一刻就抄进任务自己的提示词字段,之后改设置不会回头改写已建任务,单条任务仍可再改 |
|
|
1036
1038
|
| 项目行打开方式 | 编排台项目列表里 hover 任意一行会出现两个按钮:「打开文件夹」一键进资源管理器,以及「打开方式」菜单 —— 文件管理器 / 终端 / 新标签页跑 `g ui`,以及各编辑器与 AI 工具(VS Code、Codex、OpenCode、Kimi Code、ZCode、DeepSeek Harness,加上默认权限或完全批准的 Claude Code)。没安装的工具会置灰并标「未安装」,点它弹的是顶栏那套安装引导;菜单里的动作只作用于该行项目,不会改变看板选中态 |
|
|
1037
1039
|
| 任务编辑器浮层 | 点击看板卡片时以浮层打开:左侧是扁平化的任务列表与提示词预置,右侧依次是任务头部、预置下拉、执行器 split 按钮、「执行日志 / 清空执行」动作,以及对话式执行主体。描述默认折叠成一行「任务描述(可选)」摘要,点击展开;已填写描述或挂有附件时摘要右侧显示「已填写」徽标与附件数量 |
|
|
1038
1040
|
| 执行器选择 | 每个任务可用 **Claude Code** / **OpenCode** / **Codex** 执行。全局默认在 **设置 → 通用设置 → 任务执行器**(`config.taskExecutor`);执行按钮旁的 split 按钮可临时切换下一次执行用的执行器,选择记在浏览器里。续聊固定沿用最初那个执行器 —— Claude 的 `--resume`、OpenCode 的 `--session`、Codex 的 thread id 互不通用 |
|
|
@@ -1050,7 +1052,7 @@ Activity Bar 第四个视图,在 GUI 内直接浏览并编辑项目文件:
|
|
|
1050
1052
|
| 继续对话 | 任务进入终态(done / error / cancelled)后出现续聊输入框;发送续聊消息会用 `claude --resume <session_id>`(Claude Code)、`--session`(OpenCode)或 `codex exec resume <thread_id>`(Codex)续接上一轮会话,**新一轮 = 新 job**,多轮纵向堆叠成对话流 |
|
|
1051
1053
|
| 本地工具检测 | 启动时 + 每 10 分钟探测 7 个 CLI(`code` / `claude` / `codex` / `opencode` / `kimi` / `zcode` / `dsh`)。未安装的工具置灰并标「未安装」,点击弹出安装引导;右键工具按钮可升级到最新已发布版本 |
|
|
1052
1054
|
|
|
1053
|
-
提示词预置与任务数据持久化到 `~/.zen-gitsync/prompts.json` 和 `~/.zen-gitsync/tasks.json`(跨项目共享);执行历史与保留策略在 `jobs.json` / `jobs-config.json`,主 Agent 控制台状态在 `orchestrator.json
|
|
1055
|
+
提示词预置与任务数据持久化到 `~/.zen-gitsync/prompts.json` 和 `~/.zen-gitsync/tasks.json`(跨项目共享);执行历史与保留策略在 `jobs.json` / `jobs-config.json`,主 Agent 控制台状态在 `orchestrator.json`(进度报告历史另存 `orchestrator-reports.json` —— 与"配置和历史分两个文件"同一个理由:被 5s 轮询的那份要小),任务附件落盘在 `~/.zen-gitsync/workbench-images/_task-<taskId>/`。
|
|
1054
1056
|
|
|
1055
1057
|
---
|
|
1056
1058
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zen-gitsync",
|
|
3
|
-
"version": "2.17.
|
|
3
|
+
"version": "2.17.21",
|
|
4
4
|
"description": "Auto commit, scheduled sync, and visual GUI for Git. Run `g` in any repo for one-key commit & push, AI commit messages, scheduled background sync, and a drag-and-drop workflow builder.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -35,7 +35,9 @@
|
|
|
35
35
|
"verify:wb-dialogs": "node scripts/verify-workbench-dialogs.cjs",
|
|
36
36
|
"verify:wb-dispatch": "node scripts/verify-workbench-dispatch-attach.cjs",
|
|
37
37
|
"verify:wb-env-context": "node scripts/verify-workbench-env-context.mjs",
|
|
38
|
+
"verify:wb-live-jobs": "node scripts/verify-wb-live-jobs.mjs",
|
|
38
39
|
"verify:wb-overview": "node scripts/verify-workbench-overview.cjs",
|
|
40
|
+
"verify:wb-progress-report": "node scripts/verify-wb-progress-report.cjs",
|
|
39
41
|
"verify:wb-proj-branch": "node scripts/verify-workbench-proj-branch.cjs",
|
|
40
42
|
"verify:wb-proj-filter": "node scripts/verify-wb-proj-filter.cjs",
|
|
41
43
|
"verify:wb-panel-resize": "node scripts/verify-wb-panel-resize.cjs",
|
package/src/config.js
CHANGED
|
@@ -166,6 +166,9 @@ const defaultConfig = {
|
|
|
166
166
|
splitPercent: 25, // 15-85
|
|
167
167
|
},
|
|
168
168
|
editorAutoSave: false,
|
|
169
|
+
// 文件空间的文件树是否定时静默刷新(捕获编辑器/外部工具产生的改动)。
|
|
170
|
+
// 关掉后只能手动点「刷新」按钮,适合大目录/网络盘(见 EditorView 的轮询注释)。
|
|
171
|
+
fileTreeAutoRefresh: true,
|
|
169
172
|
// 顶栏工具图标(VSCode / Claude Code / Codex / …)中**隐藏**的那几个。
|
|
170
173
|
// 白名单式的默认空数组:以后新增工具默认就固定显示,不需要回头改默认值。
|
|
171
174
|
// 未勾选(= 落在本数组里)的工具连同未安装的一起收进顶栏右侧「更多」菜单。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.agent-engine[data-v-81dfa007]{vertical-align:middle}.agent-engine__btn[data-v-81dfa007]{border:1px solid var(--border-color);border-radius:var(--radius-base);color:var(--text-secondary);font-size:var(--font-size-sm);cursor:pointer;transition:border-color var(--transition-fast) ease, color var(--transition-fast) ease;background:0 0;align-items:center;gap:6px;padding:4px 8px;font-family:inherit;line-height:1.5;display:inline-flex}.agent-engine__btn[data-v-81dfa007]:hover:not(:disabled){border-color:var(--color-primary);color:var(--text-primary)}.agent-engine__btn[data-v-81dfa007]:disabled{cursor:not-allowed;color:var(--text-tertiary)}.agent-engine__icon[data-v-81dfa007],.agent-engine__item-icon[data-v-81dfa007]{flex:none;font-size:14px}.agent-engine__caret[data-v-81dfa007]{color:var(--text-tertiary);font-size:12px}.agent-engine__item[data-v-81dfa007]{align-items:center;gap:8px;min-width:148px;display:inline-flex}.agent-engine__item-name[data-v-81dfa007]{flex:1}.agent-engine__item-check[data-v-81dfa007]{color:var(--color-primary);font-size:13px}.agent-engine__item-missing[data-v-81dfa007]{font-size:var(--font-size-sm);color:var(--text-tertiary)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$ as e,C as t,Cn as n,Dn as r,En as i,Er as a,Jn as o,K as s,Kn as c,Mn as l,Pn as u,Pr as d,Qn as f,Qr as p,Rn as m,S as h,Tn as g,Un as _,Xn as v,br as y,cr as b,pr as x,q as S,qr as C,w,wn as T,yn as E}from"./element-plus-Bx3j6vzG.js";import{n as D,t as O}from"./_plugin-vue_export-helper-N8Vc5eEs.js";import{t as k}from"./SvgIcon-D0hK-p1U.js";import{t as A}from"./toolsStore-B49mCaQ_.js";import{a as j,m as M}from"./index-BHYAwndE.js";import{c as N,d as P,l as F,u as I}from"./agentConversations-Da7zLPfP.js";m(),x();function L(e,t=680){let r=y(0),i=null;function a(){let t=e.value;return t?(r.value=t.clientWidth,typeof ResizeObserver>`u`||(i=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width;typeof t==`number`&&(r.value=t)}),i.observe(t),!0)):!1}return o(()=>{a()||_(()=>a())}),c(()=>{i?.disconnect(),i=null}),{width:r,narrow:n(()=>r.value>0&&r.value<t)}}m(),x(),d();var R={class:`agent-engine`},z=[`disabled`,`title`,`aria-label`],B={class:`agent-engine__name`},V={class:`agent-engine__item`},H={class:`agent-engine__item-name`},U={key:3,class:`agent-engine__item-missing`},W=O(u({__name:`AgentEngineSelector`,props:{engine:{},locked:{type:Boolean}},emits:[`select`],setup(o,{emit:c}){let u=o,d=c,m=A(),_=n(()=>I(u.engine)),x=n(()=>({gai:!0,claude:m.claudeAvailable,opencode:m.opencodeAvailable,codex:m.codexAvailable})),O=y(!1),L=y(null);function W(e){if(!u.locked){if(!x.value[e]){if(!P(e))return;L.value=e,O.value=!0;return}d(`select`,e)}}return(n,c)=>(v(),r(`div`,R,[l(a(h),{trigger:`click`,onCommand:W},{dropdown:b(()=>[l(a(w),null,{default:b(()=>[(v(!0),r(E,null,f(a(N),n=>(v(),g(a(t),{key:n.id,command:n.id},{default:b(()=>[T(`span`,V,[a(P)(n.id)?(v(),g(j,{key:0,executor:n.id,class:`agent-engine__item-icon`},null,8,[`executor`])):(v(),g(k,{key:1,"icon-class":a(F),class:`agent-engine__item-icon`},null,8,[`icon-class`])),T(`span`,H,p(n.name),1),o.engine===n.id?(v(),g(a(s),{key:2,class:`agent-engine__item-check`},{default:b(()=>[l(a(e))]),_:1})):x.value[n.id]?i(``,!0):(v(),r(`span`,U,p(a(D)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`]))),128))]),_:1})]),default:b(()=>[T(`button`,{type:`button`,class:C([`agent-engine__btn`,{"is-locked":o.locked}]),disabled:o.locked,title:o.locked?a(D)(`@AGENT:本会话的引擎已锁定;要换引擎请新建会话`):a(D)(`@AGENT:新建会话使用的引擎`),"aria-label":a(D)(`@AGENT:智能体引擎`)},[a(P)(o.engine)?(v(),g(j,{key:0,executor:o.engine,class:`agent-engine__icon`},null,8,[`executor`])):(v(),g(k,{key:1,"icon-class":a(F),class:`agent-engine__icon`},null,8,[`icon-class`])),T(`span`,B,p(_.value),1),l(a(s),{class:`agent-engine__caret`},{default:b(()=>[l(a(S))]),_:1})],10,z)]),_:1}),l(M,{modelValue:O.value,"onUpdate:modelValue":c[0]||=e=>O.value=e,tool:L.value},null,8,[`modelValue`,`tool`])]))}}),[[`__scopeId`,`data-v-81dfa007`]]);export{L as n,W as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$ as e,A as t,Bt as n,Cn as r,Ct as i,Dn as a,Dt as o,En as s,Er as c,H as l,K as u,Mn as d,Ot as f,Pn as p,Pr as m,Q as h,Qn as g,Qr as _,Rn as v,Tn as y,Un as b,Ut as x,Xn as S,Yr as C,a as w,at as T,br as E,cr as D,ft as O,hn as k,i as A,j as ee,jn as j,ln as M,lr as N,o as P,or as F,pr as I,qr as L,qt as te,rn as ne,st as re,tr as R,vr as ie,wn as z,yn as B}from"./element-plus-Bx3j6vzG.js";import{r as V,t as H}from"./vendor-CyWsJd6S.js";import{n as U,t as W}from"./_plugin-vue_export-helper-N8Vc5eEs.js";import{t as ae}from"./configStore-BFb0I8eP.js";import{t as oe}from"./CommonDialog-DMWtstZq.js";import{a as se,i as G,n as K,o as q,r as ce,s as le,t as J}from"./agentConversations-Da7zLPfP.js";import{n as ue,t as de}from"./AgentEngineSelector-D_8VedA0.js";v(),I(),M(),m();var fe={class:`marketplace-panel`},Y={class:`mp-toolbar`},pe={class:`mp-search`},me=[`placeholder`],he={class:`mp-toolbar-sub`},ge={class:`mp-target-hint`},_e={class:`mp-source-filter`},X=[`onClick`],ve={class:`mp-body`},ye={class:`mp-group-header`},be={class:`mp-group-title`},xe={key:0,class:`mp-group-count`},Se={key:1,class:`mp-group-error`},Ce=[`href`,`title`],we={key:0,class:`mp-grid`},Z={class:`mp-card-head`},Te=[`title`],Ee={key:0,class:`mp-card-metric`},Q=[`title`],$={class:`mp-card-meta`},De=[`title`],Oe=[`title`],ke={key:2,class:`mp-tag remote`},Ae={class:`mp-card-foot`},je=[`href`],Me={key:1,class:`mp-installed-chip`},Ne=[`disabled`,`onClick`],Pe={key:3,class:`mp-not-installable`},Fe={key:1,class:`mp-empty`},Ie={key:0,class:`mp-group installed`},Le={class:`mp-group-header`},Re={class:`mp-group-title`},ze={class:`mp-group-count`},Be={key:0,class:`mp-installed-block`},Ve={class:`mp-installed-target`},He={class:`mp-installed-list`},Ue={class:`mp-installed-name`},We={key:0,class:`mp-meta-pkg`},Ge={key:1,class:`mp-tag warn`},Ke=[`disabled`,`onClick`],qe={key:1,class:`mp-empty all`},Je={key:0,class:`mkt-form`},Ye={class:`mkt-form-name`},Xe=[`onUpdate:modelValue`,`placeholder`],Ze={key:0,class:`mkt-field`},Qe={class:`mkt-hint`},$e=W(p({__name:`MarketplacePanel`,props:{type:{}},setup(i){let f=i,p=ae(),m=E([]),h=E([]),v=E(!1),b=E(``),C=E(``),T=E([]),M=E(`project`),I=E(new Set),R=E(new Set),V=r(()=>p.currentDirectory||``),H=null;async function W(){if(!v.value){v.value=!0;try{let e=new URLSearchParams({type:f.type,cwd:V.value});C.value&&e.set(`q`,C.value),T.value.length&&e.set(`sources`,T.value.join(`,`));let t=await(await fetch(`/api/agent/marketplace/catalog?${e}`)).json();t?.success?(m.value=t.groups||[],h.value=t.installed||[]):w.error(t?.error||U(`@MKT:加载失败`))}catch{w.error(U(`@MKT:加载失败`))}finally{v.value=!1}}}F(b,e=>{H&&clearTimeout(H),H=setTimeout(()=>{C.value=e.trim(),W()},400)}),F(T,()=>W()),F(()=>f.type,()=>{T.value=[],C.value=``,b.value=``,W()}),F(V,()=>W()),W();let se=r(()=>{let e=V.value?V.value.split(/[\\/]/).filter(Boolean).pop():``;return M.value===`project`?e||U(`@MKT:当前项目`):U(`@MKT:g ai 智能体`)});function G(e){return e.stars?`${K(e.stars)} ★`:e.downloads?`${K(e.downloads)} ${U(`@MKT:周下载`)}`:e.uses?`${K(e.uses)} ${U(`@MKT:次使用`)}`:``}function K(e){return e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(e)}function q(e){return`${e.id}`}function ce(e){return I.value.has(q(e))}let le=r(()=>{let e={project:[],global:[]};for(let t of h.value)(e[t.target]||=[]).push(t);return e}),J=ie({visible:!1,item:null,env:{},args:``});function ue(e){return f.type===`mcp`&&(!!e.envKeys?.length||!!e.args?.length)}function de(e){J.item=e,J.env=Object.fromEntries((e.envKeys||[]).map(e=>[e,``])),J.args=(e.args||[]).join(` `),J.visible=!0}function $e(){let e=J.item;if(J.visible=!1,!e)return;let t=Object.fromEntries(Object.entries(J.env).filter(([,e])=>e.trim()!==``)),n=J.args.trim()?J.args.trim().match(/(?:[^\s"]+|"[^"]*")+/g)?.map(e=>e.replace(/^"|"$/g,``))??void 0:void 0;tt(e,{env:t,...n?{args:n}:{}})}async function et(e){if(!e.installed||await nt(e)){if(ue(e)){de(e);return}await tt(e,{})}}async function tt(e,t){let n=q(e);I.value.add(n);try{let n=await fetch(`/api/agent/marketplace/install`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({type:f.type,target:M.value,cwd:V.value,item:{...e,...t}})}),r=await n.json().catch(()=>null);if(!n.ok||!r?.success){w.error(r?.error||U(`@MKT:安装失败`));return}r.item?.warning&&w.warning(r.item.warning),r.item?.envKeys?.length?w.warning(`${U(`@MKT:还缺环境变量`)}: ${r.item.envKeys.join(`, `)}`):w.success(U(`@MKT:安装成功`)),await W()}catch{w.error(U(`@MKT:安装失败`))}finally{I.value.delete(n)}}async function nt(e){try{return await A.confirm(`${e.name} ${U(`@MKT:已安装,要重新安装吗?`)}`,U(`@MKT:重新安装`),{confirmButtonText:U(`@MKT:重装`),cancelButtonText:U(`@MKT:取消`),type:`warning`}),!0}catch{return!1}}async function rt(e){try{await A.confirm(`${U(`@MKT:确定卸载`)} ${e.name}?`,U(`@MKT:卸载`),{confirmButtonText:U(`@MKT:卸载`),cancelButtonText:U(`@MKT:取消`),type:`warning`})}catch{return}let t=`${e.target}:${e.id}`;R.value.add(t);try{let t=new URLSearchParams({target:e.target,cwd:V.value}),n=await fetch(`/api/agent/marketplace/item/${f.type}/${encodeURIComponent(e.id)}?${t}`,{method:`DELETE`}),r=await n.json().catch(()=>null);if(!n.ok||!r?.success){w.error(r?.error||U(`@MKT:卸载失败`));return}w.success(U(`@MKT:已卸载`)),await W()}catch{w.error(U(`@MKT:卸载失败`))}finally{R.value.delete(t)}}return(r,f)=>{let p=u,C=t,w=ee,E=l,A=P;return S(),a(`div`,fe,[z(`div`,Y,[z(`div`,pe,[d(p,{class:`mp-search-icon`},{default:D(()=>[d(c(x))]),_:1}),N(z(`input`,{"onUpdate:modelValue":f[0]||=e=>b.value=e,class:`mp-search-input`,type:`text`,placeholder:i.type===`skill`?c(U)(`@MKT:搜索 Skill...`):c(U)(`@MKT:搜索 MCP 服务...`)},null,8,me),[[k,b.value]])]),d(w,{modelValue:M.value,"onUpdate:modelValue":f[1]||=e=>M.value=e,size:`small`,class:`mp-target`},{default:D(()=>[d(C,{value:`project`},{default:D(()=>[j(_(c(U)(`@MKT:当前项目`)),1)]),_:1}),d(C,{value:`global`},{default:D(()=>[j(_(c(U)(`@MKT:g ai 智能体`)),1)]),_:1})]),_:1},8,[`modelValue`]),d(E,{content:c(U)(`@MKT:刷新`),placement:`top`,"show-after":300},{default:D(()=>[z(`button`,{class:L([`mp-refresh`,{spinning:v.value}]),onClick:W},[d(p,null,{default:D(()=>[d(c(n))]),_:1})],2)]),_:1},8,[`content`])]),z(`div`,he,[z(`span`,ge,[j(_(c(U)(`@MKT:安装到`))+` `,1),z(`b`,null,_(se.value),1)]),z(`div`,_e,[(S(!0),a(B,null,g(m.value,e=>(S(),a(`button`,{key:e.id,class:L([`mp-chip`,{active:T.value.includes(e.id)}]),onClick:()=>{let t=T.value.indexOf(e.id);t>=0?T.value.splice(t,1):T.value.push(e.id)}},_(e.label),11,X))),128)),T.value.length?(S(),a(`button`,{key:0,class:`mp-chip clear`,onClick:f[2]||=e=>T.value=[]},_(c(U)(`@MKT:全部来源`)),1)):s(``,!0)])]),N((S(),a(`div`,ve,[(S(!0),a(B,null,g(m.value,t=>(S(),a(`section`,{key:t.id,class:`mp-group`},[z(`header`,ye,[z(`h3`,be,_(t.label),1),t.status===`ok`?(S(),a(`span`,xe,_(t.items.length),1)):(S(),a(`span`,Se,[d(p,null,{default:D(()=>[d(c(ne))]),_:1}),j(` `+_(t.error||c(U)(`@MKT:来源不可用`)),1)])),t.homepage?(S(),a(`a`,{key:2,class:`mp-group-link`,href:t.homepage,target:`_blank`,rel:`noopener noreferrer`,title:t.homepage},[d(p,null,{default:D(()=>[d(c(o))]),_:1})],8,Ce)):s(``,!0)]),t.status===`ok`&&t.items.length?(S(),a(`div`,we,[(S(!0),a(B,null,g(t.items,t=>(S(),a(`article`,{key:q(t),class:`mp-card`},[z(`div`,Z,[z(`span`,{class:`mp-card-name`,title:t.name},_(t.name),9,Te),G(t)?(S(),a(`span`,Ee,[d(p,null,{default:D(()=>[t.stars?(S(),y(c(te),{key:0})):(S(),y(c(O),{key:1}))]),_:2},1024),j(` `+_(G(t)),1)])):s(``,!0)]),z(`p`,{class:`mp-card-desc`,title:t.description},_(t.description||c(U)(`@MKT:暂无描述`)),9,Q),z(`div`,$,[t.package?(S(),a(`code`,{key:0,class:`mp-meta-pkg`,title:t.package},_(t.package),9,De)):t.repository?(S(),a(`span`,{key:1,class:`mp-meta-repo`,title:t.repository+(t.subpath?` · `+t.subpath:``)},[j(_(t.repository),1),t.subpath?(S(),a(B,{key:0},[j(` · `+_(t.subpath),1)],64)):s(``,!0)],8,Oe)):s(``,!0),t.transport===`remote`?(S(),a(`span`,ke,_(c(U)(`@MKT:远程服务`)),1)):s(``,!0),(S(!0),a(B,null,g((t.tags||[]).slice(0,2),e=>(S(),a(`span`,{key:e,class:`mp-tag`},_(e),1))),128))]),z(`div`,Ae,[t.upstream?(S(),a(`a`,{key:0,class:`mp-card-link`,href:t.upstream,target:`_blank`,rel:`noopener noreferrer`},_(c(U)(`@MKT:查看来源`)),9,je)):s(``,!0),f[6]||=z(`span`,{class:`mp-foot-spacer`},null,-1),t.installed?(S(),a(`span`,Me,[d(p,null,{default:D(()=>[d(c(e))]),_:1}),j(_(c(U)(`@MKT:已安装`)),1)])):t.installable===!1?(S(),a(`span`,Pe,_(c(U)(`@MKT:暂不支持一键安装`)),1)):(S(),a(`button`,{key:2,class:`mp-install-btn`,disabled:ce(t),onClick:e=>et(t)},_(ce(t)?c(U)(`@MKT:安装中...`):c(U)(`@MKT:安装`)),9,Ne))])]))),128))])):t.status===`ok`?(S(),a(`div`,Fe,_(c(U)(`@MKT:该来源暂无结果`)),1)):s(``,!0)]))),128)),h.value.length?(S(),a(`section`,Ie,[z(`header`,Le,[z(`h3`,Re,_(c(U)(`@MKT:已安装`)),1),z(`span`,ze,_(h.value.length),1)]),(S(),a(B,null,g([`project`,`global`],e=>z(`div`,{key:e},[le.value[e]?.length?(S(),a(`div`,Be,[z(`div`,Ve,_(e===`project`?c(U)(`@MKT:当前项目`):c(U)(`@MKT:g ai 智能体`)),1),z(`div`,He,[(S(!0),a(B,null,g(le.value[e],t=>(S(),a(`div`,{key:e+t.id,class:`mp-installed-row`},[z(`span`,Ue,_(t.name),1),t.package?(S(),a(`code`,We,_(t.package),1)):s(``,!0),t.requiredEnv?.length?(S(),a(`span`,Ge,_(c(U)(`@MKT:待配置`))+`: `+_(t.requiredEnv.join(`, `)),1)):s(``,!0),f[7]||=z(`span`,{class:`mp-foot-spacer`},null,-1),z(`button`,{class:`mp-remove-btn`,disabled:R.value.has(e+t.id),onClick:e=>rt(t)},[d(p,null,{default:D(()=>[d(c(re))]),_:1}),j(` `+_(R.value.has(e+t.id)?c(U)(`@MKT:卸载中...`):c(U)(`@MKT:卸载`)),1)],8,Ke)]))),128))])])):s(``,!0)])),64))])):s(``,!0),!v.value&&!m.value.length?(S(),a(`div`,qe,_(c(U)(`@MKT:加载失败`)),1)):s(``,!0)])),[[A,v.value]]),d(oe,{modelValue:J.visible,"onUpdate:modelValue":f[5]||=e=>J.visible=e,title:c(U)(`@MKT:配置 MCP`),width:`460px`,type:`flex`,"close-on-click-modal":!1,"append-to-body":``},{footer:D(()=>[z(`button`,{class:`mkt-cancel`,onClick:f[4]||=e=>J.visible=!1},_(c(U)(`@MKT:取消`)),1),z(`button`,{class:`mkt-confirm`,onClick:$e},_(c(U)(`@MKT:安装`)),1)]),default:D(()=>[J.item?(S(),a(`div`,Je,[z(`p`,Ye,_(J.item.name),1),(S(!0),a(B,null,g(Object.keys(J.env),e=>(S(),a(`div`,{key:e,class:`mkt-field`},[z(`label`,null,_(e),1),N(z(`input`,{"onUpdate:modelValue":t=>J.env[e]=t,type:`text`,autocomplete:`off`,placeholder:c(U)(`@MKT:环境变量值`),spellcheck:`false`},null,8,Xe),[[k,J.env[e]]])]))),128)),J.item.args?.length?(S(),a(`div`,Ze,[z(`label`,null,_(c(U)(`@MKT:启动参数`)),1),N(z(`input`,{"onUpdate:modelValue":f[3]||=e=>J.args=e,type:`text`,autocomplete:`off`,spellcheck:`false`},null,512),[[k,J.args]]),z(`p`,Qe,_(c(U)(`@MKT:参数提示`)),1)])):s(``,!0)])):s(``,!0)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-6788a7b1`]]);v(),I(),m();var et={class:`agent-chat-area`},tt={class:`agent-tabs`,role:`tablist`},nt=[`aria-selected`,`onClick`],rt={class:`agent-tab-body`},it={key:0,class:`agent-chat-pane`},at={key:0,class:`agent-list-page`},ot={key:0,class:`agent-page-bar`},st=[`title`,`aria-label`],ct={class:`agent-page-title`},lt={class:`agent-chat-host`},ut={key:0,class:`chat-loading`},dt=W(p({__name:`AgentView`,setup(e){let t=ae(),n=E(null),{narrow:o}=ue(n),l=E(`chat`),p=E(`chat`),m=r(()=>p.value===`mcp`?`mcp`:`skill`),v=r(()=>[{id:`chat`,label:U(`@AGENT:对话`),icon:h},{id:`skill`,label:U(`@AGENT:Skill 广场`),icon:i},{id:`mcp`,label:U(`@AGENT:MCP 广场`),icon:T}]),{sessions:x,sessionsLoading:w,currentSessionId:O,messages:k,isStreaming:A,sessionLoading:ee,loadSessions:j,loadSession:M,deleteSession:N,renameSession:P,newSession:I,sendMessage:te,pendingQuestion:ne,answeringQuestion:re,answerQuestion:ie,isSessionGenerating:W,currentEngine:oe,pendingEngine:fe,isEngineLocked:Y,pickEngine:pe,stop:me}=le(),he=r(()=>Y.value?oe.value:fe.value);function ge(e){Y.value||pe(e)}let _e=r(()=>{let e=t.theme;return e===`dark`||e===`auto`&&window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}),X=r(()=>se(x.value,W)),ve=ce(),ye=r(()=>X.value.find(e=>e.id===O.value)?.title||U(`@AGENT:对话`)),be=r(()=>[{id:`p1`,label:U(`@AGENT:查看项目结构`),prompt:U(`@AGENT:prompt_p1`)},{id:`p2`,label:U(`@AGENT:分析代码质量`),prompt:U(`@AGENT:prompt_p2`)},{id:`p3`,label:U(`@AGENT:帮我写测试`),prompt:U(`@AGENT:prompt_p3`)},{id:`p4`,label:U(`@AGENT:Git 状态检查`),prompt:U(`@AGENT:prompt_p4`)},{id:`p5`,label:U(`@AGENT:帮我启动项目`),prompt:U(`@AGENT:prompt_p5`)}]);async function xe(e){await te(e.text,e.files),await b(),Z()}async function Se(e){await te(e.prompt),await b(),Z()}let Ce=G(),we=E(null);function Z(e=!0){we.value?.scrollToBottom(e)}F(()=>k.value.length,()=>{b(()=>Z(!1))});function Te(e){M(e),l.value=`chat`}function Ee(){I(),l.value=`chat`}let Q=E(280),$=E(!1);function De(e){$.value=!0;let t=e.clientX,n=Q.value,r=e=>{let r=e.clientX-t,i=Math.max(200,Math.min(500,n+r));Q.value=i},i=()=>{$.value=!1,document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)}return F(o,e=>{e||(l.value=`chat`)}),F(()=>[t.currentDirectory,A.value],async([e,t],n)=>{let r=!n||e!==n[0],i=!!n&&n[1]===!0&&!t;(r||i)&&await j(),O.value&&!A.value&&!x.value.some(e=>e.sessionId===O.value)&&I()},{immediate:!0}),(e,t)=>(S(),a(`div`,{ref_key:`rootRef`,ref:n,class:`agent-view`},[p.value===`chat`&&!c(o)?(S(),a(B,{key:0},[z(`aside`,{class:`agent-sidebar`,style:C({width:Q.value+`px`})},[d(c(V),{class:`agent-conversations`,items:X.value,"active-id":c(O),loading:c(w),labels:c(ve),onSelect:Te,onNew:Ee,onRename:c(P),onDelete:c(N)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],4),z(`div`,{class:L([`sidebar-resizer`,{active:$.value}]),onMousedown:De},null,34)],64)):s(``,!0),z(`main`,et,[z(`nav`,tt,[(S(!0),a(B,null,g(v.value,e=>(S(),a(`button`,{key:e.id,type:`button`,class:L([`agent-tab`,{active:p.value===e.id}]),role:`tab`,"aria-selected":p.value===e.id,onClick:t=>p.value=e.id},[d(c(u),null,{default:D(()=>[(S(),y(R(e.icon)))]),_:2},1024),z(`span`,null,_(e.label),1)],10,nt))),128)),p.value===`chat`?(S(),y(de,{key:0,class:`agent-engine`,engine:he.value,locked:c(Y),onSelect:ge},null,8,[`engine`,`locked`])):s(``,!0)]),z(`div`,rt,[p.value===`chat`?(S(),a(`div`,it,[c(o)&&l.value===`list`?(S(),a(`div`,at,[d(c(V),{class:`agent-conversations`,items:X.value,"active-id":c(O),loading:c(w),labels:c(ve),onSelect:Te,onNew:Ee,onRename:c(P),onDelete:c(N)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])])):(S(),a(B,{key:1},[c(o)?(S(),a(`div`,ot,[z(`button`,{type:`button`,class:`agent-page-back`,title:c(U)(`@AGENT:返回会话列表`),"aria-label":c(U)(`@AGENT:返回会话列表`),onClick:t[0]||=e=>l.value=`list`},[...t[1]||=[z(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[z(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),z(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,st),z(`span`,ct,_(ye.value),1)])):s(``,!0),z(`div`,lt,[c(ee)?(S(),a(`div`,ut,[d(c(u),{class:`is-loading`,size:32},{default:D(()=>[d(c(f))]),_:1}),z(`span`,null,_(c(U)(`@AGENT:加载会话中...`)),1)])):(S(),y(c(H),{key:1,ref_key:`chatContainerRef`,ref:we,messages:c(k),"preset-questions":be.value,"welcome-title":c(U)(`@AGENT:智能体助手`),"welcome-description":c(U)(`@AGENT:我可以帮你阅读代码、执行命令、修改文件。选择下方话题或直接输入你的问题。`),"assistant-name":c(K),"assistant-avatar":c(J),theme:_e.value,disabled:c(A),generating:c(A),"upload-config":{accept:c(q)},placeholder:c(A)?c(U)(`@AGENT:正在生成中...`):c(U)(`@AGENT:输入消息,Enter 发送`),question:c(ne),"question-submitting":c(re),"question-labels":c(Ce),onSend:xe,onSelect:Se,onStop:c(me),onAnswer:c(ie)},null,8,[`messages`,`preset-questions`,`welcome-title`,`welcome-description`,`assistant-name`,`assistant-avatar`,`theme`,`disabled`,`generating`,`upload-config`,`placeholder`,`question`,`question-submitting`,`question-labels`,`onStop`,`onAnswer`]))])],64))])):(S(),y($e,{key:1,type:m.value},null,8,[`type`]))])])],512))}}),[[`__scopeId`,`data-v-52f9739a`]]);export{dt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.marketplace-panel[data-v-6788a7b1]{background:var(--bg-container);flex-direction:column;height:100%;min-height:0;display:flex}.mp-toolbar[data-v-6788a7b1]{flex-shrink:0;align-items:center;gap:12px;padding:12px 16px 8px;display:flex}.mp-search[data-v-6788a7b1]{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-panel);max-width:420px;height:32px;transition:border-color var(--transition-fast) ease;flex:1;align-items:center;gap:6px;padding:0 10px;display:flex}.mp-search[data-v-6788a7b1]:focus-within{border-color:var(--color-primary)}.mp-search .mp-search-icon[data-v-6788a7b1]{color:var(--text-tertiary);flex-shrink:0}.mp-search .mp-search-input[data-v-6788a7b1]{color:var(--text-primary);font-size:var(--font-size-mid);background:0 0;border:none;outline:none;flex:1;font-family:inherit}.mp-search .mp-search-input[data-v-6788a7b1]::placeholder{color:var(--text-tertiary)}.mp-target[data-v-6788a7b1]{flex-shrink:0}.mp-refresh[data-v-6788a7b1]{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-panel);width:30px;height:30px;color:var(--text-secondary);cursor:pointer;transition:var(--transition-ui-fast);justify-content:center;align-items:center;display:flex}.mp-refresh[data-v-6788a7b1]:hover{color:var(--color-primary);border-color:var(--color-primary)}.mp-refresh.spinning svg[data-v-6788a7b1]{animation:.9s linear infinite mkt-spin-6788a7b1}@keyframes mkt-spin-6788a7b1{to{transform:rotate(360deg)}}.mp-toolbar-sub[data-v-6788a7b1]{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:12px;padding:0 16px 10px;display:flex}.mp-target-hint[data-v-6788a7b1]{font-size:var(--font-size-sm);color:var(--text-tertiary)}.mp-target-hint b[data-v-6788a7b1]{color:var(--color-primary);font-weight:600}.mp-source-filter[data-v-6788a7b1]{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.mp-chip[data-v-6788a7b1]{font-size:var(--font-size-sm);border:1px solid var(--border-color);border-radius:var(--radius-xl);color:var(--text-tertiary);cursor:pointer;transition:var(--transition-ui-fast);background:0 0;padding:2px 10px;font-family:inherit}.mp-chip[data-v-6788a7b1]:hover{color:var(--text-secondary);border-color:var(--text-tertiary)}.mp-chip.active[data-v-6788a7b1]{color:var(--color-primary);border-color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 8%, transparent)}.mp-chip.clear[data-v-6788a7b1]{color:var(--text-tertiary);border-style:dashed}.mp-body[data-v-6788a7b1]{flex:1;min-height:0;padding:0 16px 20px;overflow-y:auto}.mp-group[data-v-6788a7b1]{margin-bottom:20px}.mp-group.installed[data-v-6788a7b1]{border-top:1px dashed var(--border-color);padding-top:14px}.mp-group-header[data-v-6788a7b1]{align-items:center;gap:8px;margin-bottom:10px;display:flex}.mp-group-title[data-v-6788a7b1]{font-size:var(--font-size-mid);color:var(--text-primary);margin:0;font-weight:600}.mp-group-count[data-v-6788a7b1]{min-width:20px;height:18px;font-size:var(--font-size-xs);border-radius:var(--radius-lg);background:var(--bg-hover);color:var(--text-tertiary);justify-content:center;align-items:center;padding:0 6px;display:inline-flex}.mp-group-error[data-v-6788a7b1]{font-size:var(--font-size-sm);color:var(--color-warning);align-items:center;gap:4px;display:inline-flex}.mp-group-link[data-v-6788a7b1]{color:var(--text-tertiary);transition:color var(--transition-fast) ease;display:inline-flex}.mp-group-link[data-v-6788a7b1]:hover{color:var(--color-primary)}.mp-grid[data-v-6788a7b1]{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;display:grid}.mp-card[data-v-6788a7b1]{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-panel);transition:border-color var(--transition-fast) ease, box-shadow var(--transition-fast) ease;flex-direction:column;gap:6px;padding:12px;display:flex}.mp-card[data-v-6788a7b1]:hover{border-color:color-mix(in srgb, var(--color-primary) 40%, var(--border-color));box-shadow:var(--shadow-sm)}.mp-card-head[data-v-6788a7b1]{align-items:center;gap:8px;display:flex}.mp-card-name[data-v-6788a7b1]{min-width:0;font-size:var(--font-size-mid);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:600;overflow:hidden}.mp-card-metric[data-v-6788a7b1]{font-size:var(--font-size-xs);color:var(--text-tertiary);flex-shrink:0;align-items:center;gap:3px;display:inline-flex}.mp-card-desc[data-v-6788a7b1]{font-size:var(--font-size-sm);color:var(--text-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:36px;margin:0;line-height:1.5;display:-webkit-box;overflow:hidden}.mp-card-meta[data-v-6788a7b1]{flex-wrap:wrap;align-items:center;gap:6px;min-height:18px;display:flex}.mp-meta-pkg[data-v-6788a7b1],.mp-meta-repo[data-v-6788a7b1]{font-size:var(--font-size-xs);color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;max-width:220px;overflow:hidden}.mp-tag[data-v-6788a7b1]{font-size:var(--font-size-xs);border-radius:var(--radius-lg);background:var(--bg-hover);color:var(--text-tertiary);flex-shrink:0;padding:1px 6px}.mp-tag.remote[data-v-6788a7b1]{background:color-mix(in srgb, var(--color-info,var(--action-teal)) 14%, transparent);color:var(--color-info,var(--action-teal))}.mp-tag.warn[data-v-6788a7b1]{background:color-mix(in srgb, var(--color-warning) 14%, transparent);color:var(--color-warning)}.mp-card-foot[data-v-6788a7b1]{align-items:center;gap:8px;margin-top:2px;display:flex}.mp-card-link[data-v-6788a7b1]{font-size:var(--font-size-xs);color:var(--text-tertiary);text-decoration:none}.mp-card-link[data-v-6788a7b1]:hover{color:var(--color-primary);text-decoration:underline}.mp-foot-spacer[data-v-6788a7b1]{flex:1}.mp-install-btn[data-v-6788a7b1]{font-size:var(--font-size-sm);border:1px solid var(--color-primary);border-radius:var(--radius-base);color:var(--color-primary);cursor:pointer;transition:var(--transition-ui-fast);background:0 0;padding:4px 14px;font-family:inherit}.mp-install-btn[data-v-6788a7b1]:hover:not(:disabled){background:var(--color-primary);color:#fff}.mp-install-btn[data-v-6788a7b1]:disabled{opacity:.5;cursor:not-allowed}.mp-installed-chip[data-v-6788a7b1]{font-size:var(--font-size-xs);color:var(--color-success,var(--action-emerald));align-items:center;gap:3px;display:inline-flex}.mp-not-installable[data-v-6788a7b1]{font-size:var(--font-size-xs);color:var(--text-tertiary)}.mp-empty[data-v-6788a7b1]{font-size:var(--font-size-sm);color:var(--text-tertiary);padding:16px 0}.mp-empty.all[data-v-6788a7b1]{text-align:center;padding:48px 0}.mp-installed-block[data-v-6788a7b1]{margin-bottom:12px}.mp-installed-target[data-v-6788a7b1]{font-size:var(--font-size-xs);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.4px;margin-bottom:6px;font-weight:600}.mp-installed-list[data-v-6788a7b1]{flex-direction:column;gap:4px;display:flex}.mp-installed-row[data-v-6788a7b1]{border:1px solid var(--border-color);border-radius:var(--radius-base);background:var(--bg-panel);align-items:center;gap:10px;padding:6px 10px;display:flex}.mp-installed-name[data-v-6788a7b1]{font-size:var(--font-size-sm);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-weight:500;overflow:hidden}.mp-remove-btn[data-v-6788a7b1]{font-size:var(--font-size-xs);border:1px solid var(--border-color);border-radius:var(--radius-xs);color:var(--text-tertiary);cursor:pointer;transition:var(--transition-ui-fast);background:0 0;align-items:center;gap:4px;padding:3px 10px;font-family:inherit;display:inline-flex}.mp-remove-btn[data-v-6788a7b1]:hover:not(:disabled){color:var(--color-danger);border-color:var(--color-danger)}.mp-remove-btn[data-v-6788a7b1]:disabled{opacity:.5;cursor:not-allowed}@media (prefers-reduced-motion:reduce){.mp-refresh.spinning svg[data-v-6788a7b1]{animation:none}}.mkt-form[data-v-6788a7b1]{flex-direction:column;gap:12px;display:flex}.mkt-form-name[data-v-6788a7b1]{font-size:var(--font-size-mid);color:var(--text-primary);margin:0;font-weight:600}.mkt-field[data-v-6788a7b1]{flex-direction:column;gap:4px;display:flex}.mkt-field label[data-v-6788a7b1]{font-size:var(--font-size-sm);color:var(--text-secondary);font-weight:600}.mkt-field input[data-v-6788a7b1]{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-container);height:30px;color:var(--text-primary);font-size:var(--font-size-mid);transition:border-color var(--transition-fast) ease;padding:0 8px;font-family:inherit}.mkt-field input[data-v-6788a7b1]:focus{border-color:var(--color-primary);outline:none}.mkt-hint[data-v-6788a7b1]{font-size:var(--font-size-xs);color:var(--text-tertiary);margin:0}.mkt-cancel[data-v-6788a7b1],.mkt-confirm[data-v-6788a7b1]{font-size:var(--font-size-mid);border-radius:var(--radius-base);cursor:pointer;transition:var(--transition-ui-fast);padding:6px 16px;font-family:inherit}.mkt-cancel[data-v-6788a7b1]{border:1px solid var(--border-color);color:var(--text-secondary);background:0 0;margin-right:8px}.mkt-cancel[data-v-6788a7b1]:hover{color:var(--text-primary);border-color:var(--text-tertiary)}.mkt-confirm[data-v-6788a7b1]{border:1px solid var(--color-primary);background:var(--color-primary);color:#fff}.mkt-confirm[data-v-6788a7b1]:hover{opacity:.9}.agent-view[data-v-52f9739a]{background:var(--bg-container);height:100%;min-height:0;display:flex}.agent-sidebar[data-v-52f9739a]{background:var(--bg-panel);border-right:1px solid var(--border-color);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.agent-conversations[data-v-52f9739a]{flex:1;min-height:0;padding:10px 6px 8px 12px}.sidebar-resizer[data-v-52f9739a]{cursor:col-resize;width:4px;transition:background var(--transition-fast) ease;background:0 0;flex-shrink:0}.sidebar-resizer[data-v-52f9739a]:hover,.sidebar-resizer.active[data-v-52f9739a]{background:var(--color-primary);opacity:.3}.agent-chat-area[data-v-52f9739a]{flex-direction:column;flex:1;min-width:0;display:flex;position:relative;overflow:hidden}.agent-engine[data-v-52f9739a]{margin-bottom:7px;margin-left:auto}.agent-tabs[data-v-52f9739a]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);flex-shrink:0;align-items:center;gap:4px;padding:8px 12px 0;display:flex}.agent-tab[data-v-52f9739a]{color:var(--text-tertiary);font-size:var(--font-size-mid);cursor:pointer;transition:color var(--transition-fast) ease, border-color var(--transition-fast) ease, background var(--transition-fast) ease;border-radius:var(--radius-base) var(--radius-base) 0 0;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;padding:7px 14px 9px;font-family:inherit;display:inline-flex}.agent-tab[data-v-52f9739a]:hover{color:var(--text-secondary);background:var(--bg-hover)}.agent-tab.active[data-v-52f9739a]{color:var(--color-primary);border-bottom-color:var(--color-primary);font-weight:600}.agent-tab-body[data-v-52f9739a]{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.agent-chat-pane[data-v-52f9739a]{flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.agent-tab-body[data-v-52f9739a]>.marketplace-panel{flex:1;min-height:0}.chat-loading[data-v-52f9739a]{color:var(--text-tertiary);font-size:var(--font-size-base);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;display:flex}.agent-list-page[data-v-52f9739a]{background:var(--bg-panel);flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.agent-list-page .agent-conversations[data-v-52f9739a]{padding:12px 12px 10px 14px}.agent-page-bar[data-v-52f9739a]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);flex-shrink:0;align-items:center;gap:6px;height:34px;padding:0 12px 0 6px;display:flex}.agent-page-back[data-v-52f9739a]{border-radius:var(--radius-xs);width:24px;height:24px;color:var(--text-tertiary);cursor:pointer;transition:var(--transition-ui-fast);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex}.agent-page-back[data-v-52f9739a]:hover{background:var(--bg-hover);color:var(--text-secondary)}.agent-page-title[data-v-52f9739a]{min-width:0;font-size:var(--font-size-mid);color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.agent-chat-host[data-v-52f9739a]{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.agent-chat-host[data-v-52f9739a] .acu-avatar--left{background:0 0}[data-v-52f9739a] .acu-welcome-grid>.acu-preset-q:last-child:nth-child(odd){grid-column:1/-1}[data-theme=dark]{background:var(--bg-panel)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.upgrade-status[data-v-
|
|
1
|
+
.upgrade-status[data-v-5c9f402d]{align-items:center;gap:var(--spacing-base);margin-bottom:var(--spacing-md);font-size:var(--font-size-base);font-weight:500;display:flex}.upgrade-status.is-running[data-v-5c9f402d]{color:var(--el-color-primary)}.upgrade-status.is-success[data-v-5c9f402d]{color:var(--el-color-success)}.upgrade-status.is-failed[data-v-5c9f402d]{color:var(--el-color-danger)}.upgrade-status .is-loading[data-v-5c9f402d]{animation:2s linear infinite rotating-5c9f402d}.upgrade-log[data-v-5c9f402d]{color:#d4d4d4;border-radius:var(--radius-base);height:320px;font-family:JetBrains Mono,Cascadia Code,Consolas,monospace;font-size:var(--font-size-sm);white-space:pre-wrap;word-break:break-all;background:#1e1e1e;margin:0;padding:12px;line-height:1.6;overflow:auto}.upgrade-hint[data-v-5c9f402d]{margin:0 0 var(--spacing-md) 0;border-left:3px solid var(--el-color-success);border-radius:var(--radius-base);color:var(--el-color-success);font-size:var(--font-size-mid);background:#67c23a14;padding:8px 12px}.upgrade-countdown[data-v-5c9f402d]{background:var(--el-color-success);color:#fff;border-radius:var(--radius-md);font-size:var(--font-size-sm);margin-left:8px;padding:1px 8px;font-weight:600;animation:1s ease-in-out infinite pulse-5c9f402d;display:inline-block}.upgrade-manual[data-v-5c9f402d]{margin:0 0 var(--spacing-md) 0;border-left:3px solid var(--el-color-danger);border-radius:var(--radius-base);font-size:var(--font-size-mid);background:#f56c6c14;padding:8px 12px}.upgrade-manual__label[data-v-5c9f402d]{color:var(--el-color-danger);margin-bottom:4px;font-weight:500;display:block}.upgrade-manual__cmd[data-v-5c9f402d]{border-radius:var(--radius-base);font-family:JetBrains Mono,Cascadia Code,Consolas,monospace;font-size:var(--font-size-sm);color:var(--text-primary,#303133);word-break:break-all;-webkit-user-select:all;user-select:all;background:#0000000a;padding:6px 8px;display:block}@keyframes pulse-5c9f402d{0%,to{opacity:1}50%{opacity:.55}}@keyframes rotating-5c9f402d{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.app-version-badge[data-v-4084e4be]{align-items:center;gap:var(--spacing-base);margin-left:auto;display:inline-flex}.badge-icon-link[data-v-4084e4be]{border-radius:var(--radius-base);width:22px;height:22px;color:var(--text-tertiary);opacity:.7;transition:color var(--transition-base) ease, opacity var(--transition-base) ease, background var(--transition-base) ease;justify-content:center;align-items:center;text-decoration:none;display:inline-flex}.badge-icon-link[data-v-4084e4be]:hover{opacity:1;color:var(--text-secondary);background:var(--bg-hover)}.badge-icon-link--npm[data-v-4084e4be]:hover{color:var(--color-npm)}.badge-icon-link[data-v-4084e4be]:first-child:hover{color:var(--text-primary)}.version-link[data-v-4084e4be]{font-family:monospace;font-size:var(--font-size-xs);color:var(--text-secondary);border-radius:var(--radius-base);transition:color var(--transition-base), background-color var(--transition-base);padding:2px 6px;text-decoration:none}.version-link[data-v-4084e4be]:hover{color:var(--color-primary);background-color:#0000000a}.upgrade-btn[data-v-4084e4be]{appearance:none;cursor:pointer;height:22px;font-family:inherit;font-size:var(--font-size-xs);color:#fff;background:linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-dark) 100%);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-weight:600;line-height:1;display:inline-flex}.upgrade-btn[data-v-4084e4be]:hover{filter:brightness(1.08);box-shadow:var(--shadow-md);transform:translateY(-1px)}.upgrade-btn[data-v-4084e4be]:active{filter:brightness(.96);box-shadow:var(--shadow-sm);transform:translateY(0)}.upgrade-btn[data-v-4084e4be]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.upgrade-btn__dot[data-v-4084e4be]{background:#fff;border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:1.6s ease-in-out infinite upgrade-pulse-4084e4be;box-shadow:0 0 0 2px #ffffff59}.upgrade-btn__label[data-v-4084e4be]{letter-spacing:.5px}.upgrade-btn__version[data-v-4084e4be]{font-family:monospace;font-size:var(--font-size-xs);border-radius:var(--radius-md);background:#ffffff38;padding:1px 5px;font-weight:500;line-height:1.2}@keyframes upgrade-pulse-4084e4be{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.8)}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Dn as t,En as n,Er as r,H as i,Jn as a,K as o,Kn as s,L as c,Mn as l,Ot as u,Pn as d,Pr as f,Qr as p,Rn as m,Tn as h,Un as g,Xn as _,a as v,br as y,cr as b,et as x,i as S,jn as C,or as w,pr as T,qr as E,tt as D,wn as O}from"./element-plus-Bx3j6vzG.js";import{n as k,t as A}from"./_plugin-vue_export-helper-N8Vc5eEs.js";import{t as j}from"./CommonDialog-DMWtstZq.js";async function M(e,t){let n=e.body.getReader(),r=new TextDecoder(`utf-8`),i=``;for(;;){let{done:e,value:a}=await n.read();if(e)break;i+=r.decode(a,{stream:!0});let o=i.split(`
|
|
2
|
+
`);i=o.pop()??``;for(let e of o)e.trim()&&t(e)}i.trim()&&t(i)}async function N(){let e=await fetch(`/api/app-version`);return e.ok?e.json():{success:!1,current:``,latest:null,hasUpdate:!1,error:`HTTP ${e.status}`}}async function P(e){let t=await fetch(`/api/app-upgrade`,{method:`POST`});if(!t.ok){let n=`HTTP ${t.status}`;try{let e=await t.json();e?.error&&(n=e.error)}catch{}e({type:`error`,message:n}),e({type:`done`,code:t.status});return}if(!t.body){e({type:`error`,message:`响应无 body`}),e({type:`done`,code:-1});return}await M(t,t=>{try{e(JSON.parse(t))}catch{}})}async function F(){let e=await fetch(`/api/app-restart`,{method:`POST`});if(!e.ok){let t=`HTTP ${e.status}`;try{let n=await e.json();n?.error&&(t=n.error)}catch{}throw Error(t)}if(!e.body)throw Error(`响应无 body`);return new Promise((t,n)=>{let r=!1,i=e=>{r||(r=!0,e())};M(e,e=>{try{let r=JSON.parse(e);r.type===`ready`&&typeof r.port==`number`&&r.port>0?i(()=>t(r.port)):r.type===`timeout`?i(()=>n(Error(`restart.timeout`))):r.type===`error`&&i(()=>n(Error(r.message||`restart.failed`)))}catch{}}).then(()=>{i(()=>n(Error(`restart.stream-closed`)))}).catch(()=>{})})}m(),T(),f();var I={key:3},L={key:4},R={key:5},z={key:0,class:`upgrade-hint`},B={key:0,class:`upgrade-countdown`},V={key:1,class:`upgrade-manual`},H={class:`upgrade-manual__label`},U=`npm install -g zen-gitsync --registry https://registry.npmjs.org/`,W=A(d({__name:`UpgradeDialog`,props:{modelValue:{type:Boolean},logs:{},status:{},countdown:{default:0}},emits:[`update:modelValue`,`retry`,`restart`,`cancel`],setup(e,{emit:i}){let a=e,s=i,d=y(null);w(()=>a.logs,async()=>{await g(),d.value&&(d.value.scrollTop=d.value.scrollHeight)});function f(){a.status!==`running`&&(a.status===`success`&&a.countdown>0&&s(`cancel`),s(`update:modelValue`,!1))}function m(){s(`retry`)}function S(){s(`restart`)}function T(){s(`cancel`),s(`update:modelValue`,!1)}async function A(){try{await navigator.clipboard.writeText(U),v.success(k(`@F13B4:已复制升级命令`))}catch{v.warning(k(`@F13B4:复制失败,请手动复制`))}}return(i,a)=>{let g=o,v=c;return _(),h(j,{"model-value":e.modelValue,"onUpdate:modelValue":a[0]||=e=>s(`update:modelValue`,e),title:r(k)(`@F13B4:升级`),width:`680px`,type:`flex`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":e.status!==`running`,"append-to-body":``,onClose:f},{footer:b(()=>[e.status===`failed`?(_(),h(v,{key:0,type:`primary`,onClick:m},{default:b(()=>[C(p(r(k)(`@F13B4:重试`)),1)]),_:1})):n(``,!0),e.status===`failed`?(_(),h(v,{key:1,onClick:A},{default:b(()=>[C(p(r(k)(`@F13B4:复制升级命令`)),1)]),_:1})):n(``,!0),e.status===`success`?(_(),h(v,{key:2,type:`primary`,onClick:S},{default:b(()=>[C(p(r(k)(`@F13B4:立即重启并刷新`)),1)]),_:1})):n(``,!0),e.status===`success`?(_(),h(v,{key:3,onClick:T},{default:b(()=>[C(p(r(k)(`@F13B4:稍后手动重启`)),1)]),_:1})):n(``,!0),e.status===`running`?(_(),h(v,{key:4,disabled:``},{default:b(()=>[C(p(r(k)(`@F13B4:升级中`))+`... `,1)]),_:1})):n(``,!0)]),default:b(()=>[O(`div`,{class:E([`upgrade-status`,`is-${e.status}`])},[e.status===`running`?(_(),h(g,{key:0,class:`is-loading`},{default:b(()=>[l(r(u))]),_:1})):e.status===`success`?(_(),h(g,{key:1,color:`var(--color-success)`},{default:b(()=>[l(r(x))]),_:1})):(_(),h(g,{key:2,color:`var(--color-danger)`},{default:b(()=>[l(r(D))]),_:1})),e.status===`running`?(_(),t(`span`,I,p(r(k)(`@F13B4:升级中`)),1)):e.status===`success`?(_(),t(`span`,L,p(r(k)(`@F13B4:升级完成`)),1)):(_(),t(`span`,R,p(r(k)(`@F13B4:升级失败`)),1))],2),e.status===`success`?(_(),t(`p`,z,[C(p(r(k)(`@F13B4:新版本已全局安装,需要重启服务才能生效`))+` `,1),e.countdown>0?(_(),t(`span`,B,p(r(k)(`@F13B4:{seconds} 秒后自动刷新`,{seconds:e.countdown})),1)):n(``,!0)])):n(``,!0),e.status===`failed`?(_(),t(`p`,V,[O(`span`,H,p(r(k)(`@F13B4:手动升级命令`)),1),O(`code`,{class:`upgrade-manual__cmd`},p(U))])):n(``,!0),O(`pre`,{ref_key:`logEl`,ref:d,class:`upgrade-log`},p(e.logs||r(k)(`@F13B4:等待日志输出`)),513)]),_:1},8,[`model-value`,`title`,`show-close`])}}}),[[`__scopeId`,`data-v-5c9f402d`]]);m(),T(),f();var G={class:`app-version-badge`},K=[`aria-label`],q=[`aria-label`],J=[`title`,`aria-label`],Y={class:`upgrade-btn__label`},X={class:`upgrade-btn__version`},Z=`https://github.com/xz333221/zen-gitsync/releases`,Q=5,$=`app-version-check`,ee=36e5,te=A(d({__name:`AppVersionBadge`,setup(o){let c=`2.17.21`,u=y(c),d=e(()=>u.value||c),f=y(null),m=y(!1),h=y(``),g=y(`running`),x=y(0),C=null,w=y(!1);function T(){try{let e=sessionStorage.getItem($);if(!e)return null;let{at:t,data:n}=JSON.parse(e);return Date.now()-t>ee?null:n}catch{return null}}function E(e){try{sessionStorage.setItem($,JSON.stringify({at:Date.now(),data:e}))}catch{}}async function D(e=!1){let t=T();t&&(f.value=t);try{let t=await N();f.value=t,E(t),t.current&&(u.value=t.current),!e&&t.success&&t.hasUpdate&&v({type:`success`,message:k(`@F13B4:发现新版本 {version}`,{version:t.latest??``}),duration:4e3})}catch(t){e||v({type:`warning`,message:k(`@F13B4:检查更新失败 {error}`,{error:t?.message||``})})}}async function A(){if(f.value?.hasUpdate){try{await S.confirm(k(`@F13B4:确定要从 {current} 升级到 {latest} 吗?`,{current:f.value.current,latest:f.value.latest}),k(`@F13B4:升级`),{confirmButtonText:k(`@F13B4:确定升级`),cancelButtonText:k(`@F13B4:取消`),type:`info`})}catch{return}h.value=``,g.value=`running`,m.value=!0,await P(e=>{if(e.type===`done`){if(g.value=e.code===0?`success`:`failed`,e.code===0){try{sessionStorage.removeItem($)}catch{}f.value?.latest&&(u.value=f.value.latest),j()}}else e.message&&(h.value+=e.message)})}}function j(){M(),x.value=Q,C=setInterval(()=>{--x.value,x.value<=0&&(C&&=(clearInterval(C),null),L())},1e3)}function M(){C&&=(clearInterval(C),null),x.value=0}function I(){M()}async function L(){if(M(),!w.value){w.value=!0;try{let e=await F(),{pathname:t,search:n,hash:r}=window.location;window.location.href=`http://localhost:${e}${t}${n}${r}`}catch(e){let t=e?.message||``,n={"restart.timeout":`@F13B4:重启超时`,"restart.stream-closed":`@F13B4:重启失败,请刷新页面重试`,"restart.failed":`@F13B4:重启失败`}[t];v({type:`warning`,message:n?k(n):k(`@F13B4:重启失败 {error}`,{error:t})}),w.value=!1}}}return s(()=>{M()}),a(()=>{D(!0)}),(e,a)=>{let o=i;return _(),t(`div`,G,[l(o,{content:r(k)(`@F13B4:在 GitHub 上查看源码`),placement:`top`,effect:`dark`,"show-after":300},{default:b(()=>[O(`a`,{href:`https://github.com/xz333221/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link`,"aria-label":r(k)(`@F13B4:在 GitHub 上查看源码`)},[...a[1]||=[O(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[O(`path`,{d:`M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844a9.59 9.59 0 0 1 2.504.337c1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.02 10.02 0 0 0 22 12.017C22 6.484 17.522 2 12 2z`})],-1)]],8,K)]),_:1},8,[`content`]),l(o,{content:r(k)(`@F13B4:在 npm 上查看包`),placement:`top`,effect:`dark`,"show-after":300},{default:b(()=>[O(`a`,{href:`https://www.npmjs.com/package/zen-gitsync`,target:`_blank`,rel:`noopener noreferrer`,class:`badge-icon-link badge-icon-link--npm`,"aria-label":r(k)(`@F13B4:在 npm 上查看包`)},[...a[2]||=[O(`svg`,{viewBox:`0 0 24 24`,width:`15`,height:`15`,"aria-hidden":`true`,fill:`currentColor`,xmlns:`http://www.w3.org/2000/svg`},[O(`path`,{d:`M2 2v20h20V2H2zm17.167 17.167H12.5v-10h-3.333v10H4.833V4.833h14.334v14.334z`})],-1)]],8,q)]),_:1},8,[`content`]),l(o,{content:r(k)(`@F13B4:查看更新`),placement:`top`,effect:`dark`,"show-after":300},{default:b(()=>[O(`a`,{href:Z,target:`_blank`,rel:`noopener noreferrer`,class:`version-link`},`v`+p(d.value),1)]),_:1},8,[`content`]),f.value?.hasUpdate?(_(),t(`button`,{key:0,type:`button`,class:`upgrade-btn`,title:r(k)(`@F13B4:发现新版本 {version},点击升级`,{version:f.value.latest??``}),"aria-label":r(k)(`@F13B4:发现新版本 {version},点击升级`,{version:f.value.latest??``}),onClick:A},[a[3]||=O(`span`,{class:`upgrade-btn__dot`,"aria-hidden":`true`},null,-1),O(`span`,Y,p(r(k)(`@F13B4:升级`)),1),O(`span`,X,`v`+p(f.value.latest),1)],8,J)):n(``,!0),l(W,{modelValue:m.value,"onUpdate:modelValue":a[0]||=e=>m.value=e,logs:h.value,status:g.value,countdown:x.value,onRetry:A,onRestart:L,onCancel:I},null,8,[`modelValue`,`logs`,`status`,`countdown`])])}}}),[[`__scopeId`,`data-v-4084e4be`]]);export{te as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.branch-wrapper[data-v-
|
|
1
|
+
.branch-wrapper[data-v-407da320]{align-items:center;gap:2px;display:inline-flex}.branch-btn[data-v-407da320]{border-radius:var(--radius-base);cursor:pointer;height:22px;color:var(--color-text);font-family:var(--font-mono,monospace);font-size:var(--font-size-sm);white-space:nowrap;transition:background var(--transition-fast);background:0 0;border:none;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.branch-btn[data-v-407da320]:hover{background:var(--bg-hover)}.branch-btn[data-v-407da320]:active{background:var(--bg-active)}[data-v-407da320] .branch-btn-icon{flex-shrink:0;width:14px;height:14px}.branch-btn-name[data-v-407da320]{text-overflow:ellipsis;max-width:160px;overflow:hidden}.branch-btn-caret[data-v-407da320]{opacity:.6;font-size:var(--font-size-xs);align-items:center;display:flex}.branch-popover-inner[data-v-407da320]{flex-direction:column;gap:0;display:flex}.branch-search[data-v-407da320]{padding-bottom:8px}.branch-list[data-v-407da320]{max-height:240px;margin:0 -16px;padding:0 4px;overflow-y:auto}.branch-list[data-v-407da320]::-webkit-scrollbar{width:4px}.branch-list[data-v-407da320]::-webkit-scrollbar-thumb{background:var(--border-color,#8080804d);border-radius:var(--radius-xs)}.branch-item[data-v-407da320]{cursor:pointer;border-radius:var(--radius-base);height:28px;font-size:var(--font-size-mid);color:var(--color-text);transition:background var(--transition-fast);align-items:center;gap:6px;padding:0 12px;display:flex}.branch-item[data-v-407da320]:hover{background:var(--bg-hover)}.branch-item.is-active[data-v-407da320]{color:var(--color-primary)}.branch-item-check[data-v-407da320]{font-size:var(--font-size-sm);color:var(--color-primary);flex-shrink:0}.branch-item-check-placeholder[data-v-407da320]{flex-shrink:0;width:12px;display:inline-block}[data-v-407da320] .branch-item-icon{opacity:.7;flex-shrink:0;width:13px;height:13px}.branch-item-name[data-v-407da320]{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.branch-empty[data-v-407da320]{text-align:center;color:var(--color-text-secondary,#888);font-size:var(--font-size-sm);padding:12px}.branch-popover-footer[data-v-407da320]{margin-top:4px;padding-top:6px}.branch-create-btn[data-v-407da320]{border-radius:var(--radius-base);cursor:pointer;width:100%;height:28px;color:var(--color-text);font-size:var(--font-size-mid);text-align:left;transition:background var(--transition-fast);background:0 0;border:none;align-items:center;gap:6px;padding:0 12px;display:flex}.branch-create-btn[data-v-407da320]:hover{background:var(--bg-hover)}.branch-info[data-v-407da320]{align-items:center;display:flex}.create-branch-content[data-v-407da320]{padding:var(--spacing-base) 0}.is-loading[data-v-407da320]{animation:2s linear infinite rotating-407da320}@keyframes rotating-407da320{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.branch-popover{border-radius:4px!important;padding:12px 16px!important;box-shadow:0 4px 16px #0000002e!important}.create-branch-dialog .modern-select .el-select__wrapper{border-radius:var(--radius-lg);border:1px solid var(--border-input);box-shadow:var(--shadow-sm);transition:var(--transition-ui-base);padding:10px var(--spacing-md);background:var(--bg-container)}.create-branch-dialog .modern-select .el-select__wrapper:hover{border-color:var(--color-gray-300);box-shadow:var(--shadow-md)}.create-branch-dialog .modern-select.is-focus .el-select__wrapper{border-color:#3498db;box-shadow:0 0 0 2px #3498db1a,0 2px 6px #00000014}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$ as e,Bt as t,Cn as n,Dn as r,En as i,Er as a,F as ee,K as te,Lt as o,Mn as s,P as c,Pn as l,Pr as u,Qn as d,Qr as f,Rn as p,Tn as m,U as ne,V as h,W as g,Xn as _,_n as re,br as v,cr as y,jt as ie,ln as b,pr as x,qr as S,r as ae,wn as C,yn as w}from"./element-plus-Bx3j6vzG.js";import{n as T,t as E}from"./_plugin-vue_export-helper-N8Vc5eEs.js";import{t as D}from"./SvgIcon-D0hK-p1U.js";import{t as O}from"./IconButton-CFJkDLVG.js";import{r as k}from"./gitStore-grKwgyHH.js";import{t as A}from"./CommonDialog-DMWtstZq.js";p(),x(),u(),b();var j={key:0,class:`branch-info`},M={class:`branch-wrapper`},N={class:`branch-btn`},P={class:`branch-btn-name`},F={class:`branch-btn-caret`},I={class:`branch-popover-inner`},L={class:`branch-search`},R={class:`branch-list`},z=[`onClick`],B={key:1,class:`branch-item-check-placeholder`},V={class:`branch-item-name`},oe={key:0,class:`branch-empty`},H={class:`branch-popover-footer`},U={class:`create-branch-content`},W={class:`form-label`},G={class:`form-label`},K={class:`dialog-footer`},q={class:`footer-actions`},se=[`disabled`],J=E(l({__name:`BranchSelector`,emits:[`branchChanged`],setup(l,{emit:u}){let p=k(),b=u,x=v(!1),E=v(``),J=n(()=>{let e=E.value.trim().toLowerCase();return e?p.allBranches.filter(t=>t.toLowerCase().includes(e)):p.allBranches});async function ce(e){if(e===p.currentBranch){x.value=!1;return}x.value=!1,await p.changeBranch(e)&&(b(`branchChanged`),p.refreshLog())}let Y=v(!1),X=v(``),Z=v(``);function le(){x.value=!1,Z.value=p.currentBranch,Y.value=!0}async function Q(){await p.createBranch(X.value,Z.value)&&(Y.value=!1,X.value=``,b(`branchChanged`))}let $=v(!1);async function ue(){if(!$.value){$.value=!0;try{await Promise.all([p.getCurrentBranch(!0),p.getBranchStatus(!0),p.getAllBranches()]),b(`branchChanged`),p.refreshLog()}finally{$.value=!1}}}return(n,l)=>{let u=te,v=h,b=ae,k=g,de=c,fe=ee,pe=ne;return a(p).currentBranch?(_(),r(`div`,j,[C(`div`,M,[s(b,{visible:x.value,"onUpdate:visible":l[1]||=e=>x.value=e,placement:`top-start`,width:260,trigger:`click`,"popper-class":`branch-popover`,"show-arrow":!1,onShow:l[2]||=e=>E.value=``},{reference:y(()=>[C(`button`,N,[s(D,{"icon-class":`git-branch`,"class-name":`branch-btn-icon`}),C(`span`,P,f(a(p).currentBranch),1),C(`span`,F,[s(u,null,{default:y(()=>[...l[7]||=[C(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[C(`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:y(()=>[C(`div`,I,[C(`div`,L,[s(v,{modelValue:E.value,"onUpdate:modelValue":l[0]||=e=>E.value=e,placeholder:a(T)(`@F13B4:搜索或签出分支`),size:`small`,clearable:``,autofocus:``},null,8,[`modelValue`,`placeholder`])]),C(`div`,R,[(_(!0),r(w,null,d(J.value,t=>(_(),r(`div`,{key:t,class:S([`branch-item`,{"is-active":t===a(p).currentBranch}]),onClick:e=>ce(t)},[t===a(p).currentBranch?(_(),m(u,{key:0,class:`branch-item-check`},{default:y(()=>[s(a(e))]),_:1})):(_(),r(`span`,B)),s(D,{"icon-class":`git-branch`,"class-name":`branch-item-icon`}),C(`span`,V,f(t),1)],10,z))),128)),J.value.length===0?(_(),r(`div`,oe,f(a(T)(`@F13B4:没有匹配的分支`)),1)):i(``,!0)]),C(`div`,H,[C(`button`,{class:`branch-create-btn`,onClick:le},[s(u,null,{default:y(()=>[s(a(o))]),_:1}),C(`span`,null,f(a(T)(`@F13B4:创建新分支`)),1)])])])]),_:1},8,[`visible`]),s(O,{tooltip:a(T)(`@CMDCON:刷新`),onClick:ue},{default:y(()=>[s(u,{class:S({"is-loading":$.value})},{default:y(()=>[s(a(t))]),_:1},8,[`class`])]),_:1},8,[`tooltip`])]),s(A,{modelValue:Y.value,"onUpdate:modelValue":l[6]||=e=>Y.value=e,title:a(T)(`@F13B4:创建新分支`),size:`small`,"destroy-on-close":!0,"append-to-body":!0,"custom-class":`create-branch-dialog`},{footer:y(()=>[C(`div`,K,[C(`div`,q,[C(`button`,{type:`button`,class:`dialog-cancel-btn`,onClick:l[5]||=e=>Y.value=!1},f(a(T)(`@F13B4:取消`)),1),C(`button`,{type:`button`,class:`dialog-confirm-btn`,onClick:Q,disabled:a(p).isCreatingBranch},[a(p).isCreatingBranch?(_(),m(u,{key:1,class:`is-loading`},{default:y(()=>[...l[8]||=[C(`svg`,{viewBox:`0 0 1024 1024`,xmlns:`http://www.w3.org/2000/svg`},[C(`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})):(_(),m(u,{key:0},{default:y(()=>[s(a(e))]),_:1})),C(`span`,null,f(a(T)(`@F13B4:创建`)),1)],8,se)])])]),default:y(()=>[C(`div`,U,[s(pe,{model:{newBranchName:X.value,selectedBaseBranch:Z.value},"label-position":`top`},{default:y(()=>[s(k,null,{label:y(()=>[C(`div`,W,[s(u,{class:`label-icon`},{default:y(()=>[s(a(o))]),_:1}),C(`span`,null,f(a(T)(`@F13B4:新分支名称`)),1)])]),default:y(()=>[s(v,{modelValue:X.value,"onUpdate:modelValue":l[3]||=e=>X.value=e,placeholder:a(T)(`@F13B4:请输入新分支名称`),class:`modern-input`,size:`large`,onKeyup:re(Q,[`enter`])},null,8,[`modelValue`,`placeholder`])]),_:1}),s(k,null,{label:y(()=>[C(`div`,G,[s(u,{class:`label-icon`},{default:y(()=>[s(a(ie))]),_:1}),C(`span`,null,f(a(T)(`@F13B4:基于分支`)),1)])]),default:y(()=>[s(fe,{modelValue:Z.value,"onUpdate:modelValue":l[4]||=e=>Z.value=e,placeholder:a(T)(`@F13B4:选择基础分支`),class:`modern-select`,size:`large`,style:{width:`100%`}},{default:y(()=>[(_(!0),r(w,null,d(a(p).allBranches,e=>(_(),m(de,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1})]),_:1},8,[`model`])])]),_:1},8,[`modelValue`,`title`])])):i(``,!0)}}}),[[`__scopeId`,`data-v-407da320`]]);export{J as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.stage-button.from-drawer[data-v-7c59a857]{padding:6px var(--spacing-md);font-size:var(--font-size-sm);height:32px}.stage-button.from-status[data-v-7c59a857]{padding:var(--spacing-base);font-size:var(--font-size-sm);height:36px}.stage-button.from-form[data-v-7c59a857]{font-size:var(--font-size-mid);height:32px}.stage-button.is-selective[data-v-7c59a857]{box-shadow:0 0 0 2px var(--tint-primary-35)}.commit-button.from-drawer[data-v-056f6f5d]{padding:6px var(--spacing-md);font-size:var(--font-size-sm);height:32px}.commit-button.from-status[data-v-056f6f5d]{padding:var(--spacing-base);font-size:var(--font-size-sm);height:36px}.commit-button.from-form[data-v-056f6f5d]{font-size:var(--font-size-mid);height:32px}.commit-button.is-committing[data-v-056f6f5d]{min-width:96px;transition:min-width var(--transition-base) var(--ease-custom)}[data-v-3d7c968a] .el-overlay-dialog{will-change:auto!important}[data-v-3d7c968a] .el-dialog{overflow:hidden;will-change:auto!important;border-radius:12px!important}.push-progress-dialog[data-v-3d7c968a] .el-dialog__header{padding:var(--spacing-lg) var(--spacing-xl)}.push-progress-dialog[data-v-3d7c968a] .el-dialog__title{font-size:var(--font-size-md);letter-spacing:.5px;font-weight:600}.status-progress[data-v-3d7c968a] .el-dialog__title{color:var(--color-primary)}.status-success[data-v-3d7c968a] .el-dialog__title{color:var(--color-success)}.status-error[data-v-3d7c968a] .el-dialog__title{color:var(--color-danger)}.push-progress-container[data-v-3d7c968a]{gap:var(--spacing-lg);padding:var(--spacing-md);flex-direction:column;display:flex}.push-progress-container[data-v-3d7c968a] *{will-change:auto}@keyframes success-pulse-3d7c968a{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes loading-pulse-3d7c968a{0%,to{box-shadow:0 0 0 0 var(--tint-primary-16)}50%{box-shadow:0 0 0 6px #409eff00}}@keyframes border-light-run-3d7c968a{0%{width:60px;height:2px;top:0;left:0}24.99%{width:60px;height:2px;top:0;left:100%}25%{width:2px;height:60px;top:0;left:100%}49.99%{width:2px;height:60px;top:100%;left:100%}50%{width:60px;height:2px;top:100%;left:100%}74.99%{width:60px;height:2px;top:100%;left:0}75%{width:2px;height:60px;top:100%;left:0}99.99%{width:2px;height:60px;top:0;left:0}to{width:60px;height:2px;top:0;left:0}}.pulling-section[data-v-3d7c968a]{align-items:center;gap:var(--spacing-lg);padding:var(--spacing-xl) var(--spacing-xl);border-radius:var(--radius-md);background:#409eff0a;border:1px solid #409eff2e;display:flex;position:relative;overflow:hidden}.pulling-section[data-v-3d7c968a]:before{content:"";width:60px;height:2px;box-shadow:0 0 10px var(--tint-primary-50);background:linear-gradient(90deg,#0000 0%,#409eff66 30%,#409effe6 50%,#409eff66 70%,#0000 100%);animation:2.5s linear infinite border-light-run-3d7c968a;position:absolute;top:0;left:0}.pulling-icon-wrap[data-v-3d7c968a]{flex-shrink:0;width:44px;height:44px}.pulling-spinner[data-v-3d7c968a]{width:44px;height:44px;animation:1.4s linear infinite pulling-rotate-3d7c968a}.pulling-spinner .pulling-spinner-track[data-v-3d7c968a]{stroke:var(--tint-primary-16)}.pulling-spinner .pulling-spinner-arc[data-v-3d7c968a]{stroke:#409effe6;stroke-linecap:round;stroke-dasharray:80 126;animation:1.4s ease-in-out infinite pulling-dash-3d7c968a}.pulling-text-wrap[data-v-3d7c968a]{flex-direction:column;gap:4px;display:flex}.pulling-title[data-v-3d7c968a]{font-size:var(--font-size-sm);color:#409efff2;letter-spacing:.3px;font-weight:600}.pulling-sub[data-v-3d7c968a]{font-size:var(--font-size-sm);color:#ffffff59}@keyframes pulling-rotate-3d7c968a{to{transform:rotate(360deg)}}@keyframes pulling-dash-3d7c968a{0%{stroke-dasharray:1 126;stroke-dashoffset:0}50%{stroke-dasharray:90 126;stroke-dashoffset:-35px}to{stroke-dasharray:90 126;stroke-dashoffset:-124px}}.stages-section[data-v-3d7c968a]{gap:var(--spacing-md);padding:var(--spacing-md);border-radius:var(--radius-md);transition:var(--transition-ui-slow);background:0 0;border:1px solid #ffffff0d;grid-template-columns:repeat(2,1fr);display:grid;position:relative;overflow:hidden}.stages-section.is-loading[data-v-3d7c968a]{border-color:var(--tint-primary-16)}.stages-section.is-loading[data-v-3d7c968a]:before{content:"";width:60px;height:2px;box-shadow:0 0 10px var(--tint-primary-50);background:linear-gradient(90deg,#0000 0%,#409eff66 30%,#409effcc 50%,#409eff66 70%,#0000 100%);animation:4s linear infinite border-light-run-3d7c968a;position:absolute;top:0;left:0}.stages-section.is-success[data-v-3d7c968a]{border-color:#67c23a33}[data-theme=dark] .stages-section[data-v-3d7c968a]{opacity:.8}.stage-item[data-v-3d7c968a]{gap:var(--spacing-base);padding:10px var(--spacing-md);border-radius:var(--radius-lg);transition:var(--transition-ui-slow);background:#ffffff08;border:1px solid #ffffff14;flex-direction:column;display:flex;position:relative}.stage-item.active[data-v-3d7c968a]{background:var(--tint-primary-06);border-color:var(--tint-primary-16);transform:scale(1.01)}.stage-item.finished[data-v-3d7c968a]{background:#67c23a0d;border-color:#67c23a26}.stage-item.error[data-v-3d7c968a]{background:#f56c6c0d;border-color:#f56c6c26}.stage-header[data-v-3d7c968a]{align-items:center;gap:10px;display:flex}.stage-icon[data-v-3d7c968a]{width:24px;height:24px;transition:var(--transition-ui-slow);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-weight:600;display:flex}.stage-icon .icon-finish[data-v-3d7c968a]{color:var(--color-success);font-size:var(--font-size-md)}.stage-icon .icon-error[data-v-3d7c968a]{color:var(--color-danger);font-size:var(--font-size-md)}.stage-icon .icon-process[data-v-3d7c968a]{color:var(--color-primary);font-size:var(--font-size-md);animation:1s linear infinite rotate-3d7c968a}.stage-icon .icon-wait[data-v-3d7c968a]{color:gray;font-size:var(--font-size-md);animation:2s linear infinite rotate-3d7c968a}@keyframes rotate-3d7c968a{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.stage-info[data-v-3d7c968a]{flex:1;justify-content:space-between;align-items:center;display:flex}.stage-label[data-v-3d7c968a]{color:var(--text-primary);letter-spacing:.2px;font-weight:500}.stage-percent[data-v-3d7c968a]{font-size:var(--font-size-sm);color:var(--color-primary);text-align:right;letter-spacing:.5px;min-width:42px;font-family:Consolas,Monaco,monospace;font-weight:700}.finished .stage-percent[data-v-3d7c968a]{color:var(--color-success)}.stage-progress[data-v-3d7c968a]{padding-left:34px}.stage-progress[data-v-3d7c968a] .el-progress-bar__outer{background-color:#00000014}.stage-progress[data-v-3d7c968a] .el-progress-bar__inner{background:linear-gradient(90deg, var(--color-primary), var(--color-primary-light));transition:var(--transition-ui-slow)}.finished .stage-progress[data-v-3d7c968a] .el-progress-bar__inner{background:linear-gradient(90deg, var(--color-success), var(--color-success))}.error-section[data-v-3d7c968a]{border-radius:var(--radius-lg);padding:var(--spacing-lg);gap:var(--spacing-base);background:#fef0f0;border:1px solid #fde2e2;flex-direction:column;display:flex}.error-header[data-v-3d7c968a]{justify-content:space-between;align-items:center;display:flex}.error-title[data-v-3d7c968a]{color:var(--color-danger);font-weight:600}.pull-button[data-v-3d7c968a]{align-items:center;gap:4px;display:flex}.error-content[data-v-3d7c968a]{color:#c45656;font-size:var(--font-size-mid);word-break:break-word;padding:var(--spacing-sm);border-radius:var(--radius-base);background:#00000008;line-height:1.6}.error-suggestion[data-v-3d7c968a]{font-size:var(--font-size-sm);color:var(--color-primary);margin-top:4px;font-weight:500}.messages-section[data-v-3d7c968a]{gap:var(--spacing-base);flex-direction:column;display:flex}.messages-title[data-v-3d7c968a]{color:var(--text-secondary);font-weight:600;font-size:var(--font-size-sm);letter-spacing:.3px;opacity:.85}.progress-messages[data-v-3d7c968a]{border-radius:var(--radius-lg);max-height:160px;padding:10px var(--spacing-md);font-family:Consolas,Monaco,Courier New,monospace;font-size:var(--font-size-xs);background:#0000004d;border:1px solid #ffffff0d;line-height:1.5;overflow-y:auto;box-shadow:inset 0 2px 4px #0003}.progress-messages[data-v-3d7c968a]::-webkit-scrollbar{width:5px}.progress-messages[data-v-3d7c968a]::-webkit-scrollbar-track{border-radius:var(--radius-base);background:#0000001a}.progress-messages[data-v-3d7c968a]::-webkit-scrollbar-thumb{border-radius:var(--radius-base);background:#fff3}.progress-messages[data-v-3d7c968a]::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.message-item[data-v-3d7c968a]{color:#ffffffd9;padding:var(--spacing-xs) 0;white-space:nowrap;text-overflow:ellipsis;opacity:.9;transition:opacity var(--transition-base) ease;overflow:hidden}.message-item[data-v-3d7c968a]:hover{opacity:1}.message-item[data-v-3d7c968a]:not(:last-child){margin-bottom:3px}[data-theme=dark] .error-section[data-v-3d7c968a]{background:#f56c6c1a;border-color:#f56c6c4d}[data-theme=dark] .error-content[data-v-3d7c968a]{color:#f89898}:root:not([data-theme=dark]) .progress-messages[data-v-3d7c968a]{background:#0000000f;border:1px solid #00000014;box-shadow:inset 0 1px 3px #00000014}:root:not([data-theme=dark]) .message-item[data-v-3d7c968a]{color:#000000bf}:root:not([data-theme=dark]) .message-item[data-v-3d7c968a]:hover{color:#000000e6}:root:not([data-theme=dark]) .messages-title[data-v-3d7c968a]{color:#000000a6}:root:not([data-theme=dark]) .progress-messages[data-v-3d7c968a]::-webkit-scrollbar-track{background:#0000000d}:root:not([data-theme=dark]) .progress-messages[data-v-3d7c968a]::-webkit-scrollbar-thumb{background:#0003}:root:not([data-theme=dark]) .progress-messages[data-v-3d7c968a]::-webkit-scrollbar-thumb:hover{background:#0000004d}.push-button-group[data-v-ed54022f]{align-items:center;gap:4px;display:inline-flex}.push-remote-item[data-v-ed54022f]{align-items:center;gap:6px;display:inline-flex}.push-button.from-drawer[data-v-ed54022f]{padding:6px var(--spacing-md);font-size:var(--font-size-sm);height:32px}.push-button.from-status[data-v-ed54022f]{padding:var(--spacing-base);font-size:var(--font-size-sm);height:36px}.push-button.from-form[data-v-ed54022f]{font-size:var(--font-size-mid);height:32px}.push-button__caret.from-drawer[data-v-ed54022f],.push-button__caret.from-form[data-v-ed54022f]{height:32px;padding:0 6px}.push-button__caret.from-status[data-v-ed54022f]{height:36px;padding:0 6px}.push-button__caret[data-v-ed54022f] .el-icon{font-size:var(--font-size-sm)}.one-push-button[data-v-c8c92c10]{height:100%;background:var(--color-primary-dark)!important;border:1px solid var(--color-primary-dark)!important;color:#fff!important}.one-push-button[data-v-c8c92c10]:hover:not(.is-disabled){background:color-mix(in srgb, var(--color-primary-dark) 88%, #000)!important;border-color:color-mix(in srgb, var(--color-primary-dark) 88%, #000)!important}.one-push-button .one-push-icon[data-v-c8c92c10],.one-push-button .one-push-title[data-v-c8c92c10],.one-push-button .one-push-desc[data-v-c8c92c10]{color:#fff}.one-push-button.form[data-v-c8c92c10]{width:100%;padding:4px 12px}.one-push-button.drawer[data-v-c8c92c10]{width:auto;height:32px}.one-push-button .one-push-content[data-v-c8c92c10]{align-items:center;gap:6px;display:flex}.one-push-button .one-push-content .one-push-icon[data-v-c8c92c10]{font-size:var(--font-size-base)}.one-push-button .one-push-content .one-push-text[data-v-c8c92c10]{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.one-push-button .one-push-content .one-push-text .one-push-title[data-v-c8c92c10]{font-size:var(--font-size-mid)}.one-push-button .one-push-content .one-push-text .one-push-desc[data-v-c8c92c10]{font-size:var(--font-size-xs);opacity:.9;letter-spacing:.1px;font-weight:400}.create-tag-button[data-v-871521cb]{display:inline-block}.tag-dialog-content[data-v-871521cb]{gap:var(--spacing-base);flex-direction:column;display:flex}.tag-info-card[data-v-871521cb]{align-items:flex-start;gap:var(--spacing-base);padding:var(--spacing-base);border-radius:var(--radius-xl);background:linear-gradient(135deg,#f0fdf4 0%,#dcfce7 100%);border:1px solid #86efac;display:flex;position:relative;overflow:hidden}.tag-info-card[data-v-871521cb]:before{content:"";background:linear-gradient(90deg, var(--action-green) 0%, var(--action-green-dark) 100%);height:3px;position:absolute;top:0;left:0;right:0}.tag-info-card .info-icon[data-v-871521cb]{background:linear-gradient(135deg, var(--action-green) 0%, var(--action-green-dark) 100%);border-radius:var(--radius-md);color:#fff;width:40px;height:40px;font-size:var(--font-size-lg);box-shadow:var(--shadow-md);flex-shrink:0;justify-content:center;align-items:center;display:flex}.tag-info-card .info-content[data-v-871521cb]{flex:1}.tag-info-card .info-content h4[data-v-871521cb]{font-size:var(--font-size-md);color:#14532d;margin:0 0 6px;font-weight:600;line-height:1.2}.tag-info-card .info-content p[data-v-871521cb]{color:#166534;margin:0;line-height:1.4}.tag-form[data-v-871521cb]{gap:var(--spacing-base);flex-direction:column;display:flex}.tag-form[data-v-871521cb] .el-form-item{margin-bottom:0}.tag-form[data-v-871521cb] .el-form-item__label{color:var(--color-text-title);margin-bottom:var(--spacing-base);font-weight:600}.tag-form[data-v-871521cb] .el-input .el-input__inner{border-radius:var(--radius-lg);border:2px solid var(--color-gray-200);transition:var(--transition-ui-slow)}.tag-form[data-v-871521cb] .el-input .el-input__inner:hover{border-color:var(--color-gray-300)}.tag-form[data-v-871521cb] .el-input .el-input__inner:focus-visible{border-color:var(--action-green);box-shadow:0 0 0 3px #22c55e1a}.tag-form[data-v-871521cb] .el-textarea .el-textarea__inner{border-radius:var(--radius-lg);border:2px solid var(--color-gray-200);transition:var(--transition-ui-slow);line-height:1.5}.tag-form[data-v-871521cb] .el-textarea .el-textarea__inner:hover{border-color:var(--color-gray-300)}.tag-form[data-v-871521cb] .el-textarea .el-textarea__inner:focus-visible{border-color:var(--action-green);box-shadow:0 0 0 3px #22c55e1a}.tag-form[data-v-871521cb] .el-radio-group{width:100%}.tag-form[data-v-871521cb] .el-radio-group .el-radio-button{flex:1}.tag-form[data-v-871521cb] .el-radio-group .el-radio-button .el-radio-button__inner{border-radius:var(--radius-lg);width:100%;transition:var(--transition-ui-slow)}.form-tip[data-v-871521cb]{margin-top:var(--spacing-base);font-size:var(--font-size-sm);color:var(--color-gray-500);align-items:flex-start;gap:6px;line-height:1.4;display:flex}.form-tip .el-icon[data-v-871521cb]{color:var(--color-gray-400);flex-shrink:0;margin-top:1px}.commit-prefix[data-v-871521cb]{font-size:var(--font-size-sm);color:var(--color-gray-500);font-family:monospace}[data-v-871521cb] .tag-dialog .common-dialog__footer .el-button{border-radius:var(--radius-lg);transition:var(--transition-ui-slow);font-weight:500}[data-v-871521cb] .tag-dialog .common-dialog__footer .el-button:hover{transform:scale(1.02)}[data-v-871521cb] .tag-dialog .common-dialog__footer .el-button:active{transform:scale(.98)}[data-v-871521cb] .tag-dialog .common-dialog__footer .el-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.tag-list-button[data-v-366ce062]{display:inline-block}.tag-list-content[data-v-366ce062]{min-height:400px;padding:0}[data-v-366ce062] .tag-list-dialog .common-dialog__header{background:var(--action-green);color:#fff;padding:var(--spacing-xl) var(--spacing-2xl);border-radius:var(--radius-lg) var(--radius-lg) 0 0;margin:0}[data-v-366ce062] .tag-list-dialog .common-dialog__title{font-size:var(--font-size-lg);color:#fff;font-weight:600}[data-v-366ce062] .tag-list-dialog .common-dialog__close{color:#fff;font-size:var(--font-size-lg)}[data-v-366ce062] .tag-list-dialog .common-dialog__close:hover{color:var(--border-card)}.tag-header[data-v-366ce062]{margin-bottom:var(--spacing-base);padding:var(--spacing-base);background:linear-gradient(135deg, var(--color-white) 0%, var(--color-gray-soft) 100%);border-radius:var(--radius-lg);border:1px solid var(--border-component);box-shadow:var(--shadow-md);justify-content:space-between;align-items:center;display:flex}.tag-stats[data-v-366ce062]{align-items:center;gap:var(--spacing-base);display:flex}.stat-item[data-v-366ce062]{align-items:center;gap:var(--spacing-base);padding:var(--spacing-xs) var(--spacing-base);background:var(--action-green);border-radius:var(--radius-lg);color:#fff;display:flex}.stat-icon[data-v-366ce062]{font-size:var(--font-size-md)}.stat-number[data-v-366ce062]{font-size:var(--font-size-lg);font-weight:600}.stat-label[data-v-366ce062]{opacity:.9}.tag-actions-header[data-v-366ce062]{gap:var(--spacing-base);display:flex}.refresh-btn[data-v-366ce062],.push-all-btn[data-v-366ce062]{border-radius:var(--radius-lg);padding:var(--spacing-xs) var(--spacing-base);transition:var(--transition-ui-slow);font-weight:500}.refresh-btn[data-v-366ce062]:hover,.push-all-btn[data-v-366ce062]:hover{transform:scale(1.02)}.refresh-btn[data-v-366ce062]:active,.push-all-btn[data-v-366ce062]:active{transform:scale(.98)}.refresh-btn[data-v-366ce062]:focus-visible,.push-all-btn[data-v-366ce062]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.tag-list-container[data-v-366ce062]{min-height:300px}.tag-cards[data-v-366ce062]{gap:var(--spacing-base);flex-direction:column;display:flex}.tag-card[data-v-366ce062]{background:var(--bg-container);border-radius:var(--radius-lg);border:1px solid var(--border-component);box-shadow:var(--shadow-md);transition:var(--transition-ui-slow);overflow:hidden}.tag-card[data-v-366ce062]:hover{border-color:var(--action-green);transform:scale(1.02)}.tag-card[data-v-366ce062]:active{transform:scale(.98)}.tag-card[data-v-366ce062]:focus-visible{outline:2px solid var(--action-green);outline-offset:2px}.tag-card-content[data-v-366ce062]{padding:var(--spacing-base);align-items:center;gap:var(--spacing-base);display:flex}.tag-info[data-v-366ce062]{gap:var(--spacing-sm);flex-direction:column;flex:1;min-width:0;display:flex}.tag-main-info[data-v-366ce062]{flex-direction:column;gap:6px;display:flex}.tag-name-badge[data-v-366ce062]{align-items:center;gap:var(--spacing-base);flex-shrink:0;display:flex}.badge-icon[data-v-366ce062]{color:var(--action-green)}.tag-name-text[data-v-366ce062]{color:var(--color-text);font-family:Consolas,Monaco,Courier New,monospace;font-weight:600}.type-tag[data-v-366ce062]{margin-left:var(--spacing-sm)}.tag-meta[data-v-366ce062]{align-items:center;gap:var(--spacing-md);font-size:var(--font-size-sm);color:var(--text-secondary);display:flex}.tag-commit[data-v-366ce062]{align-items:center;gap:var(--spacing-sm);background:var(--bg-panel);padding:var(--spacing-xs) 6px;border-radius:var(--radius-base);font-family:monospace;display:flex}.tag-date[data-v-366ce062]{color:var(--text-tertiary)}.tag-message[data-v-366ce062]{font-size:var(--font-size-sm);color:var(--text-secondary);padding:6px var(--spacing-base);background:var(--bg-panel);border-radius:var(--radius-md);border-left:3px solid var(--action-green);line-height:1.4}.tag-card-actions[data-v-366ce062]{flex-shrink:0;align-items:center;gap:6px;display:none}.tag-card:hover .tag-card-actions[data-v-366ce062]{display:flex}.action-btn[data-v-366ce062]{border-radius:var(--radius-md);transition:var(--transition-ui-slow);min-width:60px;padding:6px var(--spacing-md);font-weight:500;font-size:var(--font-size-sm)}.action-btn[data-v-366ce062]:hover{transform:scale(1.02)}.action-btn[data-v-366ce062]:active{transform:scale(.98)}.action-btn[data-v-366ce062]:focus-visible{outline:2px solid var(--action-green);outline-offset:2px}.view-btn[data-v-366ce062]:hover,.push-btn[data-v-366ce062]:hover,.delete-btn[data-v-366ce062]:hover{box-shadow:var(--shadow-md)}.tag-detail-content[data-v-366ce062]{gap:var(--spacing-md);flex-direction:column;display:flex}.detail-row[data-v-366ce062]{align-items:center;gap:var(--spacing-md);background:var(--bg-panel);border-radius:var(--radius-lg);padding:10px;display:flex}.detail-row.detail-message[data-v-366ce062]{flex-direction:column;align-items:flex-start}.detail-label[data-v-366ce062]{font-size:var(--font-size-sm);color:var(--text-secondary);white-space:nowrap;min-width:80px;font-weight:600}.detail-value[data-v-366ce062]{color:var(--color-text)}.detail-value[data-v-366ce062]:is(code){background:var(--border-component);padding:var(--spacing-xs) var(--spacing-base);border-radius:var(--radius-base);border:1px solid var(--border-component);font-family:monospace}.message-content[data-v-366ce062]{width:100%;padding:var(--spacing-base);border-radius:var(--radius-md);border:1px solid var(--border-card);white-space:pre-wrap;word-break:break-word;background:#fff;line-height:1.6}.git-operations-button[data-v-feb8c688]{display:inline-block}.action-groups[data-v-feb8c688]{flex-direction:column;gap:16px;display:flex}.action-group[data-v-feb8c688]{background:var(--bg-container);border-radius:var(--radius-lg);border:1px solid var(--border-component);padding:16px}.group-title[data-v-feb8c688]{font-size:var(--font-size-base);color:var(--text-primary);margin-bottom:10px;padding-bottom:6px;font-weight:600}.group-buttons[data-v-feb8c688]{flex-direction:column;gap:10px;display:flex}.group-buttons[data-v-feb8c688] .el-button{justify-content:center;align-items:center;width:100%;height:40px;display:flex}.pull-error-content[data-v-feb8c688]{flex-direction:column;gap:16px;display:flex}.pull-error-type[data-v-feb8c688]{border-radius:var(--radius-lg);font-size:var(--font-size-mid);align-items:flex-start;gap:10px;padding:12px 14px;line-height:1.6;display:flex}.pull-error-type.is-warning[data-v-feb8c688]{color:var(--color-warning-dark);background:#faad141a;border:1px solid #faad1466}.pull-error-type.is-error[data-v-feb8c688]{color:var(--action-coral);background:#f56c6c14;border:1px solid #f56c6c59}.pull-error-icon[data-v-feb8c688]{font-size:var(--font-size-md);flex-shrink:0;margin-top:2px}.pull-error-detail[data-v-feb8c688]{flex-direction:column;gap:6px;display:flex}.pull-error-label[data-v-feb8c688]{font-size:var(--font-size-mid);color:var(--text-primary);font-weight:600}.pull-error-pre[data-v-feb8c688]{border-radius:var(--radius-lg);font-family:Consolas,Monaco,Courier New,monospace;font-size:var(--font-size-sm);color:var(--text-primary);white-space:pre-wrap;word-break:break-all;background:#0000000f;border:1px solid #0000001a;max-height:300px;margin:0;padding:12px 14px;line-height:1.6;overflow-y:auto}.global-loading-overlay[data-v-691919d3]{z-index:9999;background:#fff0;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.loading-container[data-v-691919d3]{justify-content:center;align-items:center;gap:var(--spacing-md);border-radius:var(--radius-xl);-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);background:linear-gradient(135deg,#409effe6 0%,#67c23ae6 100%);flex-direction:column;width:240px;padding:28px 32px;display:flex;overflow:hidden;box-shadow:0 8px 32px #0000004d;height:auto!important}.loading-spinner[data-v-691919d3]{width:64px;height:64px;position:relative}.spinner-ring[data-v-691919d3]{border:4px solid #0000;border-radius:50%;width:100%;height:100%;position:absolute;top:0;left:0}.spinner-ring[data-v-691919d3]:first-child{border-top:4px solid #ffffffe6;animation:2s linear infinite spin-691919d3}.spinner-ring[data-v-691919d3]:nth-child(2){border-right:4px solid #fff9;width:90%;height:90%;animation:3s linear infinite reverse spin-691919d3;top:5%;left:5%}.spinner-ring[data-v-691919d3]:nth-child(3){border-bottom:4px solid #ffffff4d;width:80%;height:80%;animation:4s linear infinite spin-691919d3;top:10%;left:10%}.loading-text[data-v-691919d3]{font-size:var(--font-size-lg);text-shadow:0 2px 8px #0000004d;letter-spacing:1px;text-align:center;color:var(--color-white);font-weight:600;animation:2s ease-in-out infinite pulse-text-691919d3}.loading-progress[data-v-691919d3]{border-radius:var(--radius-xs);background:#fff3;width:200px;height:4px;overflow:hidden}.progress-bar[data-v-691919d3]{background:linear-gradient(90deg, var(--bg-container) 0%, #fffc 100%);border-radius:var(--radius-xs);height:100%;transition:width var(--transition-slow) ease;box-shadow:0 0 10px #ffffff80}.progress-bar.is-mock[data-v-691919d3]{width:0%;animation:2.4s ease-in-out infinite mock-progress-691919d3}@keyframes spin-691919d3{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse-text-691919d3{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}@keyframes mock-progress-691919d3{0%{width:0%}50%{width:70%}to{width:100%}}.loading-fade-enter-active[data-v-691919d3],.loading-fade-leave-active[data-v-691919d3]{transition:var(--transition-ui-slow)}.loading-fade-enter-from[data-v-691919d3],.loading-fade-leave-to[data-v-691919d3]{opacity:0}.loading-fade-enter-to[data-v-691919d3],.loading-fade-leave-from[data-v-691919d3]{opacity:1}.loading-fade-enter-active .loading-container[data-v-691919d3],.loading-fade-leave-active .loading-container[data-v-691919d3]{transition:var(--transition-ui-slow)}.loading-fade-enter-from .loading-container[data-v-691919d3],.loading-fade-leave-to .loading-container[data-v-691919d3]{opacity:0;-webkit-backdrop-filter:blur();backdrop-filter:blur();transform:scale(.8)}.loading-fade-enter-to .loading-container[data-v-691919d3],.loading-fade-leave-from .loading-container[data-v-691919d3]{opacity:1;-webkit-backdrop-filter:blur(25px);backdrop-filter:blur(25px);transform:scale(1)}[data-theme=dark] .global-loading-overlay[data-v-691919d3]{background:#00000073}[data-theme=dark] .loading-container[data-v-691919d3]{background:linear-gradient(135deg,#161616e6 0%,#1c1c1ce6 100%);border:1px solid #ffffff14;box-shadow:0 12px 36px #0009}[data-theme=dark] .loading-text[data-v-691919d3]{color:#ffffffeb;text-shadow:0 2px 10px #0009}[data-theme=dark] .loading-progress[data-v-691919d3]{background:#ffffff1f}[data-theme=dark] .progress-bar[data-v-691919d3]{box-shadow:0 0 10px var(--tint-primary-45);background:linear-gradient(90deg,#409effd9 0%,#67c23ad9 100%)}.success-overlay[data-v-c3fad05d]{background:var(--dialog-overlay);-webkit-backdrop-filter:blur(10px);padding:var(--spacing-2xl);z-index:9999;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.success-container[data-v-c3fad05d]{background:var(--bg-container);border:1px solid var(--dialog-border-color);border-radius:var(--dialog-radius);width:min(92vw,420px);box-shadow:var(--dialog-shadow);text-align:center;flex-direction:column;align-items:center;gap:18px;padding:32px 30px 28px;display:flex}.success-icon[data-v-c3fad05d]{background:color-mix(in srgb, var(--color-success) 10%, var(--bg-container) 90%);width:76px;height:76px;box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--color-success) 18%, transparent 82%);border-radius:999px;justify-content:center;align-items:center;display:inline-flex}.success-svg[data-v-c3fad05d]{width:48px;height:48px}.success-circle[data-v-c3fad05d]{stroke:var(--color-success);stroke-width:2px;stroke-miterlimit:10;stroke-dasharray:166;stroke-dashoffset:166px;fill:none;animation:success-circle-animation-c3fad05d .58s var(--ease-enter) forwards}.success-check[data-v-c3fad05d]{stroke:var(--color-success);stroke-width:3px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:48;stroke-dashoffset:48px;animation:success-check-animation-c3fad05d .24s var(--ease-enter) .5s forwards}.success-text[data-v-c3fad05d]{max-width:18ch;font-size:clamp(20px,2vw,22px);font-weight:var(--font-weight-semibold);letter-spacing:var(--letter-spacing-heading);color:var(--text-title);margin:0;line-height:1.25}.success-description[data-v-c3fad05d]{max-width:28ch;font-size:var(--font-size-base);color:var(--text-secondary);line-height:var(--line-height-relaxed);margin:0}@keyframes success-circle-animation-c3fad05d{to{stroke-dashoffset:0}}@keyframes success-check-animation-c3fad05d{to{stroke-dashoffset:0}}.success-fade-enter-active[data-v-c3fad05d],.success-fade-leave-active[data-v-c3fad05d]{transition:opacity var(--transition-base) cubic-bezier(.22, 1, .36, 1)}.success-fade-enter-from[data-v-c3fad05d],.success-fade-leave-to[data-v-c3fad05d]{opacity:0}.success-fade-enter-to[data-v-c3fad05d],.success-fade-leave-from[data-v-c3fad05d]{opacity:1}.success-fade-enter-active .success-container[data-v-c3fad05d],.success-fade-leave-active .success-container[data-v-c3fad05d]{transition:opacity var(--transition-base) cubic-bezier(.22, 1, .36, 1), transform var(--transition-base) cubic-bezier(.22, 1, .36, 1)}.success-fade-enter-from .success-container[data-v-c3fad05d],.success-fade-leave-to .success-container[data-v-c3fad05d]{opacity:0;transform:translateY(8px)scale(.985)}.success-fade-enter-to .success-container[data-v-c3fad05d],.success-fade-leave-from .success-container[data-v-c3fad05d]{opacity:1;transform:translateY(0)scale(1)}.one-commit-button[data-v-91c441c2]{height:100%;background:linear-gradient(135deg, var(--color-primary-dark) 0%, color-mix(in srgb, var(--color-primary-dark) 78%, #000) 100%)!important;color:#fff!important;border:none!important}.one-commit-button .one-commit-icon[data-v-91c441c2],.one-commit-button .one-commit-title[data-v-91c441c2],.one-commit-button .one-commit-desc[data-v-91c441c2]{color:#fff}.one-commit-button.form[data-v-91c441c2]{width:100%;padding:4px 12px}.one-commit-button.drawer[data-v-91c441c2]{width:auto;height:32px}.one-commit-button .one-commit-content[data-v-91c441c2]{align-items:center;gap:6px;display:flex}.one-commit-button .one-commit-content .one-commit-icon[data-v-91c441c2]{font-size:var(--font-size-base)}.one-commit-button .one-commit-content .one-commit-text[data-v-91c441c2]{flex-direction:column;align-items:flex-start;gap:2px;display:flex}.one-commit-button .one-commit-content .one-commit-text .one-commit-title[data-v-91c441c2]{font-size:var(--font-size-mid)}.one-commit-button .one-commit-content .one-commit-text .one-commit-desc[data-v-91c441c2]{font-size:var(--font-size-xs);opacity:.9;letter-spacing:.1px;font-weight:400}[data-v-6dc84697] .el-button+.el-button{margin-left:0}[data-v-6dc84697] .el-button{border-radius:var(--radius-md);transition:var(--transition-ui-slow);font-weight:500;font-size:var(--font-size-sm);padding:6px 10px}[data-v-6dc84697] .el-button:hover{box-shadow:var(--shadow-md);transform:scale(1.02)}[data-v-6dc84697] .el-button:active{transform:scale(.98)}[data-v-6dc84697] .el-button:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}[data-v-6dc84697] .el-button.is-disabled{opacity:.4!important}[data-v-6dc84697] .el-button--primary{background:var(--color-primary);color:#fff;border:none}[data-v-6dc84697] .el-button--primary.is-disabled{background-color:var(--color-primary-light)!important;border-color:var(--color-primary-light)!important;opacity:.5!important}[data-v-6dc84697] .el-button--warning{background:var(--color-warning);color:#fff;border:none}[data-v-6dc84697] .el-button--warning.is-disabled{background-color:var(--color-warning)!important;border-color:var(--color-warning)!important;opacity:.5!important}[data-v-6dc84697] .left-actions .el-button{background:var(--bg-container);border:1px solid var(--border-color-medium);color:var(--text-secondary);box-shadow:none}[data-v-6dc84697] .left-actions .el-button:hover:not(.is-disabled){background:var(--soft-btn-bg-hover);border-color:var(--soft-btn-border-hover)}[data-v-6dc84697] .left-actions .el-button--primary.is-disabled{background-color:var(--bg-container)!important;border-color:var(--border-color-medium)!important;color:var(--text-disabled)!important;opacity:.6!important}.actions-flex-container[data-v-6dc84697]{justify-content:flex-start;align-items:center;gap:6px;display:flex}.left-actions[data-v-6dc84697]{align-self:center;display:flex}.button-grid[data-v-6dc84697]{gap:6px;display:flex}.right-actions[data-v-6dc84697]{align-items:stretch;gap:6px;height:36px;margin-left:auto;display:flex}.command-history-button[data-v-6ba10e2c]{width:36px;height:36px;padding:0}.history-scroll[data-v-6ba10e2c]{flex-grow:1;overflow-y:auto}.dialog-content .modern-btn[data-v-6ba10e2c]{color:#000c;background:#0000000d;border:1px solid #0000001a}.dialog-content .modern-btn[data-v-6ba10e2c]:hover{color:#000;background:#00000014;border-color:#00000026}.enhanced-btn[data-v-6ba10e2c]{min-width:60px;height:36px;padding:var(--spacing-base);border-radius:var(--radius-md);font-size:var(--font-size-sm);transition:var(--transition-ui-slow);gap:6px;font-weight:500;position:relative;overflow:hidden}.enhanced-btn .btn-text[data-v-6ba10e2c]{font-size:var(--font-size-sm);white-space:nowrap;z-index:1;font-weight:500;position:relative}.enhanced-btn .btn-icon[data-v-6ba10e2c]{font-size:var(--font-size-lg);z-index:1;position:relative}.danger-btn[data-v-6ba10e2c]{color:var(--color-danger);background:#f56c6c1a;border-color:#f56c6c33}.danger-btn[data-v-6ba10e2c]:before{background:linear-gradient(135deg,#f56c6c26 0%,#ff4d4f26 100%)}.danger-btn[data-v-6ba10e2c]:hover{color:var(--color-danger);box-shadow:var(--shadow-md);background:#f56c6c26;border-color:#f56c6c4d}.copy-commands-button[data-v-6ba10e2c],.copy-all-button[data-v-6ba10e2c],.clear-button[data-v-6ba10e2c]{min-width:70px;height:36px;font-weight:600}.dialog-toolbar .enhanced-btn[data-v-6ba10e2c]{color:#000000d9;box-shadow:var(--shadow-sm);background:#ffffffe6;border:1px solid #00000014}.dialog-toolbar .enhanced-btn[data-v-6ba10e2c]:hover{color:#000;box-shadow:var(--shadow-lg);background:#fff;border-color:#0000001f}[data-theme=dark] .dialog-toolbar .enhanced-btn[data-v-6ba10e2c]{background:var(--bg-container);color:var(--text-primary);border-color:var(--border-component);box-shadow:var(--shadow-md)}[data-theme=dark] .dialog-toolbar .enhanced-btn[data-v-6ba10e2c]:hover{background:var(--bg-container-hover);color:var(--color-white);border-color:var(--border-component-light);box-shadow:var(--shadow-lg)}.dialog-toolbar .danger-btn[data-v-6ba10e2c]{color:var(--color-danger);background:#f56c6c14;border-color:#f56c6c26}.dialog-toolbar .danger-btn[data-v-6ba10e2c]:hover{color:var(--color-danger);box-shadow:var(--shadow-md);background:#f56c6c1f;border-color:#f56c6c40}[data-theme=dark] .dialog-toolbar .danger-btn[data-v-6ba10e2c]{background:var(--action-coral);color:#fff;border-color:#e74c3c}[data-theme=dark] .dialog-toolbar .danger-btn[data-v-6ba10e2c]:hover{color:#fff;box-shadow:var(--shadow-lg);background:#e74c3c;border-color:#ff6b6b}.item-copy-button[data-v-6ba10e2c],.output-copy-button[data-v-6ba10e2c]{width:32px;height:32px;padding:0!important}.item-copy-button .btn-icon[data-v-6ba10e2c],.output-copy-button .btn-icon[data-v-6ba10e2c]{font-size:var(--font-size-md)}.item-copy-button .btn-text[data-v-6ba10e2c],.output-copy-button .btn-text[data-v-6ba10e2c]{display:none}.item-copy-button[data-v-6ba10e2c]:hover,.output-copy-button[data-v-6ba10e2c]:hover{box-shadow:var(--shadow-md);transform:scale(1.02)}.item-copy-button[data-v-6ba10e2c]:active,.output-copy-button[data-v-6ba10e2c]:active{box-shadow:var(--shadow-md);transform:scale(.98)}.item-copy-button[data-v-6ba10e2c]:focus-visible,.output-copy-button[data-v-6ba10e2c]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.expand-button[data-v-6ba10e2c]{width:32px;height:32px;color:var(--text-secondary);transition:transform var(--transition-slow) ease;justify-content:center;align-items:center;display:flex}.expand-button .btn-icon[data-v-6ba10e2c]{font-size:var(--font-size-md);transition:transform var(--transition-slow) ease}.enhanced-btn[data-v-6ba10e2c]:active{box-shadow:var(--shadow-md);transform:scale(.98)}.enhanced-btn[data-v-6ba10e2c]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.enhanced-btn[data-v-6ba10e2c]:disabled{opacity:.6;cursor:not-allowed;transform:none}.enhanced-btn[data-v-6ba10e2c]:disabled:hover{box-shadow:none;transform:none}.expand-button.is-expanded .btn-icon[data-v-6ba10e2c]{transform:rotate(180deg)}.command-history-dialog[data-v-6ba10e2c]{border-radius:var(--radius-lg);z-index:9999!important}[data-v-6ba10e2c] .command-history-dialog .el-overlay{z-index:9998!important}[data-v-6ba10e2c] .command-history-dialog .el-dialog{z-index:9999!important}.dialog-toolbar[data-v-6ba10e2c]{padding:var(--spacing-lg) var(--spacing-xl);justify-content:space-between;align-items:center;gap:var(--spacing-md);background:linear-gradient(135deg, var(--color-gray-soft) 0%, var(--border-component) 100%);border-radius:8px 8px 0 0;flex-wrap:wrap;display:flex}.filter-controls[data-v-6ba10e2c]{align-items:center;gap:var(--spacing-sm);flex:1;min-width:300px;display:flex}.filter-select[data-v-6ba10e2c]{width:120px}.search-input[data-v-6ba10e2c]{width:200px}.toolbar-actions[data-v-6ba10e2c]{align-items:center;gap:var(--spacing-sm);display:flex}[data-theme=dark] .dialog-toolbar[data-v-6ba10e2c]{background:linear-gradient(135deg,#ffffff0d 0%,#ffffff05 100%);border-bottom-color:#ffffff1a}[data-theme=dark] .filter-controls .el-input__wrapper[data-v-6ba10e2c],[data-theme=dark] .filter-controls .el-select .el-input__wrapper[data-v-6ba10e2c]{background-color:#0000004d;border-color:#ffffff1a}[data-theme=dark] .filter-controls .el-input__inner[data-v-6ba10e2c]{color:#ffffffe6}[data-theme=dark] .filter-controls .el-input__inner[data-v-6ba10e2c]::placeholder{color:#ffffff80}.socket-status[data-v-6ba10e2c]{font-size:var(--font-size-sm);margin-right:auto;font-weight:500}.loading-state[data-v-6ba10e2c]{flex-direction:column;justify-content:center;align-items:center;height:100%;min-height:100px;display:flex}.loading-icon[data-v-6ba10e2c]{color:var(--color-primary);margin-bottom:10px;font-size:36px}.loading-text[data-v-6ba10e2c]{color:var(--text-secondary)}.history-list[data-v-6ba10e2c]{gap:var(--spacing-base);flex-direction:column;flex:1;display:flex;overflow-y:auto}.history-item[data-v-6ba10e2c]{border:1px solid var(--border-card);border-radius:var(--radius-base);transition:var(--transition-ui-base);overflow:hidden}[data-theme=dark] .history-item[data-v-6ba10e2c]{background-color:#ffffff08;border-color:#ffffff1a}[data-theme=dark] .history-item[data-v-6ba10e2c]:hover{background-color:#ffffff14;border-color:#fff3}.history-item[data-v-6ba10e2c]:hover{box-shadow:0 2px 12px #0000001a}.history-item.is-error[data-v-6ba10e2c]{border-left:3px solid var(--color-danger)}.item-header[data-v-6ba10e2c]{padding:10px var(--spacing-md);cursor:pointer;transition:background-color var(--transition-base);justify-content:space-between;align-items:center;display:flex}.item-header[data-v-6ba10e2c]:hover{background-color:var(--bg-icon-hover)}.command-info[data-v-6ba10e2c]{flex:1;min-width:0;overflow:hidden}.command-text[data-v-6ba10e2c]{align-items:center;gap:var(--spacing-base);margin-bottom:var(--spacing-sm);display:flex}.command-text code[data-v-6ba10e2c]{font-family:Consolas,Courier New,monospace;font-size:var(--font-size-sm);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}[data-theme=dark] .command-text code[data-v-6ba10e2c]{color:#ffffffe6}.command-meta[data-v-6ba10e2c]{align-items:center;gap:var(--spacing-lg);font-size:var(--font-size-sm);color:var(--text-tertiary);display:flex}[data-theme=dark] .command-meta[data-v-6ba10e2c]{color:#fff9}.timestamp[data-v-6ba10e2c],.duration[data-v-6ba10e2c]{white-space:nowrap}.item-actions[data-v-6ba10e2c]{margin-left:var(--spacing-base);align-items:center;gap:6px;display:flex}.item-details[data-v-6ba10e2c]{padding:10px var(--spacing-md);border-top:1px solid var(--border-card);gap:var(--spacing-md);flex-direction:column;display:flex}[data-theme=dark] .item-details[data-v-6ba10e2c]{background-color:#ffffff05;border-top-color:#ffffff1a}.output-section[data-v-6ba10e2c]{flex-direction:column;gap:6px;display:flex}.output-section.error[data-v-6ba10e2c]{border-left:3px solid var(--color-danger);padding-left:var(--spacing-base)}.output-section[data-v-6ba10e2c]:not(.error){border-left:3px solid var(--color-success);padding-left:var(--spacing-base)}.output-header[data-v-6ba10e2c]{justify-content:space-between;align-items:center;display:flex}.output-header h4[data-v-6ba10e2c]{color:var(--text-secondary);margin:0;font-weight:500}[data-theme=dark] .output-header h4[data-v-6ba10e2c]{color:#fffc}.output-content[data-v-6ba10e2c]{border-radius:var(--radius-base);font-family:Consolas,Courier New,monospace;font-size:var(--font-size-sm);white-space:pre-wrap;word-break:break-all;border:1px solid var(--border-card);max-height:300px;margin:0;padding:10px;overflow-y:auto}[data-theme=dark] .output-content[data-v-6ba10e2c]{color:#ffffffe6;background-color:#0000004d;border-color:#ffffff1a}.status-tag[data-v-6ba10e2c]{flex-shrink:0}.truncation-notice[data-v-6ba10e2c]{margin-top:6px}.output-content[data-v-6ba10e2c]::-webkit-scrollbar{width:6px;height:6px}.output-content[data-v-6ba10e2c]::-webkit-scrollbar-thumb{background-color:var(--text-placeholder);border-radius:var(--radius-base)}.output-content[data-v-6ba10e2c]::-webkit-scrollbar-track{background-color:var(--bg-panel)}.command-history-dialog{z-index:1999!important}.el-overlay{z-index:1998!important}.header-left[data-v-300e12fc]{align-items:center;gap:var(--spacing-md);display:flex}.header-left h2[data-v-300e12fc]{margin:0}.header-right[data-v-300e12fc]{align-items:center;gap:var(--spacing-sm);display:flex}.card-content[data-v-300e12fc]{padding:var(--spacing-base);flex:1;overflow-y:auto}.layout-container[data-v-300e12fc]{gap:var(--spacing-base);flex-direction:column;height:100%;display:flex}.standard-commit-form[data-v-300e12fc]{gap:var(--spacing-base);margin-bottom:var(--spacing-base);flex-direction:column;display:flex}.standard-commit-header[data-v-300e12fc]{gap:var(--spacing-sm);flex-direction:column;width:100%;display:flex}.type-scope-container[data-v-300e12fc]{gap:var(--spacing-base);align-items:stretch;width:100%;display:flex}.type-select[data-v-300e12fc]{width:180px}.scope-wrapper[data-v-300e12fc]{align-items:center;gap:5px;width:130px;display:flex}.commit-form[data-v-300e12fc]{gap:var(--spacing-base);flex-direction:column;display:flex}.description-container[data-v-300e12fc]{border-radius:var(--radius-xl);width:100%;box-shadow:none;transition:var(--transition-ui-slow);background:0 0;align-items:center;gap:5px;display:flex}.description-container.description-inline[data-v-300e12fc]{min-width:0;box-shadow:none;background:0 0;flex:1}.description-container.description-inline[data-v-300e12fc]:hover,.description-container[data-v-300e12fc]:hover{box-shadow:none}[data-v-300e12fc] .description-input{flex-grow:1}[data-v-300e12fc] .description-input .el-input__wrapper{border-radius:var(--radius-lg);background:var(--input-bg);border:1px solid var(--input-border);box-shadow:none;transition:var(--transition-ui-fast);height:40px}[data-v-300e12fc] .description-input .el-input__wrapper:hover{border-color:var(--input-border-hover)}[data-v-300e12fc] .description-input .el-input__wrapper.is-focus{border-color:var(--input-border-focus);box-shadow:var(--focus-ring)}[data-v-300e12fc] .description-input .el-input__inner{height:34px;font-weight:500}[data-v-300e12fc] .description-input .el-input__inner::placeholder{color:var(--text-placeholder);font-weight:400}[data-v-300e12fc] .type-select .el-select__wrapper{border-radius:var(--radius-lg);background:var(--input-bg);border:1px solid var(--input-border);box-shadow:none;transition:var(--transition-ui-fast);height:40px}[data-v-300e12fc] .type-select .el-select__wrapper:hover{border-color:var(--input-border-hover)}[data-v-300e12fc] .type-select .el-select__wrapper.is-focus{border-color:var(--input-border-focus);box-shadow:var(--focus-ring)}[data-v-300e12fc] .type-select .el-select__inner{font-weight:500}[data-v-300e12fc] .type-select .el-select__inner::placeholder{color:var(--text-placeholder);font-weight:400}[data-v-300e12fc] .scope-input{flex-grow:1}[data-v-300e12fc] .scope-input .el-input__wrapper{border-radius:var(--radius-lg);background:var(--input-bg);border:1px solid var(--input-border);box-shadow:none;transition:var(--transition-ui-fast);height:40px}[data-v-300e12fc] .scope-input .el-input__wrapper:hover{border-color:var(--input-border-hover)}[data-v-300e12fc] .scope-input .el-input__wrapper.is-focus{border-color:var(--input-border-focus);box-shadow:var(--focus-ring)}[data-v-300e12fc] .scope-input .el-input__inner{font-weight:500}[data-v-300e12fc] .scope-input .el-input__inner::placeholder{color:var(--text-placeholder);font-weight:400}[data-v-300e12fc] .commit-message-input{border-radius:var(--radius-xl)}[data-v-300e12fc] .commit-message-input .el-textarea__inner{border-radius:var(--radius-lg);background:var(--input-bg);border:1px solid var(--input-border);box-shadow:none;transition:var(--transition-ui-fast);font-weight:500}[data-v-300e12fc] .commit-message-input .el-textarea__inner:hover{border-color:var(--input-border-hover)}[data-v-300e12fc] .commit-message-input .el-textarea__inner:focus-visible{border-color:var(--input-border-focus);box-shadow:var(--focus-ring);outline:none}[data-v-300e12fc] .commit-message-input .el-textarea__inner::placeholder{color:var(--text-placeholder);font-weight:400}[data-v-300e12fc] .commit-message-input:hover{box-shadow:none}.git-config-warning[data-v-300e12fc]{width:100%}.merge-in-progress-banner[data-v-300e12fc]{width:100%;margin-bottom:var(--spacing-base)}.config-command[data-v-300e12fc]{background-color:var(--bg-code-dark);color:#f8f8f2;font-family:var(--font-mono);padding:var(--spacing-base);border-radius:var(--radius-base);margin-top:var(--spacing-base);white-space:pre}.advanced-options-toggle[data-v-300e12fc]{font:inherit;color:inherit;text-align:left;background:0 0;background-color:var(--bg-panel);border-radius:var(--radius-base);cursor:pointer;width:100%;transition:var(--transition-ui-slow);-webkit-user-select:none;user-select:none;border:none;justify-content:center;align-items:center;padding:7px 0 6px;display:flex}.advanced-options-toggle[data-v-300e12fc]:hover{background-color:var(--border-card);color:var(--color-primary)}.toggle-icon[data-v-300e12fc]{margin-left:var(--spacing-base);transition:transform var(--transition-slow) ease;font-size:var(--font-size-sm)}.toggle-icon.is-active[data-v-300e12fc]{transform:rotate(180deg)}.advanced-fields[data-v-300e12fc]{gap:var(--spacing-base);animation:fade-in-300e12fc var(--transition-slow) ease-in-out;flex-direction:column;display:flex}@keyframes fade-in-300e12fc{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.commit-section[data-v-300e12fc]{flex:1;width:100%;min-width:0}.is-loading[data-v-300e12fc]{animation:2s linear infinite rotating-300e12fc}@keyframes rotating-300e12fc{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.save-btn[data-v-300e12fc]{border-radius:var(--radius-md);min-width:100px;transition:var(--transition-ui-slow);font-weight:500}.save-btn[data-v-300e12fc]:hover{box-shadow:var(--shadow-md);transform:scale(1.02)}.save-btn[data-v-300e12fc]:active{transform:scale(.98)}.save-btn[data-v-300e12fc]:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import"./rolldown-runtime-C0FnF6B9.js";import{$ as e,A as t,Bt as n,C as r,Cn as i,Dn as a,En as o,Er as s,F as c,G as l,Gt as u,H as d,Ht as f,I as p,Jn as m,K as h,L as g,Lt as _,Mn as v,Ot as y,P as b,Pn as x,Pr as S,Qn as C,Qr as w,Rn as T,Rt as E,S as D,T as O,Tn as k,Tt as A,U as j,Ut as M,V as N,W as P,X as ee,Xn as F,Yn as I,Yr as L,_ as te,a as R,at as ne,br as z,cr as B,en as V,et as re,ft as H,gn as ie,i as ae,it as oe,j as se,jn as U,jt as ce,ln as W,lr as le,o as ue,or as G,ot as de,pr as K,pt as fe,q as pe,qr as q,rt as me,sn as he,st as ge,vn as _e,vr as ve,w as ye,wn as J,x as be,xn as xe,yn as Y,z as Se}from"./element-plus-Bx3j6vzG.js";import{g as Ce}from"./vendor-CyWsJd6S.js";import{n as X,t as Z}from"./_plugin-vue_export-helper-N8Vc5eEs.js";import{t as we}from"./IconButton-CFJkDLVG.js";import{r as Te,t as Ee}from"./configStore-BFb0I8eP.js";import{i as De,r as Q}from"./gitStore-grKwgyHH.js";import{t as Oe}from"./CommonDialog-DMWtstZq.js";import{t as ke}from"./TemplateManager-XoPZv_i6.js";import{_ as Ae,b as je,g as Me,h as Ne,v as Pe,x as Fe,y as Ie}from"./index-BHYAwndE.js";T(),K(),S();var Le={key:0},Re={key:1},ze=Z(x({__name:`StageButton`,props:{from:{default:`form`}},emits:[`click`],setup(e,{emit:t}){let n=t,r=Q(),c=Ee();function l(e){let t=e.replace(/\\/g,`/`);return c.lockedFiles.some(e=>{let n=e.replace(/\\/g,`/`);return t===n})}function u(){return c.lockedFiles.length!==0&&r.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)?l(e.path):!1)}let f=i(()=>r.fileList.filter(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!l(e.path)).length),p=i(()=>r.fileList.some(e=>[`modified`,`deleted`,`untracked`].includes(e.type)&&!l(e.path))),m=i(()=>r.isSelectionMode&&r.hasSelectableFiles),h=i(()=>r.selectedUnstagedPaths.length),y=i(()=>r.isSelectionMode?h.value===0:!p.value),b=i(()=>m.value?`${X(`@29974:暂存所选 `)}${h.value}${X(`@29974: 个文件`)}`:p.value?u()?`${X(`@29974:暂存`)}${f.value}${X(`@29974:个未暂存文件(逐个添加)`)}`:`${X(`@29974:暂存所有更改(git add .)`)}`:X(`@29974:没有需要暂存的更改`));async function x(){n(`click`);try{if(m.value){await r.stageFiles(r.selectedUnstagedPaths);return}if(r.isSelectionMode)return;u()?await r.addToStage():await r.addAllToStage()}catch(e){console.error(`添加文件失败:`,e)}}return(t,n)=>{let i=g,c=d;return F(),k(c,{content:b.value,placement:`top`},{default:B(()=>[v(i,{type:`primary`,icon:s(_),onClick:x,loading:s(r).isAddingFiles,disabled:y.value,class:q([`stage-button`,`from-${e.from}`,{"is-selective":m.value}])},{default:B(()=>[U(w(m.value?s(X)(`@29974:暂存所选`):s(X)(`@29974:暂存`))+` `,1),m.value?(F(),a(`span`,Le,`(`+w(h.value)+`)`,1)):f.value>0?(F(),a(`span`,Re,`(`+w(f.value)+`)`,1)):o(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`class`])]),_:1},8,[`content`])}}}),[[`__scopeId`,`data-v-7c59a857`]]);T(),K(),S();var Be={key:0},Ve=Z(x({__name:`CommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`click`,`beforeCommit`,`afterCommit`],setup(t,{emit:n}){let r=t,c=n,l=Q(),u=Ee(),f=i(()=>l.fileList.filter(e=>e.type===`added`&&!Fe(e.path,u.lockedFiles)).length),p=i(()=>f.value>0),m=i(()=>l.hasConflictedFiles||l.isCommiting?!0:l.isMergeInProgress?!r.hasUserCommitMessage:!p.value||!r.hasUserCommitMessage),h=i(()=>l.isCommiting?X(`@76A11:正在提交中…`):l.hasConflictedFiles?X(`@76A11:存在冲突文件,请先解决冲突`):l.isMergeInProgress?r.hasUserCommitMessage?X(`@76A11:提交并完成合并`):X(`@76A11:请输入提交信息`):p.value?r.hasUserCommitMessage?`${X(`@76A11:提交`)}${f.value}${X(`@76A11:个已暂存文件`)}`:X(`@76A11:请输入提交信息`):X(`@76A11:没有已暂存的更改`)),_=i(()=>l.isCommiting?X(`@76A11:提交中…`):X(`@76A11:提交`));async function b(){if(r.finalCommitMessage.trim()){c(`beforeCommit`),c(`click`);try{let e=await l.commitChanges(r.finalCommitMessage,r.skipHooks);c(`afterCommit`,e)}catch(e){console.error(`提交失败:`,e),c(`afterCommit`,!1)}}}return(n,r)=>{let i=g,c=d;return F(),k(c,{content:h.value,placement:`top`,disabled:s(l).isCommiting},{default:B(()=>[v(i,{type:`primary`,onClick:b,icon:s(l).isCommiting?s(y):s(e),loading:s(l).isCommiting,disabled:m.value,"aria-busy":s(l).isCommiting?`true`:void 0,"aria-label":s(l).isCommiting?s(X)(`@76A11:正在提交中…`):void 0,class:q([`commit-button`,`from-${t.from}`,{"is-committing":s(l).isCommiting}])},{default:B(()=>[U(w(_.value)+` `,1),f.value>0&&!s(l).isCommiting?(F(),a(`span`,Be,`(`+w(f.value)+`)`,1)):o(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`aria-busy`,`aria-label`,`class`])]),_:1},8,[`content`,`disabled`])}}}),[[`__scopeId`,`data-v-056f6f5d`]]);T(),K(),S();var He={class:`push-progress-container`},Ue={key:0,class:`pulling-section`},We={class:`pulling-text-wrap`},Ge={class:`pulling-title`},Ke={class:`pulling-sub`},qe={class:`stage-header`},Je={class:`stage-icon`},Ye={class:`stage-info`},Xe={class:`stage-label`},Ze={key:0,class:`stage-percent`},Qe={key:0,class:`stage-progress`},$e={key:2,class:`error-section`},et={class:`error-header`},tt={class:`error-title`},nt={class:`error-content`},rt={key:0,class:`error-suggestion`},it={key:3,class:`messages-section`},at={class:`messages-title`},ot=Z(x({__name:`PushProgressModal`,props:{modelValue:{type:Boolean}},emits:[`update:modelValue`,`complete`,`pull-requested`],setup(e,{expose:t,emit:n}){let{t:r}=Ce(),c=e,l=n,u=Ee(),d=Q(),f=z(`progress`),p=z([]),m=z(``),_=z(!1),b=i(()=>m.value.includes(`non-fast-forward`)||m.value.includes(`rejected`)&&m.value.includes(`fetch first`)),x=z(!1);async function S(){x.value=!0;try{(await d.gitPull()).success&&(O.value=!1,l(`pull-requested`))}finally{x.value=!1}}let T=ve([{name:`counting`,label:r(`@PUSH:计数对象`),status:`wait`,percent:0},{name:`compressing`,label:r(`@PUSH:压缩对象`),status:`wait`,percent:0},{name:`writing`,label:r(`@PUSH:写入对象`),status:`wait`,percent:0},{name:`resolving`,label:r(`@PUSH:解析增量`),status:`wait`,percent:0}]),E=z(0),D=z(null),O=i({get:()=>c.modelValue,set:e=>l(`update:modelValue`,e)}),A=i(()=>{if(_.value)return r(`@PUSH:正在拉取远程更新`);switch(f.value){case`progress`:return r(`@PUSH:正在推送`);case`success`:return r(`@PUSH:推送成功`);case`error`:return r(`@PUSH:推送失败`);default:return``}});function j(e){switch(e.type){case`progress`:e.message&&(p.value.push(e.message),setTimeout(()=>{D.value&&(D.value.scrollTop=D.value.scrollHeight)},0));break;case`stage-progress`:if(e.stage&&typeof e.percent==`number`){let t=T.findIndex(t=>t.name===e.stage);t!==-1&&(T[t].percent=e.percent,T[t].status=e.percent===100?`finish`:`process`,E.value=t,e.percent===100&&t<T.length-1&&(T[t+1].status=`wait`))}break;case`complete`:e.success?(f.value=`success`,T.forEach(e=>{(e.status===`process`||e.status===`wait`)&&(e.status=`finish`,e.percent=100)}),E.value=-1,u.autoClosePushModal?setTimeout(()=>{O.value=!1,l(`complete`,!0)},2e3):l(`complete`,!0)):(f.value=`error`,m.value=De(e),E.value<T.length&&(T[E.value].status=`error`),E.value=-1,l(`complete`,!1))}}function M(){f.value=`progress`,p.value=[],m.value=``,E.value=0,_.value=!1,T.forEach(e=>{e.status=`wait`,e.percent=0})}function N(e){_.value=e}return t({handleProgress:j,reset:M,setPulling:N}),(e,t)=>{let n=g;return F(),k(Oe,{modelValue:O.value,"onUpdate:modelValue":t[0]||=e=>O.value=e,title:A.value,width:`650px`,type:`flex`,"close-on-click-modal":!1,"close-on-press-escape":!1,"show-close":f.value!==`progress`,"append-to-body":!0,"lock-scroll":!1,"destroy-on-close":``,"custom-class":`push-progress-dialog status-${f.value}`},{default:B(()=>[J(`div`,He,[_.value?(F(),a(`div`,Ue,[t[1]||=J(`div`,{class:`pulling-icon-wrap`},[J(`svg`,{class:`pulling-spinner`,viewBox:`0 0 50 50`},[J(`circle`,{class:`pulling-spinner-track`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`}),J(`circle`,{class:`pulling-spinner-arc`,cx:`25`,cy:`25`,r:`20`,fill:`none`,"stroke-width":`4`})])],-1),J(`div`,We,[J(`div`,Ge,w(s(r)(`@PUSH:正在拉取远程更新`)),1),J(`div`,Ke,w(s(r)(`@PUSH:拉取完成后自动继续推送`)),1)])])):(F(),a(`div`,{key:1,class:q([`stages-section`,{"is-loading":f.value===`progress`,"is-success":f.value===`success`}])},[(F(!0),a(Y,null,C(T,(e,t)=>(F(),a(`div`,{key:e.name,class:q([`stage-item`,{active:E.value===t,finished:e.status===`finish`,error:e.status===`error`}])},[J(`div`,qe,[J(`div`,Je,[e.status===`finish`?(F(),k(s(h),{key:0,class:`icon-finish`},{default:B(()=>[v(s(re))]),_:1})):e.status===`error`?(F(),k(s(h),{key:1,class:`icon-error`},{default:B(()=>[v(s(oe))]),_:1})):e.status===`process`?(F(),k(s(h),{key:2,class:`icon-process rotating`},{default:B(()=>[v(s(y))]),_:1})):(F(),k(s(h),{key:3,class:`icon-wait`},{default:B(()=>[v(s(y))]),_:1}))]),J(`div`,Ye,[J(`div`,Xe,w(e.label),1),e.status===`process`||e.status===`finish`?(F(),a(`div`,Ze,w(e.percent)+`% `,1)):o(``,!0)])]),e.status===`process`||e.status===`finish`?(F(),a(`div`,Qe,[v(s(te),{percentage:e.percent,"stroke-width":6,"show-text":!1,color:e.status===`finish`?`var(--color-success)`:`var(--color-primary)`},null,8,[`percentage`,`color`])])):o(``,!0)],2))),128))],2)),f.value===`error`&&m.value?(F(),a(`div`,$e,[J(`div`,et,[J(`div`,tt,w(s(r)(`@PUSH:错误详情`))+`:`,1),b.value?(F(),k(n,{key:0,type:`primary`,size:`small`,loading:x.value,onClick:S,class:`pull-button`},{default:B(()=>[v(s(h),null,{default:B(()=>[v(s(H))]),_:1}),U(` `+w(s(r)(`@PUSH:先拉取更新`)),1)]),_:1},8,[`loading`])):o(``,!0)]),J(`div`,nt,w(m.value),1),b.value?(F(),a(`div`,rt,w(s(r)(`@PUSH:检测到远程有新提交,请先拉取更新后再推送。`)),1)):o(``,!0)])):o(``,!0),p.value.length>0?(F(),a(`div`,it,[J(`div`,at,w(s(r)(`@PUSH:详细信息`))+`:`,1),J(`div`,{ref_key:`messagesContainerRef`,ref:D,class:`progress-messages`},[(F(!0),a(Y,null,C(p.value,(e,t)=>(F(),a(`div`,{key:t,class:`message-item`},w(e),1))),128))],512)])):o(``,!0)])]),_:1},8,[`modelValue`,`title`,`show-close`,`custom-class`])}}}),[[`__scopeId`,`data-v-3d7c968a`]]);T(),K(),S();var st={class:`push-button-group`},ct={key:0},lt={class:`push-remote-item`},ut=Z(x({__name:`PushButton`,props:{from:{default:`form`}},emits:[`click`,`beforePush`,`afterPush`],setup(e,{emit:t}){let n=t,c=Q(),l=z(!1),u=z(null),f=i(()=>c.branchAhead>0),m=i(()=>c.fileList.some(e=>e.type===`added`)),h=i(()=>!c.hasConflictedFiles&&c.hasUpstream&&f.value&&!m.value),_=i(()=>!h.value),y=i(()=>c.hasConflictedFiles?X(`@F4137:存在冲突文件,请先解决冲突`):c.hasUpstream?f.value?m.value?X(`@F4137:有未提交的暂存更改,请先提交`):`${X(`@F4137:推送`)}${c.branchAhead}${X(`@F4137:个本地提交`)}`:X(`@F4137:没有需要推送的提交`):X(`@F4137:当前分支没有上游分支`)),b=i(()=>h.value?{backgroundColor:`var(--tint-success-14)`,borderColor:`var(--color-success)`,color:`var(--text-primary)`}:{});async function x(){n(`beforePush`),n(`click`);try{l.value=!0,u.value&&u.value.reset();let e=await c.pushToRemoteWithProgress(e=>{u.value&&u.value.handleProgress(e)});e&&await new Promise(e=>setTimeout(e,200)),n(`afterPush`,e)}catch(e){console.error(`推送失败:`,e),n(`afterPush`,!1)}}function S(e){}let T=i(()=>[...c.remotes].sort((e,t)=>e.isUpstream===t.isUpstream?e.name.localeCompare(t.name):e.isUpstream?-1:1));async function E(e){if(e===`manage`){c.isRemoteManagerVisible=!0;return}if(e===`push-all`){await c.pushAllRemotes();return}if(!e.startsWith(`push:`))return;let t=e.slice(5);n(`beforePush`);try{l.value=!0,u.value?.reset();let e=await c.pushToRemoteWithProgress(e=>{u.value?.handleProgress(e)},t);n(`afterPush`,e)}catch(e){console.error(`推送失败:`,e),n(`afterPush`,!1)}}return(t,n)=>{let i=g,m=d,h=p,O=r,A=ye,j=D;return F(),a(`div`,null,[J(`div`,st,[v(m,{content:y.value,placement:`top`},{default:B(()=>[v(i,{type:`primary`,icon:s(V),onClick:x,loading:s(c).isPushing,disabled:_.value,style:L(b.value),class:q([`push-button`,`from-${e.from}`])},{default:B(()=>[U(w(s(X)(`@F4137:推送`))+` `,1),f.value?(F(),a(`span`,ct,`(`+w(s(c).branchAhead)+`)`,1)):o(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`,`class`])]),_:1},8,[`content`]),s(c).hasMultipleRemotes?(F(),k(j,{key:0,trigger:`click`,placement:`top-end`,onCommand:E},{dropdown:B(()=>[v(A,null,{default:B(()=>[(F(!0),a(Y,null,C(T.value,e=>(F(),k(O,{key:e.name,command:`push:${e.name}`},{default:B(()=>[J(`span`,lt,[J(`span`,null,w(s(X)(`@F4137:推送到`))+` `+w(e.name),1),e.isUpstream?(F(),k(h,{key:0,size:`small`,type:`success`,effect:`plain`},{default:B(()=>[U(w(s(X)(`@F4137:上游`)),1)]),_:1})):o(``,!0)])]),_:2},1032,[`command`]))),128)),v(O,{divided:``,command:`push-all`},{default:B(()=>[U(w(s(X)(`@F4137:推送到全部远程`)),1)]),_:1}),v(O,{divided:``,command:`manage`},{default:B(()=>[U(w(s(X)(`@F4137:管理远程…`)),1)]),_:1})]),_:1})]),default:B(()=>[v(i,{type:`primary`,icon:s(pe),style:L(b.value),class:q([`push-button__caret`,`from-${e.from}`]),"aria-label":s(X)(`@F4137:更多推送选项`)},null,8,[`icon`,`style`,`class`,`aria-label`])]),_:1})):o(``,!0)]),v(ot,{ref_key:`progressModalRef`,ref:u,modelValue:l.value,"onUpdate:modelValue":n[0]||=e=>l.value=e,onComplete:S},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-ed54022f`]]);T(),K(),S();var dt={class:`one-push-content`},ft={class:`one-push-text`},pt={class:`one-push-title`},mt={key:0,class:`one-push-desc`},ht=Z(x({__name:`QuickPushButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforePush`,`pushStart`,`afterPush`,`clearFields`],setup(e,{expose:t,emit:n}){let r=Q(),c=Ee(),l=z(!1),u=z(null),f=e,p=n,m=i(()=>r.fileList.some(e=>!Fe(e.path,c.lockedFiles))),_=i(()=>r.isSelectionMode&&r.selectedFiles.size>0&&r.selectedUnstagedPaths.length>0),y=i(()=>r.hasConflictedFiles?!0:r.isSelectionMode?!_.value||!f.hasUserCommitMessage||!r.hasUpstream:!m.value&&r.branchAhead===0||!f.hasUserCommitMessage||!r.hasUpstream),b=i(()=>r.isAddingFiles||r.isCommiting||r.isPushing),x=i(()=>{if(r.hasConflictedFiles)return X(`@2E184:存在冲突文件,请先解决冲突`);if(r.isSelectionMode)return r.selectedFiles.size===0?X(`@2E184:请先勾选要推送的文件`):r.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):f.hasUserCommitMessage?r.hasUpstream?X(`@2E184:一键完成:仅暂存所选文件 → 提交 → 推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`);let e=r.branchAhead>0;return!m.value&&!e?X(`@2E184:没有需要提交或推送的更改`):f.hasUserCommitMessage?r.hasUpstream?m.value?X(`@2E184:一键完成:暂存所有更改 → 提交 → 推送到远程仓库`):X(`@2E184:本地已提交,一键推送到远程仓库`):X(`@2E184:当前分支没有上游分支`):X(`@2E184:请输入提交信息`)}),S=i(()=>r.isSelectionMode&&_.value?X(`@2E184:一键推送所选`):X(`@2E184:一键推送所有`)),C=i(()=>f.from===`form`?r.isSelectionMode&&_.value?X(`@2E184:暂存所选 + 提交 + 推送`):X(`@2E184:暂存 + 提交 + 推送`):``);async function T(){p(`beforePush`);try{let e=r.isSelectionMode&&_.value;if((e||m.value)&&!(e?await r.stageSelectedAndCommit(f.finalCommitMessage,f.skipHooks):await r.addAndCommit(f.finalCommitMessage,f.skipHooks))){p(`afterPush`,!1);return}if(p(`pushStart`),l.value=!0,c.pullBeforePush){u.value?.setPulling(!0);let e=await r.gitPull();if(u.value?.setPulling(!1),!e.success){R.error(X(`@2E184:拉取远程更新失败,已停止推送`)),l.value=!1,r.fetchStatus(),r.getBranchStatus(!0),p(`afterPush`,!1);return}}u.value&&u.value.reset();let t=await r.pushToRemoteWithProgress(e=>{u.value&&u.value.handleProgress(e)});if(t){try{window.dispatchEvent(new CustomEvent(`zen-gitsync:after-quick-push-success`))}catch{}p(`clearFields`)}p(`afterPush`,t)}catch(e){console.error(`一键推送失败:`,e),p(`afterPush`,!1)}}t({triggerQuickPush:T});function D(e){}return(t,n)=>{let r=h,i=g;return F(),a(`div`,null,[v(s(d),{content:x.value,placement:`top`,"show-after":200},{default:B(()=>[v(i,{type:`primary`,onClick:T,loading:b.value,disabled:y.value,class:q([e.from,`one-push-button`])},{default:B(()=>[J(`div`,dt,[v(r,{class:`one-push-icon`},{default:B(()=>[v(s(E))]),_:1}),J(`div`,ft,[J(`span`,pt,w(S.value),1),e.from===`form`?(F(),a(`span`,mt,w(C.value),1)):o(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`]),v(ot,{ref_key:`progressModalRef`,ref:u,modelValue:l.value,"onUpdate:modelValue":n[0]||=e=>l.value=e,onComplete:D,onPullRequested:T},null,8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-c8c92c10`]]);T(),K(),S();var gt={class:`create-tag-button`},_t={class:`tag-dialog-content`},vt={class:`tag-info-card`},yt={class:`info-icon`},bt={class:`info-content`},xt={class:`form-tip`},St={class:`form-tip`},Ct={class:`form-tip`},wt=Z(x({__name:`CreateTagButton`,props:{variant:{default:`icon`}},setup(e){let n=e,r=Q(),c=z(!1),l=z(``),f=z(``),p=z(`lightweight`),m=z(``),_=z(!1);function y(){l.value=``,f.value=``,p.value=`lightweight`,m.value=``,c.value=!0}async function b(){if(!l.value.trim()){R.warning(X(`@TAG01:请输入标签名称`));return}if(!/^[a-zA-Z0-9._\/-]+$/.test(l.value)){R.warning(X(`@TAG01:标签名称只能包含字母、数字、点、下划线、斜杠和连字符`));return}try{_.value=!0;let e=await(await fetch(`/api/create-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:l.value.trim(),message:f.value.trim(),type:p.value,commit:m.value.trim()})})).json();e.success?(R.success(X(`@TAG01:标签创建成功`)),c.value=!1):R.error(e.error||X(`@TAG01:创建标签失败`))}catch(e){console.error(`创建标签失败:`,e),R.error(X(`@TAG01:创建标签失败`))}finally{_.value=!1}}let x=i(()=>p.value===`lightweight`?X(`@TAG01:轻量标签是指向提交对象的引用,不包含额外信息`):X(`@TAG01:附注标签是完整的Git对象,包含标签信息、日期、标签者和可选的签名`));return(e,i)=>{let S=h,C=g,T=d,E=N,D=P,O=t,M=se,ee=j;return F(),a(`div`,gt,[v(T,{content:s(X)(`@TAG01:为当前提交创建标签`),placement:`top`,"show-after":200,disabled:n.variant===`text`},{default:B(()=>[v(C,{type:`success`,onClick:y,disabled:!s(r).isGitRepo,circle:n.variant===`icon`,size:n.variant===`icon`?`small`:`default`,class:q(n.variant===`text`?`action-button`:``)},{default:B(()=>[n.variant===`icon`?(F(),k(S,{key:0},{default:B(()=>[v(s(u))]),_:1})):(F(),a(Y,{key:1},[U(w(s(X)(`@TAG01:创建标签`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),v(Oe,{modelValue:c.value,"onUpdate:modelValue":i[4]||=e=>c.value=e,title:s(X)(`@TAG01:创建 Git 标签`),size:`medium`,"close-on-click-modal":!1,"show-footer":``,"confirm-text":s(X)(`@TAG01:创建`),"cancel-text":s(X)(`@TAG01:取消`),"confirm-loading":_.value,"custom-class":`tag-dialog`,onConfirm:b},{default:B(()=>[J(`div`,_t,[J(`div`,vt,[J(`div`,yt,[v(S,null,{default:B(()=>[v(s(u))]),_:1})]),J(`div`,bt,[J(`h4`,null,w(s(X)(`@TAG01:Git 标签`)),1),J(`p`,null,w(s(X)(`@TAG01:标签用于标记项目的重要版本点,如发布版本 v1.0.0`)),1)])]),v(ee,{"label-position":`top`,class:`tag-form`},{default:B(()=>[v(D,{label:s(X)(`@TAG01:标签名称`),required:``},{default:B(()=>[v(E,{modelValue:l.value,"onUpdate:modelValue":i[0]||=e=>l.value=e,placeholder:s(X)(`@TAG01:例如: v1.0.0 或 release-2024`),clearable:``,maxlength:`100`},{prefix:B(()=>[v(S,null,{default:B(()=>[v(s(u))]),_:1})]),_:1},8,[`modelValue`,`placeholder`]),J(`div`,xt,[v(S,null,{default:B(()=>[v(s(A))]),_:1}),J(`span`,null,w(s(X)(`@TAG01:建议使用语义化版本号,如 v1.0.0`)),1)])]),_:1},8,[`label`]),v(D,{label:s(X)(`@TAG01:标签类型`)},{default:B(()=>[v(M,{modelValue:p.value,"onUpdate:modelValue":i[1]||=e=>p.value=e,size:`default`},{default:B(()=>[v(O,{value:`lightweight`},{default:B(()=>[U(w(s(X)(`@TAG01:轻量标签`)),1)]),_:1}),v(O,{value:`annotated`},{default:B(()=>[U(w(s(X)(`@TAG01:附注标签`)),1)]),_:1})]),_:1},8,[`modelValue`]),J(`div`,St,[v(S,null,{default:B(()=>[v(s(A))]),_:1}),J(`span`,null,w(x.value),1)])]),_:1},8,[`label`]),p.value===`annotated`?(F(),k(D,{key:0,label:s(X)(`@TAG01:标签说明`),required:p.value===`annotated`},{default:B(()=>[v(E,{modelValue:f.value,"onUpdate:modelValue":i[2]||=e=>f.value=e,placeholder:s(X)(`@TAG01:为此标签添加说明信息`),clearable:``,rows:3,type:`textarea`,resize:`none`,maxlength:`500`,"show-word-limit":``},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`,`required`])):o(``,!0),v(D,{label:s(X)(`@TAG01:目标提交(可选)`)},{default:B(()=>[v(E,{modelValue:m.value,"onUpdate:modelValue":i[3]||=e=>m.value=e,placeholder:s(X)(`@TAG01:留空则为当前HEAD,或输入commit SHA`),clearable:``,maxlength:`40`},{prefix:B(()=>[...i[5]||=[J(`span`,{class:`commit-prefix`},`commit:`,-1)]]),_:1},8,[`modelValue`,`placeholder`]),J(`div`,Ct,[v(S,null,{default:B(()=>[v(s(A))]),_:1}),J(`span`,null,w(s(X)(`@TAG01:默认为当前HEAD提交,也可以指定历史提交`)),1)])]),_:1},8,[`label`])]),_:1})])]),_:1},8,[`modelValue`,`title`,`confirm-text`,`cancel-text`,`confirm-loading`])])}}}),[[`__scopeId`,`data-v-871521cb`]]);T(),K(),S();var Tt={class:`tag-list-button`},Et={class:`tag-list-content`},Dt={key:0,class:`tag-header`},Ot={class:`tag-stats`},kt={class:`stat-item`},At={class:`stat-number`},jt={class:`stat-label`},Mt={class:`tag-actions-header`},Nt={class:`tag-list-container`},Pt={key:0,class:`empty-state`},Ft={class:`empty-text`},It={class:`empty-hint`},Lt={key:1,class:`tag-cards`},Rt={class:`tag-card-content`},zt={class:`tag-info`},Bt={class:`tag-main-info`},Vt={class:`tag-name-badge`},Ht={class:`tag-name-text`},Ut={class:`tag-meta`},Wt={class:`tag-commit`},Gt={class:`tag-date`},Kt={key:0,class:`tag-message`},qt={class:`tag-card-actions`},Jt={key:0,class:`tag-detail-content`},Yt={class:`detail-row`},Xt={class:`detail-label`},Zt={class:`detail-value`},Qt={class:`detail-row`},$t={class:`detail-label`},en={class:`detail-value`},tn={class:`detail-row`},nn={class:`detail-label`},rn={class:`detail-value`},an={class:`detail-row`},on={class:`detail-label`},sn={key:0,class:`detail-row detail-message`},cn={class:`detail-label`},ln={class:`message-content`},un=Z(x({__name:`TagListButton`,props:{variant:{default:`icon`}},setup(e){let t=e,r=Q(),i=z(!1),c=z([]),l=z(!1),f=z(!1),m=z(!1),_=z(!1),y=z(null);async function b(){i.value=!0,await x()}async function x(){try{l.value=!0;let e=await(await fetch(`/api/list-tags`)).json();e.success?c.value=e.tags||[]:R.error(e.error||X(`@TAG01:获取标签列表失败`))}catch(e){console.error(`获取标签列表失败:`,e),R.error(X(`@TAG01:获取标签列表失败`))}finally{l.value=!1}}function S(e){y.value=e,_.value=!0}async function T(e){ae.confirm(X(`@TAG01:确定要推送此标签到远程仓库吗?`),X(`@TAG01:推送标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{m.value=!0;let t=await(await fetch(`/api/push-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?R.success(X(`@TAG01:标签推送成功`)):R.error(t.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),R.error(X(`@TAG01:推送标签失败`))}finally{m.value=!1}}).catch(()=>{})}async function E(){ae.confirm(X(`@TAG01:确定要推送所有标签到远程仓库吗?`),X(`@TAG01:推送所有标签`),{confirmButtonText:X(`@TAG01:推送`),cancelButtonText:X(`@TAG01:取消`),type:`info`}).then(async()=>{try{m.value=!0;let e=await(await fetch(`/api/push-all-tags`,{method:`POST`})).json();e.success?R.success(X(`@TAG01:所有标签推送成功`)):R.error(e.error||X(`@TAG01:推送标签失败`))}catch(e){console.error(`推送标签失败:`,e),R.error(X(`@TAG01:推送标签失败`))}finally{m.value=!1}}).catch(()=>{})}async function D(e){ae.confirm(X(`@TAG01:确定要删除此标签吗?此操作不可恢复。`),X(`@TAG01:删除标签`),{confirmButtonText:X(`@TAG01:删除`),cancelButtonText:X(`@TAG01:取消`),type:`warning`}).then(async()=>{await O(e)}).catch(()=>{})}async function O(e){try{f.value=!0;let t=await(await fetch(`/api/delete-tag`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({tagName:e})})).json();t.success?(R.success(X(`@TAG01:标签删除成功`)),await x()):R.error(t.error||X(`@TAG01:删除标签失败`))}catch(e){console.error(`删除标签失败:`,e),R.error(X(`@TAG01:删除标签失败`))}finally{f.value=!1}}function j(e){if(!e)return`-`;try{return new Date(e).toLocaleString(`zh-CN`,{year:`numeric`,month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}catch{return e}}return(e,O)=>{let M=h,N=g,P=d,ee=be,I=p,L=ue;return F(),a(`div`,Tt,[v(P,{content:s(X)(`@TAG01:查看和管理所有标签`),placement:`top`,"show-after":200,disabled:t.variant===`text`},{default:B(()=>[v(N,{type:`info`,onClick:b,disabled:!s(r).isGitRepo,circle:t.variant===`icon`,size:t.variant===`icon`?`small`:`default`,class:q(t.variant===`text`?`action-button`:``)},{default:B(()=>[t.variant===`icon`?(F(),k(M,{key:0},{default:B(()=>[v(s(u))]),_:1})):(F(),a(Y,{key:1},[U(w(s(X)(`@TAG01:标签列表`)),1)],64))]),_:1},8,[`disabled`,`circle`,`size`,`class`])]),_:1},8,[`content`,`disabled`]),v(Oe,{modelValue:i.value,"onUpdate:modelValue":O[0]||=e=>i.value=e,title:s(X)(`@TAG01:Git 标签列表`),size:`large`,"show-footer":!1,"custom-class":`tag-list-dialog`},{default:B(()=>[J(`div`,Et,[l.value?o(``,!0):(F(),a(`div`,Dt,[J(`div`,Ot,[J(`div`,kt,[v(M,{class:`stat-icon`},{default:B(()=>[v(s(u))]),_:1}),J(`span`,At,w(c.value.length),1),J(`span`,jt,w(s(X)(`@TAG01:个标签`)),1)])]),J(`div`,Mt,[v(N,{type:`primary`,size:`small`,icon:s(n),onClick:x,loading:l.value,class:`refresh-btn`},{default:B(()=>[U(w(s(X)(`@TAG01:刷新`)),1)]),_:1},8,[`icon`,`loading`]),c.value.length>0?(F(),k(N,{key:0,type:`success`,size:`small`,icon:s(V),onClick:E,loading:m.value,class:`push-all-btn`},{default:B(()=>[U(w(s(X)(`@TAG01:推送所有标签`)),1)]),_:1},8,[`icon`,`loading`])):o(``,!0)])])),le((F(),a(`div`,Nt,[c.value.length===0&&!l.value?(F(),a(`div`,Pt,[v(ee,{description:s(X)(`@TAG01:暂无标签`),"image-size":120},{image:B(()=>[v(M,{class:`empty-icon`},{default:B(()=>[v(s(u))]),_:1})]),description:B(()=>[J(`p`,Ft,w(s(X)(`@TAG01:还没有创建任何标签`)),1),J(`p`,It,w(s(X)(`@TAG01:使用创建标签功能为项目添加版本标记`)),1)]),_:1},8,[`description`])])):(F(),a(`div`,Lt,[(F(!0),a(Y,null,C(c.value,e=>(F(),a(`div`,{key:e.name,class:`tag-card`},[J(`div`,Rt,[J(`div`,zt,[J(`div`,Bt,[J(`div`,Vt,[v(M,{class:`badge-icon`},{default:B(()=>[v(s(u))]),_:1}),J(`span`,Ht,w(e.name),1),v(I,{size:`small`,type:e.type===`annotated`?`warning`:`info`,class:`type-tag`},{default:B(()=>[U(w(e.type===`annotated`?s(X)(`@TAG01:附注`):s(X)(`@TAG01:轻量`)),1)]),_:2},1032,[`type`])]),J(`div`,Ut,[J(`span`,Wt,[v(M,null,{default:B(()=>[v(s(A))]),_:1}),U(` `+w(e.commit.substring(0,8)),1)]),J(`span`,Gt,w(j(e.date)),1)]),e.message?(F(),a(`div`,Kt,w(e.message),1)):o(``,!0)])]),J(`div`,qt,[e.message?(F(),k(N,{key:0,size:`small`,type:`info`,onClick:t=>S(e),class:`action-btn view-btn`},{default:B(()=>[U(w(s(X)(`@TAG01:查看`)),1)]),_:1},8,[`onClick`])):o(``,!0),v(N,{size:`small`,type:`success`,icon:s(V),onClick:t=>T(e.name),loading:m.value,class:`action-btn push-btn`},{default:B(()=>[U(w(s(X)(`@TAG01:推送`)),1)]),_:1},8,[`icon`,`onClick`,`loading`]),v(N,{size:`small`,type:`danger`,icon:s(ge),onClick:t=>D(e.name),loading:f.value,class:`action-btn delete-btn`},{default:B(()=>[U(w(s(X)(`@TAG01:删除`)),1)]),_:1},8,[`icon`,`onClick`,`loading`])])])]))),128))]))])),[[L,l.value]])])]),_:1},8,[`modelValue`,`title`]),v(Oe,{modelValue:_.value,"onUpdate:modelValue":O[1]||=e=>_.value=e,title:s(X)(`@TAG01:标签详情`),size:`medium`,"show-footer":!1,"custom-class":`tag-detail-dialog`},{default:B(()=>[y.value?(F(),a(`div`,Jt,[J(`div`,Yt,[J(`span`,Xt,w(s(X)(`@TAG01:标签名称:`)),1),J(`code`,Zt,w(y.value.name),1)]),J(`div`,Qt,[J(`span`,$t,w(s(X)(`@TAG01:提交SHA:`)),1),J(`code`,en,w(y.value.commit),1)]),J(`div`,tn,[J(`span`,nn,w(s(X)(`@TAG01:创建时间:`)),1),J(`span`,rn,w(j(y.value.date)),1)]),J(`div`,an,[J(`span`,on,w(s(X)(`@TAG01:类型:`)),1),v(I,{type:y.value.type===`annotated`?`warning`:`info`,size:`small`},{default:B(()=>[U(w(y.value.type===`annotated`?s(X)(`@TAG01:附注标签`):s(X)(`@TAG01:轻量标签`)),1)]),_:1},8,[`type`])]),y.value.message?(F(),a(`div`,sn,[J(`span`,cn,w(s(X)(`@TAG01:标签说明:`)),1),J(`div`,ln,w(y.value.message),1)])):o(``,!0)])):o(``,!0)]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-366ce062`]]);T(),K(),S();var dn={class:`git-operations-button`},fn={class:`actions-section`},pn={class:`action-groups`},mn={class:`action-group`},hn={class:`group-title`},gn={class:`group-buttons`},_n={key:0},vn={class:`action-group`},yn={class:`group-title`},bn={class:`group-buttons`},xn={class:`action-group`},Sn={class:`group-title`},Cn={class:`group-buttons`},wn={key:0},Tn={class:`action-group`},En={class:`group-title`},Dn={class:`group-buttons`},On={class:`action-group`},kn={class:`group-title`},An={class:`group-buttons`},jn={class:`action-group`},Mn={class:`group-title`},Nn={class:`group-buttons`},Pn={class:`pull-error-content`},Fn={key:0},In={key:1},Ln={class:`pull-error-detail`},Rn={class:`pull-error-label`},zn={class:`pull-error-pre`},Bn=Z(x({__name:`GitOperationsButton`,props:{variant:{default:`icon`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`afterCommit`,`afterPush`,`beforePush`,`clearFields`],setup(e,{expose:t,emit:n}){let r=e,c=n,l=Q(),u=z(!1),p=z(!1),m=z({needsMerge:!1,error:``,fullError:``,pullOutput:``});function _(){u.value=!0}let y=i(()=>l.fileList.filter(e=>e.type===`added`).length),b=i(()=>l.branchBehind>0),x=i(()=>l.fileList.some(e=>[`modified`,`deleted`,`untracked`,`intent-to-add`].includes(e.type)));async function S(){try{let e=await l.gitPull();e.success?(await l.fetchStatus(),await l.fetchLog(!1)):(m.value={needsMerge:e.needsMerge,error:e.error,fullError:e.fullError,pullOutput:e.pullOutput},p.value=!0)}catch(e){console.error(`拉取失败:`,e)}}async function C(){try{await l.gitFetchAll(),await l.fetchStatus(),await l.fetchLog(!1)}catch(e){console.error(`获取远程分支失败:`,e)}}async function T(){if(r.hasUserCommitMessage)try{await l.addAndCommit(r.finalCommitMessage,r.skipHooks),l.fetchStatus(),l.fetchLog(),c(`afterCommit`,!0),c(`clearFields`)}catch(e){console.error(`暂存并提交失败:`,e)}}function E(){c(`beforePush`)}function D(e){c(`afterPush`,e)}function j(){c(`clearFields`)}return t({openGitOperationsDrawer:_}),(t,n)=>{let i=h,M=g,N=d,P=O;return F(),a(`div`,dn,[r.variant===`icon`?(F(),k(we,{key:0,tooltip:s(X)(`@F13B4:Git 操作`),size:`large`,"custom-class":`btn-rotate-on-hover`,onClick:_},{default:B(()=>[v(i,null,{default:B(()=>[v(s(ce))]),_:1})]),_:1},8,[`tooltip`])):(F(),k(M,{key:1,type:`primary`,class:`action-button`,onClick:_},{default:B(()=>[U(w(s(X)(`@F13B4:Git 操作`)),1)]),_:1})),v(P,{modelValue:u.value,"onUpdate:modelValue":n[2]||=e=>u.value=e,title:s(X)(`@76872:Git 操作`),direction:`rtl`,size:`362px`,"with-header":!0,"show-close":!0,"destroy-on-close":!1,"append-to-body":!0,class:`git-operations-drawer`},{default:B(()=>[J(`div`,fn,[J(`div`,pn,[J(`div`,mn,[J(`div`,hn,w(s(X)(`@76872:基础操作`)),1),J(`div`,gn,[v(ze,{onClick:()=>{},from:`drawer`}),v(Me,{onClick:()=>{},from:`drawer`}),v(Ve,{"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforeCommit:()=>{},onAfterCommit:n[0]||=e=>c(`afterCommit`,e),onClick:()=>{},from:`drawer`},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),v(ut,{onBeforePush:()=>{},onAfterPush:n[1]||=e=>c(`afterPush`,e),onClick:()=>{},from:`drawer`}),v(N,{content:s(l).hasConflictedFiles?s(X)(`@76872:存在冲突文件,请先解决冲突`):b.value?`${s(X)(`@76872:拉取`)}${s(l).branchBehind}${s(X)(`@76872:个远程提交`)}`:`git pull`,placement:`top`},{default:B(()=>[v(M,{type:`primary`,icon:s(H),onClick:S,loading:s(l).isGitPulling,disabled:!s(l).hasUpstream||s(l).hasConflictedFiles,class:`action-button`,style:L(s(l).hasUpstream&&!s(l).hasConflictedFiles?{color:`white`,backgroundColor:`var(--color-primary)`,borderColor:`var(--color-primary)`}:{})},{default:B(()=>[U(w(s(X)(`@76872:拉取`))+` `,1),b.value?(F(),a(`span`,_n,`(`+w(s(l).branchBehind)+`)`,1)):o(``,!0)]),_:1},8,[`icon`,`loading`,`disabled`,`style`])]),_:1},8,[`content`]),v(N,{content:`git fetch --all`,placement:`top`},{default:B(()=>[v(M,{type:`info`,icon:s(ne),onClick:C,loading:s(l).isGitFetching,class:`action-button`,style:{color:`white`,"background-color":`var(--color-primary)`,"border-color":`var(--color-primary)`}},{default:B(()=>[U(w(s(X)(`@76872:获取所有远程分支`)),1)]),_:1},8,[`icon`,`loading`])]),_:1})])]),J(`div`,vn,[J(`div`,yn,w(s(X)(`@76872:组合操作`)),1),J(`div`,bn,[v(N,{content:s(l).hasConflictedFiles?s(X)(`@76872:存在冲突文件,请先解决冲突`):`git add + git commit`,placement:`top`},{default:B(()=>[v(M,{type:`primary`,icon:s(fe),onClick:T,loading:s(l).isAddingFiles||s(l).isCommiting,disabled:!x.value||!e.hasUserCommitMessage||s(l).hasConflictedFiles,class:`action-button`},{default:B(()=>[U(w(s(X)(`@76872:暂存并提交`)),1)]),_:1},8,[`icon`,`loading`,`disabled`])]),_:1},8,[`content`]),v(ht,{from:`drawer`,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforePush:E,onAfterPush:D,onClearFields:j},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])]),J(`div`,xn,[J(`div`,Sn,w(s(X)(`@76872:重置操作`)),1),J(`div`,Cn,[v(N,{content:y.value>0?`${s(X)(`@76872:撤销`)}${y.value}${s(X)(`@76872:个已暂存文件`)}`:`git reset HEAD`,placement:`top`},{default:B(()=>[v(M,{type:`warning`,icon:s(f),onClick:s(l).resetHead,loading:s(l).isResetting,disabled:y.value===0||s(l).hasConflictedFiles,class:`action-button reset-button`},{default:B(()=>[U(w(s(X)(`@76872:重置暂存区`))+` `,1),y.value>0?(F(),a(`span`,wn,`(`+w(y.value)+`)`,1)):o(``,!0)]),_:1},8,[`icon`,`onClick`,`loading`,`disabled`])]),_:1},8,[`content`]),v(Ne,{variant:`text`})])]),J(`div`,Tn,[J(`div`,En,w(s(X)(`@76872:分支操作`)),1),J(`div`,Dn,[v(Ae,{variant:`text`})])]),J(`div`,On,[J(`div`,kn,w(s(X)(`@76872:储藏操作`)),1),J(`div`,An,[v(je,{variant:`text`}),v(Ie,{variant:`text`})])]),J(`div`,jn,[J(`div`,Mn,w(s(X)(`@TAG01:标签操作`)),1),J(`div`,Nn,[v(wt,{variant:`text`}),v(un,{variant:`text`})])])])])]),_:1},8,[`modelValue`,`title`]),v(Oe,{modelValue:p.value,"onUpdate:modelValue":n[3]||=e=>p.value=e,title:m.value.needsMerge?s(X)(`@76872:需要合并更改`):s(X)(`@76872:拉取失败`),size:`medium`,"show-footer":!0,"show-cancel":!1,"confirm-text":s(X)(`@76872:我知道了`),"append-to-body":!0,onConfirm:n[4]||=e=>p.value=!1},{default:B(()=>[J(`div`,Pn,[J(`div`,{class:q([`pull-error-type`,m.value.needsMerge?`is-warning`:`is-error`])},[v(i,{class:`pull-error-icon`},{default:B(()=>[v(s(A))]),_:1}),m.value.needsMerge?(F(),a(`span`,Fn,w(s(X)(`@76872:本地存在未提交的更改,与远程内容冲突,请先处理本地更改后再拉取。`)),1)):(F(),a(`span`,In,w(s(X)(`@76872:执行 git pull 时发生错误,请查看详细信息。`)),1))],2),J(`div`,Ln,[J(`div`,Rn,w(s(X)(`@76872:错误详情`))+`:`,1),J(`pre`,zn,w(m.value.fullError||m.value.error),1)])])]),_:1},8,[`modelValue`,`title`,`confirm-text`])])}}}),[[`__scopeId`,`data-v-feb8c688`]]);T(),S(),W();var Vn={class:`loading-container`},Hn={class:`loading-text`},Un={key:0,class:`loading-progress`},Wn=x({__name:`GlobalLoading`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@2AEBA:加载中...`)},showProgress:{type:Boolean,default:!1},progress:{default:0},mock:{type:Boolean,default:!1}},setup(e){return(t,n)=>(F(),k(xe,{to:`body`},[v(he,{name:`loading-fade`},{default:B(()=>[e.visible||e.mock?(F(),a(`div`,{key:0,class:`global-loading-overlay`,onClick:n[0]||=_e(()=>{},[`stop`])},[J(`div`,Vn,[n[1]||=J(`div`,{class:`loading-spinner`},[J(`div`,{class:`spinner-ring`}),J(`div`,{class:`spinner-ring`}),J(`div`,{class:`spinner-ring`})],-1),J(`div`,Hn,w(e.text),1),e.showProgress||e.mock?(F(),a(`div`,Un,[J(`div`,{class:q([`progress-bar`,{"is-mock":e.mock&&!e.showProgress}]),style:L(e.showProgress?{width:e.progress+`%`}:void 0)},null,6)])):o(``,!0)])])):o(``,!0)]),_:1})]))}}),Gn=Z(Wn,[[`__scopeId`,`data-v-691919d3`]]);T(),S(),W();var Kn={class:`success-container`},qn={class:`success-text`},Jn={key:0,class:`success-description`},Yn=x({__name:`SuccessModal`,props:{visible:{type:Boolean,default:!1},text:{default:X(`@71545:操作成功!`)},description:{default:``}},setup(e){return(t,n)=>(F(),k(xe,{to:`body`},[v(he,{name:`success-fade`},{default:B(()=>[e.visible?(F(),a(`div`,{key:0,class:`success-overlay`,onClick:n[0]||=_e(()=>{},[`stop`])},[J(`div`,Kn,[n[1]||=J(`div`,{class:`success-icon`},[J(`svg`,{viewBox:`0 0 52 52`,class:`success-svg`},[J(`circle`,{class:`success-circle`,cx:`26`,cy:`26`,r:`25`,fill:`none`}),J(`path`,{class:`success-check`,fill:`none`,d:`m14.1 27.2l7.1 7.2 16.7-16.8`})])],-1),J(`div`,qn,w(e.text),1),e.description?(F(),a(`div`,Jn,w(e.description),1)):o(``,!0)])])):o(``,!0)]),_:1})]))}}),Xn=Z(Yn,[[`__scopeId`,`data-v-c3fad05d`]]);K();var $=ve({visible:!1,text:X(`@F2A3A:加载中...`),showProgress:!1,progress:0});function Zn(){return{loadingState:$,show:e=>{$.visible=!0,$.text=e?.text||X(`@F2A3A:加载中...`),$.showProgress=e?.showProgress||!1,$.progress=e?.progress||0},hide:()=>{$.visible=!1},updateProgress:e=>{$.progress=Math.max(0,Math.min(100,e))},updateText:e=>{$.text=e},setText:e=>{$.visible&&($.text=e)}}}K();var Qn=ve({visible:!1,text:X(`@B8591:操作成功!`),description:``});function $n(){let e=e=>{Qn.visible=!0,Qn.text=e?.text||X(`@B8591:操作成功!`),Qn.description=e?.description||``;let n=e?.duration||2e3;setTimeout(()=>{t()},n)},t=()=>{Qn.visible=!1};return{successState:Qn,show:e,hide:t}}T(),K(),S();var er={class:`one-commit-content`},tr={class:`one-commit-text`},nr={class:`one-commit-title`},rr={key:0,class:`one-commit-desc`},ir=Z(x({__name:`QuickCommitButton`,props:{from:{default:`form`},hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1}},emits:[`beforeCommit`,`afterCommit`,`clearFields`],setup(e,{expose:t,emit:n}){let r=Q(),c=Ee(),l=e,u=n,f=i(()=>r.fileList.some(e=>!Fe(e.path,c.lockedFiles))),p=i(()=>r.isSelectionMode&&r.selectedFiles.size>0&&r.selectedUnstagedPaths.length>0),m=i(()=>r.hasConflictedFiles?!0:r.isSelectionMode?!p.value||!l.hasUserCommitMessage:!f.value||!l.hasUserCommitMessage),_=i(()=>r.isAddingFiles||r.isCommiting),y=i(()=>r.hasConflictedFiles?X(`@2E184:存在冲突文件,请先解决冲突`):r.isSelectionMode?r.selectedFiles.size===0?X(`@2E184:请先勾选要提交的文件`):r.selectedUnstagedPaths.length===0?X(`@2E184:所选文件无需暂存或被锁定`):l.hasUserCommitMessage?X(`@2E184:一键完成:仅暂存所选文件 → 提交`):X(`@2E184:请输入提交信息`):f.value?l.hasUserCommitMessage?X(`@2E184:一键完成:暂存所有更改 → 提交`):X(`@2E184:请输入提交信息`):X(`@2E184:没有需要提交的更改`)),b=i(()=>r.isSelectionMode&&p.value?X(`@2E184:一键提交所选`):X(`@2E184:一键提交`)),x=i(()=>l.from===`form`?r.isSelectionMode&&p.value?X(`@2E184:暂存所选 + 提交`):X(`@2E184:暂存 + 提交`):``);async function S(){u(`beforeCommit`);try{let e=await r.stageSelectedAndCommit(l.finalCommitMessage,l.skipHooks);e&&u(`clearFields`),u(`afterCommit`,e)}catch(e){console.error(`一键提交失败:`,e),u(`afterCommit`,!1)}}return t({triggerQuickCommit:S}),(t,n)=>{let r=h,i=g;return F(),a(`div`,null,[v(s(d),{content:y.value,placement:`top`,"show-after":200},{default:B(()=>[v(i,{type:`primary`,onClick:S,loading:_.value,disabled:m.value,class:q([e.from,`one-commit-button`])},{default:B(()=>[J(`div`,er,[v(r,{class:`one-commit-icon`},{default:B(()=>[v(s(fe))]),_:1}),J(`div`,tr,[J(`span`,nr,w(b.value),1),e.from===`form`?(F(),a(`span`,rr,w(x.value),1)):o(``,!0)])])]),_:1},8,[`loading`,`disabled`,`class`])]),_:1},8,[`content`])])}}}),[[`__scopeId`,`data-v-91c441c2`]]);T(),K();var ar={class:`form-bottom-actions`},or={class:`actions-flex-container`},sr={class:`left-actions`},cr={class:`button-grid`},lr={class:`right-actions`},ur=Z(x({__name:`GitActionButtons`,props:{hasUserCommitMessage:{type:Boolean,default:!1},finalCommitMessage:{default:``},skipHooks:{type:Boolean,default:!1},from:{default:`form`}},emits:[`afterCommit`,`afterPush`,`beforePush`,`pushStart`,`clearFields`],setup(e,{expose:t,emit:n}){let r=n,i=z(null);function o(e){r(`afterCommit`,e)}function s(e){r(`afterPush`,e)}function c(){r(`beforePush`)}function l(){r(`pushStart`)}function u(){r(`clearFields`)}async function d(){return i.value?.triggerQuickPush()}return t({triggerQuickPush:d}),(t,n)=>(F(),a(`div`,ar,[J(`div`,or,[J(`div`,sr,[J(`div`,cr,[v(ze,{onClick:()=>{},from:e.from},null,8,[`from`]),v(Ve,{"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforeCommit:()=>{},onAfterCommit:o,onClick:()=>{},from:e.from},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`,`from`]),v(ut,{onBeforePush:()=>{},onAfterPush:s,onClick:()=>{},from:e.from},null,8,[`from`])])]),J(`div`,lr,[v(ir,{from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onAfterCommit:o,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`]),v(ht,{ref_key:`quickPushRef`,ref:i,from:e.from,"has-user-commit-message":e.hasUserCommitMessage,"final-commit-message":e.finalCommitMessage,"skip-hooks":e.skipHooks,onBeforePush:c,onPushStart:l,onAfterPush:s,onClearFields:u},null,8,[`from`,`has-user-commit-message`,`final-commit-message`,`skip-hooks`])])])]))}}),[[`__scopeId`,`data-v-6dc84697`]]);T(),K(),S(),W();var dr={class:`dialog-toolbar`},fr={class:`filter-controls`},pr={class:`toolbar-actions`},mr=[`disabled`],hr={class:`btn-text`},gr=[`disabled`],_r={class:`btn-text`},vr=[`disabled`],yr={class:`btn-text`},br={class:`history-scroll`},xr={key:0,class:`loading-state`},Sr={class:`loading-text`},Cr={key:3,class:`history-list`},wr=[`onClick`],Tr={class:`command-info`},Er={class:`command-text`},Dr={class:`command-meta`},Or={class:`timestamp`},kr={class:`duration`},Ar={class:`item-actions`},jr={key:0,class:`item-details`},Mr={key:0,class:`output-section`},Nr={class:`output-header`},Pr=[`onClick`],Fr={class:`output-content`},Ir={key:0,class:`truncation-notice`},Lr={class:`output-header`},Rr={class:`output-content`},zr={key:0,class:`truncation-notice`},Br={key:2,class:`output-section error`},Vr={class:`output-header`},Hr={class:`output-content`},Ur=Z(x({__name:`CommandHistory`,setup(e){let t=Q(),n=z([]),r=z(!1);function u(e){return Array.isArray(e)?e.join(` `):e==null?``:String(e)}let f=z(!1),g=z(!1),_=z(!1),x=z(new Set),S=z(!1),T=z(!1),E=z(`all`),D=z(`all`),O=z(``),A=i(()=>{let e=n.value;if(E.value!==`all`&&(e=e.filter(e=>E.value===`success`?e.success:!e.success)),D.value!==`all`&&(e=e.filter(e=>{let t=u(e.command).startsWith(`git `);return D.value===`git`?t:!t})),O.value.trim()){let t=O.value.toLowerCase();e=e.filter(e=>u(e.command).toLowerCase().includes(t)||e.stdout&&e.stdout.toLowerCase().includes(t)||e.stderr&&e.stderr.toLowerCase().includes(t)||e.error&&e.error.toLowerCase().includes(t))}return e}),j=i(()=>n.value.filter(e=>e.success).length),P=i(()=>n.value.filter(e=>!e.success).length),L=i(()=>n.value.filter(e=>u(e.command).startsWith(`git `)).length),te=i(()=>n.value.filter(e=>!u(e.command).startsWith(`git `)).length);function ne(){T.value=!0,n.value.length===0&&V()}async function V(){try{if(r.value=!0,t.socket&&t.socket.connected)t.socket.emit(`request_full_history`);else{let e=await(await fetch(`/api/command-history`)).json();e.success?n.value=e.history:R.error(`${X(`@81F0F:加载命令历史失败: `)}${e.error}`)}}catch(e){R.error(`${X(`@81F0F:加载命令历史失败: `)}${e.message}`)}finally{r.value=!1}}async function re(){if(A.value.length===0){R.warning(X(`@81F0F:没有可复制的命令历史`));return}try{g.value=!0;let e=A.value.map(e=>{let t=`# ${oe(e.timestamp)}${X(`@81F0F: (耗时: `)}${se(e.executionTime)}) - ${e.success?X(`@81F0F:成功`):X(`@81F0F:失败`)}\n`;if(t+=`${u(e.command)}\n`,e.stdout&&(t+=`\n# 输出:\n${e.stdout}\n`),e.stderr){let n=G(e.command)?X(`@81F0F:输出信息`):X(`@81F0F:错误输出`);t+=`\n# ${n}:\n${e.stderr}\n`}return e.error&&(t+=`\n# 错误信息:\n${e.error}\n`),t}).join(`
|
|
2
|
+
---
|
|
3
|
+
|
|
4
|
+
`);await navigator.clipboard.writeText(e),R({message:X(`@81F0F:命令历史已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){R.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}finally{g.value=!1}}async function H(){if(A.value.length===0){R.warning(X(`@81F0F:没有可复制的命令`));return}try{S.value=!0;let e=A.value.map(e=>u(e.command)).join(`
|
|
5
|
+
`);await navigator.clipboard.writeText(e),R({message:X(`@81F0F:命令列表已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){R.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}finally{S.value=!1}}async function ie(){try{if(await ae.confirm(X(`@81F0F:确定要清空所有命令历史记录吗?此操作不可恢复。`),X(`@81F0F:清空命令历史`),{confirmButtonText:X(`@81F0F:确定`),cancelButtonText:X(`@81F0F:取消`),type:`warning`}),f.value=!0,t.socket&&t.socket.connected)t.socket.emit(`clear_command_history`);else{let e=await(await fetch(`/api/clear-command-history`,{method:`POST`,headers:{"Content-Type":`application/json`}})).json();e.success?(n.value=[],R.success(X(`@81F0F:命令历史已清空`))):R.error(`${X(`@81F0F:清空命令历史失败: `)}${e.error}`)}}catch(e){e!==`cancel`&&e.toString()!==`Error: cancel`&&R.error(`${X(`@81F0F:清空命令历史失败: `)}${e.message}`)}finally{f.value=!1}}function oe(e){return new Date(e).toLocaleString()}function se(e){return e<1e3?`${e}ms`:`${(e/1e3).toFixed(2)}s`}function ce(e){x.value.has(e)?x.value.delete(e):x.value.add(e)}function W(e){return x.value.has(e)}async function le(e){try{await navigator.clipboard.writeText(e),R({message:X(`@81F0F:命令已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){R.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}}function ue(e){return e.includes(`git push`)||e.includes(`git-push`)}function G(e){return!!ue(u(e))}async function K(e){try{let t=``;if(e.stdout&&(t+=`标准输出:\n${e.stdout}\n\n`),e.stderr){let n=G(e.command)?X(`@81F0F:输出信息`):X(`@81F0F:错误输出`);t+=`${n}:\n${e.stderr}\n\n`}e.error&&(t+=`错误信息:\n${e.error}`),await navigator.clipboard.writeText(t.trim()),R({message:X(`@81F0F:输出已复制到剪贴板`),type:`success`,zIndex:1e5})}catch(e){R.error(`${X(`@81F0F:复制失败: `)}${e.message}`)}}function fe(){if(!t.socket){console.error(X(`@81F0F:Socket实例不可用`));return}t.socket.on(`initial_command_history`,e=>{n.value=e.history,_.value=!0}),t.socket.on(`command_history_update`,e=>{n.value.unshift(e.newCommand),n.value.length>100&&n.value.pop(),_.value=!0}),t.socket.on(`full_command_history`,e=>{n.value=e.history,r.value=!1,_.value=!0}),t.socket.on(`command_history_cleared`,e=>{e.success&&(n.value=[],R.success(X(`@81F0F:命令历史已清空`))),f.value=!1}),t.socket.on(`connect`,()=>{_.value=!0,R.success(X(`@81F0F:已连接到实时命令历史`))}),t.socket.on(`disconnect`,()=>{_.value=!1,R.warning(X(`@81F0F:实时命令历史连接已断开`))})}function he(){t.socket&&(t.socket.off(`initial_command_history`),t.socket.off(`command_history_update`),t.socket.off(`full_command_history`),t.socket.off(`command_history_cleared`))}return m(()=>{fe(),t.socket||(console.log(X(`@81F0F:尝试初始化Socket连接`)),t.initSocketConnection())}),I(()=>{he()}),(e,t)=>{let i=h,m=p,x=b,I=c,R=N,z=d,V=be,ae=l;return F(),a(Y,null,[v(we,{tooltip:s(X)(`@81F0F:查看Git命令历史`),size:`large`,onClick:ne},{default:B(()=>[v(i,null,{default:B(()=>[v(s(me))]),_:1})]),_:1},8,[`tooltip`]),v(Oe,{modelValue:T.value,"onUpdate:modelValue":t[3]||=e=>T.value=e,title:s(X)(`@81F0F:Git 命令历史`),"destroy-on-close":``,"custom-class":`command-history-dialog`,"append-to-body":!0},{default:B(()=>[J(`div`,dr,[v(m,{type:_.value?`success`:`danger`,size:`small`,effect:`dark`,class:`socket-status`},{default:B(()=>[U(w(_.value?s(X)(`@81F0F:实时更新`):s(X)(`@81F0F:未连接`)),1)]),_:1},8,[`type`]),J(`div`,fr,[v(I,{modelValue:E.value,"onUpdate:modelValue":t[0]||=e=>E.value=e,size:`small`,class:`filter-select`},{default:B(()=>[v(x,{label:`全部状态`,value:`all`}),v(x,{label:`成功 (${j.value})`,value:`success`},null,8,[`label`]),v(x,{label:`失败 (${P.value})`,value:`error`},null,8,[`label`])]),_:1},8,[`modelValue`]),v(I,{modelValue:D.value,"onUpdate:modelValue":t[1]||=e=>D.value=e,size:`small`,class:`filter-select`},{default:B(()=>[v(x,{label:`全部命令`,value:`all`}),v(x,{label:`Git 命令 (${L.value})`,value:`git`},null,8,[`label`]),v(x,{label:`其他命令 (${te.value})`,value:`other`},null,8,[`label`])]),_:1},8,[`modelValue`]),v(R,{modelValue:O.value,"onUpdate:modelValue":t[2]||=e=>O.value=e,size:`small`,placeholder:`搜索命令或输出...`,clearable:``,class:`search-input`},{prefix:B(()=>[v(i,null,{default:B(()=>[v(s(M))]),_:1})]),_:1},8,[`modelValue`])]),J(`div`,pr,[v(z,{content:s(X)(`@81F0F:只复制命令列表(不含输出)`),placement:`bottom`,effect:`dark`,"show-after":200},{default:B(()=>[J(`button`,{class:`modern-btn copy-commands-button enhanced-btn`,onClick:H,disabled:A.value.length===0||S.value},[S.value?(F(),k(i,{key:1,class:`btn-icon is-loading`},{default:B(()=>[v(s(y))]),_:1})):(F(),k(i,{key:0,class:`btn-icon`},{default:B(()=>[v(s(de))]),_:1})),J(`span`,hr,w(s(X)(`@81F0F:命令`)),1)],8,mr)]),_:1},8,[`content`]),v(z,{content:s(X)(`@81F0F:复制完整命令历史(含输出)`),placement:`bottom`,effect:`dark`,"show-after":200},{default:B(()=>[J(`button`,{class:`modern-btn copy-all-button enhanced-btn`,onClick:re,disabled:A.value.length===0||g.value},[g.value?(F(),k(i,{key:1,class:`btn-icon is-loading`},{default:B(()=>[v(s(y))]),_:1})):(F(),k(i,{key:0,class:`btn-icon`},{default:B(()=>[v(s(de))]),_:1})),J(`span`,_r,w(s(X)(`@81F0F:全部`)),1)],8,gr)]),_:1},8,[`content`]),v(z,{content:s(X)(`@81F0F:清空命令历史`),placement:`bottom`,effect:`dark`,"show-after":200},{default:B(()=>[J(`button`,{class:`modern-btn clear-button enhanced-btn danger-btn`,onClick:ie,disabled:n.value.length===0||f.value},[f.value?(F(),k(i,{key:1,class:`btn-icon is-loading`},{default:B(()=>[v(s(y))]),_:1})):(F(),k(i,{key:0,class:`btn-icon`},{default:B(()=>[v(s(ge))]),_:1})),J(`span`,yr,w(s(X)(`@81F0F:清空`)),1)],8,vr)]),_:1},8,[`content`])])]),J(`div`,br,[r.value&&n.value.length===0?(F(),a(`div`,xr,[v(i,{class:`loading-icon is-loading`},{default:B(()=>[v(s(y))]),_:1}),J(`div`,Sr,w(s(X)(`@81F0F:加载命令历史...`)),1)])):n.value.length===0?(F(),k(V,{key:1,description:s(X)(`@81F0F:暂无命令历史`)},null,8,[`description`])):A.value.length===0?(F(),k(V,{key:2,description:s(X)(`@81F0F:没有匹配的命令`)},null,8,[`description`])):(F(),a(`div`,Cr,[(F(!0),a(Y,null,C(A.value,(e,t)=>(F(),a(`div`,{key:t,class:q([`history-item`,{"is-error":!e.success}])},[J(`div`,{class:`item-header`,onClick:e=>ce(t)},[J(`div`,Tr,[J(`div`,Er,[v(m,{size:`small`,type:e.success?`success`:`danger`,effect:`dark`,class:`status-tag`},{default:B(()=>[U(w(e.success?s(X)(`@81F0F:成功`):s(X)(`@81F0F:失败`)),1)]),_:2},1032,[`type`]),J(`code`,null,w(u(e.command)),1)]),J(`div`,Dr,[J(`span`,Or,w(oe(e.timestamp)),1),J(`span`,kr,w(s(X)(`@81F0F:耗时: `))+w(se(e.executionTime)),1)])]),J(`div`,Ar,[v(we,{tooltip:s(X)(`@81F0F:复制命令`),"custom-class":`item-copy-button`,onClick:_e(t=>le(u(e.command)),[`stop`])},{default:B(()=>[v(i,null,{default:B(()=>[v(s(de))]),_:1})]),_:1},8,[`tooltip`,`onClick`]),J(`div`,{class:q([`expand-button`,{"is-expanded":W(t)}])},[v(i,{class:`btn-icon`},{default:B(()=>[W(t)?(F(),k(s(ee),{key:0})):(F(),k(s(pe),{key:1}))]),_:2},1024)],2)])],8,wr),W(t)?(F(),a(`div`,jr,[e.stdout?(F(),a(`div`,Mr,[J(`div`,Nr,[J(`h4`,null,w(s(X)(`@81F0F:标准输出`)),1),v(z,{content:s(X)(`@81F0F:复制输出`),placement:`bottom`,effect:`dark`,"show-after":200},{default:B(()=>[J(`button`,{class:`modern-btn output-copy-button enhanced-btn`,onClick:t=>K(e)},[v(i,{class:`btn-icon`},{default:B(()=>[v(s(de))]),_:1})],8,Pr)]),_:2},1032,[`content`])]),J(`pre`,Fr,w(e.stdout),1),e.isStdoutTruncated?(F(),a(`div`,Ir,[v(ae,{type:`info`,closable:!1,"show-icon":``},{default:B(()=>[U(w(s(X)(`@81F0F:输出内容过长已被截断,请直接执行命令查看完整输出`)),1)]),_:1})])):o(``,!0)])):o(``,!0),e.stderr?(F(),a(`div`,{key:1,class:q([`output-section`,G(e.command)?``:`error`])},[J(`div`,Lr,[J(`h4`,null,w(G(e.command)?s(X)(`@81F0F:输出信息`):s(X)(`@81F0F:错误输出`)),1)]),J(`pre`,Rr,w(e.stderr),1),e.isStderrTruncated?(F(),a(`div`,zr,[v(ae,{type:`info`,closable:!1,"show-icon":``},{default:B(()=>[U(w(G(e.command)?s(X)(`@81F0F:输出信息`):s(X)(`@81F0F:错误输出`))+w(s(X)(`@81F0F:内容过长已被截断,请直接执行命令查看完整输出`)),1)]),_:2},1024)])):o(``,!0)],2)):o(``,!0),e.error?(F(),a(`div`,Br,[J(`div`,Vr,[J(`h4`,null,w(s(X)(`@81F0F:错误信息`)),1)]),J(`pre`,Hr,w(e.error),1)])):o(``,!0)])):o(``,!0)],2))),128))]))])]),_:1},8,[`modelValue`,`title`])],64)}}}),[[`__scopeId`,`data-v-6ba10e2c`]]);T(),K(),S(),W();var Wr={class:`card-header app-card-header`},Gr={class:`header-left`},Kr={class:`header-right`},qr={class:`card-content app-card-content`},Jr={class:`layout-container`},Yr={key:0,class:`git-config-warning`},Xr={key:0,class:`merge-in-progress-banner`},Zr={class:`commit-section`},Qr={key:0,class:`commit-form`},$r={class:`description-container`},ei={key:1,class:`standard-commit-form`},ti={class:`standard-commit-header`},ni={class:`type-scope-container`},ri={class:`scope-wrapper`},ii={class:`description-container description-inline`},ai=[`aria-expanded`],oi={class:`advanced-fields`},si={key:0,class:`status-updating-indicator`},ci={key:0,class:`status-updating-indicator`},li=Z(x({__name:`CommitForm`,setup(e){let t=z(!1);async function n(){if(!t.value){t.value=!0;try{let e=r.isSelectionMode&&r.selectedFiles.size>0?[...r.selectedFiles]:[],t=Te(),n=await(await fetch(`/api/config/generate-commit-message`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({selectedPaths:e,locale:t.currentLocale})})).json();if(!n.success){let e=n.code,t=n.error||X(`@76872:AI生成失败`),r=e?{TIMEOUT:`@76872:AI生成超时,请重试或检查模型响应速度`,NO_MODEL:`@76872:未配置AI模型,请先在通用设置中添加模型`,NO_JSON:`@76872:AI未返回有效结果,请重试`,PARSE_FAILED:`@76872:AI返回格式无法解析,请重试`,GENERATE_FAILED:`@76872:AI生成失败`,HTTP_ERR:`@76872:AI生成失败`}[e]:null;R.error(r?X(r):t);return}let i=[`feat`,`fix`,`docs`,`style`,`refactor`,`test`,`chore`];if(E.value)n.type&&i.includes(n.type)&&(D.value=n.type),n.scope!==void 0&&(O.value=n.scope),n.description&&(A.value=n.description);else{let e=n.type&&n.description?n.scope?`${n.type}(${n.scope}): ${n.description}`:`${n.type}: ${n.description}`:n.description||``;e&&(d.value=e)}R.success(X(`@76872:AI已生成提交信息`))}catch(e){R.error(`${X(`@76872:AI生成失败`)}: ${e.message}`)}finally{t.value=!1}}}let r=Q(),u=Ee(),d=z(``),{loadingState:f,show:p,hide:g,setText:_}=Zn(),{successState:x}=$n(),S=z(!1),T=z(``),E=i({get:()=>u.isStandardCommit,set:e=>{u.isStandardCommit=e}}),D=z(`feat`),O=z(``),A=z(``),j=z(``),M=z(``),P=z([]),ee=z(!1),I=z([]),L=z(!1),te=z(!1),ne=i({get:()=>u.skipHooks,set:e=>{u.skipHooks=e}}),V=i({get:()=>u.autoQuickPushOnEnter,set:e=>{u.autoQuickPushOnEnter=e}}),re=z(null),H=z(!1),ae=i(()=>[{value:`feat`,label:`feat: ${X(`@76872:新功能`)}`},{value:`fix`,label:`fix: ${X(`@76872:修复bug`)}`},{value:`docs`,label:`docs: ${X(`@76872:文档修改`)}`},{value:`style`,label:`style: ${X(`@76872:样式修改`)}`},{value:`refactor`,label:`refactor: ${X(`@76872:代码重构`)}`},{value:`test`,label:`test: ${X(`@76872:测试代码`)}`},{value:`chore`,label:`chore: ${X(`@76872:构建/工具修改`)}`}]),oe=z([]),se=i(()=>{if(!E.value)return d.value||T.value;let e=`${D.value||``}`;return O.value&&(e+=`(${O.value})`),e+=`: ${A.value}`,j.value&&(e+=`\n\n${j.value}`),M.value&&(e+=`\n\n${M.value}`),e}),U=i(()=>E.value?(r.isMergeInProgress||(D.value||``).trim()!==``)&&(A.value||``).trim()!==``:d.value.trim()!==``),ce=i(()=>r.hasConflictedFiles?!0:r.isMergeInProgress?!U.value:!r.fileList.some(e=>!Fe(e.path,u.lockedFiles))||!U.value),W=i(()=>{let e=`${X(`@76872:输入提交信息 (默认: `)}${T.value})`;return V.value?`${e}${X(`@76872:(按回车一键推送)`)}`:e}),ue=i(()=>{let e=X(`@76872:简短描述(必填)`);return V.value?X(`@76872:简短描述(必填,按回车一键推送)`):e}),de=i(()=>{let e=`git commit -m "${se.value}"`;return ne.value&&(e+=` --no-verify`),e});function K(){let e=u.config;e&&(T.value=e.defaultCommitMessage||``,e.descriptionTemplates&&Array.isArray(e.descriptionTemplates)&&(P.value=e.descriptionTemplates),e.scopeTemplates&&Array.isArray(e.scopeTemplates)&&(I.value=e.scopeTemplates),e.messageTemplates&&Array.isArray(e.messageTemplates)&&(oe.value=e.messageTemplates))}function fe(e){A.value=e,ee.value=!1}function me(e){O.value=e,L.value=!1}function ge(){ee.value=!0}function _e(){L.value=!0}function ve(){d.value=``,A.value=``,j.value=``,M.value=``,D.value=`feat`,u.autoSetDefaultMessage&&u.defaultCommitMessage&&(E.value?A.value=u.defaultCommitMessage:d.value=u.defaultCommitMessage)}function ye(){p({text:X(`@76872:正在暂存文件…`),showProgress:!1})}function be(){g()}function xe(e){if(g(),e){S.value=!0;try{setTimeout(async()=>{try{console.log(X(`@76872:推送成功,状态已更新`))}catch(e){console.error(`一键推送后处理失败:`,e)}finally{S.value=!1}},1e3)}catch(e){console.error(`一键推送后处理失败:`,e),S.value=!1}}}function Ce(e){d.value=e,te.value=!1}async function Z(e){if(!V.value||!U.value)return;let t=r.fileList.some(e=>!Fe(e.path,u.lockedFiles)),n=r.hasConflictedFiles;if(t&&U.value&&r.hasUpstream&&!n&&e.key===`Enter`&&!e.shiftKey){e.preventDefault();try{await re.value?.triggerQuickPush()}catch(e){console.error(`回车自动一键提交失败:`,e)}}}async function De(e){try{await u.saveDefaultMessage(e)&&R.success(X(`@76872:默认提交信息设置成功`))}catch(e){R.error(`${X(`@76872:设置默认提交信息失败: `)}${e.message}`)}}G(()=>r.pendingMergeMessage,e=>{e&&(E.value?(D.value=``,A.value=e):d.value=e,r.pendingMergeMessage=``,R.info(X(`@76872:已自动填充合并提交信息`)))}),G(()=>r.isAddingFiles,e=>{e&&f.visible&&_(X(`@76872:正在暂存文件…`))}),G(()=>r.isCommiting,e=>{e&&f.visible&&_(X(`@76872:正在提交更改...`))}),G(()=>r.isPushing,e=>{e&&f.visible&&g()}),m(async()=>{G(()=>u.config,K,{immediate:!0}),u.config||await u.loadConfig(),u.autoSetDefaultMessage&&u.defaultCommitMessage&&(E.value?A.value||=u.defaultCommitMessage:d.value||=u.defaultCommitMessage),r.pendingMergeMessage&&(E.value?(D.value=``,A.value=r.pendingMergeMessage):d.value=r.pendingMergeMessage,r.pendingMergeMessage=``,R.info(X(`@76872:已自动填充合并提交信息`)))});function Oe(e,t){t([...e?P.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):P.value.map(e=>({value:e})),{value:`⚙️ 管理模板…`,isSettings:!0}])}function Ae(e,t){t([...e?I.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):I.value.map(e=>({value:e})),{value:`⚙️ 管理模板…`,isSettings:!0}])}function je(e){e.isSettings?(ge(),A.value=``):A.value=e.value}function Me(e){e.isSettings?(_e(),O.value=``):O.value=e.value}function Ne(e,t){t([...e?oe.value.filter(t=>t.toLowerCase().includes(e.toLowerCase())).map(e=>({value:e})):oe.value.map(e=>({value:e})),{value:`⚙️ 管理模板…`,isSettings:!0}])}function Ie(e){e.isSettings?(te.value=!0,d.value=``):d.value=e.value}return(e,i)=>{let u=h,p=Bn,m=l,g=Se,_=b,T=c,P=N;return F(),a(Y,null,[J(`div`,{class:q([`card app-card`,{"is-pushing":s(r).isPushing}])},[J(`div`,Wr,[J(`div`,Gr,[s(r).userName!==``&&s(r).userEmail!==``?(F(),k(ur,{key:0,ref_key:`gitActionButtonsRef`,ref:re,"has-user-commit-message":U.value,"final-commit-message":se.value,"skip-hooks":ne.value,onAfterCommit:i[0]||=e=>{e&&ve()},onAfterPush:xe,onBeforePush:ye,onPushStart:be,onClearFields:ve},null,8,[`has-user-commit-message`,`final-commit-message`,`skip-hooks`])):o(``,!0)]),J(`div`,Kr,[v(we,{tooltip:s(X)(`@76872:AI生成提交信息`),"icon-class":t.value?``:`ai-commit`,size:`medium`,disabled:t.value,onClick:n},{default:B(()=>[t.value?(F(),k(u,{key:0,class:`is-loading`},{default:B(()=>[v(s(y))]),_:1})):o(``,!0)]),_:1},8,[`tooltip`,`icon-class`,`disabled`]),v(Ur),v(p,{class:`ml-auto`,variant:`icon`})])]),J(`div`,qr,[J(`div`,Jr,[s(r).userName===``||s(r).userEmail===``?(F(),a(`div`,Yr,[v(m,{title:s(X)(`@76872:Git用户信息未配置`),type:`warning`,closable:!1,"show-icon":``},{default:B(()=>[J(`p`,null,w(s(X)(`@76872:您需要配置Git用户名和邮箱才能提交代码。请使用以下命令配置:`)),1),i[11]||=J(`pre`,{class:`config-command`},`git config --global user.name "Your Name"
|
|
6
|
+
git config --global user.email "your.email@example.com"`,-1)]),_:1},8,[`title`])])):(F(),a(Y,{key:1},[s(r).isMergeInProgress?(F(),a(`div`,Xr,[v(m,{title:s(X)(`@76872:合并进行中`),type:`warning`,closable:!1,"show-icon":``},{default:B(()=>[J(`span`,null,w(s(X)(`@76872:分支合并尚未完成,请输入提交信息后点击「提交」按钮完成合并。`)),1)]),_:1},8,[`title`])])):o(``,!0),J(`div`,Zr,[E.value?(F(),a(`div`,ei,[J(`div`,ti,[J(`div`,ni,[v(T,{modelValue:D.value,"onUpdate:modelValue":i[2]||=e=>D.value=e,placeholder:s(X)(`@76872:提交类型`),class:`type-select`,clearable:``},{default:B(()=>[(F(!0),a(Y,null,C(ae.value,e=>(F(),k(_,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`]),J(`div`,ri,[v(g,{modelValue:O.value,"onUpdate:modelValue":i[3]||=e=>O.value=e,"fetch-suggestions":Ae,placeholder:s(X)(`@76872:作用域(可选)`),class:`scope-input`,clearable:``,onSelect:Me},null,8,[`modelValue`,`placeholder`])]),J(`div`,ii,[v(g,{modelValue:A.value,"onUpdate:modelValue":i[4]||=e=>A.value=e,"fetch-suggestions":Oe,placeholder:ue.value,class:`description-input`,clearable:``,onSelect:je,onKeydown:Z},null,8,[`modelValue`,`placeholder`])])])]),J(`button`,{type:`button`,class:`advanced-options-toggle`,"aria-expanded":H.value,onClick:i[5]||=e=>H.value=!H.value},[J(`span`,null,w(H.value?s(X)(`@76872:收起`):s(X)(`@76872:正文及页脚`)),1),v(u,{class:q([`toggle-icon`,{"is-active":H.value}])},{default:B(()=>[v(s(pe))]),_:1},8,[`class`])],8,ai),le(J(`div`,oi,[v(P,{modelValue:j.value,"onUpdate:modelValue":i[6]||=e=>j.value=e,type:`textarea`,rows:4,placeholder:s(X)(`@76872:正文(可选):详细描述本次提交的内容和原因`),class:`body-input`,clearable:``},null,8,[`modelValue`,`placeholder`]),v(P,{modelValue:M.value,"onUpdate:modelValue":i[7]||=e=>M.value=e,placeholder:s(X)(`@76872:页脚(可选):如 Closes #123`),class:`footer-input`,clearable:``},null,8,[`modelValue`,`placeholder`])],512),[[ie,H.value]])])):(F(),a(`div`,Qr,[J(`div`,$r,[v(g,{modelValue:d.value,"onUpdate:modelValue":i[1]||=e=>d.value=e,"fetch-suggestions":Ne,placeholder:W.value,type:`textarea`,rows:3,resize:`none`,class:`commit-message-input`,onSelect:Ie,onKeydown:Z},null,8,[`modelValue`,`placeholder`])])])),ce.value?o(``,!0):(F(),k(Pe,{key:2,command:de.value,title:s(X)(`@76872:提交命令预览:`),placeholder:`git commit -m "<提交信息>"`},null,8,[`command`,`title`]))])],64))])])],2),v(ke,{visible:ee.value,"onUpdate:visible":i[8]||=e=>ee.value=e,type:`description`,title:s(X)(`@76872:简短描述模板设置`),placeholder:s(X)(`@76872:输入新模板内容`),"edit-placeholder":s(X)(`@76872:编辑模板内容`),"empty-description":s(X)(`@76872:暂无保存的模板`),onUseTemplate:fe},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),v(ke,{visible:L.value,"onUpdate:visible":i[9]||=e=>L.value=e,type:`scope`,title:s(X)(`@76872:作用域模板设置`),placeholder:s(X)(`@76872:输入新作用域模板`),"edit-placeholder":s(X)(`@76872:编辑作用域模板内容`),"empty-description":s(X)(`@76872:暂无保存的作用域`),onUseTemplate:me},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),v(ke,{visible:te.value,"onUpdate:visible":i[10]||=e=>te.value=e,type:`message`,title:s(X)(`@76872:默认提交信息设置`),placeholder:s(X)(`@76872:输入新模板内容`),"edit-placeholder":s(X)(`@76872:编辑模板内容`),"empty-description":s(X)(`@76872:暂无保存的模板`),"show-default-section":!0,"show-help-text":!0,onUseTemplate:Ce,onSetDefault:De},null,8,[`visible`,`title`,`placeholder`,`edit-placeholder`,`empty-description`]),v(he,{name:`el-fade-in-linear`},{default:B(()=>[S.value?(F(),a(`div`,si,[v(u,{class:`is-loading`},{default:B(()=>[v(s(y))]),_:1}),J(`span`,null,w(s(X)(`@76872:更新状态中...`)),1)])):o(``,!0)]),_:1}),v(Gn,{visible:s(f).visible,text:s(f).text,"show-progress":s(f).showProgress,progress:s(f).progress},null,8,[`visible`,`text`,`show-progress`,`progress`]),v(Xn,{visible:s(x).visible,text:s(x).text,description:s(x).description},null,8,[`visible`,`text`,`description`]),v(he,{name:`el-fade-in-linear`},{default:B(()=>[S.value?(F(),a(`div`,ci,[v(u,{class:`is-loading`},{default:B(()=>[v(s(y))]),_:1}),J(`span`,null,w(s(X)(`@76872:更新状态中...`)),1)])):o(``,!0)]),_:1})],64)}}}),[[`__scopeId`,`data-v-300e12fc`]]);export{li as default};
|