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 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
  ![ui](https://raw.githubusercontent.com/xz333221/zen-gitsync/main/public/images/zen-gitsync-ui-git.png)
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 three views: **Git**, **Editor**, and **Source Map**.
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
  ![ui](https://raw.githubusercontent.com/xz333221/zen-gitsync/main/public/images/zen-gitsync-ui-git.png)
417
449
 
418
- GUI 以本地 Web 服务器形式运行,自动在浏览器中打开,并附加到当前 Git 仓库。左侧 Activity Bar 可在三个视图之间切换:**Git**、**编辑器**、**源码地图**。
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.7",
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}
@@ -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};