zen-gitsync 2.12.7 → 2.12.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -2
- package/package.json +1 -1
- package/src/ui/public/assets/{EditorView-DK-Xgt7r.css → EditorView-DEd8QuPp.css} +1 -1
- package/src/ui/public/assets/EditorView-DkH7PwMR.js +0 -0
- package/src/ui/public/assets/SourceMapView-BG6MIju7.js +3 -0
- package/src/ui/public/assets/SourceMapView-P9hbpXgz.css +1 -0
- package/src/ui/public/assets/WorkbenchView-CDKIBwuO.css +1 -0
- package/src/ui/public/assets/WorkbenchView-DgwZOvhW.js +1 -0
- package/src/ui/public/assets/_plugin-vue_export-helper-opDPZuCO.js +9 -0
- package/src/ui/public/assets/index-DPihtJfT.js +65 -0
- package/src/ui/public/assets/{index-a-r8YYZJ.css → index-tejX3YgJ.css} +1 -1
- package/src/ui/public/assets/{vendor-BMFU1ekz.js → vendor-A4IPqbyo.js} +204 -204
- package/src/ui/public/assets/{vendor-BPPhhD0O.css → vendor-DpYOE9sy.css} +1 -1
- package/src/ui/public/index.html +5 -4
- package/src/ui/server/index.js +9 -0
- package/src/ui/server/routes/workbench.js +873 -0
- package/src/ui/public/assets/EditorView-DDyMmxPI.js +0 -0
- package/src/ui/public/assets/SourceMapView-DakscAmd.js +0 -3
- package/src/ui/public/assets/SourceMapView-DyMK80hS.css +0 -1
- package/src/ui/public/assets/index-CPUqt5Ue.js +0 -73
package/README.md
CHANGED
|
@@ -21,6 +21,7 @@ A Git automation platform with interactive commits, scheduled sync, custom comma
|
|
|
21
21
|
- [Project Startup](#project-startup)
|
|
22
22
|
- [Built-in Code Editor](#built-in-code-editor)
|
|
23
23
|
- [Source Map](#source-map-ai-codebase-visualization)
|
|
24
|
+
- [Workbench](#workbench-task-driven-claude-execution)
|
|
24
25
|
- [Settings](#settings)
|
|
25
26
|
- [CLI Commands](#cli-commands)
|
|
26
27
|
|
|
@@ -50,7 +51,10 @@ npm install -g zen-gitsync
|
|
|
50
51
|
- **Project startup** — Auto-run commands or workflows when a project opens
|
|
51
52
|
- **Built-in code editor** — Monaco-based file editor with Markdown preview
|
|
52
53
|
- **Source map** — AI-generated interactive codebase dependency graph
|
|
54
|
+
- **Workbench** — task-driven Claude execution with prompt presets, subtask splitting, isolated bypass-permissions windows, live stdout streaming, AI-generated presets, and sub-task file attachments
|
|
55
|
+
- **Reset to remote** — One-click `git reset --hard origin/<branch>` from the Git panel (auto-refreshes branch info first to avoid wrong-target resets)
|
|
53
56
|
- **AI commit message** — Generate commit message from staged diff automatically
|
|
57
|
+
- **Selection-scoped diff** — AI commit message and quick commit/push use only the diff of currently selected files when the Git view is the active tab
|
|
54
58
|
- **Commit templates** — Save type/scope/description/message templates
|
|
55
59
|
- **Theme & language** — Light/dark theme and Chinese/English UI
|
|
56
60
|
|
|
@@ -65,7 +69,7 @@ $ g ui
|
|
|
65
69
|
|
|
66
70
|

|
|
67
71
|
|
|
68
|
-
The GUI runs as a local web server and opens in your default browser. It attaches to the current Git repository automatically. The activity bar on the left switches between
|
|
72
|
+
The GUI runs as a local web server and opens in your default browser. It attaches to the current Git repository automatically. The activity bar on the left switches between four views: **Git**, **Editor**, **Source Map**, and **Workbench**.
|
|
69
73
|
|
|
70
74
|
---
|
|
71
75
|
|
|
@@ -83,6 +87,7 @@ The GUI runs as a local web server and opens in your default browser. It attache
|
|
|
83
87
|
| Push | Push to remote with live progress modal |
|
|
84
88
|
| Quick commit+push | One-click stage → commit → push |
|
|
85
89
|
| Pull / Fetch | Pull from or fetch the upstream branch |
|
|
90
|
+
| Reset to remote | One-click `git reset --hard origin/<branch>`; auto-refreshes branch info first to avoid stale-branch targets; hidden when working tree is clean and no unpushed commits |
|
|
86
91
|
| Merge | Merge another branch; detects and surfaces in-progress merge state |
|
|
87
92
|
| Diff viewer | Monaco-based side-by-side diff for any changed file |
|
|
88
93
|
| Commit log | Browse commit history with author, date, branch tags, and changed files |
|
|
@@ -232,6 +237,29 @@ Configure the model endpoint, API key, and model name in **Settings → AI**.
|
|
|
232
237
|
|
|
233
238
|
---
|
|
234
239
|
|
|
240
|
+
### Workbench (Task-Driven Claude Execution)
|
|
241
|
+
|
|
242
|
+
A dedicated view (fourth icon in the activity bar) for batch-running Claude against your repo. Define a task, split it into ordered subtasks, attach a reusable prompt preset, then click **Run task** — each subtask launches in its own terminal window with `claude --permission-mode bypassPermissions`, so context never piles up.
|
|
243
|
+
|
|
244
|
+
| Feature | Description |
|
|
245
|
+
|---|---|
|
|
246
|
+
| Task list | Create, edit, delete tasks; each shows its subtask count |
|
|
247
|
+
| Subtask breakdown | Add / edit / remove subtasks per task, with per-subtask status |
|
|
248
|
+
| Subtask attachments | Attach up to 9 files per subtask (image / PDF / text / Markdown / CSV / JSON / log, ≤ 5 MB each); their absolute paths are appended to the prompt so Claude reads them directly |
|
|
249
|
+
| Prompt presets | Reusable prompt templates with `{{task.title}}` / `{{task.desc}}` / `{{sub.title}}` / `{{sub.desc}}` / `{{repo.path}}` / `{{branch}}` variable interpolation |
|
|
250
|
+
| AI prompt generation | "New / Edit preset" dialog has an **AI Generate** button — the server reads the current project tree (depth 2) + README + manifests (package.json / pyproject.toml / go.mod / Cargo.toml / …) and asks the configured LLM to draft a project-aware preset (name + body) |
|
|
251
|
+
| Per-subtask override | Override the preset's content for a specific subtask in its description field |
|
|
252
|
+
| Sequential execution | Runs subtasks in declared order; the next one starts only after the previous process exits |
|
|
253
|
+
| Pipe-mode launcher | Spawns `claude -p "<prompt>" --output-format text --permission-mode bypassPermissions --dangerously-skip-permissions` with stdout/stderr piped to the server — no external terminal window is opened, so output streams directly into the UI |
|
|
254
|
+
| Isolated windows | Every subtask runs as its own detached process with fresh context, so memory and conversation state never accumulate across subtasks |
|
|
255
|
+
| Live log | Each running subtask has an expandable "执行日志 / Execution log" panel that auto-scrolls and shows accumulated `stdout` + `stderr` (capped at 256 KB server-side, last 64 KB rendered client-side) |
|
|
256
|
+
| Live status | Subtask status (todo / pending / running / done / error) and PID stream in real time over SSE |
|
|
257
|
+
| Cross-view indicator | While any Workbench subtask is running, a pulsing dot appears on the Workbench icon in the Activity Bar so you can see job state from the Git or Editor view |
|
|
258
|
+
|
|
259
|
+
Prompt presets and tasks are persisted to `~/.zen-gitsync/prompts.json` and `~/.zen-gitsync/tasks.json` (cross-project, shared across repos).
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
235
263
|
### Settings
|
|
236
264
|
|
|
237
265
|
| Setting | Description |
|
|
@@ -371,6 +399,7 @@ $ g --check-lock=config.json
|
|
|
371
399
|
- [项目启动](#项目启动)
|
|
372
400
|
- [内置代码编辑器](#内置代码编辑器)
|
|
373
401
|
- [源码地图](#源码地图ai-代码库可视化)
|
|
402
|
+
- [工作台](#工作台任务驱动的-claude-执行)
|
|
374
403
|
- [设置](#设置)
|
|
375
404
|
- [命令行](#命令行)
|
|
376
405
|
|
|
@@ -400,7 +429,10 @@ npm install -g zen-gitsync
|
|
|
400
429
|
- **项目启动** — 打开项目时自动运行命令或工作流
|
|
401
430
|
- **内置代码编辑器** — 基于 Monaco 的文件编辑器,支持 Markdown 预览
|
|
402
431
|
- **源码地图** — AI 生成的交互式代码库依赖关系图
|
|
432
|
+
- **工作台** — 任务驱动的 Claude 执行视图:提示词预置、子任务拆分、独立 bypass-permissions 进程、stdout 实时回传、AI 自动生成预置提示词、子任务附件
|
|
433
|
+
- **重置到远程** — 在 Git 面板一键执行 `git reset --hard origin/<branch>`(点击前会先自动刷新分支信息,避免重置到陈旧分支)
|
|
403
434
|
- **AI 生成提交信息** — 基于 staged diff 自动生成提交消息
|
|
435
|
+
- **选择模式差异** — 当 Git 视图为当前激活标签时,AI 生成提交信息与一键提交/推送仅作用于当前勾选文件的 diff
|
|
404
436
|
- **提交模板** — 保存类型/范围/描述/完整提交信息模板
|
|
405
437
|
- **主题与语言** — 支持明/暗主题,中英文界面切换
|
|
406
438
|
|
|
@@ -415,7 +447,7 @@ $ g ui
|
|
|
415
447
|
|
|
416
448
|

|
|
417
449
|
|
|
418
|
-
GUI 以本地 Web 服务器形式运行,自动在浏览器中打开,并附加到当前 Git 仓库。左侧 Activity Bar
|
|
450
|
+
GUI 以本地 Web 服务器形式运行,自动在浏览器中打开,并附加到当前 Git 仓库。左侧 Activity Bar 可在四个视图之间切换:**Git**、**编辑器**、**源码地图**、**工作台**。
|
|
419
451
|
|
|
420
452
|
---
|
|
421
453
|
|
|
@@ -433,6 +465,7 @@ GUI 以本地 Web 服务器形式运行,自动在浏览器中打开,并附
|
|
|
433
465
|
| 推送 | 推送到远程,实时显示进度弹窗 |
|
|
434
466
|
| 快速提交+推送 | 一键完成暂存 → 提交 → 推送 |
|
|
435
467
|
| 拉取 / Fetch | 从上游拉取或仅获取远程信息 |
|
|
468
|
+
| 重置到远程 | 一键执行 `git reset --hard origin/<branch>`;点击前会先刷新分支信息,避免重置到陈旧分支;当工作区干净且无未推送提交时按钮自动隐藏 |
|
|
436
469
|
| 合并 | 合并其他分支,自动检测并引导处理合并中间状态 |
|
|
437
470
|
| Diff 查看器 | 基于 Monaco 编辑器的并排文件差异视图 |
|
|
438
471
|
| 提交日志 | 浏览历史提交(作者、时间、分支标签、变更文件) |
|
|
@@ -582,6 +615,29 @@ Activity Bar 第三个视图,调用 AI 模型将项目代码库生成可交互
|
|
|
582
615
|
|
|
583
616
|
---
|
|
584
617
|
|
|
618
|
+
### 工作台(任务驱动的 Claude 执行)
|
|
619
|
+
|
|
620
|
+
Activity Bar 第四个视图,用于在当前仓库上批量调度 Claude:定义任务、拆成有序子任务、绑定可复用的提示词预置,点 **执行任务** 后按顺序依次执行。
|
|
621
|
+
|
|
622
|
+
| 功能 | 说明 |
|
|
623
|
+
|---|---|
|
|
624
|
+
| 任务列表 | 新建、编辑、删除任务;每条任务显示子任务数量 |
|
|
625
|
+
| 子任务拆分 | 增删改子任务,实时显示每个子任务的执行状态 |
|
|
626
|
+
| 子任务附件 | 每个子任务最多挂 9 个附件(图片 / PDF / 文本 / Markdown / CSV / JSON / log,单个 ≤ 5 MB);执行时绝对路径会自动追加到 prompt 末尾,Claude 直接按路径读取 |
|
|
627
|
+
| 提示词预置 | 可复用提示词模板,支持 `{{task.title}}` / `{{task.desc}}` / `{{sub.title}}` / `{{sub.desc}}` / `{{repo.path}}` / `{{branch}}` 变量插值 |
|
|
628
|
+
| AI 生成预置 | 「新建 / 编辑预置」对话框内置 **AI 生成** 按钮:服务端读取当前项目目录树(depth=2)+ README + 9 种 manifest(package.json / pyproject.toml / go.mod / Cargo.toml …),调用已配置的 LLM 一键产出贴合项目结构的提示词(名称 + 正文),生成后用户可继续手动调整再保存 |
|
|
629
|
+
| 子任务覆盖 | 在子任务描述框可独立覆盖预置提示词的内容 |
|
|
630
|
+
| 顺序执行 | 按声明顺序依次执行子任务;上一个进程退出后才启动下一个 |
|
|
631
|
+
| 管道模式启动 | 直接以 `claude -p "<prompt>" --output-format text --permission-mode bypassPermissions --dangerously-skip-permissions` 拉起进程,stdout / stderr 通过管道回传服务端,不再弹外部终端窗口 |
|
|
632
|
+
| 独立上下文 | 每个子任务都是独立的 detached 进程,上下文与状态不会跨子任务累积 |
|
|
633
|
+
| 实时日志 | 正在执行的子任务可展开「执行日志」面板,自动滚到底,展示累积的 stdout / stderr(服务端缓存 256 KB,客户端渲染最近 64 KB) |
|
|
634
|
+
| 实时状态 | 子任务状态(todo / pending / running / done / error)和 PID 通过 SSE 实时推送 |
|
|
635
|
+
| 跨视图指示 | 任意子任务运行中时,Activity Bar 上的工作台图标会显示脉动小圆点;切换到 Git 或编辑器视图也能看到运行状态 |
|
|
636
|
+
|
|
637
|
+
提示词预置与任务数据持久化到 `~/.zen-gitsync/prompts.json` 和 `~/.zen-gitsync/tasks.json`(跨项目共享)。子任务附件落盘在 `~/.zen-gitsync/workbench-images/<subId>/`。
|
|
638
|
+
|
|
639
|
+
---
|
|
640
|
+
|
|
585
641
|
### 设置
|
|
586
642
|
|
|
587
643
|
| 设置项 | 说明 |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zen-gitsync",
|
|
3
|
-
"version": "2.12.
|
|
3
|
+
"version": "2.12.8",
|
|
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",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.md-preview[data-v-e8ca9eee]{color:inherit;word-break:break-word;padding:20px 24px;font-size:14px;line-height:1.6}.md-preview[data-v-e8ca9eee] h1,.md-preview[data-v-e8ca9eee] h2,.md-preview[data-v-e8ca9eee] h3,.md-preview[data-v-e8ca9eee] h4,.md-preview[data-v-e8ca9eee] h5,.md-preview[data-v-e8ca9eee] h6{border-bottom:1px solid var(--border-color,#d0d7de);margin-top:24px;margin-bottom:16px;padding-bottom:.3em;font-weight:600}.md-preview[data-v-e8ca9eee] h1{font-size:1.8em}.md-preview[data-v-e8ca9eee] h2{font-size:1.4em}.md-preview[data-v-e8ca9eee] h3{font-size:1.2em}.md-preview[data-v-e8ca9eee] p{margin:0 0 14px}.md-preview[data-v-e8ca9eee] a{color:var(--link-color,#0969da);text-decoration:none}.md-preview[data-v-e8ca9eee] a:hover{text-decoration:underline}.md-preview[data-v-e8ca9eee] code{background:var(--code-bg,#f6f8fa);border-radius:4px;padding:2px 5px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:87%}.md-preview[data-v-e8ca9eee] pre{background:var(--code-bg,#f6f8fa);border-radius:6px;margin:0 0 16px;padding:14px 16px;overflow:auto}.md-preview[data-v-e8ca9eee] pre code{background:0 0;padding:0;font-size:100%}.md-preview[data-v-e8ca9eee] blockquote{border-left:3px solid var(--border-color,#d0d7de);color:var(--text-secondary,#656d76);margin:0 0 16px;padding:0 16px}.md-preview[data-v-e8ca9eee] img{border-radius:4px;max-width:100%}.md-preview[data-v-e8ca9eee] hr{border:none;border-top:1px solid var(--border-color,#d0d7de);margin:24px 0}.md-preview[data-v-e8ca9eee] table{border-collapse:collapse;width:100%;margin-bottom:16px}.md-preview[data-v-e8ca9eee] th,.md-preview[data-v-e8ca9eee] td{border:1px solid var(--border-color,#d0d7de);padding:6px 13px}.md-preview[data-v-e8ca9eee] thead tr{background:var(--code-bg,#f6f8fa)}.md-preview[data-v-e8ca9eee] ul,.md-preview[data-v-e8ca9eee] ol{margin-bottom:16px;padding-left:2em}.md-preview[data-v-e8ca9eee] li{margin:4px 0}.md-segment[data-v-e8ca9eee]{display:block}.md-mindmap[data-v-e8ca9eee]{border:1px solid var(--border-color,#d0d7de);background:var(--bg-panel,#fff);border-radius:8px;margin:18px 0 28px;overflow:hidden}.md-mindmap-title[data-v-e8ca9eee]{color:var(--text-secondary,#656d76);background:var(--code-bg,#f6f8fa);border-bottom:1px solid var(--border-color,#d0d7de);letter-spacing:.5px;padding:8px 12px;font-size:12px;font-weight:600}.md-mindmap-canvas[data-v-e8ca9eee]{width:100%;height:480px;display:block}.mindmap-preview[data-v-acae9330]{background:var(--bg-container,#fff);flex-direction:column;width:100%;height:100%;display:flex}.mindmap-preview-header[data-v-acae9330]{border-bottom:1px solid var(--border-color,#d0d7de);background:var(--bg-panel,#f6f8fa);align-items:center;gap:12px;padding:8px 14px;font-size:12px;display:flex}.mindmap-preview-title[data-v-acae9330]{color:var(--text-primary,#1f2328);letter-spacing:.5px;font-weight:600}.mindmap-preview-hint[data-v-acae9330]{color:var(--text-secondary,#656d76);font-size:11px}.mindmap-preview-canvas[data-v-acae9330]{flex:1;width:100%;min-height:0}.mindmap-preview-canvas[data-v-acae9330] .zm-mindmap,.mindmap-preview-canvas[data-v-acae9330]>*{width:100%;height:100%}.editor-view[data-v-165ffaa9]{background:var(--bg-container);border:1px solid var(--border-color);width:100%;height:100%;box-shadow:var(--shadow-sm);border-radius:0;display:flex;overflow:hidden}.editor-sidebar[data-v-165ffaa9]{border-right:1px solid var(--border-color);background:var(--bg-panel);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.sidebar-header[data-v-165ffaa9]{border-bottom:1px solid var(--border-color);flex-shrink:0;justify-content:space-between;align-items:center;padding:8px 10px 6px;display:flex}.sidebar-title[data-v-165ffaa9]{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11px;font-weight:700}.sidebar-action-btn[data-v-165ffaa9]{cursor:pointer;color:var(--text-tertiary);border-radius:var(--radius-base);background:0 0;border:none;align-items:center;padding:3px;display:flex}.sidebar-action-btn[data-v-165ffaa9]:hover{color:var(--text-primary);background:var(--bg-hover)}.sidebar-tree[data-v-165ffaa9]{flex:1;padding:4px 0;overflow:hidden auto}.tree-node[data-v-165ffaa9]{cursor:pointer;-webkit-user-select:none;user-select:none;height:24px;color:var(--text-primary);white-space:nowrap;border-radius:4px;align-items:center;gap:4px;padding-right:8px;font-size:13px;transition:background .1s;display:flex;overflow:hidden}.tree-node[data-v-165ffaa9]:hover{background:var(--bg-hover)}.tree-node--active[data-v-165ffaa9]{color:var(--color-primary);background:#3b82f61f}.tree-node--selected[data-v-165ffaa9]{outline-offset:-1px;background:#63b3ed26;outline:1px solid #63b3ed59}.tree-arrow[data-v-165ffaa9]{color:var(--text-tertiary);flex-shrink:0;align-items:center;width:12px;transition:transform .15s;display:flex}.tree-arrow.expanded[data-v-165ffaa9]{transform:rotate(90deg)}.tree-arrow-spacer[data-v-165ffaa9]{flex-shrink:0;width:12px}.tree-icon[data-v-165ffaa9]{flex-shrink:0;align-items:center;font-size:14px;line-height:1;display:flex}.tree-icon.mit-icon[data-v-165ffaa9]{fill:currentColor;vertical-align:middle;width:14px;height:14px;display:inline-block}.tree-icon--dir[data-v-165ffaa9]{color:#e8b84b}.tree-name[data-v-165ffaa9]{text-overflow:ellipsis;flex:1;min-width:0;font-size:13px;overflow:hidden}.tree-loading[data-v-165ffaa9]{border:1.5px solid var(--color-primary);border-top-color:#0000;border-radius:50%;flex-shrink:0;width:10px;height:10px;animation:.8s linear infinite spin-165ffaa9;display:inline-block}.tree-empty[data-v-165ffaa9]{color:var(--text-tertiary);text-align:center;padding:24px 12px;font-size:12px}.sidebar-loading[data-v-165ffaa9]{flex:1;justify-content:center;align-items:center;display:flex}.spin-icon[data-v-165ffaa9]{border:2px solid var(--color-primary);border-top-color:#0000;border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-165ffaa9;display:inline-block}@keyframes spin-165ffaa9{to{transform:rotate(360deg)}}.editor-resizer[data-v-165ffaa9]{cursor:col-resize;z-index:2;background:0 0;flex-shrink:0;width:6px;transition:background .15s;position:relative}.editor-resizer[data-v-165ffaa9]:after{content:"";background:var(--color-gray-300);border-radius:2px;width:2px;height:32px;transition:background .15s,height .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.editor-resizer[data-v-165ffaa9]:hover{background:#3b82f60f}.editor-resizer[data-v-165ffaa9]:hover:after{background:var(--color-primary);height:48px;box-shadow:0 0 8px #3b82f666}.editor-main[data-v-165ffaa9]{flex-direction:column;flex:1;display:flex;overflow:hidden}.editor-tabs[data-v-165ffaa9]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);scrollbar-width:none;flex-shrink:0;display:flex;overflow:auto hidden}.editor-tabs[data-v-165ffaa9]::-webkit-scrollbar{display:none}.editor-tab[data-v-165ffaa9]{border-right:1px solid var(--border-color);cursor:pointer;height:34px;color:var(--text-secondary);-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:6px;min-width:80px;max-width:200px;padding:0 12px;font-size:12.5px;transition:background .1s,color .1s;display:flex}.editor-tab[data-v-165ffaa9]:hover{background:var(--bg-hover);color:var(--text-primary)}.editor-tab.active[data-v-165ffaa9]{background:var(--bg-container);color:var(--text-primary);border-bottom:2px solid var(--color-primary)}.tab-name[data-v-165ffaa9]{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tab-dirty-dot[data-v-165ffaa9]{background:var(--color-warning);border-radius:50%;flex-shrink:0;width:6px;height:6px}.tab-close[data-v-165ffaa9]{cursor:pointer;color:var(--text-tertiary);opacity:0;background:0 0;border:none;border-radius:3px;flex-shrink:0;align-items:center;padding:2px;transition:opacity .1s,background .1s;display:flex}.editor-tab:hover .tab-close[data-v-165ffaa9],.editor-tab.active .tab-close[data-v-165ffaa9]{opacity:1}.tab-close[data-v-165ffaa9]:hover{background:var(--bg-hover);color:var(--color-danger)}.editor-empty[data-v-165ffaa9]{color:var(--text-tertiary);-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex}.editor-empty p[data-v-165ffaa9]{margin:0}.editor-empty-hint[data-v-165ffaa9]{opacity:.6;font-size:11px}.monaco-container[data-v-165ffaa9]{flex:1;min-width:0;overflow:hidden}.monaco-container.hidden[data-v-165ffaa9]{display:none}.image-tab-placeholder[data-v-165ffaa9]{justify-content:center;align-items:center;gap:var(--spacing-sm);color:var(--text-secondary);background:var(--bg-container);text-align:center;padding:var(--spacing-lg);flex-direction:column;flex:1;display:flex}.image-tab-placeholder-title[data-v-165ffaa9]{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--text-primary);word-break:break-all;margin:0}.image-tab-placeholder-hint[data-v-165ffaa9]{font-size:var(--font-size-sm);color:var(--text-tertiary);margin:0}.editor-body[data-v-165ffaa9]{flex:1;min-height:0;display:flex;overflow:hidden}.preview-resizer[data-v-165ffaa9]{cursor:col-resize;z-index:2;background:0 0;flex-shrink:0;order:99;width:6px;margin-left:auto;transition:background .15s;position:relative}.preview-resizer[data-v-165ffaa9]:after{content:"";background:var(--color-gray-300);border-radius:2px;width:2px;height:32px;transition:background .15s,height .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.preview-resizer[data-v-165ffaa9]:hover{background:#3b82f60f}.preview-resizer[data-v-165ffaa9]:hover:after{background:var(--color-primary);height:48px;box-shadow:0 0 8px #3b82f666}.preview-panel[data-v-165ffaa9]{border-left:1px solid var(--border-color);background:var(--bg-panel);flex-direction:column;flex:1 1 0;min-width:200px;display:flex;overflow:hidden}.preview-header[data-v-165ffaa9]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);flex-shrink:0;align-items:center;gap:6px;height:34px;padding:0 10px;display:flex}.preview-title[data-v-165ffaa9]{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11px;font-weight:700}.preview-ext-badge[data-v-165ffaa9]{color:var(--color-primary);letter-spacing:.04em;background:#3b82f626;border-radius:3px;padding:1px 5px;font-size:10px;font-weight:600}.preview-header-spacer[data-v-165ffaa9]{flex:1}.preview-close-btn[data-v-165ffaa9]{cursor:pointer;color:var(--text-tertiary);border-radius:var(--radius-base);background:0 0;border:none;align-items:center;padding:3px;transition:color .1s,background .1s;display:flex}.preview-close-btn[data-v-165ffaa9]:hover{color:var(--color-danger);background:var(--bg-hover)}.preview-body[data-v-165ffaa9]{flex-direction:column;flex:1;display:flex;overflow:hidden}.preview-iframe[data-v-165ffaa9]{background:0 0;border:none;flex:1;width:100%;height:100%}.preview-markdown[data-v-165ffaa9]{background:var(--bg-container,#fff);width:100%;height:100%;color:var(--text-primary,#1f2328);flex:1;overflow:auto}.preview-mindmap[data-v-165ffaa9]{background:var(--bg-container,#fff);flex-direction:column;flex:1;width:100%;height:100%;display:flex;overflow:hidden}.mindmap-toggle-btn.disabled[data-v-165ffaa9]{opacity:.45;cursor:not-allowed}.mindmap-toggle-btn.active[data-v-165ffaa9]{color:#fff;background:linear-gradient(#6366f1 0%,#4f46e5 100%);border-color:#4f46e5}.preview-image-wrap[data-v-165ffaa9]{background:var(--bg-container);flex:1;justify-content:center;align-items:center;padding:16px;display:flex;overflow:auto}.preview-image-wrap img[data-v-165ffaa9]{object-fit:contain;border-radius:4px;max-width:100%;max-height:100%;box-shadow:0 2px 12px #0003}.editor-tabs-spacer[data-v-165ffaa9]{flex:1}.preview-toggle-btn[data-v-165ffaa9]{cursor:pointer;height:34px;color:var(--text-secondary);white-space:nowrap;border:none;border-left:1px solid var(--border-color);background:0 0;flex-shrink:0;align-items:center;gap:5px;padding:0 10px;font-size:12px;transition:background .1s,color .1s;display:flex}.preview-toggle-btn[data-v-165ffaa9]:hover{background:var(--bg-hover);color:var(--text-primary)}.preview-toggle-btn.active[data-v-165ffaa9]{color:var(--color-primary);background:#3b82f614}.sidebar-actions[data-v-165ffaa9]{align-items:center;gap:2px;display:flex}.tree-inline-input-row[data-v-165ffaa9]{cursor:default;background:var(--bg-hover)}.tree-inline-input[data-v-165ffaa9]{background:var(--bg-container);border:1px solid var(--color-primary);min-width:0;height:20px;color:var(--text-primary);border-radius:3px;outline:none;flex:1;padding:0 5px;font-family:inherit;font-size:12.5px}.ctx-menu[data-v-165ffaa9]{z-index:9999;background:var(--bg-panel);border:1px solid var(--border-color);-webkit-user-select:none;user-select:none;border-radius:6px;min-width:160px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000040}.ctx-menu-item[data-v-165ffaa9]{cursor:pointer;width:100%;color:var(--text-primary);text-align:left;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;padding:6px 10px;font-size:12.5px;transition:background .1s;display:flex}.ctx-menu-item[data-v-165ffaa9]:hover{background:var(--bg-hover)}.ctx-menu-item--danger[data-v-165ffaa9]{color:var(--color-danger)}.ctx-menu-item--danger[data-v-165ffaa9]:hover{background:#ef44441a}.ctx-menu-sep[data-v-165ffaa9]{background:var(--border-color);height:1px;margin:4px 2px}
|
|
1
|
+
.md-preview[data-v-d602e5a5]{color:inherit;word-break:break-word;padding:20px 24px;font-size:14px;line-height:1.6}.md-preview[data-v-d602e5a5] h1,.md-preview[data-v-d602e5a5] h2,.md-preview[data-v-d602e5a5] h3,.md-preview[data-v-d602e5a5] h4,.md-preview[data-v-d602e5a5] h5,.md-preview[data-v-d602e5a5] h6{border-bottom:1px solid var(--border-color,#d0d7de);margin-top:24px;margin-bottom:16px;padding-bottom:.3em;font-weight:600}.md-preview[data-v-d602e5a5] h1{font-size:1.8em}.md-preview[data-v-d602e5a5] h2{font-size:1.4em}.md-preview[data-v-d602e5a5] h3{font-size:1.2em}.md-preview[data-v-d602e5a5] p{margin:0 0 14px}.md-preview[data-v-d602e5a5] a{color:var(--link-color,#0969da);text-decoration:none}.md-preview[data-v-d602e5a5] a:hover{text-decoration:underline}.md-preview[data-v-d602e5a5] code{background:var(--code-bg,#f6f8fa);border-radius:4px;padding:2px 5px;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:87%}.md-preview[data-v-d602e5a5] pre{background:var(--code-bg,#f6f8fa);border-radius:6px;margin:0 0 16px;padding:14px 16px;overflow:auto}.md-preview[data-v-d602e5a5] pre code{background:0 0;padding:0;font-size:100%}.md-preview[data-v-d602e5a5] blockquote{border-left:3px solid var(--border-color,#d0d7de);color:var(--text-secondary,#656d76);margin:0 0 16px;padding:0 16px}.md-preview[data-v-d602e5a5] img{border-radius:4px;max-width:100%}.md-preview[data-v-d602e5a5] hr{border:none;border-top:1px solid var(--border-color,#d0d7de);margin:24px 0}.md-preview[data-v-d602e5a5] table{border-collapse:collapse;width:100%;margin-bottom:16px}.md-preview[data-v-d602e5a5] th,.md-preview[data-v-d602e5a5] td{border:1px solid var(--border-color,#d0d7de);padding:6px 13px}.md-preview[data-v-d602e5a5] thead tr{background:var(--code-bg,#f6f8fa)}.md-preview[data-v-d602e5a5] ul,.md-preview[data-v-d602e5a5] ol{margin-bottom:16px;padding-left:2em}.md-preview[data-v-d602e5a5] li{margin:4px 0}.md-segment[data-v-d602e5a5]{display:block}.md-mindmap[data-v-d602e5a5]{border:1px solid var(--border-color,#d0d7de);background:var(--bg-panel,#fff);border-radius:8px;margin:18px 0 28px;overflow:hidden}.md-mindmap-title[data-v-d602e5a5]{color:var(--text-secondary,#656d76);background:var(--code-bg,#f6f8fa);border-bottom:1px solid var(--border-color,#d0d7de);letter-spacing:.5px;padding:8px 12px;font-size:12px;font-weight:600}.md-mindmap-canvas[data-v-d602e5a5]{width:100%;height:480px;display:block}.mindmap-preview[data-v-5988cf1a]{background:var(--bg-container,#fff);flex-direction:column;width:100%;height:100%;display:flex}.mindmap-preview-header[data-v-5988cf1a]{border-bottom:1px solid var(--border-color,#d0d7de);background:var(--bg-panel,#f6f8fa);align-items:center;gap:12px;padding:8px 14px;font-size:12px;display:flex}.mindmap-preview-title[data-v-5988cf1a]{color:var(--text-primary,#1f2328);letter-spacing:.5px;font-weight:600}.mindmap-preview-hint[data-v-5988cf1a]{color:var(--text-secondary,#656d76);font-size:11px}.mindmap-preview-canvas[data-v-5988cf1a]{flex:1;width:100%;min-height:0}.mindmap-preview-canvas[data-v-5988cf1a] .zm-mindmap,.mindmap-preview-canvas[data-v-5988cf1a]>*{width:100%;height:100%}.editor-view[data-v-165ffaa9]{background:var(--bg-container);border:1px solid var(--border-color);width:100%;height:100%;box-shadow:var(--shadow-sm);border-radius:0;display:flex;overflow:hidden}.editor-sidebar[data-v-165ffaa9]{border-right:1px solid var(--border-color);background:var(--bg-panel);flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.sidebar-header[data-v-165ffaa9]{border-bottom:1px solid var(--border-color);flex-shrink:0;justify-content:space-between;align-items:center;padding:8px 10px 6px;display:flex}.sidebar-title[data-v-165ffaa9]{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11px;font-weight:700}.sidebar-action-btn[data-v-165ffaa9]{cursor:pointer;color:var(--text-tertiary);border-radius:var(--radius-base);background:0 0;border:none;align-items:center;padding:3px;display:flex}.sidebar-action-btn[data-v-165ffaa9]:hover{color:var(--text-primary);background:var(--bg-hover)}.sidebar-tree[data-v-165ffaa9]{flex:1;padding:4px 0;overflow:hidden auto}.tree-node[data-v-165ffaa9]{cursor:pointer;-webkit-user-select:none;user-select:none;height:24px;color:var(--text-primary);white-space:nowrap;border-radius:4px;align-items:center;gap:4px;padding-right:8px;font-size:13px;transition:background .1s;display:flex;overflow:hidden}.tree-node[data-v-165ffaa9]:hover{background:var(--bg-hover)}.tree-node--active[data-v-165ffaa9]{color:var(--color-primary);background:#3b82f61f}.tree-node--selected[data-v-165ffaa9]{outline-offset:-1px;background:#63b3ed26;outline:1px solid #63b3ed59}.tree-arrow[data-v-165ffaa9]{color:var(--text-tertiary);flex-shrink:0;align-items:center;width:12px;transition:transform .15s;display:flex}.tree-arrow.expanded[data-v-165ffaa9]{transform:rotate(90deg)}.tree-arrow-spacer[data-v-165ffaa9]{flex-shrink:0;width:12px}.tree-icon[data-v-165ffaa9]{flex-shrink:0;align-items:center;font-size:14px;line-height:1;display:flex}.tree-icon.mit-icon[data-v-165ffaa9]{fill:currentColor;vertical-align:middle;width:14px;height:14px;display:inline-block}.tree-icon--dir[data-v-165ffaa9]{color:#e8b84b}.tree-name[data-v-165ffaa9]{text-overflow:ellipsis;flex:1;min-width:0;font-size:13px;overflow:hidden}.tree-loading[data-v-165ffaa9]{border:1.5px solid var(--color-primary);border-top-color:#0000;border-radius:50%;flex-shrink:0;width:10px;height:10px;animation:.8s linear infinite spin-165ffaa9;display:inline-block}.tree-empty[data-v-165ffaa9]{color:var(--text-tertiary);text-align:center;padding:24px 12px;font-size:12px}.sidebar-loading[data-v-165ffaa9]{flex:1;justify-content:center;align-items:center;display:flex}.spin-icon[data-v-165ffaa9]{border:2px solid var(--color-primary);border-top-color:#0000;border-radius:50%;width:20px;height:20px;animation:.8s linear infinite spin-165ffaa9;display:inline-block}@keyframes spin-165ffaa9{to{transform:rotate(360deg)}}.editor-resizer[data-v-165ffaa9]{cursor:col-resize;z-index:2;background:0 0;flex-shrink:0;width:6px;transition:background .15s;position:relative}.editor-resizer[data-v-165ffaa9]:after{content:"";background:var(--color-gray-300);border-radius:2px;width:2px;height:32px;transition:background .15s,height .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.editor-resizer[data-v-165ffaa9]:hover{background:#3b82f60f}.editor-resizer[data-v-165ffaa9]:hover:after{background:var(--color-primary);height:48px;box-shadow:0 0 8px #3b82f666}.editor-main[data-v-165ffaa9]{flex-direction:column;flex:1;display:flex;overflow:hidden}.editor-tabs[data-v-165ffaa9]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);scrollbar-width:none;flex-shrink:0;display:flex;overflow:auto hidden}.editor-tabs[data-v-165ffaa9]::-webkit-scrollbar{display:none}.editor-tab[data-v-165ffaa9]{border-right:1px solid var(--border-color);cursor:pointer;height:34px;color:var(--text-secondary);-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:6px;min-width:80px;max-width:200px;padding:0 12px;font-size:12.5px;transition:background .1s,color .1s;display:flex}.editor-tab[data-v-165ffaa9]:hover{background:var(--bg-hover);color:var(--text-primary)}.editor-tab.active[data-v-165ffaa9]{background:var(--bg-container);color:var(--text-primary);border-bottom:2px solid var(--color-primary)}.tab-name[data-v-165ffaa9]{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tab-dirty-dot[data-v-165ffaa9]{background:var(--color-warning);border-radius:50%;flex-shrink:0;width:6px;height:6px}.tab-close[data-v-165ffaa9]{cursor:pointer;color:var(--text-tertiary);opacity:0;background:0 0;border:none;border-radius:3px;flex-shrink:0;align-items:center;padding:2px;transition:opacity .1s,background .1s;display:flex}.editor-tab:hover .tab-close[data-v-165ffaa9],.editor-tab.active .tab-close[data-v-165ffaa9]{opacity:1}.tab-close[data-v-165ffaa9]:hover{background:var(--bg-hover);color:var(--color-danger)}.editor-empty[data-v-165ffaa9]{color:var(--text-tertiary);-webkit-user-select:none;user-select:none;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex}.editor-empty p[data-v-165ffaa9]{margin:0}.editor-empty-hint[data-v-165ffaa9]{opacity:.6;font-size:11px}.monaco-container[data-v-165ffaa9]{flex:1;min-width:0;overflow:hidden}.monaco-container.hidden[data-v-165ffaa9]{display:none}.image-tab-placeholder[data-v-165ffaa9]{justify-content:center;align-items:center;gap:var(--spacing-sm);color:var(--text-secondary);background:var(--bg-container);text-align:center;padding:var(--spacing-lg);flex-direction:column;flex:1;display:flex}.image-tab-placeholder-title[data-v-165ffaa9]{font-size:var(--font-size-md);font-weight:var(--font-weight-medium);color:var(--text-primary);word-break:break-all;margin:0}.image-tab-placeholder-hint[data-v-165ffaa9]{font-size:var(--font-size-sm);color:var(--text-tertiary);margin:0}.editor-body[data-v-165ffaa9]{flex:1;min-height:0;display:flex;overflow:hidden}.preview-resizer[data-v-165ffaa9]{cursor:col-resize;z-index:2;background:0 0;flex-shrink:0;order:99;width:6px;margin-left:auto;transition:background .15s;position:relative}.preview-resizer[data-v-165ffaa9]:after{content:"";background:var(--color-gray-300);border-radius:2px;width:2px;height:32px;transition:background .15s,height .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.preview-resizer[data-v-165ffaa9]:hover{background:#3b82f60f}.preview-resizer[data-v-165ffaa9]:hover:after{background:var(--color-primary);height:48px;box-shadow:0 0 8px #3b82f666}.preview-panel[data-v-165ffaa9]{border-left:1px solid var(--border-color);background:var(--bg-panel);flex-direction:column;flex:1 1 0;min-width:200px;display:flex;overflow:hidden}.preview-header[data-v-165ffaa9]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);flex-shrink:0;align-items:center;gap:6px;height:34px;padding:0 10px;display:flex}.preview-title[data-v-165ffaa9]{letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11px;font-weight:700}.preview-ext-badge[data-v-165ffaa9]{color:var(--color-primary);letter-spacing:.04em;background:#3b82f626;border-radius:3px;padding:1px 5px;font-size:10px;font-weight:600}.preview-header-spacer[data-v-165ffaa9]{flex:1}.preview-close-btn[data-v-165ffaa9]{cursor:pointer;color:var(--text-tertiary);border-radius:var(--radius-base);background:0 0;border:none;align-items:center;padding:3px;transition:color .1s,background .1s;display:flex}.preview-close-btn[data-v-165ffaa9]:hover{color:var(--color-danger);background:var(--bg-hover)}.preview-body[data-v-165ffaa9]{flex-direction:column;flex:1;display:flex;overflow:hidden}.preview-iframe[data-v-165ffaa9]{background:0 0;border:none;flex:1;width:100%;height:100%}.preview-markdown[data-v-165ffaa9]{background:var(--bg-container,#fff);width:100%;height:100%;color:var(--text-primary,#1f2328);flex:1;overflow:auto}.preview-mindmap[data-v-165ffaa9]{background:var(--bg-container,#fff);flex-direction:column;flex:1;width:100%;height:100%;display:flex;overflow:hidden}.mindmap-toggle-btn.disabled[data-v-165ffaa9]{opacity:.45;cursor:not-allowed}.mindmap-toggle-btn.active[data-v-165ffaa9]{color:#fff;background:linear-gradient(#6366f1 0%,#4f46e5 100%);border-color:#4f46e5}.preview-image-wrap[data-v-165ffaa9]{background:var(--bg-container);flex:1;justify-content:center;align-items:center;padding:16px;display:flex;overflow:auto}.preview-image-wrap img[data-v-165ffaa9]{object-fit:contain;border-radius:4px;max-width:100%;max-height:100%;box-shadow:0 2px 12px #0003}.editor-tabs-spacer[data-v-165ffaa9]{flex:1}.preview-toggle-btn[data-v-165ffaa9]{cursor:pointer;height:34px;color:var(--text-secondary);white-space:nowrap;border:none;border-left:1px solid var(--border-color);background:0 0;flex-shrink:0;align-items:center;gap:5px;padding:0 10px;font-size:12px;transition:background .1s,color .1s;display:flex}.preview-toggle-btn[data-v-165ffaa9]:hover{background:var(--bg-hover);color:var(--text-primary)}.preview-toggle-btn.active[data-v-165ffaa9]{color:var(--color-primary);background:#3b82f614}.sidebar-actions[data-v-165ffaa9]{align-items:center;gap:2px;display:flex}.tree-inline-input-row[data-v-165ffaa9]{cursor:default;background:var(--bg-hover)}.tree-inline-input[data-v-165ffaa9]{background:var(--bg-container);border:1px solid var(--color-primary);min-width:0;height:20px;color:var(--text-primary);border-radius:3px;outline:none;flex:1;padding:0 5px;font-family:inherit;font-size:12.5px}.ctx-menu[data-v-165ffaa9]{z-index:9999;background:var(--bg-panel);border:1px solid var(--border-color);-webkit-user-select:none;user-select:none;border-radius:6px;min-width:160px;padding:4px;position:fixed;box-shadow:0 8px 24px #00000040}.ctx-menu-item[data-v-165ffaa9]{cursor:pointer;width:100%;color:var(--text-primary);text-align:left;background:0 0;border:none;border-radius:4px;align-items:center;gap:8px;padding:6px 10px;font-size:12.5px;transition:background .1s;display:flex}.ctx-menu-item[data-v-165ffaa9]:hover{background:var(--bg-hover)}.ctx-menu-item--danger[data-v-165ffaa9]{color:var(--color-danger)}.ctx-menu-item--danger[data-v-165ffaa9]:hover{background:#ef44441a}.ctx-menu-sep[data-v-165ffaa9]{background:var(--border-color);height:1px;margin:4px 2px}
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{$n as t,An as n,Cn as r,En as i,Fn as a,Hn as o,In as s,Jn as c,Kn as l,Ln as u,Mn as d,Nn as f,P as p,Qn as m,Sn as ee,Un as te,Wn as ne,_ as re,ar as h,c as g,cr as _,d as v,er as y,f as ie,g as ae,h as oe,ht as se,ir as ce,kn as b,m as le,or as x,p as ue,rr as S,sr as C,t as de,v as fe,wn as pe,y as me,zn as he}from"./vendor-A4IPqbyo.js";import{n as w,t as T}from"./_plugin-vue_export-helper-opDPZuCO.js";import{a as ge,r as _e}from"./index-DPihtJfT.js";var ve=e(v(),1),ye={class:`source-map-view`},be={class:`sm-toolbar`},xe={class:`sm-toolbar-left`},Se={class:`sm-title`},Ce={class:`sm-toolbar-center`},we=[`placeholder`,`disabled`],Te=[`disabled`],Ee={class:`sm-toolbar-right`},De={class:`sm-body`},Oe={class:`sm-panel-header sm-panel-header--tabs`},ke={key:0,class:`sm-badge`},Ae={class:`sm-panel-body sm-file-tree`},je=[`onClick`],Me={key:1,class:`sm-tree-arrow-spacer`},Ne={key:2,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Pe=[`xlink:href`],Fe={key:3,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Ie=[`xlink:href`],Le=[`title`],Re={key:1,class:`sm-tree-empty`},ze={class:`sm-panel-body sm-outline-body`},Be={class:`sm-badge`,style:{"margin-left":`auto`}},Ve=[`onClick`],He=[`title`],Ue={key:0,class:`sm-outline-desc`},We={key:1,class:`sm-tree-empty`},Ge={class:`sm-panel sm-panel-graph`},Ke={key:0,class:`sm-project-info`},qe={class:`sm-lang-badge`},Je={class:`sm-summary-text`},Ye={class:`sm-graph-container`},Xe={class:`sm-layout-btn-wrap`},Ze=[`disabled`],Qe=[`title`],$e={class:`sm-fn-label`},et={key:0,class:`sm-fn-desc`},tt={key:0,class:`sm-graph-empty`},nt={viewBox:`0 0 24 24`,width:`48`,height:`48`,fill:`none`,stroke:`currentColor`,"stroke-width":`1`,style:{opacity:`0.3`}},rt={key:1,class:`sm-graph-loading`},it={class:`sm-log-header`},at={key:0,class:`sm-log-indicator`},ot={class:`sm-log-body`,ref:`logBodyRef`},st={key:0,class:`sm-empty`},ct={class:`sm-panel-header`},lt={key:0,class:`sm-badge sm-badge-amber`},ut={key:0,class:`sm-node-detail`},dt={class:`sm-node-name`},ft={class:`sm-node-file`},pt={key:0},mt={key:0,class:`sm-node-desc`},ht={class:`sm-panel-body sm-source-body`},gt={key:0,class:`sm-source-overlay`},_t={key:1,class:`sm-source-overlay sm-source-placeholder`},E=T(he({__name:`SourceMapView`,setup(e){let v=S(document.documentElement.getAttribute(`data-theme`)===`dark`?`dark`:`light`);function he(){v.value=document.documentElement.getAttribute(`data-theme`)===`dark`?`dark`:`light`}let T=null,E=ge(),D=S(E.currentDirectory||``),O=S(`idle`),k=S([]),vt=0,A=S(null),j=S(null),M=S(`files`),N=S(``),P=S(``),F=S(!1),I=S([]),L=S(new Set),R=S({files:!0,graph:!0,source:!0}),z=S(!1),B=S(220),V=S(360),H=S(140),U=null,W=0,yt=0,G=0;function K(e,t){U=e,W=t.clientX,yt=t.clientY,G=e===`files`?B.value:e===`source`?V.value:H.value,document.addEventListener(`mousemove`,bt),document.addEventListener(`mouseup`,q),t.preventDefault()}function bt(e){U&&(U===`files`?B.value=Math.max(120,Math.min(480,G+e.clientX-W)):U===`source`?V.value=Math.max(200,Math.min(700,G+W-e.clientX)):H.value=Math.max(60,Math.min(500,G+yt-e.clientY)))}function q(){U=null,document.removeEventListener(`mousemove`,bt),document.removeEventListener(`mouseup`,q)}let J=S(null),Y=ce(null),{fitView:xt,setNodes:X,setEdges:St,getNodes:Ct,getEdges:wt,updateNodeInternals:Tt}=me(),Z=b(()=>O.value===`scanning`||O.value===`analyzing`),Et=b(()=>v.value===`dark`?`#334155`:`#cbd5e1`),Q=b(()=>A.value?.nodes.find(e=>e.id===j.value)??null),Dt=b(()=>{if(!A.value)return[];let e=new Map;for(let t of A.value.nodes){let n=t.subsystem??`__default__`;if(!e.has(n)){let r=A.value.subsystems?.find(e=>e.name===n);e.set(n,{displayName:r?.displayName||t.subsystem||w(`@SRCMAP:默认`),color:t.subsystemColor||kt[0],nodes:[]})}e.get(n).nodes.push(t)}return[...e.entries()].map(([,e])=>e)});function $(e,t=`info`){k.value.push({id:++vt,message:e,type:t,timestamp:Date.now()}),k.value.length>200&&k.value.splice(0,k.value.length-200)}function Ot(e){let t={name:``,path:``,kind:`dir`,children:[],childMap:new Map};for(let n of e){let e=n.trim().split(`/`).filter(Boolean),r=t,i=``;for(let t=0;t<e.length;t++){let n=e[t];i=i?`${i}/${n}`:n;let a=t===e.length-1,o=r.childMap.get(n);o||(o={name:n,path:i,kind:a?`file`:`dir`,children:[],childMap:new Map},r.childMap.set(n,o),r.children.push(o)),r=o}}let n=e=>{e.sort((e,t)=>e.kind===t.kind?e.name.localeCompare(t.name):e.kind===`dir`?-1:1),e.forEach(e=>{e.kind===`dir`&&n(e.children)})};return n(t.children),t.children}let kt=[`#f59e0b`,`#3b82f6`,`#10b981`,`#8b5cf6`];function At(e){return e.subsystemColor?e.subsystemColor:e.subsystemIndex===void 0?e.importance===`high`?`#f59e0b`:e.importance===`low`?`#94a3b8`:`#3b82f6`:kt[e.subsystemIndex%kt.length]}function jt(e){return{ts:`typescript`,tsx:`typescript`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,jsx:`javascript`,vue:`html`,svelte:`html`,html:`html`,py:`python`,java:`java`,go:`go`,rs:`rust`,cpp:`cpp`,cc:`cpp`,cxx:`cpp`,c:`c`,h:`c`,hpp:`cpp`,cs:`csharp`,rb:`ruby`,php:`php`,swift:`swift`,kt:`kotlin`,sh:`shell`,bash:`shell`,json:`json`,yaml:`yaml`,yml:`yaml`,md:`markdown`,css:`css`,scss:`scss`,less:`less`,sql:`sql`}[e.split(`.`).pop()?.toLowerCase()||``]||`plaintext`}function Mt(){!J.value||Y.value||(Y.value=g.create(J.value,{value:``,language:`plaintext`,theme:v.value===`dark`?`vs-dark`:`vs`,readOnly:!0,fontSize:12,lineHeight:19,fontFamily:`'JetBrains Mono', 'Fira Code', Consolas, monospace`,minimap:{enabled:!1},scrollBeyondLastLine:!1,automaticLayout:!0,wordWrap:`off`,padding:{top:8,bottom:8},scrollbar:{verticalScrollbarSize:6,horizontalScrollbarSize:6}}))}m(v,e=>{Y.value&&g.setTheme(e===`dark`?`vs-dark`:`vs`)});function Nt(e,t){let n={};t.forEach(e=>{n[e.source]||(n[e.source]=[]),n[e.source].push(e.target)});let r=new Map;e.forEach(e=>{let t=e.subsystem??`__default`;r.has(t)||r.set(t,[]),r.get(t).push(e)});let i=[],a=0;for(let[,e]of r){let t=new Set(e.map(e=>e.id)),r={},o=e.length?[e[0].id]:[];for(o[0]&&(r[o[0]]=0);o.length;){let e=o.shift();(n[e]||[]).filter(e=>t.has(e)).forEach(t=>{r[t]===void 0&&(r[t]=(r[e]??0)+1,o.push(t))})}let s={};e.forEach(e=>{let t=r[e.id]??0;s[t]=(s[t]||0)+1});let c={};e.forEach(e=>{let t=r[e.id]??0;c[t]=(c[t]??-1)+1;let n=c[t],o=s[t]??1,l=a*600+n*220-(o-1)*220/2,u=t*110,d=At(e);i.push({id:e.id,type:`default`,position:{x:l,y:u},label:e.label,class:`sm-fn-node`,data:{...e,_accentColor:d},style:{"--node-accent":d}})}),a++}return{flowNodes:i,flowEdges:t.map((e,t)=>({id:`e_${t}_${e.source}_${e.target}`,source:e.source,target:e.target,type:`smoothstep`,animated:!1,class:`sm-fn-edge`,markerEnd:{type:oe.ArrowClosed}}))}}async function Pt(){let e=Ct.value,t=wt.value;if(e.length!==0){z.value=!0;try{await o(),await new Promise(e=>requestAnimationFrame(()=>e())),Tt(e.map(e=>e.id)),await new Promise(e=>requestAnimationFrame(()=>e()));let n=new Map;e.forEach(e=>{let t=e.data?.subsystem??`__default__`;n.has(t)||n.set(t,[]),n.get(t).push(e)});let r=new Map,i=0;for(let[,e]of n){let n=new ve.default.graphlib.Graph;n.setDefaultEdgeLabel(()=>({})),n.setGraph({rankdir:`TB`,nodesep:55,ranksep:75,marginx:40,marginy:40});let a=new Set(e.map(e=>e.id));e.forEach(e=>{let t=190,r=e.data?.description?68:48,i=document.querySelector(`.vue-flow__node[data-id="${e.id}"]`);i&&i.offsetWidth>0&&(t=i.offsetWidth,r=i.offsetHeight),n.setNode(e.id,{width:t,height:r})}),t.forEach(e=>{a.has(e.source)&&a.has(e.target)&&n.setEdge(e.source,e.target)}),ve.default.layout(n);let o=0;e.forEach(e=>{let t=n.node(e.id);t&&(r.set(e.id,{x:i+t.x-t.width/2,y:t.y-t.height/2}),o=Math.max(o,t.x+t.width/2))}),i+=o+120}X(e.map(e=>({...e,position:r.get(e.id)??e.position}))),await o(),xt({padding:.18})}finally{z.value=!1}}}async function Ft(){if(!D.value.trim()){p.warning(w(`@SRCMAP:请先输入项目路径`));return}if(!Z.value){k.value=[],A.value=null,j.value=null,N.value=``,P.value=``,X([]),St([]),O.value=`scanning`,$(w(`@SRCMAP:开始分析项目...`),`info`);try{let e=await fetch(`/api/code-analysis/analyze`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:D.value})});if(!e.ok){let t=await e.json().catch(()=>({error:`请求失败`}));throw Error(t.error||`HTTP ${e.status}`)}let t=e.body.getReader(),n=new TextDecoder,r=``;O.value=`analyzing`;let i=``,a=[];for(;;){let{done:e,value:o}=await t.read();if(e)break;r+=n.decode(o,{stream:!0});let s=r.split(`
|
|
2
|
+
`);r=s.pop()??``;for(let e of s)if(e.startsWith(`event:`))i=e.slice(6).trim(),a=[];else if(e.startsWith(`data:`))a.push(e.slice(5).trim());else if(e===``){if(i&&a.length){let e=a.join(``);try{let t=JSON.parse(e);It(i,t)}catch{}}i=``,a=[]}}}catch(e){$(`${w(`@SRCMAP:分析失败`)}: ${e.message}`,`error`),O.value=`error`}}}function It(e,t){if(e===`log`)$(t.message,t.type||`info`);else if(e===`files`)I.value=Ot(t.files||[]),I.value.forEach(e=>{e.kind===`dir`&&L.value.add(e.path)});else if(e===`result`){A.value={language:t.language||``,entryFile:t.entryFile||``,entryFunction:t.entryFunction||``,nodes:Array.isArray(t.nodes)?t.nodes:[],edges:Array.isArray(t.edges)?t.edges:[],techStack:Array.isArray(t.techStack)?t.techStack:[],summary:t.summary||``,allFiles:Array.isArray(t.allFiles)?t.allFiles:[],codeFiles:Array.isArray(t.codeFiles)?t.codeFiles:[],subsystems:Array.isArray(t.subsystems)?t.subsystems:void 0};let{flowNodes:e,flowEdges:n}=Nt(A.value.nodes,A.value.edges);X(e),St(n),o(()=>Pt())}else e===`done`&&(t.error?($(`${w(`@SRCMAP:分析失败`)}: ${t.error}`,`error`),O.value=`error`):O.value=`done`)}async function Lt(e){if(!(!e||F.value)&&P.value!==e){F.value=!0,P.value=e,N.value=``;try{let t=await(await fetch(`/api/code-analysis/file-content?path=${encodeURIComponent(D.value)}&file=${encodeURIComponent(e)}`)).json();if(t.error)throw Error(t.error);N.value=t.content||``}catch(e){N.value=`// ${w(`@SRCMAP:加载失败`)}: ${e.message}`}finally{F.value=!1}}}function Rt(e){let t=e.node.data;j.value=t.id,t.file&&Lt(t.file)}function zt(e){L.value.has(e)?L.value.delete(e):L.value.add(e)}let Bt=b(()=>{let e=[];function t(n,r){for(let i of n){let n=L.value.has(i.path);e.push({name:i.name,path:i.path,kind:i.kind,depth:r,expanded:n}),i.kind===`dir`&&n&&t(i.children,r+1)}}return t(I.value,0),e});return m(()=>E.currentDirectory,e=>{e&&!D.value&&(D.value=e)}),m([N,P],([e,t])=>{let n=Y.value;if(!n)return;let r=jt(t||``),i=n.getModel(),a=g.createModel(e||``,r);n.setModel(a),i?.dispose(),n.setScrollPosition({scrollTop:0,scrollLeft:0})}),ne(()=>{Mt(),!D.value&&E.currentDirectory&&(D.value=E.currentDirectory),T=new MutationObserver(()=>he()),T.observe(document.documentElement,{attributes:!0,attributeFilter:[`data-theme`]})}),te(()=>{Y.value?.getModel()?.dispose(),Y.value?.dispose(),q(),T?.disconnect(),T=null}),(e,o)=>{let p=se;return l(),f(`div`,ye,[n(`div`,be,[n(`div`,xe,[o[9]||=n(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,class:`sm-icon-map`},[n(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`}),n(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`}),n(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`})],-1),n(`span`,Se,_(h(w)(`@SRCMAP:源码地图`)),1)]),n(`div`,Ce,[y(n(`input`,{"onUpdate:modelValue":o[0]||=e=>D.value=e,class:`sm-path-input`,placeholder:h(w)(`@SRCMAP:输入项目目录路径`),disabled:Z.value,onKeydown:pe(Ft,[`enter`])},null,40,we),[[ee,D.value]]),n(`button`,{class:`sm-btn sm-btn-primary`,disabled:Z.value,onClick:Ft},[Z.value?(l(),f(i,{key:0},[o[10]||=n(`span`,{class:`sm-spinner`},null,-1),s(` `+_(h(w)(`@SRCMAP:分析中...`)),1)],64)):(l(),f(i,{key:1},[s(_(O.value===`done`?h(w)(`@SRCMAP:重新分析`):h(w)(`@SRCMAP:开始分析`)),1)],64))],8,Te)]),n(`div`,Ee,[u(p,{content:h(w)(`@SRCMAP:文件列表`),placement:`bottom`},{default:t(()=>[n(`button`,{class:x([`sm-panel-btn`,{active:R.value.files}]),onClick:o[1]||=e=>R.value.files=!R.value.files},[...o[11]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[n(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`})],-1)]],2)]),_:1},8,[`content`]),u(p,{content:h(w)(`@SRCMAP:调用图`),placement:`bottom`},{default:t(()=>[n(`button`,{class:x([`sm-panel-btn`,{active:R.value.graph}]),onClick:o[2]||=e=>R.value.graph=!R.value.graph},[...o[12]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[n(`circle`,{cx:`12`,cy:`12`,r:`3`}),n(`circle`,{cx:`3`,cy:`6`,r:`2`}),n(`circle`,{cx:`21`,cy:`6`,r:`2`}),n(`circle`,{cx:`3`,cy:`18`,r:`2`}),n(`circle`,{cx:`21`,cy:`18`,r:`2`}),n(`line`,{x1:`5`,y1:`6`,x2:`9`,y2:`11`}),n(`line`,{x1:`19`,y1:`6`,x2:`15`,y2:`11`}),n(`line`,{x1:`5`,y1:`18`,x2:`9`,y2:`13`}),n(`line`,{x1:`19`,y1:`18`,x2:`15`,y2:`13`})],-1)]],2)]),_:1},8,[`content`]),u(p,{content:h(w)(`@SRCMAP:源码面板`),placement:`bottom`},{default:t(()=>[n(`button`,{class:x([`sm-panel-btn`,{active:R.value.source}]),onClick:o[3]||=e=>R.value.source=!R.value.source},[...o[13]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[n(`polyline`,{points:`16 18 22 12 16 6`}),n(`polyline`,{points:`8 6 2 12 8 18`})],-1)]],2)]),_:1},8,[`content`])])]),n(`div`,De,[y(n(`div`,{class:`sm-panel sm-panel-files`,style:C({width:B.value+`px`})},[n(`div`,Oe,[n(`button`,{class:x([`sm-tab-btn`,{active:M.value===`files`}]),onClick:o[4]||=e=>M.value=`files`},[o[14]||=n(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[n(`path`,{d:`M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z`})],-1),s(` `+_(h(w)(`@SRCMAP:文件列表`))+` `,1),A.value?(l(),f(`span`,ke,_(A.value.allFiles.length),1)):d(``,!0)],2),n(`button`,{class:x([`sm-tab-btn`,{active:M.value===`outline`}]),onClick:o[5]||=e=>M.value=`outline`},[o[15]||=a(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" data-v-71d3569e><line x1="8" y1="6" x2="21" y2="6" data-v-71d3569e></line><line x1="8" y1="12" x2="21" y2="12" data-v-71d3569e></line><line x1="8" y1="18" x2="21" y2="18" data-v-71d3569e></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-71d3569e></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-71d3569e></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-71d3569e></line></svg>`,1),s(` `+_(h(w)(`@SRCMAP:大纲`)),1)],2)]),y(n(`div`,Ae,[Bt.value.length>0?(l(!0),f(i,{key:0},c(Bt.value,e=>(l(),f(`div`,{key:e.path,class:x([`sm-tree-node`,{"sm-tree-node--dir":e.kind===`dir`,"sm-tree-node--active":e.kind===`file`&&P.value===e.path}]),style:C({paddingLeft:10+e.depth*14+`px`}),onClick:t=>e.kind===`dir`?zt(e.path):Lt(e.path)},[e.kind===`dir`?(l(),f(`span`,{key:0,class:x([`sm-tree-arrow`,{expanded:e.expanded}])},[...o[16]||=[n(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[n(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(l(),f(`span`,Me)),e.kind===`dir`?(l(),f(`svg`,Ne,[n(`use`,{"xlink:href":`#${h(_e)(e.name)||`icon-folder`}`},null,8,Pe)])):(l(),f(`svg`,Fe,[n(`use`,{"xlink:href":`#${h(_e)(e.name)}`},null,8,Ie)])),n(`span`,{class:`sm-tree-name`,title:e.path},_(e.name),9,Le)],14,je))),128)):(l(),f(`div`,Re,_(h(w)(`@SRCMAP:暂无文件,请先开始分析`)),1))],512),[[r,M.value===`files`]]),y(n(`div`,ze,[Dt.value.length>0?(l(!0),f(i,{key:0},c(Dt.value,e=>(l(),f(`div`,{key:e.displayName,class:`sm-outline-group`},[n(`div`,{class:`sm-outline-group-header`,style:C({color:e.color})},[o[17]||=n(`svg`,{viewBox:`0 0 24 24`,width:`8`,height:`8`,fill:`currentColor`},[n(`circle`,{cx:`12`,cy:`12`,r:`6`})],-1),s(` `+_(e.displayName)+` `,1),n(`span`,Be,_(e.nodes.length),1)],4),(l(!0),f(i,null,c(e.nodes,t=>(l(),f(`div`,{key:t.id,class:x([`sm-outline-node`,{"sm-outline-node--active":j.value===t.id}]),onClick:e=>{j.value=t.id,t.file&&Lt(t.file)}},[n(`span`,{class:`sm-outline-dot`,style:C({background:e.color})},null,4),n(`span`,{class:`sm-outline-label`,title:t.file||t.label},_(t.label),9,He),t.description?(l(),f(`span`,Ue,_(t.description.length>18?t.description.slice(0,18)+`…`:t.description),1)):d(``,!0)],10,Ve))),128))]))),128)):(l(),f(`div`,We,_(h(w)(`@SRCMAP:暂无分析结果`)),1))],512),[[r,M.value===`outline`]])],4),[[r,R.value.files]]),y(n(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:o[6]||=e=>K(`files`,e)},null,544),[[r,R.value.files&&R.value.graph]]),y(n(`div`,Ge,[A.value?(l(),f(`div`,Ke,[n(`span`,qe,_(A.value.language),1),A.value.subsystems&&A.value.subsystems.length>1?(l(!0),f(i,{key:0},c(A.value.subsystems,e=>(l(),f(`span`,{key:e.name,class:`sm-subsystem-tag`,style:C({borderColor:e.color,color:e.color})},`● `+_(e.displayName||e.name),5))),128)):(l(!0),f(i,{key:1},c(A.value.techStack.slice(0,4),e=>(l(),f(`span`,{key:e,class:`sm-tech-tag`},_(e),1))),128)),n(`span`,Je,_(A.value.summary),1)])):d(``,!0),n(`div`,Ye,[n(`div`,Xe,[n(`button`,{class:`sm-layout-btn`,disabled:z.value||!A.value,onClick:Pt},[o[18]||=a(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" data-v-71d3569e><rect x="3" y="3" width="7" height="7" rx="1" data-v-71d3569e></rect><rect x="14" y="3" width="7" height="7" rx="1" data-v-71d3569e></rect><rect x="3" y="14" width="7" height="7" rx="1" data-v-71d3569e></rect><rect x="14" y="14" width="7" height="7" rx="1" data-v-71d3569e></rect></svg>`,1),s(` `+_(z.value?h(w)(`@SRCMAP:布局中...`):h(w)(`@SRCMAP:优化布局`)),1)],8,Ze)]),u(h(re),{class:`sm-vue-flow`,"default-viewport":{zoom:1},"min-zoom":.2,"max-zoom":4,"fit-view-on-init":``,onNodeClick:Rt},{"node-default":t(({data:e,label:t})=>[u(h(fe),{type:`target`,position:h(ae).Top},null,8,[`position`]),n(`div`,{class:`sm-fn-inner`,title:`${t}${e?.description?`
|
|
3
|
+
`+e.description:``}`},[n(`div`,$e,_(t),1),e?.description?(l(),f(`div`,et,_(e.description.length>22?e.description.slice(0,22)+`…`:e.description),1)):d(``,!0)],8,Qe),u(h(fe),{type:`source`,position:h(ae).Bottom},null,8,[`position`])]),default:t(()=>[u(h(le),{variant:h(ue).Dots,gap:20,size:1,"pattern-color":Et.value},null,8,[`variant`,`pattern-color`]),u(h(ie)),u(h(de),{"node-color":`#3b82f6`,"mask-color":v.value===`dark`?`rgba(0,0,0,0.55)`:`rgba(15,23,42,0.06)`},null,8,[`mask-color`])]),_:1}),!A.value&&!Z.value?(l(),f(`div`,tt,[(l(),f(`svg`,nt,[...o[19]||=[n(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`},null,-1),n(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`},null,-1),n(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`},null,-1)]])),n(`p`,null,_(h(w)(`@SRCMAP:输入项目路径后点击开始分析`)),1)])):d(``,!0),Z.value&&!A.value?(l(),f(`div`,rt,[o[20]||=n(`span`,{class:`sm-spinner sm-spinner-lg`},null,-1),n(`p`,null,_(h(w)(`@SRCMAP:AI 正在分析项目结构...`)),1)])):d(``,!0)]),n(`div`,{class:`sm-resizer sm-resizer-h`,onMousedown:o[7]||=e=>K(`log`,e)},null,32),n(`div`,{class:`sm-log-panel`,style:C({height:H.value+`px`})},[n(`div`,it,[o[21]||=n(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[n(`polyline`,{points:`4 17 10 11 4 5`}),n(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})],-1),s(` `+_(h(w)(`@SRCMAP:Agent 日志`))+` `,1),Z.value?(l(),f(`span`,at)):d(``,!0)]),n(`div`,ot,[(l(!0),f(i,null,c(k.value.slice(-50),e=>(l(),f(`div`,{key:e.id,class:x([`sm-log-entry`,`sm-log-entry--${e.type}`])},_(e.message),3))),128)),k.value.length===0?(l(),f(`div`,st,_(h(w)(`@SRCMAP:等待开始分析`)),1)):d(``,!0)],512)],4)],512),[[r,R.value.graph]]),y(n(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:o[8]||=e=>K(`source`,e)},null,544),[[r,R.value.graph&&R.value.source]]),y(n(`div`,{class:`sm-panel sm-panel-source`,style:C({width:V.value+`px`})},[n(`div`,ct,[o[22]||=n(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[n(`polyline`,{points:`16 18 22 12 16 6`}),n(`polyline`,{points:`8 6 2 12 8 18`})],-1),s(` `+_(P.value||h(w)(`@SRCMAP:源码面板`))+` `,1),Q.value?(l(),f(`span`,lt,_(Q.value.label),1)):d(``,!0)]),Q.value?(l(),f(`div`,ut,[n(`div`,dt,_(Q.value.label),1),n(`div`,ft,[s(_(Q.value.file),1),Q.value.line?(l(),f(`span`,pt,` :`+_(Q.value.line),1)):d(``,!0)]),Q.value.description?(l(),f(`div`,mt,_(Q.value.description),1)):d(``,!0)])):d(``,!0),n(`div`,ht,[F.value?(l(),f(`div`,gt,[...o[23]||=[n(`span`,{class:`sm-spinner`},null,-1)]])):d(``,!0),!F.value&&!N.value?(l(),f(`div`,_t,_(h(w)(`@SRCMAP:点击调用图中的节点查看源码`)),1)):d(``,!0),n(`div`,{ref_key:`monacoContainerRef`,ref:J,class:`sm-monaco-container`},null,512)])],4),[[r,R.value.source]])])])}}}),[[`__scopeId`,`data-v-71d3569e`]]);export{E as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.source-map-view[data-v-71d3569e]{background:var(--sm-graph-bg);width:100%;height:100%;color:var(--text-primary);flex-direction:column;font-size:13px;display:flex;overflow:hidden}.sm-toolbar[data-v-71d3569e]{background:var(--sm-canvas-bg);border-bottom:1px solid var(--border-color);flex-shrink:0;align-items:center;gap:12px;padding:8px 16px;display:flex}.sm-toolbar-left[data-v-71d3569e]{flex-shrink:0;align-items:center;gap:8px;display:flex}.sm-toolbar-center[data-v-71d3569e]{flex:1;align-items:center;gap:8px;display:flex}.sm-toolbar-right[data-v-71d3569e]{flex-shrink:0;align-items:center;gap:4px;display:flex}.sm-icon-map[data-v-71d3569e]{color:#f59e0b}.sm-title[data-v-71d3569e]{color:var(--text-primary);font-size:13px;font-weight:600}.sm-path-input[data-v-71d3569e]{background:var(--bg-input);border:1px solid var(--border-input);height:30px;color:var(--text-primary);border-radius:6px;outline:none;flex:1;padding:0 10px;font-family:Consolas,Monaco,monospace;font-size:12px;transition:border-color .15s}.sm-path-input[data-v-71d3569e]:focus{border-color:#f59e0b}.sm-path-input[data-v-71d3569e]:disabled{opacity:.6;cursor:not-allowed}.sm-btn[data-v-71d3569e]{cursor:pointer;white-space:nowrap;border:none;border-radius:6px;align-items:center;gap:6px;height:30px;padding:0 14px;font-size:12px;font-weight:500;transition:all .15s;display:inline-flex}.sm-btn-primary[data-v-71d3569e]{color:#fff;background:linear-gradient(135deg,#f59e0b,#d97706)}.sm-btn-primary[data-v-71d3569e]:hover:not(:disabled){background:linear-gradient(135deg,#fbbf24,#f59e0b)}.sm-btn-primary[data-v-71d3569e]:disabled{opacity:.6;cursor:not-allowed}.sm-panel-btn[data-v-71d3569e]{cursor:pointer;width:28px;height:28px;color:var(--text-tertiary);background:0 0;border:1px solid #0000;border-radius:5px;justify-content:center;align-items:center;transition:all .15s;display:flex}.sm-panel-btn[data-v-71d3569e]:hover,.sm-panel-btn.active[data-v-71d3569e]{background:var(--bg-component-hover);border-color:var(--border-color);color:var(--text-primary)}.sm-panel-btn.active[data-v-71d3569e]{color:#f59e0b;border-color:#f59e0b40}.sm-body[data-v-71d3569e]{flex:1;min-height:0;display:flex;overflow:hidden}.sm-resizer[data-v-71d3569e]{z-index:2;background:0 0;flex-shrink:0;transition:background .15s;position:relative}.sm-resizer-v[data-v-71d3569e]{cursor:col-resize;width:6px}.sm-resizer-h[data-v-71d3569e]{cursor:row-resize;height:6px}.sm-resizer[data-v-71d3569e]:after{content:"";background:var(--border-color);border-radius:2px;transition:background .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.sm-resizer-v[data-v-71d3569e]:after{width:2px;height:32px}.sm-resizer-h[data-v-71d3569e]:after{width:32px;height:2px}.sm-resizer[data-v-71d3569e]:hover{background:#3b82f60f}.sm-resizer[data-v-71d3569e]:hover:after{background:var(--color-primary,#3b82f6);box-shadow:0 0 8px #3b82f666}.sm-resizer-v[data-v-71d3569e]:hover:after{height:48px}.sm-resizer-h[data-v-71d3569e]:hover:after{width:48px}.sm-panel[data-v-71d3569e]{flex-direction:column;min-width:0;display:flex;overflow:hidden}.sm-panel-files[data-v-71d3569e]{background:var(--sm-canvas-bg);border-right:1px solid var(--border-color);flex-shrink:0;min-width:0;overflow:hidden}.sm-panel-graph[data-v-71d3569e]{background:var(--sm-graph-bg);flex:1;min-width:300px}.sm-panel-source[data-v-71d3569e]{background:var(--sm-canvas-bg);border-left:1px solid var(--border-color);flex-shrink:0}.sm-panel-header[data-v-71d3569e]{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border-color);background:var(--sm-canvas-bg);flex-shrink:0;align-items:center;gap:6px;padding:6px 10px;font-size:11px;font-weight:600;display:flex}.sm-panel-body[data-v-71d3569e]{flex:1;min-height:0;overflow:auto}.sm-project-info[data-v-71d3569e]{background:var(--sm-canvas-bg);border-bottom:1px solid var(--border-color);flex-shrink:0;align-items:center;gap:6px;padding:6px 12px;display:flex;overflow:hidden}.sm-lang-badge[data-v-71d3569e]{color:#f59e0b;background:#f59e0b22;border:1px solid #f59e0b44;border-radius:4px;flex-shrink:0;align-items:center;padding:1px 7px;font-size:10px;font-weight:600;display:inline-flex}.sm-tech-tag[data-v-71d3569e]{color:#93c5fd;background:#3b82f611;border:1px solid #3b82f630;border-radius:4px;flex-shrink:0;align-items:center;padding:1px 6px;font-size:10px;display:inline-flex}.sm-subsystem-tag[data-v-71d3569e]{opacity:.85;background:0 0;border:1px solid;border-radius:4px;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-size:10px;font-weight:600;display:inline-flex}.sm-summary-text[data-v-71d3569e]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:11px;overflow:hidden}.sm-graph-container[data-v-71d3569e]{flex:1;min-height:0;position:relative;overflow:hidden}.sm-vue-flow[data-v-71d3569e]{width:100%;height:100%}.sm-graph-empty[data-v-71d3569e],.sm-graph-loading[data-v-71d3569e]{color:var(--text-tertiary);pointer-events:none;flex-direction:column;justify-content:center;align-items:center;gap:12px;font-size:13px;display:flex;position:absolute;inset:0}.sm-log-panel[data-v-71d3569e]{border-top:1px solid var(--border-color);background:var(--sm-canvas-bg);flex-direction:column;flex-shrink:0;min-height:60px;display:flex}.sm-log-header[data-v-71d3569e]{color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border-color);flex-shrink:0;align-items:center;gap:6px;padding:4px 10px;font-size:10px;font-weight:600;display:flex}.sm-log-indicator[data-v-71d3569e]{background:#f59e0b;border-radius:50%;width:6px;height:6px;margin-left:auto;animation:1s infinite pulse-71d3569e}@keyframes pulse-71d3569e{0%,to{opacity:1}50%{opacity:.3}}.sm-log-body[data-v-71d3569e]{flex:1;padding:4px 0;font-family:Consolas,Monaco,monospace;font-size:11px;overflow-y:auto}.sm-log-entry[data-v-71d3569e]{padding:2px 10px;line-height:1.5}.sm-log-entry--info[data-v-71d3569e]{color:var(--text-tertiary)}.sm-log-entry--success[data-v-71d3569e]{color:var(--text-success,#16a34a)}.sm-log-entry--error[data-v-71d3569e]{color:var(--text-danger,#dc2626)}.sm-log-entry--thinking[data-v-71d3569e]{color:#f59e0b}.sm-file-tree[data-v-71d3569e]{flex:1;padding:4px 0;overflow:hidden auto}.sm-tree-node[data-v-71d3569e]{cursor:pointer;-webkit-user-select:none;user-select:none;height:24px;color:var(--text-primary);white-space:nowrap;box-sizing:border-box;border-radius:4px;align-items:center;gap:4px;padding-right:8px;font-size:13px;transition:background .1s;display:flex;overflow:hidden}.sm-tree-node[data-v-71d3569e]:hover{background:var(--bg-component-hover)}.sm-tree-node--active[data-v-71d3569e]{color:var(--color-primary);background:#3b82f61f}.sm-tree-arrow[data-v-71d3569e]{color:var(--text-tertiary);flex-shrink:0;align-items:center;width:12px;transition:transform .15s;display:flex}.sm-tree-arrow.expanded[data-v-71d3569e]{transform:rotate(90deg)}.sm-tree-arrow-spacer[data-v-71d3569e]{flex-shrink:0;width:12px;display:inline-block}.sm-tree-icon[data-v-71d3569e]{flex-shrink:0;align-items:center;font-size:14px;line-height:1;display:flex}.sm-tree-icon.mit-icon[data-v-71d3569e]{fill:currentColor;vertical-align:middle;width:14px;height:14px;display:inline-block}.sm-tree-name[data-v-71d3569e]{text-overflow:ellipsis;flex:1;min-width:0;font-size:13px;overflow:hidden}.sm-tree-empty[data-v-71d3569e]{color:var(--text-tertiary);text-align:center;padding:24px 12px;font-size:12px}.sm-node-detail[data-v-71d3569e]{background:#f59e0b0f;border-bottom:1px solid #f59e0b38;flex-shrink:0;padding:8px 12px}.sm-node-name[data-v-71d3569e]{color:#f59e0b;font-family:Consolas,monospace;font-size:13px;font-weight:600}.sm-node-file[data-v-71d3569e]{color:var(--text-tertiary);margin-top:2px;font-family:Consolas,monospace;font-size:10px}.sm-node-desc[data-v-71d3569e]{color:var(--text-secondary);margin-top:4px;font-size:11px;line-height:1.4}.sm-source-body[data-v-71d3569e]{background:var(--sm-source-bg);position:relative;overflow:hidden}.sm-monaco-container[data-v-71d3569e]{width:100%;height:100%}.sm-source-overlay[data-v-71d3569e]{background:var(--sm-source-overlay-bg);z-index:10;color:var(--text-tertiary);pointer-events:none;justify-content:center;align-items:center;font-size:12px;display:flex;position:absolute;inset:0}.sm-source-placeholder[data-v-71d3569e]{background:var(--sm-source-bg);pointer-events:none}.sm-empty[data-v-71d3569e]{height:100%;min-height:60px;color:var(--text-tertiary);text-align:center;justify-content:center;align-items:center;padding:12px;font-size:12px;display:flex}.sm-badge[data-v-71d3569e]{background:var(--bg-page);border:1px solid var(--border-color);color:var(--text-secondary);border-radius:4px;align-items:center;margin-left:4px;padding:1px 6px;font-size:10px;font-weight:600;display:inline-flex}.sm-badge-amber[data-v-71d3569e]{color:#f59e0b;background:#f59e0b15;border-color:#f59e0b40}.sm-spinner[data-v-71d3569e]{border:2px solid #ffffff40;border-top-color:#fff;border-radius:50%;width:12px;height:12px;animation:.8s linear infinite spin-71d3569e;display:inline-block}.sm-spinner-lg[data-v-71d3569e]{border-width:3px;border-color:#f59e0b #f59e0b20 #f59e0b20;width:32px;height:32px}@keyframes spin-71d3569e{to{transform:rotate(360deg)}}[data-v-71d3569e] .vue-flow__background{background:var(--sm-graph-bg)}[data-v-71d3569e] .vue-flow__controls{background:var(--sm-controls-bg);border:1px solid var(--sm-controls-border);box-shadow:none;border-radius:8px}[data-v-71d3569e] .vue-flow__controls-button{color:var(--sm-controls-color);background:0 0;border:none}[data-v-71d3569e] .vue-flow__controls-button:hover{background:var(--sm-controls-hover-bg);color:var(--sm-controls-hover-color)}[data-v-71d3569e] .vue-flow__minimap{background:var(--sm-minimap-bg);border:1px solid var(--sm-controls-border);border-radius:6px}[data-v-71d3569e] .vue-flow__minimap-mask{fill:var(--sm-minimap-mask);stroke:var(--sm-minimap-mask-stroke)}[data-v-71d3569e] .vue-flow__edge-path,[data-v-71d3569e] .vue-flow__connection-path{stroke:var(--sm-edge-color)}[data-v-71d3569e] .vue-flow__arrowhead polyline,[data-v-71d3569e] .vue-flow__arrowhead path,[data-v-71d3569e] .vue-flow__marker polyline,[data-v-71d3569e] .vue-flow__marker path{stroke:var(--sm-edge-color);fill:var(--sm-edge-color)}[data-v-71d3569e] .vue-flow__edge{stroke:var(--sm-edge-color)}[data-v-71d3569e] .vue-flow__node{transition:box-shadow .15s}[data-v-71d3569e] .vue-flow__node:hover{box-shadow:0 0 0 2px #f59e0b8c}[data-v-71d3569e] .vue-flow__node.selected{box-shadow:0 0 0 2px #f59e0b}[data-v-71d3569e] .sm-fn-node{background:var(--sm-node-bg);color:var(--sm-node-text);border:2px solid var(--node-accent,#3b82f6);cursor:pointer;border-radius:8px;min-width:140px;max-width:200px;padding:8px 12px;font-size:12px;transition:transform .15s,box-shadow .15s;box-shadow:0 1px 2px #0f172a14,0 4px 12px #0f172a0f}[data-theme=dark][data-v-71d3569e] .sm-fn-node{box-shadow:0 1px 2px #00000052,0 6px 14px #00000047}[data-v-71d3569e] .sm-fn-node:hover{transform:translateY(-1px)}[data-v-71d3569e] .sm-fn-edge .vue-flow__edge-path{stroke-width:1.5px}.sm-layout-btn-wrap[data-v-71d3569e]{z-index:10;position:absolute;top:10px;right:10px}.sm-layout-btn[data-v-71d3569e]{background:var(--sm-controls-bg);border:1px solid var(--sm-controls-border);height:28px;color:var(--text-secondary);cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:5px;padding:0 10px;font-size:11px;font-weight:500;transition:all .15s;display:flex}.sm-layout-btn[data-v-71d3569e]:hover:not(:disabled){color:#f59e0b;background:#f59e0b08;border-color:#f59e0b50}.sm-layout-btn[data-v-71d3569e]:disabled{opacity:.45;cursor:not-allowed}.sm-fn-inner[data-v-71d3569e]{text-align:center;flex-direction:column;gap:3px;width:100%;min-width:0;display:flex;overflow:hidden}.sm-fn-label[data-v-71d3569e]{color:var(--sm-node-text);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-size:12px;font-weight:600;overflow:hidden}.sm-fn-desc[data-v-71d3569e]{color:var(--sm-node-desc);white-space:nowrap;text-overflow:ellipsis;max-width:180px;font-size:10px;overflow:hidden}.sm-panel-header--tabs[data-v-71d3569e]{gap:0;height:32px;min-height:32px;padding:0}.sm-tab-btn[data-v-71d3569e]{cursor:pointer;height:100%;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;align-items:center;gap:4px;padding:0 8px;font-size:10px;font-weight:600;transition:all .15s;display:flex}.sm-tab-btn[data-v-71d3569e]:hover{color:var(--text-secondary);background:var(--bg-component-hover)}.sm-tab-btn.active[data-v-71d3569e]{color:#f59e0b;border-bottom-color:#f59e0b}.sm-outline-body[data-v-71d3569e]{flex:1;padding:4px 0;overflow:hidden auto}.sm-outline-group[data-v-71d3569e]{margin-bottom:2px}.sm-outline-group-header[data-v-71d3569e]{text-transform:uppercase;letter-spacing:.06em;background:var(--sm-canvas-bg);z-index:1;align-items:center;gap:5px;padding:5px 10px 3px;font-size:10px;font-weight:700;display:flex;position:sticky;top:0}.sm-outline-node[data-v-71d3569e]{cursor:pointer;align-items:center;gap:6px;height:26px;padding:0 8px 0 16px;transition:background .1s;display:flex;overflow:hidden}.sm-outline-node[data-v-71d3569e]:hover{background:var(--bg-component-hover)}.sm-outline-node--active[data-v-71d3569e]{background:#3b82f61f}.sm-outline-dot[data-v-71d3569e]{border-radius:50%;flex-shrink:0;width:6px;height:6px}.sm-outline-label[data-v-71d3569e]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;max-width:80px;font-family:Consolas,monospace;font-size:12px;font-weight:500;overflow:hidden}.sm-outline-desc[data-v-71d3569e]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:10px;overflow:hidden}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.workbench[data-v-3d63d0a0]{background:var(--bg-container);height:100%;color:var(--text-primary);display:flex}.wb-sidebar[data-v-3d63d0a0]{border-right:1px solid var(--border-color);background:var(--bg-surface);flex-shrink:0;width:260px;padding:12px;overflow-y:auto}.wb-sidebar__header[data-v-3d63d0a0]{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.wb-sidebar__header h3[data-v-3d63d0a0]{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin:0;font-size:13px;font-weight:600}.wb-sidebar__divider[data-v-3d63d0a0]{background:var(--border-color);height:1px;margin:16px 0}.wb-task-list[data-v-3d63d0a0],.wb-prompt-list[data-v-3d63d0a0]{margin:0;padding:0;list-style:none}.wb-task-item[data-v-3d63d0a0]{border-radius:var(--radius-md);cursor:pointer;border:1px solid #0000;margin-bottom:4px;padding:10px 12px;transition:background .15s,border-color .15s}.wb-task-item[data-v-3d63d0a0]:hover{background:var(--bg-hover)}.wb-task-item.active[data-v-3d63d0a0]{border-color:var(--color-primary);background:#3b82f61a}.wb-task-item__title[data-v-3d63d0a0]{margin-bottom:2px;font-size:13px;font-weight:500}.wb-task-item__meta[data-v-3d63d0a0]{color:var(--text-tertiary);justify-content:space-between;align-items:center;font-size:11px;display:flex}.wb-task-item__del[data-v-3d63d0a0],.wb-prompt-item__del[data-v-3d63d0a0],.wb-sub-item__del[data-v-3d63d0a0]{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;padding:0 4px;font-size:16px;line-height:1}.wb-task-item__del[data-v-3d63d0a0]:hover,.wb-prompt-item__del[data-v-3d63d0a0]:hover,.wb-sub-item__del[data-v-3d63d0a0]:hover{color:#ef4444}.wb-prompt-item[data-v-3d63d0a0]{border-radius:var(--radius-sm);justify-content:space-between;align-items:center;padding:6px 8px;font-size:12px;display:flex}.wb-prompt-item[data-v-3d63d0a0]:hover{background:var(--bg-hover)}.wb-prompt-item__name[data-v-3d63d0a0]{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.wb-empty[data-v-3d63d0a0]{text-align:center;color:var(--text-tertiary);padding:16px 8px;font-size:12px}.wb-split[data-v-3d63d0a0]{flex-direction:column;flex:1;gap:12px;padding:16px 20px;display:flex;overflow-y:auto}.wb-placeholder[data-v-3d63d0a0]{color:var(--text-tertiary);flex:1;justify-content:center;align-items:center;font-size:13px;display:flex}.wb-split__header[data-v-3d63d0a0]{align-items:center;gap:8px;display:flex}.wb-input[data-v-3d63d0a0]{background:var(--bg-base);border:1px solid var(--border-color);color:var(--text-primary);border-radius:var(--radius-md);outline:none;padding:6px 10px;font-size:13px}.wb-input[data-v-3d63d0a0]:focus{border-color:var(--color-primary)}.wb-input--title[data-v-3d63d0a0]{flex:1;font-size:16px;font-weight:600}.wb-select[data-v-3d63d0a0]{background:var(--bg-base);border:1px solid var(--border-color);color:var(--text-primary);border-radius:var(--radius-md);padding:6px 8px;font-size:13px}.wb-textarea[data-v-3d63d0a0]{background:var(--bg-base);border:1px solid var(--border-color);color:var(--text-primary);border-radius:var(--radius-md);resize:vertical;box-sizing:border-box;outline:none;width:100%;padding:8px 10px;font-family:inherit;font-size:13px}.wb-textarea[data-v-3d63d0a0]:focus{border-color:var(--color-primary)}.wb-textarea--sm[data-v-3d63d0a0]{min-height:40px}.wb-split__sub-header[data-v-3d63d0a0]{justify-content:space-between;align-items:center;margin-top:8px;display:flex}.wb-split__sub-header h4[data-v-3d63d0a0]{color:var(--text-secondary);margin:0;font-size:13px;font-weight:600}.wb-sub-list[data-v-3d63d0a0]{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.wb-sub-item[data-v-3d63d0a0]{background:var(--bg-surface);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:10px}.wb-sub-item__row[data-v-3d63d0a0]{align-items:center;gap:8px;margin-bottom:6px;display:flex}.wb-sub-item__status[data-v-3d63d0a0]{color:#fff;border-radius:10px;flex-shrink:0;padding:2px 8px;font-size:11px}.wb-sub-item__pid[data-v-3d63d0a0]{color:var(--text-tertiary);flex-shrink:0;font-family:ui-monospace,monospace;font-size:11px}.wb-sub-item__row .wb-input[data-v-3d63d0a0]{flex:1}.wb-log-details[data-v-3d63d0a0]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-code);margin-top:6px;overflow:hidden}.wb-log-summary[data-v-3d63d0a0]{cursor:pointer;color:var(--text-secondary);-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:12px;list-style:none;display:flex}.wb-log-summary[data-v-3d63d0a0]::-webkit-details-marker{display:none}.wb-log-summary[data-v-3d63d0a0]:hover{background:#3b82f60f}.wb-log-summary__meta[data-v-3d63d0a0]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.wb-log-pre[data-v-3d63d0a0]{max-height:240px;font-family:var(--font-mono,ui-monospace, monospace);color:var(--text-primary);background:var(--bg-code);white-space:pre-wrap;word-break:break-word;border-top:1px solid var(--border-color);margin:0;padding:8px 10px;font-size:12px;line-height:1.55;overflow:auto}.wb-attachments[data-v-3d63d0a0]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-subtle,var(--bg-container));margin-top:6px;transition:border-color .15s,background .15s;overflow:hidden}.wb-attachments.is-paste-hover[data-v-3d63d0a0]{border-color:var(--color-primary);box-shadow:inset 0 0 0 1px var(--color-primary);background:#3b82f60f}.wb-attachments__paste-hint[data-v-3d63d0a0]{background:var(--color-primary);color:#fff;text-align:center;border-top:1px solid var(--border-color);padding:4px 10px;font-size:12px}.wb-attachments__head[data-v-3d63d0a0]{color:var(--text-secondary);border-bottom:1px solid var(--border-color);justify-content:space-between;align-items:center;padding:6px 10px;font-size:12px;display:flex}.wb-attachments__label[data-v-3d63d0a0]{align-items:center;gap:6px;display:inline-flex}.wb-attachments__count[data-v-3d63d0a0]{font-variant-numeric:tabular-nums;color:var(--text-tertiary);font-size:11px}.wb-attachments__add[data-v-3d63d0a0]{border:1px solid var(--border-color);background:var(--bg-container);color:var(--text-primary);border-radius:var(--radius-sm,4px);cursor:pointer;padding:3px 10px;font-size:12px;transition:background .15s}.wb-attachments__add[data-v-3d63d0a0]:hover:not(:disabled){border-color:var(--color-primary);color:var(--color-primary);background:#3b82f614}.wb-attachments__add[data-v-3d63d0a0]:disabled{opacity:.5;cursor:not-allowed}.wb-attachments__list[data-v-3d63d0a0]{flex-wrap:wrap;gap:4px;margin:0;padding:4px;list-style:none;display:flex}.wb-attachment[data-v-3d63d0a0]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-container);align-items:center;gap:6px;min-width:0;max-width:240px;padding:4px 6px 4px 4px;display:flex}.wb-attachment__icon[data-v-3d63d0a0]{background:var(--bg-code);width:32px;height:32px;color:var(--text-tertiary);letter-spacing:.5px;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;font-size:10px;font-weight:600;display:flex;overflow:hidden}.wb-attachment__icon--img[data-v-3d63d0a0]{background:var(--bg-code)}.wb-attachment__icon img[data-v-3d63d0a0]{object-fit:cover;width:100%;height:100%}.wb-attachment__meta[data-v-3d63d0a0]{flex:1;min-width:0}.wb-attachment__name[data-v-3d63d0a0]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.wb-attachment__sub[data-v-3d63d0a0]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.wb-attachment__del[data-v-3d63d0a0]{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;width:20px;height:20px;font-size:16px;line-height:1}.wb-attachment__del[data-v-3d63d0a0]:hover{color:#ef4444;background:#ef444414}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./rolldown-runtime-CMxvf4Kt.js";import{$ as e,$n as t,An as n,En as r,Hn as ee,In as i,Jn as a,Kn as o,Ln as s,Mn as c,N as l,Nn as u,P as d,Qn as f,Sn as p,Tn as m,Un as h,Wn as g,_t as te,ar as _,cr as v,ct as ne,er as y,gt as re,jn as ie,kn as b,mt as ae,nr as x,or as S,rr as C,sr as oe,st as se,ut as ce,xn as le,zn as ue}from"./vendor-A4IPqbyo.js";import{n as w,t as T}from"./_plugin-vue_export-helper-opDPZuCO.js";import{t as de}from"./index-DPihtJfT.js";var fe={class:`workbench`},pe={class:`wb-sidebar`},me={class:`wb-sidebar__header`},he={class:`wb-task-list`},ge=[`onClick`],_e={class:`wb-task-item__title`},ve={class:`wb-task-item__meta`},ye=[`onClick`,`title`],be={key:0,class:`wb-empty`},xe={class:`wb-sidebar__header`},Se={class:`wb-prompt-list`},E=[`onClick`,`title`],D=[`onClick`],O={key:0,class:`wb-empty`},k={class:`wb-split`},A={key:0,class:`wb-placeholder`},j={class:`wb-split__header`},Ce=[`placeholder`],we={value:null},Te=[`value`],Ee=[`placeholder`],De={class:`wb-split__sub-header`},Oe={class:`wb-sub-list`},ke={class:`wb-sub-item__row`},Ae=[`onUpdate:modelValue`,`placeholder`,`onPaste`],je=[`title`],Me=[`onClick`],Ne=[`onUpdate:modelValue`,`placeholder`,`onPaste`],Pe=[`open`],Fe={class:`wb-log-summary`},Ie={key:0},Le={key:1},Re={key:2},ze={class:`wb-log-summary__meta`},Be=[`onPaste`,`onDragover`,`onDragenter`,`onDragleave`,`onDrop`],Ve={class:`wb-attachments__head`},He={class:`wb-attachments__label`},Ue={class:`wb-attachments__count`},We=[`disabled`,`onClick`],Ge={key:0,class:`wb-attachments__paste-hint`},Ke={key:1,class:`wb-attachments__list`},qe=[`src`,`alt`],Je={key:1},Ye={class:`wb-attachment__meta`},Xe=[`title`],Ze={class:`wb-attachment__sub`},Qe=[`onClick`,`title`],$e={key:0,class:`wb-empty`},et=64*1024,tt=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,nt=5*1024*1024,M=T(ue({__name:`WorkbenchView`,setup(ue){let T=C([]),M=C([]),N=C([]),P=C(null),F=b(()=>M.value.find(e=>e.id===P.value)||null),I=x({visible:!1,editing:null,name:``,content:``,aiLoading:!1}),L=x({visible:!1,editing:null,title:``,desc:``,promptId:null}),R=null,rt=de();function z(){rt.setRunning(N.value.filter(e=>e.status===`running`).length)}function B(e){return N.value.find(t=>t.subId===e)||null}function it(e,t){if(e===`hello`){N.value=t.jobs||[],z();return}if(e===`job:update`){let e=t,n=N.value.findIndex(t=>t.id===e.id);n>=0?N.value[n]=e:N.value.push(e),z()}if(e===`sub:update`){let e=M.value.find(e=>e.id===t.taskId);if(e){let n=e.subtasks.findIndex(e=>e.id===t.sub.id);n>=0&&(e.subtasks[n]=t.sub)}}if(e===`task:update`){let e=M.value.findIndex(e=>e.id===t.id);e>=0&&(M.value[e]=t)}e===`task:error`&&d.error(t.error||w(`@WORKBENCH:执行出错`))}async function V(){T.value=(await fetch(`/api/workbench/prompts`).then(e=>e.json()).catch(()=>({prompts:[]}))).prompts||[]}async function H(){M.value=(await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}))).tasks||[],!P.value&&M.value.length>0&&(P.value=M.value[0].id)}async function at(){N.value=(await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}))).jobs||[],z()}function U(){R&&=(R.close(),null),R=new EventSource(`/api/workbench/events`),R.onmessage=e=>{try{let t=JSON.parse(e.data);it(t.event,t.payload)}catch{}},R.onerror=()=>{R&&=(R.close(),null),setTimeout(U,3e3)}}function ot(){I.editing=null,I.name=``,I.content=``,I.aiLoading=!1,I.visible=!0}function st(e){I.editing=e,I.name=e.name,I.content=e.content,I.aiLoading=!1,I.visible=!0}async function ct(){if(!I.aiLoading){I.aiLoading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-generate`,{method:`POST`}).then(e=>e.json());if(e.success){let t=e.name||I.name,n=e.content||e.template||``;e.template&&e.result&&(n=`${e.template}\n\n## 当前项目架构总结\n\n${e.result}`),I.name=t,I.content=n,d.success(w(`@WORKBENCH:已生成,可继续编辑`))}else d.error(e.error||w(`@WORKBENCH:生成失败`))}catch(e){d.error(w(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{I.aiLoading=!1}}}async function lt(){if(!I.name.trim()||!I.content.trim()){d.warning(w(`@WORKBENCH:名称和内容不能为空`));return}let e={id:I.editing?.id,name:I.name.trim(),content:I.content},t=await fetch(`/api/workbench/prompts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(d.success(w(`@WORKBENCH:已保存`)),I.visible=!1,V()):d.error(t.error||w(`@WORKBENCH:保存失败`))}async function ut(e){await l.confirm(w(`@WORKBENCH:删除提示词「{name}」?`,{name:e.name}),w(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/prompts/${e.id}`,{method:`DELETE`}),V();for(let t of M.value)t.promptId===e.id&&(t.promptId=null,await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}));H()}function dt(){L.editing=null,L.title=``,L.desc=``,L.promptId=null,L.visible=!0}async function ft(){if(!L.title.trim()){d.warning(w(`@WORKBENCH:标题必填`));return}let e={id:L.editing?.id,title:L.title.trim(),desc:L.desc,promptId:L.promptId,subtasks:L.editing?.subtasks||[]},t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(d.success(w(`@WORKBENCH:已保存`)),L.visible=!1,H(),P.value||=t.task.id):d.error(t.error||w(`@WORKBENCH:保存失败`))}async function pt(e){await l.confirm(w(`@WORKBENCH:删除任务「{title}」及其所有子任务?`,{title:e.title}),w(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),P.value===e.id&&(P.value=null),H()}function mt(e){P.value=e.id}function ht(){if(!F.value)return;let e={id:`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`,title:w(`@WORKBENCH:新子任务`),desc:``,status:`todo`,promptOverride:``};F.value.subtasks.push(e),W(!1)}function gt(e){F.value&&(F.value.subtasks=F.value.subtasks.filter(t=>t.id!==e.id),W(!1))}async function W(e){if(!F.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(F.value)}).then(e=>e.json());return t.success?(e&&d.success(w(`@WORKBENCH:已保存拆分`)),await H(),!0):(d.error(t.error||w(`@WORKBENCH:保存失败`)),!1)}async function _t(){await W(!0)}async function vt(e){if(!e.subtasks||e.subtasks.length===0){d.warning(w(`@WORKBENCH:请先拆分任务`));return}if(F.value&&F.value.id===e.id){let t=M.value.find(t=>t.id===e.id);if((!t||t.title!==F.value.title||t.desc!==F.value.desc||JSON.stringify(t.subtasks)!==JSON.stringify(F.value.subtasks)||t.promptId!==F.value.promptId)&&!await W(!1))return}let t=await fetch(`/api/workbench/tasks/${e.id}/run`,{method:`POST`}).then(e=>e.json());t.success?d.success(t.message||w(`@WORKBENCH:已加入执行队列`)):d.error(t.error||w(`@WORKBENCH:执行失败`))}function yt(e){switch(e){case`todo`:return w(`@WORKBENCH:待执行`);case`running`:return w(`@WORKBENCH:执行中`);case`done`:return w(`@WORKBENCH:已完成`);case`error`:return w(`@WORKBENCH:出错`);case`pending`:return w(`@WORKBENCH:排队中`);default:return e}}function bt(e){switch(e){case`running`:return`var(--color-primary)`;case`done`:return`#22c55e`;case`error`:return`#ef4444`;case`pending`:return`#f59e0b`;default:return`var(--text-tertiary)`}}g(async()=>{await Promise.all([V(),H(),at()]),U()}),h(()=>{R&&=(R.close(),null)});let G=C({});function xt(e){return t=>{G.value[e]=t}}f(()=>N.value.map(e=>({id:e.id,len:(e.output||``).length})),e=>{e.forEach(({id:e})=>{let t=N.value.find(t=>t.id===e);if(!t||t.status!==`running`)return;let n=G.value[t.subId];n&&ee(()=>{n.scrollTop=n.scrollHeight})})},{deep:!0,flush:`post`});function St(e){return e?e.length<=et?e:`${w(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}let Ct=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/gif`,`image/webp`,`image/bmp`,`image/svg+xml`,`application/pdf`,`text/plain`,`text/markdown`,`text/x-markdown`,`text/csv`,`application/json`,`text/json`,`text/x-log`]),K=C({}),q=C(null);function J(e){return!!K.value[e]}function Y(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function X(e,t){if(!e.clipboardData)return;let n=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`));if(n.length>0){e.preventDefault();for(let e of n){let n=e.getAsFile();if(!n)continue;let r=(n.type.split(`/`)[1]||`png`).replace(`jpeg`,`jpg`);Z(t,Y(n,`paste-${new Date().toISOString().replace(/[:.]/g,`-`)}.${r}`))}return}let r=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&!e.type.startsWith(`image/`));if(r.length>0){e.preventDefault();for(let e of r){let n=e.getAsFile();n&&Z(t,Y(n,n.name||`pasted-file`))}}}function wt(e,t){q.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>Z(t,e))}async function Z(e,t){if(t.size>nt){d.error(`「${t.name}」${w(`@WORKBENCH:超过 5MB 限制`)}`);return}if(!Ct.has(t.type)&&!t.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){d.error(`${w(`@WORKBENCH:不支持的文件类型`)}(${t.name})`);return}if((e.attachments||[]).length>=9){d.error(w(`@WORKBENCH:单个子任务最多 9 个附件`));return}K.value[e.id]=!0;try{let n=await fetch(`/api/workbench/subtasks/${e.id}/attachments`,{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":t.name,"X-Mime-Type":t.type||`application/octet-stream`},body:t}).then(e=>e.json());n.success?(Array.isArray(e.attachments)||(e.attachments=[]),e.attachments.push(n.attachment),d.success(`${w(`@WORKBENCH:已添加:`)}${t.name}`)):d.error(n.error||w(`@WORKBENCH:上传失败`))}catch(e){d.error(w(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{K.value[e.id]=!1}}async function Tt(e,t){try{await l.confirm(w(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),w(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(`/api/workbench/subtasks/${e.id}/attachments/${t.id}`,{method:`DELETE`}).then(e=>e.json());n.success?(e.attachments=(e.attachments||[]).filter(e=>e.id!==t.id),d.success(w(`@WORKBENCH:已删除`))):d.error(n.error||w(`@WORKBENCH:删除失败`))}function Et(e){let t=document.createElement(`input`);t.type=`file`,t.accept=tt,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>Z(e,t))},t.click()}let Q=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function $(e){return Q.has(String(e.ext||``).toLowerCase())}function Dt(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return(ee,l)=>{let d=ce,f=ae,h=te,g=re,b=e,x=se,C=ne;return o(),u(`div`,fe,[n(`aside`,pe,[n(`div`,me,[n(`h3`,null,v(_(w)(`@WORKBENCH:任务列表`)),1),s(d,{size:`small`,type:`primary`,onClick:dt},{default:t(()=>[i(v(_(w)(`@WORKBENCH:新建任务`)),1)]),_:1})]),n(`ul`,he,[(o(!0),u(r,null,a(M.value,e=>(o(),u(`li`,{key:e.id,class:S([`wb-task-item`,{active:e.id===P.value}]),onClick:t=>mt(e)},[n(`div`,_e,v(e.title),1),n(`div`,ve,[n(`span`,null,v(e.subtasks?.length||0)+` `+v(_(w)(`@WORKBENCH:个子任务`)),1),n(`button`,{class:`wb-task-item__del`,onClick:m(t=>pt(e),[`stop`]),title:_(w)(`@WORKBENCH:删除`)},`×`,8,ye)])],10,ge))),128)),M.value.length===0?(o(),u(`li`,be,v(_(w)(`@WORKBENCH:暂无任务,点击右上角新建`)),1)):c(``,!0)]),l[13]||=n(`div`,{class:`wb-sidebar__divider`},null,-1),n(`div`,xe,[n(`h3`,null,v(_(w)(`@WORKBENCH:预置提示词`)),1),s(d,{size:`small`,onClick:ot},{default:t(()=>[i(v(_(w)(`@WORKBENCH:新建`)),1)]),_:1})]),n(`ul`,Se,[(o(!0),u(r,null,a(T.value,e=>(o(),u(`li`,{key:e.id,class:`wb-prompt-item`},[n(`span`,{class:`wb-prompt-item__name`,onClick:t=>st(e),title:e.content},v(e.name),9,E),n(`button`,{class:`wb-prompt-item__del`,onClick:t=>ut(e)},`×`,8,D)]))),128)),T.value.length===0?(o(),u(`li`,O,v(_(w)(`@WORKBENCH:暂无提示词`)),1)):c(``,!0)])]),n(`section`,k,[F.value?(o(),u(r,{key:1},[n(`div`,j,[y(n(`input`,{class:`wb-input wb-input--title`,"onUpdate:modelValue":l[0]||=e=>F.value.title=e,placeholder:_(w)(`@WORKBENCH:任务标题`)},null,8,Ce),[[p,F.value.title]]),y(n(`select`,{class:`wb-select`,"onUpdate:modelValue":l[1]||=e=>F.value.promptId=e},[n(`option`,we,v(_(w)(`@WORKBENCH:不绑定预置提示词`)),1),(o(!0),u(r,null,a(T.value,e=>(o(),u(`option`,{key:e.id,value:e.id},v(e.name),9,Te))),128))],512),[[le,F.value.promptId]]),s(d,{type:`primary`,loading:!1,onClick:l[2]||=e=>vt(F.value)},{default:t(()=>[i(v(_(w)(`@WORKBENCH:执行任务`)),1)]),_:1})]),y(n(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":l[3]||=e=>F.value.desc=e,placeholder:_(w)(`@WORKBENCH:任务描述(可选)`),rows:`3`},null,8,Ee),[[p,F.value.desc]]),n(`div`,De,[n(`h4`,null,v(_(w)(`@WORKBENCH:子任务拆分`)),1),n(`div`,null,[s(d,{size:`small`,onClick:ht},{default:t(()=>[i(`+ `+v(_(w)(`@WORKBENCH:添加子任务`)),1)]),_:1}),s(d,{size:`small`,type:`primary`,onClick:_t},{default:t(()=>[i(v(_(w)(`@WORKBENCH:保存拆分`)),1)]),_:1})])]),n(`ul`,Oe,[(o(!0),u(r,null,a(F.value.subtasks,e=>(o(),u(`li`,{key:e.id,class:`wb-sub-item`},[n(`div`,ke,[n(`span`,{class:`wb-sub-item__status`,style:oe({background:bt(e.status)})},v(yt(e.status)),5),y(n(`input`,{class:`wb-input`,"onUpdate:modelValue":t=>e.title=t,placeholder:_(w)(`@WORKBENCH:子任务标题`),onPaste:t=>X(t,e)},null,40,Ae),[[p,e.title]]),B(e.id)?(o(),u(`span`,{key:0,class:`wb-sub-item__pid`,title:_(w)(`@WORKBENCH:进程ID`)},` PID: `+v(B(e.id)?.pid),9,je)):c(``,!0),n(`button`,{class:`wb-sub-item__del`,onClick:t=>gt(e)},`×`,8,Me)]),y(n(`textarea`,{class:`wb-textarea wb-textarea--sm`,"onUpdate:modelValue":t=>e.desc=t,placeholder:_(w)(`@WORKBENCH:子任务描述 / 独立提示词覆盖`),rows:`2`,onPaste:t=>X(t,e)},null,40,Ne),[[p,e.desc]]),B(e.id)?(o(),u(`details`,{key:0,class:`wb-log-details`,open:B(e.id)?.status===`running`||B(e.id)?.status===`pending`},[n(`summary`,Fe,[B(e.id)?.status===`running`?(o(),u(`span`,Ie,`● `+v(_(w)(`@WORKBENCH:正在执行…`)),1)):B(e.id)?.status===`pending`?(o(),u(`span`,Le,v(_(w)(`@WORKBENCH:排队中…`)),1)):(o(),u(`span`,Re,v(_(w)(`@WORKBENCH:查看执行日志`)),1)),n(`span`,ze,v((B(e.id)?.output||``).length)+` `+v(_(w)(`@WORKBENCH:字符`)),1)]),n(`pre`,{ref_for:!0,ref:xt(e.id),class:`wb-log-pre`},v(St(B(e.id)?.output)||_(w)(`@WORKBENCH:(暂无输出)`)),513)],8,Pe)):c(``,!0),n(`div`,{class:S([`wb-attachments`,{"is-paste-hover":q.value===e.id}]),onPaste:t=>X(t,e),onDragover:m(t=>q.value=e.id,[`prevent`]),onDragenter:m(t=>q.value=e.id,[`prevent`]),onDragleave:t=>q.value=q.value===e.id?null:q.value,onDrop:m(t=>wt(t,e),[`prevent`])},[n(`div`,Ve,[n(`span`,He,[i(v(_(w)(`@WORKBENCH:附件`))+` `,1),n(`span`,Ue,v((e.attachments||[]).length)+` / 9`,1)]),n(`button`,{class:`wb-attachments__add`,disabled:J(e.id)||(e.attachments||[]).length>=9,onClick:t=>Et(e)},v(J(e.id)?_(w)(`@WORKBENCH:上传中…`):_(w)(`@WORKBENCH:添加附件`)),9,We)]),q.value===e.id?(o(),u(`div`,Ge,v(_(w)(`@WORKBENCH:粘贴图片以快速添加`)),1)):c(``,!0),(e.attachments||[]).length>0?(o(),u(`ul`,Ke,[(o(!0),u(r,null,a(e.attachments,t=>(o(),u(`li`,{key:t.id,class:`wb-attachment`},[n(`div`,{class:S([`wb-attachment__icon`,{"wb-attachment__icon--img":$(t)}])},[$(t)?(o(),u(`img`,{key:0,src:`/api/workbench/attachments/${t.id}/raw`,alt:t.originalName,loading:`lazy`},null,8,qe)):(o(),u(`span`,Je,v(t.ext.toUpperCase()),1))],2),n(`div`,Ye,[n(`div`,{class:`wb-attachment__name`,title:t.originalName},v(t.originalName),9,Xe),n(`div`,Ze,v(Dt(t.size))+` · `+v(t.mimeType),1)]),n(`button`,{class:`wb-attachment__del`,onClick:n=>Tt(e,t),title:_(w)(`@WORKBENCH:删除`)},`×`,8,Qe)]))),128))])):c(``,!0)],42,Be)]))),128)),F.value.subtasks.length===0?(o(),u(`li`,$e,v(_(w)(`@WORKBENCH:暂无子任务,点击上方按钮添加`)),1)):c(``,!0)])],64)):(o(),u(`div`,A,[n(`p`,null,v(_(w)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))]),s(b,{modelValue:I.visible,"onUpdate:modelValue":l[7]||=e=>I.visible=e,title:I.editing?_(w)(`@WORKBENCH:编辑提示词`):_(w)(`@WORKBENCH:新建提示词`),width:`640px`},{footer:t(()=>[s(d,{onClick:l[6]||=e=>I.visible=!1},{default:t(()=>[i(v(_(w)(`@WORKBENCH:取消`)),1)]),_:1}),s(d,{type:`primary`,onClick:lt},{default:t(()=>[i(v(_(w)(`@WORKBENCH:保存`)),1)]),_:1})]),default:t(()=>[s(g,{"label-position":`top`},{default:t(()=>[s(h,{label:_(w)(`@WORKBENCH:名称`)},{default:t(()=>[s(f,{modelValue:I.name,"onUpdate:modelValue":l[4]||=e=>I.name=e,placeholder:_(w)(`@WORKBENCH:如:代码审查 / 写测试`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),s(h,null,{default:t(()=>[s(d,{type:`primary`,plain:``,loading:I.aiLoading,onClick:ct},{default:t(()=>[i(v(_(w)(`@WORKBENCH:AI 生成(基于当前项目)`)),1)]),_:1},8,[`loading`])]),_:1}),s(h,{label:_(w)(`@WORKBENCH:内容`)},{default:t(()=>[s(f,{modelValue:I.content,"onUpdate:modelValue":l[5]||=e=>I.content=e,type:`textarea`,rows:10,placeholder:_(w)(`@WORKBENCH:可用变量:{{task.title}} {{task.desc}} {{sub.title}} {{sub.desc}} {{repo.path}} {{branch}}`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),s(b,{modelValue:L.visible,"onUpdate:modelValue":l[12]||=e=>L.visible=e,title:L.editing?_(w)(`@WORKBENCH:编辑任务`):_(w)(`@WORKBENCH:新建任务`),width:`560px`},{footer:t(()=>[s(d,{onClick:l[11]||=e=>L.visible=!1},{default:t(()=>[i(v(_(w)(`@WORKBENCH:取消`)),1)]),_:1}),s(d,{type:`primary`,onClick:ft},{default:t(()=>[i(v(_(w)(`@WORKBENCH:保存`)),1)]),_:1})]),default:t(()=>[s(g,{"label-position":`top`},{default:t(()=>[s(h,{label:_(w)(`@WORKBENCH:标题`)},{default:t(()=>[s(f,{modelValue:L.title,"onUpdate:modelValue":l[8]||=e=>L.title=e},null,8,[`modelValue`])]),_:1},8,[`label`]),s(h,{label:_(w)(`@WORKBENCH:描述`)},{default:t(()=>[s(f,{modelValue:L.desc,"onUpdate:modelValue":l[9]||=e=>L.desc=e,type:`textarea`,rows:3},null,8,[`modelValue`])]),_:1},8,[`label`]),s(h,{label:_(w)(`@WORKBENCH:预置提示词`)},{default:t(()=>[s(C,{modelValue:L.promptId,"onUpdate:modelValue":l[10]||=e=>L.promptId=e,clearable:``,placeholder:_(w)(`@WORKBENCH:不绑定`),style:{width:`100%`}},{default:t(()=>[(o(!0),u(r,null,a(T.value,e=>(o(),ie(x,{key:e.id,label:e.name,value:e.id},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-3d63d0a0`]]);export{M as default};
|