zen-gitsync 2.17.26 → 2.17.27
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 +3 -3
- package/package.json +1 -1
- package/src/ui/public/assets/AgentEngineSelector-BUZYAFe-.js +2 -0
- package/src/ui/public/assets/AgentEngineSelector-DUf0TfaU.css +1 -0
- package/src/ui/public/assets/AgentView-BFSmHCq7.js +10 -0
- package/src/ui/public/assets/AgentView-BaYMwfC4.css +1 -0
- package/src/ui/public/assets/AppVersionBadge-BVZKGETC.js +2 -0
- package/src/ui/public/assets/{AppVersionBadge--5If494j.css → AppVersionBadge-DDYQqoy7.css} +1 -1
- package/src/ui/public/assets/BranchSelector-DHWPodUA.js +1 -0
- package/src/ui/public/assets/{BranchSelector-BTCMYwG0.css → BranchSelector-F4ibldMN.css} +1 -1
- package/src/ui/public/assets/CommitForm-4kI2csgs.css +1 -0
- package/src/ui/public/assets/CommitForm-OhIAOaq7.js +6 -0
- package/src/ui/public/assets/CommonDialog-BXR1wKBq.js +1 -0
- package/src/ui/public/assets/CommonDialog-w6EmBEXv.css +1 -0
- package/src/ui/public/assets/EditorView-8SLDYcaH.js +37 -0
- package/src/ui/public/assets/EditorView-CftLj8-x.css +1 -0
- package/src/ui/public/assets/FileDiffViewer-CfMdcN2j.js +15 -0
- package/src/ui/public/assets/FileDiffViewer-n5ea9qMe.css +1 -0
- package/src/ui/public/assets/FlowExecutionViewer-Dp3ZiatT.js +1 -0
- package/src/ui/public/assets/FlowExecutionViewer-jNHI5zdm.css +1 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-D97DHgyy.js +21 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-DwuSSxJ1.css +1 -0
- package/src/ui/public/assets/IconButton-BburHRSR.js +1 -0
- package/src/ui/public/assets/IconButton-RlXqKOeu.css +1 -0
- package/src/ui/public/assets/LogList-XspUhx-C.css +1 -0
- package/src/ui/public/assets/LogList-gFCt4Zlu.js +7 -0
- package/src/ui/public/assets/MindmapView-Diq2Cu4O.css +1 -0
- package/src/ui/public/assets/MindmapView-N67x62Qk.js +2 -0
- package/src/ui/public/assets/MonitorView-BQr56ZSC.js +1 -0
- package/src/ui/public/assets/MonitorView-DwUwJXnY.css +1 -0
- package/src/ui/public/assets/ProjectStartupButton-CB8IOg1E.css +1 -0
- package/src/ui/public/assets/ProjectStartupButton-DuWf9Z0m.js +1 -0
- package/src/ui/public/assets/RecentDirectoriesChat-6OG0eOqz.js +3 -0
- package/src/ui/public/assets/RecentDirectoriesChat-BMkc7fS1.css +1 -0
- package/src/ui/public/assets/RemoteManagerDialog-D4WphMtO.css +1 -0
- package/src/ui/public/assets/RemoteManagerDialog-DrR79IRj.js +4 -0
- package/src/ui/public/assets/RemoteRepoCard-BU6qOfoG.js +7 -0
- package/src/ui/public/assets/RemoteRepoCard-o01IrbVz.css +1 -0
- package/src/ui/public/assets/SourceMapView-Ba73NVs8.js +3 -0
- package/src/ui/public/assets/SourceMapView-CfDydtsu.css +1 -0
- package/src/ui/public/assets/SvgIcon-22vrNtgL.js +1 -0
- package/src/ui/public/assets/{SvgIcon-BQ6bR7l0.css → SvgIcon-CDNsk4-Q.css} +1 -1
- package/src/ui/public/assets/TemplateManager-C9CzSc6Y.js +1 -0
- package/src/ui/public/assets/TemplateManager-DO7EPfj8.css +1 -0
- package/src/ui/public/assets/UserInputNode-4m8zpMv9.js +1 -0
- package/src/ui/public/assets/UserInputNode-DDNSarag.css +1 -0
- package/src/ui/public/assets/{WorkbenchView-BNxybEqF.css → WorkbenchView-B4F_TeL5.css} +1 -1
- package/src/ui/public/assets/WorkbenchView-CcqEZ_GQ.js +142 -0
- package/src/ui/public/assets/{_plugin-vue_export-helper-CGArUtKL.js → _plugin-vue_export-helper-DRfZJqP7.js} +5 -5
- package/src/ui/public/assets/agentConversations-17Pw5IQJ.js +6 -0
- package/src/ui/public/assets/{configStore-Vh8LZWlL.js → configStore-Gzz89_z_.js} +1 -1
- package/src/ui/public/assets/element-plus-AaVXaSqv.js +48 -0
- package/src/ui/public/assets/{flow-mindmap-OPE_D4da.js → flow-mindmap-C22NSZc1.js} +34 -34
- package/src/ui/public/assets/{gitStore-B9gZQf2q.js → gitStore--fzrTf_y.js} +1 -1
- package/src/ui/public/assets/index-C7Ad5BGO.css +1 -0
- package/src/ui/public/assets/index-EJrJOx7s.js +142 -0
- package/src/ui/public/assets/office-docx-CJ6JSCs6.js +32 -0
- package/src/ui/public/assets/{office-excel-DMRySOdK.js → office-excel-BOjWK-1x.js} +1 -1
- package/src/ui/public/assets/office-pptx-CF43ZwXE.js +74 -0
- package/src/ui/public/assets/previewSandbox-BOIpC6hW.js +9 -0
- package/src/ui/public/assets/{previewSandbox-SqNQvuHv.css → previewSandbox-PYnM6Paz.css} +1 -1
- package/src/ui/public/assets/socket-io-BFqQXqAp.js +1 -0
- package/src/ui/public/assets/{toolsStore-DgCBDdhm.js → toolsStore-B3bFcRXP.js} +1 -1
- package/src/ui/public/assets/{useThemeObserver-DYxFoHh1.js → useThemeObserver-CiUpR4zj.js} +1 -1
- package/src/ui/public/assets/vendor-Bwl4dT-P.css +1 -0
- package/src/ui/public/assets/{vendor-BjomZKSS.js → vendor-viKaN257.js} +180 -173
- package/src/ui/public/assets/vue-flow-DwYB6Myr.js +39 -0
- package/src/ui/public/index.html +25 -25
- package/src/ui/public/assets/AgentEngineSelector-CEayBStS.js +0 -1
- package/src/ui/public/assets/AgentEngineSelector-DR3r5eQE.css +0 -1
- package/src/ui/public/assets/AgentView-B3LhhRsy.css +0 -1
- package/src/ui/public/assets/AgentView-BhLlAvng.js +0 -1
- package/src/ui/public/assets/AppVersionBadge-btxeyJpH.js +0 -2
- package/src/ui/public/assets/BranchSelector-ERybqfLW.js +0 -1
- package/src/ui/public/assets/CommitForm-C-cL8_vz.css +0 -1
- package/src/ui/public/assets/CommitForm-DcXdYwKn.js +0 -6
- package/src/ui/public/assets/CommonDialog-5bwugMhs.js +0 -1
- package/src/ui/public/assets/CommonDialog-Bzi5ISqT.css +0 -1
- package/src/ui/public/assets/EditorView-BzxNDG8A.js +0 -1
- package/src/ui/public/assets/EditorView-DqxBkn6c.css +0 -1
- package/src/ui/public/assets/FileDiffViewer-B6zy6NiA.css +0 -1
- package/src/ui/public/assets/FileDiffViewer-BBOtL3bR.js +0 -14
- package/src/ui/public/assets/FlowExecutionViewer-B5kh7VxS.css +0 -1
- package/src/ui/public/assets/FlowExecutionViewer-BPMDn3Md.js +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CM2_9TW3.css +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-PtCM4LB1.js +0 -21
- package/src/ui/public/assets/IconButton-BELiW6cx.js +0 -1
- package/src/ui/public/assets/IconButton-W2X09OKH.css +0 -1
- package/src/ui/public/assets/LogList-BAD5dV_N.js +0 -7
- package/src/ui/public/assets/LogList-C7q0Y4J_.css +0 -1
- package/src/ui/public/assets/MindmapView-BAwb7Gs1.js +0 -1
- package/src/ui/public/assets/MindmapView-C4xg3TwX.css +0 -1
- package/src/ui/public/assets/MonitorView-BWOQfPtI.css +0 -1
- package/src/ui/public/assets/MonitorView-DIqKQfiM.js +0 -1
- package/src/ui/public/assets/ProjectStartupButton-DnQyvZOG.js +0 -1
- package/src/ui/public/assets/ProjectStartupButton-VoQqFee4.css +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-BMZA0DgP.js +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-o4xK1Koc.css +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-BSOph2h2.css +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-BmdcIfwA.js +0 -1
- package/src/ui/public/assets/RemoteRepoCard-CG9WPcA_.css +0 -1
- package/src/ui/public/assets/RemoteRepoCard-DqKIIcGh.js +0 -1
- package/src/ui/public/assets/SourceMapView-CO_BZJKu.css +0 -1
- package/src/ui/public/assets/SourceMapView-Sd_871DD.js +0 -3
- package/src/ui/public/assets/SvgIcon-DyQoHzNw.js +0 -1
- package/src/ui/public/assets/TemplateManager-BI1EXn7d.js +0 -1
- package/src/ui/public/assets/TemplateManager-DiM3vrbf.css +0 -1
- package/src/ui/public/assets/UserInputNode-3qtC_swg.js +0 -1
- package/src/ui/public/assets/UserInputNode-d-oRXM_J.css +0 -1
- package/src/ui/public/assets/WorkbenchView-wAdnj8Kl.js +0 -6
- package/src/ui/public/assets/agentConversations-cmS8iux5.js +0 -5
- package/src/ui/public/assets/element-plus-Bx3j6vzG.js +0 -28
- package/src/ui/public/assets/index-BZFKDSGv.css +0 -1
- package/src/ui/public/assets/index-DE-31lcL.js +0 -29
- package/src/ui/public/assets/office-docx-B0sJQnr-.js +0 -31
- package/src/ui/public/assets/office-pptx-Do2blxao.js +0 -60
- package/src/ui/public/assets/previewSandbox-DmecmT9g.js +0 -9
- package/src/ui/public/assets/socket-io-TBtw0msS.js +0 -1
- package/src/ui/public/assets/vendor-BY5ZDlW1.css +0 -1
- package/src/ui/public/assets/vue-flow-fVVGZspa.js +0 -39
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.source-map-view[data-v-7e494a75]{background:var(--sm-graph-bg);width:100%;height:100%;color:var(--text-primary);font-size:var(--font-size-mid);flex-direction:column;display:flex;overflow:hidden}.sm-toolbar[data-v-7e494a75]{background:var(--sm-canvas-bg);flex-shrink:0;align-items:center;gap:12px;padding:8px 16px;display:flex}.sm-toolbar-left[data-v-7e494a75]{flex-shrink:0;align-items:center;gap:8px;display:flex}.sm-toolbar-center[data-v-7e494a75]{flex:1;align-items:center;gap:8px;display:flex}.sm-toolbar-right[data-v-7e494a75]{flex-shrink:0;align-items:center;gap:4px;display:flex}.sm-icon-map[data-v-7e494a75]{color:var(--color-warning-light)}.sm-title[data-v-7e494a75]{font-size:var(--font-size-mid);color:var(--text-primary);font-weight:600}.sm-path-input[data-v-7e494a75]{background:var(--bg-input);border:1px solid var(--border-input);border-radius:var(--radius-md);height:30px;color:var(--text-primary);font-size:var(--font-size-sm);transition:border-color var(--transition-fast);outline:none;flex:1;padding:0 10px;font-family:Consolas,Monaco,monospace}.sm-path-input[data-v-7e494a75]:focus{border-color:var(--color-warning-light)}.sm-path-input[data-v-7e494a75]:disabled{opacity:.6;cursor:not-allowed}.sm-btn[data-v-7e494a75]{border-radius:var(--radius-md);height:30px;font-size:var(--font-size-sm);cursor:pointer;transition:var(--transition-ui-fast);white-space:nowrap;border:none;align-items:center;gap:6px;padding:0 14px;font-weight:500;display:inline-flex}.sm-btn-primary[data-v-7e494a75]{background:linear-gradient(135deg, var(--color-warning-light), var(--action-amber));color:#fff}.sm-btn-primary[data-v-7e494a75]:hover:not(:disabled){background:linear-gradient(135deg, var(--action-amber-bright), var(--color-warning-light))}.sm-btn-primary[data-v-7e494a75]:disabled{opacity:.6;cursor:not-allowed}.sm-panel-btn[data-v-7e494a75]{cursor:pointer;width:28px;height:28px;color:var(--text-tertiary);transition:var(--transition-ui-fast);background:0 0;border:1px solid #0000;border-radius:5px;justify-content:center;align-items:center;display:flex}.sm-panel-btn[data-v-7e494a75]:hover,.sm-panel-btn.active[data-v-7e494a75]{background:var(--bg-component-hover);border-color:var(--border-color);color:var(--text-primary)}.sm-panel-btn.active[data-v-7e494a75]{color:var(--color-warning-light);border-color:#f59e0b40}.sm-body[data-v-7e494a75]{flex:1;min-height:0;display:flex;overflow:hidden}.sm-resizer[data-v-7e494a75]{transition:background var(--transition-fast);z-index:2;background:0 0;flex-shrink:0;position:relative}.sm-resizer-v[data-v-7e494a75]{cursor:col-resize;width:6px}.sm-resizer-h[data-v-7e494a75]{cursor:row-resize;height:6px}.sm-resizer[data-v-7e494a75]:after{content:"";border-radius:var(--radius-xs);background:var(--border-color);transition:background var(--transition-fast);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.sm-resizer-v[data-v-7e494a75]:after{width:2px;height:32px}.sm-resizer-h[data-v-7e494a75]:after{width:32px;height:2px}.sm-resizer[data-v-7e494a75]:hover{background:var(--tint-primary-06)}.sm-resizer[data-v-7e494a75]:hover:after{background:var(--color-primary,var(--color-primary));box-shadow:0 0 8px #3b82f666}.sm-resizer-v[data-v-7e494a75]:hover:after{height:48px}.sm-resizer-h[data-v-7e494a75]:hover:after{width:48px}.sm-panel[data-v-7e494a75]{flex-direction:column;min-width:0;display:flex;overflow:hidden}.sm-panel-files[data-v-7e494a75]{background:var(--sm-canvas-bg);flex-shrink:0;min-width:0;overflow:hidden}.sm-panel-graph[data-v-7e494a75]{background:var(--sm-graph-bg);flex:1;min-width:300px}.sm-panel-source[data-v-7e494a75]{background:var(--sm-canvas-bg);flex-shrink:0}.sm-panel-header[data-v-7e494a75]{font-size:var(--font-size-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;background:var(--sm-canvas-bg);flex-shrink:0;align-items:center;gap:6px;padding:6px 10px;font-weight:600;display:flex}.sm-panel-body[data-v-7e494a75]{flex:1;min-height:0;overflow:auto}.sm-project-info[data-v-7e494a75]{background:var(--sm-canvas-bg);flex-shrink:0;align-items:center;gap:6px;padding:6px 12px;display:flex;overflow:hidden}.sm-lang-badge[data-v-7e494a75]{border-radius:var(--radius-base);font-size:var(--font-size-xs);color:var(--color-warning-light);background:#f59e0b22;border:1px solid #f59e0b44;flex-shrink:0;align-items:center;padding:1px 7px;font-weight:600;display:inline-flex}.sm-tech-tag[data-v-7e494a75]{border-radius:var(--radius-base);font-size:var(--font-size-xs);color:var(--action-blue-soft-border);background:#3b82f611;border:1px solid #3b82f630;flex-shrink:0;align-items:center;padding:1px 6px;display:inline-flex}.sm-subsystem-tag[data-v-7e494a75]{border-radius:var(--radius-base);font-size:var(--font-size-xs);opacity:.85;background:0 0;border:1px solid;flex-shrink:0;align-items:center;gap:3px;padding:1px 7px;font-weight:600;display:inline-flex}.sm-summary-text[data-v-7e494a75]{font-size:var(--font-size-xs);color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}.sm-graph-container[data-v-7e494a75]{flex:1;min-height:0;position:relative;overflow:hidden}.sm-vue-flow[data-v-7e494a75]{width:100%;height:100%}.sm-graph-empty[data-v-7e494a75],.sm-graph-loading[data-v-7e494a75]{color:var(--text-tertiary);font-size:var(--font-size-mid);pointer-events:none;flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex;position:absolute;inset:0}.sm-log-panel[data-v-7e494a75]{background:var(--sm-canvas-bg);flex-direction:column;flex-shrink:0;min-height:60px;display:flex}.sm-log-header[data-v-7e494a75]{font-size:var(--font-size-xs);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;align-items:center;gap:6px;padding:4px 10px;font-weight:600;display:flex}.sm-log-indicator[data-v-7e494a75]{background:var(--color-warning-light);border-radius:50%;width:6px;height:6px;margin-left:auto;animation:1s infinite pulse-7e494a75}@keyframes pulse-7e494a75{0%,to{opacity:1}50%{opacity:.3}}.sm-log-body[data-v-7e494a75]{font-family:Consolas,Monaco,monospace;font-size:var(--font-size-xs);flex:1;padding:4px 0;overflow-y:auto}.sm-log-entry[data-v-7e494a75]{padding:2px 10px;line-height:1.5}.sm-log-entry--info[data-v-7e494a75]{color:var(--text-tertiary)}.sm-log-entry--success[data-v-7e494a75]{color:var(--text-success,var(--action-green-dark))}.sm-log-entry--error[data-v-7e494a75]{color:var(--text-danger,var(--git-status-locked))}.sm-log-entry--thinking[data-v-7e494a75]{color:var(--color-warning-light)}.sm-file-tree[data-v-7e494a75]{flex:1;padding:4px 0;overflow:hidden auto}.sm-tree-node[data-v-7e494a75]{cursor:pointer;border-radius:var(--radius-base);-webkit-user-select:none;user-select:none;height:24px;color:var(--text-primary);font-size:var(--font-size-mid);transition:background var(--transition-fast);white-space:nowrap;box-sizing:border-box;align-items:center;gap:4px;padding-right:8px;display:flex;overflow:hidden}.sm-tree-node[data-v-7e494a75]:hover{background:var(--bg-component-hover)}.sm-tree-node--active[data-v-7e494a75]{background:var(--tint-primary-12);color:var(--color-primary)}.sm-tree-arrow[data-v-7e494a75]{color:var(--text-tertiary);transition:transform var(--transition-fast);flex-shrink:0;align-items:center;width:12px;display:flex}.sm-tree-arrow.expanded[data-v-7e494a75]{transform:rotate(90deg)}.sm-tree-arrow-spacer[data-v-7e494a75]{flex-shrink:0;width:12px;display:inline-block}.sm-tree-icon[data-v-7e494a75]{font-size:var(--font-size-base);flex-shrink:0;align-items:center;line-height:1;display:flex}.sm-tree-icon.mit-icon[data-v-7e494a75]{fill:currentColor;vertical-align:middle;width:14px;height:14px;display:inline-block}.sm-tree-name[data-v-7e494a75]{text-overflow:ellipsis;min-width:0;font-size:var(--font-size-mid);flex:1;overflow:hidden}.sm-tree-empty[data-v-7e494a75]{font-size:var(--font-size-sm);color:var(--text-tertiary);text-align:center;padding:24px 12px}.sm-node-detail[data-v-7e494a75]{background:#f59e0b0f;border-bottom:1px solid #f59e0b38;flex-shrink:0;padding:8px 12px}.sm-node-name[data-v-7e494a75]{font-size:var(--font-size-mid);color:var(--color-warning-light);font-family:Consolas,monospace;font-weight:600}.sm-node-file[data-v-7e494a75]{font-size:var(--font-size-xs);color:var(--text-tertiary);margin-top:2px;font-family:Consolas,monospace}.sm-node-desc[data-v-7e494a75]{font-size:var(--font-size-xs);color:var(--text-secondary);margin-top:4px;line-height:1.4}.sm-source-body[data-v-7e494a75]{background:var(--sm-source-bg);position:relative;overflow:hidden}.sm-monaco-container[data-v-7e494a75]{width:100%;height:100%}.sm-source-overlay[data-v-7e494a75]{background:var(--sm-source-overlay-bg);z-index:10;font-size:var(--font-size-sm);color:var(--text-tertiary);pointer-events:none;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.sm-source-placeholder[data-v-7e494a75]{background:var(--sm-source-bg);pointer-events:none}.sm-empty[data-v-7e494a75]{height:100%;min-height:60px;color:var(--text-tertiary);font-size:var(--font-size-sm);text-align:center;justify-content:center;align-items:center;padding:12px;display:flex}.sm-badge[data-v-7e494a75]{background:var(--bg-page);border:1px solid var(--border-color);border-radius:var(--radius-base);font-size:var(--font-size-xs);color:var(--text-secondary);align-items:center;margin-left:4px;padding:1px 6px;font-weight:600;display:inline-flex}.sm-badge-amber[data-v-7e494a75]{color:var(--color-warning-light);background:#f59e0b15;border-color:#f59e0b40}.sm-spinner[data-v-7e494a75]{border:2px solid #ffffff40;border-top-color:#fff;border-radius:50%;width:12px;height:12px;animation:.8s linear infinite spin-7e494a75;display:inline-block}.sm-spinner-lg[data-v-7e494a75]{border-width:3px;border-color:#f59e0b20;border-top-color:var(--color-warning-light);width:32px;height:32px}@keyframes spin-7e494a75{to{transform:rotate(360deg)}}[data-v-7e494a75] .vue-flow__background{background:var(--sm-graph-bg)}[data-v-7e494a75] .vue-flow__controls{background:var(--sm-controls-bg);border:1px solid var(--sm-controls-border);border-radius:var(--radius-lg);box-shadow:none}[data-v-7e494a75] .vue-flow__controls-button{color:var(--sm-controls-color);background:0 0;border:none}[data-v-7e494a75] .vue-flow__controls-button:hover{background:var(--sm-controls-hover-bg);color:var(--sm-controls-hover-color)}[data-v-7e494a75] .vue-flow__minimap{background:var(--sm-minimap-bg);border:1px solid var(--sm-controls-border);border-radius:var(--radius-md)}[data-v-7e494a75] .vue-flow__minimap-mask{fill:var(--sm-minimap-mask);stroke:var(--sm-minimap-mask-stroke)}[data-v-7e494a75] .vue-flow__edge-path,[data-v-7e494a75] .vue-flow__connection-path{stroke:var(--sm-edge-color)}[data-v-7e494a75] .vue-flow__arrowhead polyline,[data-v-7e494a75] .vue-flow__arrowhead path,[data-v-7e494a75] .vue-flow__marker polyline,[data-v-7e494a75] .vue-flow__marker path{stroke:var(--sm-edge-color);fill:var(--sm-edge-color)}[data-v-7e494a75] .vue-flow__edge{stroke:var(--sm-edge-color)}[data-v-7e494a75] .vue-flow__node{transition:box-shadow var(--transition-fast)}[data-v-7e494a75] .vue-flow__node:hover{box-shadow:0 0 0 2px #f59e0b8c}[data-v-7e494a75] .vue-flow__node.selected{box-shadow:0 0 0 2px var(--color-warning-light)}[data-v-7e494a75] .sm-fn-node{background:var(--sm-node-bg);color:var(--sm-node-text);border:2px solid var(--node-accent,var(--color-primary));border-radius:var(--radius-lg);font-size:var(--font-size-sm);cursor:pointer;min-width:140px;max-width:200px;transition:transform var(--transition-fast), box-shadow var(--transition-fast);padding:8px 12px;box-shadow:0 1px 2px #0f172a14,0 4px 12px #0f172a0f}[data-theme=dark][data-v-7e494a75] .sm-fn-node{box-shadow:0 1px 2px #00000052,0 6px 14px #00000047}[data-v-7e494a75] .sm-fn-node:hover{transform:translateY(-1px)}[data-v-7e494a75] .sm-fn-edge .vue-flow__edge-path{stroke-width:1.5px}.sm-layout-btn-wrap[data-v-7e494a75]{z-index:10;position:absolute;top:10px;right:10px}.sm-layout-btn[data-v-7e494a75]{background:var(--sm-controls-bg);border:1px solid var(--sm-controls-border);border-radius:var(--radius-md);height:28px;color:var(--text-secondary);font-size:var(--font-size-xs);cursor:pointer;transition:var(--transition-ui-fast);white-space:nowrap;align-items:center;gap:5px;padding:0 10px;font-weight:500;display:flex}.sm-layout-btn[data-v-7e494a75]:hover:not(:disabled){color:var(--color-warning-light);background:#f59e0b08;border-color:#f59e0b50}.sm-layout-btn[data-v-7e494a75]:disabled{opacity:.45;cursor:not-allowed}.sm-fn-inner[data-v-7e494a75]{text-align:center;flex-direction:column;gap:3px;width:100%;min-width:0;display:flex;overflow:hidden}.sm-fn-label[data-v-7e494a75]{font-size:var(--font-size-sm);color:var(--sm-node-text);white-space:nowrap;text-overflow:ellipsis;max-width:100%;font-weight:600;overflow:hidden}.sm-fn-desc[data-v-7e494a75]{font-size:var(--font-size-xs);color:var(--sm-node-desc);white-space:nowrap;text-overflow:ellipsis;max-width:180px;overflow:hidden}.sm-panel-header--tabs[data-v-7e494a75]{gap:0;height:32px;min-height:32px;padding:0}.sm-tab-btn[data-v-7e494a75]{cursor:pointer;height:100%;font-size:var(--font-size-xs);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;transition:var(--transition-ui-fast);white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;align-items:center;gap:4px;padding:0 8px;font-weight:600;display:flex}.sm-tab-btn[data-v-7e494a75]:hover{color:var(--text-secondary);background:var(--bg-component-hover)}.sm-tab-btn.active[data-v-7e494a75]{color:var(--color-warning-light);border-bottom-color:var(--color-warning-light)}.sm-outline-body[data-v-7e494a75]{flex:1;padding:4px 0;overflow:hidden auto}.sm-outline-group[data-v-7e494a75]{margin-bottom:2px}.sm-outline-group-header[data-v-7e494a75]{font-size:var(--font-size-xs);text-transform:uppercase;letter-spacing:.06em;background:var(--sm-canvas-bg);z-index:1;align-items:center;gap:5px;padding:5px 10px 3px;font-weight:700;display:flex;position:sticky;top:0}.sm-outline-node[data-v-7e494a75]{cursor:pointer;height:26px;transition:background var(--transition-fast);align-items:center;gap:6px;padding:0 8px 0 16px;display:flex;overflow:hidden}.sm-outline-node[data-v-7e494a75]:hover{background:var(--bg-component-hover)}.sm-outline-node--active[data-v-7e494a75]{background:var(--tint-primary-12)}.sm-outline-dot[data-v-7e494a75]{border-radius:50%;flex-shrink:0;width:6px;height:6px}.sm-outline-label[data-v-7e494a75]{font-size:var(--font-size-sm);color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;max-width:80px;font-family:Consolas,monospace;font-weight:500;overflow:hidden}.sm-outline-desc[data-v-7e494a75]{font-size:var(--font-size-xs);color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{An as t,Cn as n,Dn as r,En as i,Er as a,H as o,Jn as s,Kn as c,Mn as l,Pn as u,Pr as d,Qn as f,Qr as p,Rn as m,Un as h,Xn as g,Yr as _,_n as ee,a as te,br as v,cr as y,gn as b,hn as ne,jn as x,ln as S,lr as C,or as w,pr as T,qr as E,wn as D,xr as re,yn as O}from"./element-plus-Bx3j6vzG.js";import{n as k,t as ie}from"./_plugin-vue_export-helper-CGArUtKL.js";import{t as ae}from"./configStore-Vh8LZWlL.js";import{t as oe}from"./fileIcon-B5p5pGN9.js";import{r as A}from"./monaco-DkJuNcCr.js";import{t as se}from"./useThemeObserver-DYxFoHh1.js";import{a as ce,c as le,i as ue,l as de,n as fe,o as pe,r as me,s as he,t as ge}from"./vue-flow-fVVGZspa.js";import{t as j}from"./dagre-zBHe31_z.js";m(),T(),d(),S();var _e=e(j(),1),ve={class:`source-map-view`},ye={class:`sm-toolbar`},be={class:`sm-toolbar-left`},xe={class:`sm-title`},Se={class:`sm-toolbar-center`},Ce=[`placeholder`,`disabled`],we=[`disabled`],Te={class:`sm-toolbar-right`},Ee={class:`sm-body`},De={class:`sm-panel-header sm-panel-header--tabs`},Oe={key:0,class:`sm-badge`},ke={class:`sm-panel-body sm-file-tree`},Ae=[`onClick`],je={key:1,class:`sm-tree-arrow-spacer`},Me={key:2,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Ne=[`xlink:href`],Pe={key:3,class:`sm-tree-icon mit-icon`,"aria-hidden":`true`},Fe=[`xlink:href`],Ie=[`title`],Le={key:1,class:`sm-tree-empty`},Re={class:`sm-panel-body sm-outline-body`},ze={class:`sm-badge`,style:{"margin-left":`auto`}},Be=[`onClick`],Ve=[`title`],He={key:0,class:`sm-outline-desc`},Ue={key:1,class:`sm-tree-empty`},We={class:`sm-panel sm-panel-graph`},Ge={key:0,class:`sm-project-info`},Ke={class:`sm-lang-badge`},qe={class:`sm-summary-text`},Je={class:`sm-graph-container`},Ye={class:`sm-layout-btn-wrap`},Xe=[`disabled`],Ze=[`title`],Qe={class:`sm-fn-label`},$e={key:0,class:`sm-fn-desc`},et={key:0,class:`sm-graph-empty`},tt={viewBox:`0 0 24 24`,width:`48`,height:`48`,fill:`none`,stroke:`currentColor`,"stroke-width":`1`,style:{opacity:`0.3`}},nt={key:1,class:`sm-graph-loading`},rt={class:`sm-log-header`},it={key:0,class:`sm-log-indicator`},at={class:`sm-log-body`,ref:`logBodyRef`},ot={key:0,class:`sm-empty`},st={class:`sm-panel-header`},ct={key:0,class:`sm-badge sm-badge-amber`},lt={key:0,class:`sm-node-detail`},ut={class:`sm-node-name`},dt={class:`sm-node-file`},ft={key:0},pt={key:0,class:`sm-node-desc`},mt={class:`sm-panel-body sm-source-body`},ht={key:0,class:`sm-source-overlay`},gt={key:1,class:`sm-source-overlay sm-source-placeholder`},M=ie(u({__name:`SourceMapView`,setup(e){let{theme:u}=se(),d=ae(),m=v(d.currentDirectory||``),S=v(`idle`),T=v([]),ie=0,j=v(null),M=v(null),N=v(`files`),P=v(``),F=v(``),I=v(!1),L=v([]),R=v(new Set),z=v({files:!0,graph:!0,source:!0}),B=v(!1),V=v(220),H=v(360),U=v(140),W=null,G=0,_t=0,K=0;function q(e,t){W=e,G=t.clientX,_t=t.clientY,K=e===`files`?V.value:e===`source`?H.value:U.value,document.addEventListener(`mousemove`,vt),document.addEventListener(`mouseup`,J),t.preventDefault()}function vt(e){W&&(W===`files`?V.value=Math.max(120,Math.min(480,K+e.clientX-G)):W===`source`?H.value=Math.max(200,Math.min(700,K+G-e.clientX)):U.value=Math.max(60,Math.min(500,K+_t-e.clientY)))}function J(){W=null,document.removeEventListener(`mousemove`,vt),document.removeEventListener(`mouseup`,J)}let Y=v(null),X=re(null),{fitView:yt,setNodes:bt,setEdges:xt,getNodes:St,getEdges:Ct,updateNodeInternals:wt}=de(),Z=n(()=>S.value===`scanning`||S.value===`analyzing`),Tt=n(()=>u.value===`dark`?`#334155`:`#cbd5e1`),Q=n(()=>j.value?.nodes.find(e=>e.id===M.value)??null),Et=n(()=>{if(!j.value)return[];let e=new Map;for(let t of j.value.nodes){let n=t.subsystem??`__default__`;if(!e.has(n)){let r=j.value.subsystems?.find(e=>e.name===n);e.set(n,{displayName:r?.displayName||t.subsystem||k(`@SRCMAP:默认`),color:t.subsystemColor||Ot[0],nodes:[]})}e.get(n).nodes.push(t)}return[...e.entries()].map(([,e])=>e)});function $(e,t=`info`){T.value.push({id:++ie,message:e,type:t,timestamp:Date.now()}),T.value.length>200&&T.value.splice(0,T.value.length-200)}function Dt(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 Ot=[`var(--color-warning-light)`,`var(--color-primary)`,`var(--color-success-light)`,`var(--color-think)`];function kt(e){return e.subsystemColor?e.subsystemColor:e.subsystemIndex===void 0?e.importance===`high`?`var(--color-warning-light)`:e.importance===`low`?`#94a3b8`:`var(--color-primary)`:Ot[e.subsystemIndex%Ot.length]}function At(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 jt(){Y.value&&!X.value&&(X.value=A.create(Y.value,{value:``,language:`plaintext`,theme:u.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}}))}w(u,e=>{X.value&&A.setTheme(e===`dark`?`vs-dark`:`vs`)});function Mt(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=kt(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:ce.ArrowClosed}}))}}async function Nt(){let e=St.value,t=Ct.value;if(e.length!==0){B.value=!0;try{await h(),await new Promise(e=>requestAnimationFrame(()=>e())),wt(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 _e.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)}),_e.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}let a=e.map(e=>({...e,position:r.get(e.id)??e.position}));bt(a),await h(),yt({padding:.18})}finally{B.value=!1}}}async function Pt(){if(!m.value.trim()){te.warning(k(`@SRCMAP:请先输入项目路径`));return}if(!Z.value){T.value=[],j.value=null,M.value=null,P.value=``,F.value=``,bt([]),xt([]),S.value=`scanning`,$(k(`@SRCMAP:开始分析项目...`),`info`);try{let e=await fetch(`/api/code-analysis/analyze`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({path:m.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=``;S.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);Ft(i,t)}catch{}}i=``,a=[]}}}catch(e){$(`${k(`@SRCMAP:分析失败`)}: ${e.message}`,`error`),S.value=`error`}}}function Ft(e,t){if(e===`log`)$(t.message,t.type||`info`);else if(e===`files`){let e=t.files||[];L.value=Dt(e),L.value.forEach(e=>{e.kind===`dir`&&R.value.add(e.path)})}else if(e===`result`){j.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}=Mt(j.value.nodes,j.value.edges);bt(e),xt(n),h(()=>Nt())}else e===`done`&&(t.error?($(`${k(`@SRCMAP:分析失败`)}: ${t.error}`,`error`),S.value=`error`):S.value=`done`)}async function It(e){if(e&&!I.value&&F.value!==e){I.value=!0,F.value=e,P.value=``;try{let t=await(await fetch(`/api/code-analysis/file-content?path=${encodeURIComponent(m.value)}&file=${encodeURIComponent(e)}`)).json();if(t.error)throw Error(t.error);P.value=t.content||``}catch(e){P.value=`// ${k(`@SRCMAP:加载失败`)}: ${e.message}`}finally{I.value=!1}}}function Lt(e){let t=e.node.data;M.value=t.id,t.file&&It(t.file)}function Rt(e){R.value.has(e)?R.value.delete(e):R.value.add(e)}let zt=n(()=>{let e=[];function t(n,r){for(let i of n){let n=R.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(L.value,0),e});return w(()=>d.currentDirectory,e=>{e&&!m.value&&(m.value=e)}),w([P,F],([e,t])=>{let n=X.value;if(!n)return;let r=At(t||``),i=n.getModel(),a=A.createModel(e||``,r);n.setModel(a),i?.dispose(),n.setScrollPosition({scrollTop:0,scrollLeft:0})}),s(()=>{jt(),!m.value&&d.currentDirectory&&(m.value=d.currentDirectory)}),c(()=>{X.value?.getModel()?.dispose(),X.value?.dispose(),J()}),(e,n)=>{let s=o;return g(),r(`div`,ve,[D(`div`,ye,[D(`div`,be,[n[9]||=D(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,class:`sm-icon-map`},[D(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`}),D(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`}),D(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`})],-1),D(`span`,xe,p(a(k)(`@SRCMAP:源码地图`)),1)]),D(`div`,Se,[C(D(`input`,{"onUpdate:modelValue":n[0]||=e=>m.value=e,class:`sm-path-input`,placeholder:a(k)(`@SRCMAP:输入项目目录路径`),disabled:Z.value,onKeydown:ee(Pt,[`enter`])},null,40,Ce),[[ne,m.value]]),D(`button`,{class:`sm-btn sm-btn-primary`,disabled:Z.value,onClick:Pt},[Z.value?(g(),r(O,{key:0},[n[10]||=D(`span`,{class:`sm-spinner`},null,-1),x(` `+p(a(k)(`@SRCMAP:分析中...`)),1)],64)):(g(),r(O,{key:1},[x(p(S.value===`done`?a(k)(`@SRCMAP:重新分析`):a(k)(`@SRCMAP:开始分析`)),1)],64))],8,we)]),D(`div`,Te,[l(s,{content:a(k)(`@SRCMAP:文件列表`),placement:`bottom`},{default:y(()=>[D(`button`,{class:E([`sm-panel-btn`,{active:z.value.files}]),onClick:n[1]||=e=>z.value.files=!z.value.files},[...n[11]||=[D(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[D(`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`]),l(s,{content:a(k)(`@SRCMAP:调用图`),placement:`bottom`},{default:y(()=>[D(`button`,{class:E([`sm-panel-btn`,{active:z.value.graph}]),onClick:n[2]||=e=>z.value.graph=!z.value.graph},[...n[12]||=[D(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[D(`circle`,{cx:`12`,cy:`12`,r:`3`}),D(`circle`,{cx:`3`,cy:`6`,r:`2`}),D(`circle`,{cx:`21`,cy:`6`,r:`2`}),D(`circle`,{cx:`3`,cy:`18`,r:`2`}),D(`circle`,{cx:`21`,cy:`18`,r:`2`}),D(`line`,{x1:`5`,y1:`6`,x2:`9`,y2:`11`}),D(`line`,{x1:`19`,y1:`6`,x2:`15`,y2:`11`}),D(`line`,{x1:`5`,y1:`18`,x2:`9`,y2:`13`}),D(`line`,{x1:`19`,y1:`18`,x2:`15`,y2:`13`})],-1)]],2)]),_:1},8,[`content`]),l(s,{content:a(k)(`@SRCMAP:源码面板`),placement:`bottom`},{default:y(()=>[D(`button`,{class:E([`sm-panel-btn`,{active:z.value.source}]),onClick:n[3]||=e=>z.value.source=!z.value.source},[...n[13]||=[D(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[D(`polyline`,{points:`16 18 22 12 16 6`}),D(`polyline`,{points:`8 6 2 12 8 18`})],-1)]],2)]),_:1},8,[`content`])])]),D(`div`,Ee,[C(D(`div`,{class:`sm-panel sm-panel-files`,style:_({width:V.value+`px`})},[D(`div`,De,[D(`button`,{class:E([`sm-tab-btn`,{active:N.value===`files`}]),onClick:n[4]||=e=>N.value=`files`},[n[14]||=D(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[D(`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),x(` `+p(a(k)(`@SRCMAP:文件列表`))+` `,1),j.value?(g(),r(`span`,Oe,p(j.value.allFiles.length),1)):i(``,!0)],2),D(`button`,{class:E([`sm-tab-btn`,{active:N.value===`outline`}]),onClick:n[5]||=e=>N.value=`outline`},[n[15]||=t(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" data-v-7e494a75><line x1="8" y1="6" x2="21" y2="6" data-v-7e494a75></line><line x1="8" y1="12" x2="21" y2="12" data-v-7e494a75></line><line x1="8" y1="18" x2="21" y2="18" data-v-7e494a75></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-7e494a75></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-7e494a75></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-7e494a75></line></svg>`,1),x(` `+p(a(k)(`@SRCMAP:大纲`)),1)],2)]),C(D(`div`,ke,[zt.value.length>0?(g(!0),r(O,{key:0},f(zt.value,e=>(g(),r(`div`,{key:e.path,class:E([`sm-tree-node`,{"sm-tree-node--dir":e.kind===`dir`,"sm-tree-node--active":e.kind===`file`&&F.value===e.path}]),style:_({paddingLeft:10+e.depth*14+`px`}),onClick:t=>e.kind===`dir`?Rt(e.path):It(e.path)},[e.kind===`dir`?(g(),r(`span`,{key:0,class:E([`sm-tree-arrow`,{expanded:e.expanded}])},[...n[16]||=[D(`svg`,{viewBox:`0 0 24 24`,width:`10`,height:`10`,fill:`none`,stroke:`currentColor`,"stroke-width":`2.5`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[D(`polyline`,{points:`9 18 15 12 9 6`})],-1)]],2)):(g(),r(`span`,je)),e.kind===`dir`?(g(),r(`svg`,Me,[D(`use`,{"xlink:href":`#${a(oe)(e.name)||`icon-folder`}`},null,8,Ne)])):(g(),r(`svg`,Pe,[D(`use`,{"xlink:href":`#${a(oe)(e.name)}`},null,8,Fe)])),D(`span`,{class:`sm-tree-name`,title:e.path},p(e.name),9,Ie)],14,Ae))),128)):(g(),r(`div`,Le,p(a(k)(`@SRCMAP:暂无文件,请先开始分析`)),1))],512),[[b,N.value===`files`]]),C(D(`div`,Re,[Et.value.length>0?(g(!0),r(O,{key:0},f(Et.value,e=>(g(),r(`div`,{key:e.displayName,class:`sm-outline-group`},[D(`div`,{class:`sm-outline-group-header`,style:_({color:e.color})},[n[17]||=D(`svg`,{viewBox:`0 0 24 24`,width:`8`,height:`8`,fill:`currentColor`},[D(`circle`,{cx:`12`,cy:`12`,r:`6`})],-1),x(` `+p(e.displayName)+` `,1),D(`span`,ze,p(e.nodes.length),1)],4),(g(!0),r(O,null,f(e.nodes,t=>(g(),r(`div`,{key:t.id,class:E([`sm-outline-node`,{"sm-outline-node--active":M.value===t.id}]),onClick:e=>{M.value=t.id,t.file&&It(t.file)}},[D(`span`,{class:`sm-outline-dot`,style:_({background:e.color})},null,4),D(`span`,{class:`sm-outline-label`,title:t.file||t.label},p(t.label),9,Ve),t.description?(g(),r(`span`,He,p(t.description.length>18?t.description.slice(0,18)+`…`:t.description),1)):i(``,!0)],10,Be))),128))]))),128)):(g(),r(`div`,Ue,p(a(k)(`@SRCMAP:暂无分析结果`)),1))],512),[[b,N.value===`outline`]])],4),[[b,z.value.files]]),C(D(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:n[6]||=e=>q(`files`,e)},null,544),[[b,z.value.files&&z.value.graph]]),C(D(`div`,We,[j.value?(g(),r(`div`,Ge,[D(`span`,Ke,p(j.value.language),1),j.value.subsystems&&j.value.subsystems.length>1?(g(!0),r(O,{key:0},f(j.value.subsystems,e=>(g(),r(`span`,{key:e.name,class:`sm-subsystem-tag`,style:_({borderColor:e.color,color:e.color})},`● `+p(e.displayName||e.name),5))),128)):(g(!0),r(O,{key:1},f(j.value.techStack.slice(0,4),e=>(g(),r(`span`,{key:e,class:`sm-tech-tag`},p(e),1))),128)),D(`span`,qe,p(j.value.summary),1)])):i(``,!0),D(`div`,Je,[D(`div`,Ye,[D(`button`,{class:`sm-layout-btn`,disabled:B.value||!j.value,onClick:Nt},[n[18]||=t(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" data-v-7e494a75><rect x="3" y="3" width="7" height="7" rx="1" data-v-7e494a75></rect><rect x="14" y="3" width="7" height="7" rx="1" data-v-7e494a75></rect><rect x="3" y="14" width="7" height="7" rx="1" data-v-7e494a75></rect><rect x="14" y="14" width="7" height="7" rx="1" data-v-7e494a75></rect></svg>`,1),x(` `+p(B.value?a(k)(`@SRCMAP:布局中...`):a(k)(`@SRCMAP:优化布局`)),1)],8,Xe)]),l(a(he),{class:`sm-vue-flow`,"default-viewport":{zoom:1},"min-zoom":.2,"max-zoom":4,"fit-view-on-init":``,onNodeClick:Lt},{"node-default":y(({data:e,label:t})=>[l(a(le),{type:`target`,position:a(pe).Top},null,8,[`position`]),D(`div`,{class:`sm-fn-inner`,title:`${t}${e?.description?`
|
|
3
|
-
`+e.description:``}`},[D(`div`,Qe,p(t),1),e?.description?(g(),r(`div`,$e,p(e.description.length>22?e.description.slice(0,22)+`…`:e.description),1)):i(``,!0)],8,Ze),l(a(le),{type:`source`,position:a(pe).Bottom},null,8,[`position`])]),default:y(()=>[l(a(ue),{variant:a(me).Dots,gap:20,size:1,"pattern-color":Tt.value},null,8,[`variant`,`pattern-color`]),l(a(fe)),l(a(ge),{"node-color":`var(--color-primary)`,"mask-color":a(u)===`dark`?`rgba(0,0,0,0.55)`:`rgba(15,23,42,0.06)`},null,8,[`mask-color`])]),_:1}),!j.value&&!Z.value?(g(),r(`div`,et,[(g(),r(`svg`,tt,[...n[19]||=[D(`polygon`,{points:`3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21`},null,-1),D(`line`,{x1:`9`,y1:`3`,x2:`9`,y2:`18`},null,-1),D(`line`,{x1:`15`,y1:`6`,x2:`15`,y2:`21`},null,-1)]])),D(`p`,null,p(a(k)(`@SRCMAP:输入项目路径后点击开始分析`)),1)])):i(``,!0),Z.value&&!j.value?(g(),r(`div`,nt,[n[20]||=D(`span`,{class:`sm-spinner sm-spinner-lg`},null,-1),D(`p`,null,p(a(k)(`@SRCMAP:AI 正在分析项目结构...`)),1)])):i(``,!0)]),D(`div`,{class:`sm-resizer sm-resizer-h`,onMousedown:n[7]||=e=>q(`log`,e)},null,32),D(`div`,{class:`sm-log-panel`,style:_({height:U.value+`px`})},[D(`div`,rt,[n[21]||=D(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[D(`polyline`,{points:`4 17 10 11 4 5`}),D(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})],-1),x(` `+p(a(k)(`@SRCMAP:Agent 日志`))+` `,1),Z.value?(g(),r(`span`,it)):i(``,!0)]),D(`div`,at,[(g(!0),r(O,null,f(T.value.slice(-50),e=>(g(),r(`div`,{key:e.id,class:E([`sm-log-entry`,`sm-log-entry--${e.type}`])},p(e.message),3))),128)),T.value.length===0?(g(),r(`div`,ot,p(a(k)(`@SRCMAP:等待开始分析`)),1)):i(``,!0)],512)],4)],512),[[b,z.value.graph]]),C(D(`div`,{class:`sm-resizer sm-resizer-v`,onMousedown:n[8]||=e=>q(`source`,e)},null,544),[[b,z.value.graph&&z.value.source]]),C(D(`div`,{class:`sm-panel sm-panel-source`,style:_({width:H.value+`px`})},[D(`div`,st,[n[22]||=D(`svg`,{viewBox:`0 0 24 24`,width:`13`,height:`13`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`},[D(`polyline`,{points:`16 18 22 12 16 6`}),D(`polyline`,{points:`8 6 2 12 8 18`})],-1),x(` `+p(F.value||a(k)(`@SRCMAP:源码面板`))+` `,1),Q.value?(g(),r(`span`,ct,p(Q.value.label),1)):i(``,!0)]),Q.value?(g(),r(`div`,lt,[D(`div`,ut,p(Q.value.label),1),D(`div`,dt,[x(p(Q.value.file),1),Q.value.line?(g(),r(`span`,ft,` :`+p(Q.value.line),1)):i(``,!0)]),Q.value.description?(g(),r(`div`,pt,p(Q.value.description),1)):i(``,!0)])):i(``,!0),D(`div`,mt,[I.value?(g(),r(`div`,ht,[...n[23]||=[D(`span`,{class:`sm-spinner`},null,-1)]])):i(``,!0),!I.value&&!P.value?(g(),r(`div`,gt,p(a(k)(`@SRCMAP:点击调用图中的节点查看源码`)),1)):i(``,!0),D(`div`,{ref_key:`monacoContainerRef`,ref:Y,class:`sm-monaco-container`},null,512)])],4),[[b,z.value.source]])])])}}}),[[`__scopeId`,`data-v-7e494a75`]]);export{M as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Cn as e,Dn as t,Pn as n,Pr as r,Rn as i,Xn as a,qr as o,wn as s}from"./element-plus-Bx3j6vzG.js";import{t as c}from"./_plugin-vue_export-helper-CGArUtKL.js";i(),r();var l=[`aria-hidden`,`role`,`aria-label`,`focusable`],u=[`xlink:href`],d=c(n({__name:`index`,props:{iconClass:{type:String,required:!0},className:{type:String,default:``},decorative:{type:Boolean,default:!0},ariaLabel:{type:String,default:``}},setup(n){let r=n,i=e(()=>`#icon-${r.iconClass}`),c=e(()=>r.className?`svg-icon ${r.className}`:`svg-icon`);return(e,r)=>(a(),t(`svg`,{class:o(c.value),"aria-hidden":n.decorative?`true`:void 0,role:n.decorative?void 0:`img`,"aria-label":n.decorative?void 0:n.ariaLabel||void 0,focusable:n.decorative?`false`:void 0},[s(`use`,{"xlink:href":i.value},null,8,u)],10,l))}}),[[`__scopeId`,`data-v-7665e9bc`]]);export{d as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Dn as t,En as n,Er as r,I as i,L as a,Mn as o,N as ee,O as te,Pn as s,Pr as c,Qn as l,Qr as u,Rn as d,Tn as f,V as p,Xn as m,_n as ne,a as h,br as g,cr as _,jn as v,ln as y,or as b,pr as x,pt as S,qr as C,wn as w,x as T,yn as E}from"./element-plus-Bx3j6vzG.js";import{n as D,t as O}from"./_plugin-vue_export-helper-CGArUtKL.js";import{t as re}from"./SvgIcon-DyQoHzNw.js";import{t as ie}from"./configStore-Vh8LZWlL.js";import{t as ae}from"./CommonDialog-5bwugMhs.js";d(),y(),x(),c();var oe={class:`template-form`},k={class:`template-form-buttons`},se={key:0,class:`template-list`},ce={key:1,class:`template-list-scroll`},le={class:`template-content`},ue={class:`template-actions`},A={key:1,class:`templates-container`},j={class:`message-templates-list`},M={class:`templates-scroll-area`},N={class:`template-content`},P={class:`template-actions`},F={key:0,class:`current-default-message`},I={class:`default-message-content`},L={key:2,class:`message-help-text`},R=s({__name:`TemplateManager`,props:{visible:{type:Boolean},type:{},title:{},placeholder:{default:D(`@60CAC:输入新模板内容`)},editPlaceholder:{default:D(`@60CAC:编辑模板内容`)},emptyDescription:{default:D(`@60CAC:暂无保存的模板`)},showDefaultSection:{type:Boolean,default:!1},showHelpText:{type:Boolean,default:!1}},emits:[`update:visible`,`use-template`,`set-default`],setup(s,{expose:c,emit:d}){let y=s,x=d,O=ie(),R=g(``),z=g(!1),B=g(``),V=g(-1),H=g(!1),U=g(!1),W=g(!1),G=e(()=>{switch(y.type){case`description`:return O.descriptionTemplates||[];case`scope`:return O.scopeTemplates||[];case`message`:return O.messageTemplates||[];case`command`:return O.commandTemplates||[];default:return[]}}),K=e(()=>y.type===`message`?O.defaultCommitMessage:``),de=e(()=>z.value?y.editPlaceholder:y.placeholder),fe=e(()=>z.value?D(`@60CAC:更新模板`):D(`@60CAC:添加模板`)),q=e({get:()=>y.visible,set:e=>x(`update:visible`,e)});b(q,e=>{e||J()});function J(){R.value=``,z.value=!1,B.value=``,V.value=-1}async function Y(){if(!R.value.trim()){h.warning(D(`@60CAC:模板内容不能为空`));return}try{H.value=!0,z.value?await O.updateTemplate(B.value,R.value,y.type)&&J():await O.saveTemplate(R.value,y.type)&&(R.value=``)}catch(e){h.error(`${D(`@60CAC:模板保存失败: `)}${e.message}`)}finally{H.value=!1}}function X(e){x(`use-template`,e),y.type!==`message`&&(q.value=!1)}function Z(e,t){z.value=!0,B.value=e,R.value=e,V.value=t}function pe(){J()}async function Q(e){try{W.value=!0,await O.pinTemplate(e,y.type)}catch(e){h.error(`${D(`@60CAC:置顶模板失败: `)}${e.message}`)}finally{W.value=!1}}async function $(e){try{await O.deleteTemplate(e,y.type)}catch(e){h.error(`${D(`@60CAC:模板删除失败: `)}${e.message}`)}}async function me(){if(y.type===`message`&&R.value.trim())try{U.value=!0,await O.saveDefaultMessage(R.value)&&x(`set-default`,R.value)}catch(e){h.error(`${D(`@60CAC:设置默认提交信息失败: `)}${e.message}`)}finally{U.value=!1}}return c({resetForm:J}),(e,c)=>{let d=p,h=a,g=T,y=re,b=te,x=ee,O=i;return m(),f(ae,{modelValue:q.value,"onUpdate:modelValue":c[1]||=e=>q.value=e,title:s.title,"close-on-click-modal":!1,"append-to-body":!0,"custom-class":s.type===`message`?`message-template-dialog`:`template-dialog`},{default:_(()=>[w(`div`,{class:C([`template-container`,{"message-template-container":s.type===`message`}])},[w(`div`,oe,[o(d,{modelValue:R.value,"onUpdate:modelValue":c[0]||=e=>R.value=e,placeholder:de.value,class:`template-input`,clearable:``,onKeyup:ne(Y,[`enter`])},null,8,[`modelValue`,`placeholder`]),w(`div`,k,[z.value?(m(),f(h,{key:0,onClick:pe},{default:_(()=>[v(u(r(D)(`@60CAC:取消`)),1)]),_:1})):n(``,!0),o(h,{type:`primary`,onClick:Y,disabled:!R.value.trim()||H.value,loading:H.value},{default:_(()=>[v(u(fe.value),1)]),_:1},8,[`disabled`,`loading`]),s.type===`message`?(m(),f(h,{key:1,type:`success`,onClick:me,disabled:!R.value.trim()||U.value,loading:U.value,plain:``},{default:_(()=>[v(u(r(D)(`@60CAC:设为默认提交信息`)),1)]),_:1},8,[`disabled`,`loading`])):n(``,!0)])]),s.type===`message`?(m(),t(`div`,A,[w(`div`,j,[w(`h3`,null,u(r(D)(`@60CAC:已保存模板`)),1),w(`div`,M,[G.value.length===0?(m(),f(g,{key:0,description:s.emptyDescription},null,8,[`description`])):n(``,!0),(m(!0),t(E,null,l(G.value,(e,t)=>(m(),f(x,{key:t,class:`template-item`},{default:_(()=>[o(b,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:_(()=>[w(`div`,N,u(e),1),w(`div`,P,[o(h,{size:`small`,class:`pin-button`,onClick:t=>Q(e),loading:W.value,disabled:t===0,title:`置顶`},{default:_(()=>[o(y,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:1},8,[`onClick`,`loading`,`disabled`]),o(h,{type:`primary`,size:`small`,onClick:t=>X(e)},{default:_(()=>[v(u(r(D)(`@60CAC:使用`)),1)]),_:1},8,[`onClick`]),o(h,{type:`warning`,size:`small`,icon:r(S),onClick:n=>Z(e,Number(t))},{default:_(()=>[v(u(r(D)(`@60CAC:编辑`)),1)]),_:1},8,[`icon`,`onClick`]),o(h,{type:`danger`,size:`small`,onClick:t=>$(e)},{default:_(()=>[v(u(r(D)(`@60CAC:删除`)),1)]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))])]),s.showDefaultSection?(m(),t(`div`,F,[w(`h3`,null,u(r(D)(`@60CAC:当前默认提交信息`)),1),K.value?(m(),f(x,{key:0,class:`default-message-card`},{default:_(()=>[w(`div`,I,u(K.value),1)]),_:1})):(m(),f(g,{key:1,description:r(D)(`@60CAC:尚未设置默认提交信息`),"image-size":100},null,8,[`description`])),s.showHelpText?(m(),t(`div`,L,[w(`h4`,null,u(r(D)(`@60CAC:关于默认提交信息`)),1),w(`p`,null,u(r(D)(`@60CAC:默认提交信息将在未输入提交信息时自动使用。`)),1),w(`p`,null,[v(u(r(D)(`@60CAC:你可以通过点击左侧模板的`)),1),o(O,{size:`small`,type:`primary`},{default:_(()=>[v(u(r(D)(`@60CAC:使用`)),1)]),_:1}),v(u(r(D)(`@60CAC:按钮先选择喜欢的模板,然后点击上方`)),1),o(O,{size:`small`,type:`success`},{default:_(()=>[v(u(r(D)(`@60CAC:设为默认提交信息`)),1)]),_:1}),v(u(r(D)(`@60CAC:按钮保存。`)),1)])])):n(``,!0)])):n(``,!0)])):(m(),t(`div`,se,[w(`h3`,null,u(r(D)(`@60CAC:已保存`))+` `+u(s.type===`description`?r(D)(`@60CAC:模板`):s.type===`scope`?r(D)(`@60CAC:作用域`):s.type===`command`?r(D)(`@CMD01:命令模板`):``),1),G.value.length===0?(m(),f(g,{key:0,description:s.emptyDescription},null,8,[`description`])):(m(),t(`div`,ce,[(m(!0),t(E,null,l(G.value,(e,t)=>(m(),f(x,{key:t,class:`template-item`},{default:_(()=>[o(b,{justify:`space-between`,align:`middle`,style:{width:`100%`}},{default:_(()=>[w(`div`,le,u(e),1),w(`div`,ue,[o(h,{size:`small`,class:`pin-button`,onClick:t=>Q(e),loading:W.value,disabled:t===0,title:`置顶`},{default:_(()=>[o(y,{"icon-class":`pin`,"class-name":`pin-icon`})]),_:1},8,[`onClick`,`loading`,`disabled`]),o(h,{type:`primary`,size:`small`,onClick:t=>X(e)},{default:_(()=>[v(u(r(D)(`@60CAC:使用`)),1)]),_:1},8,[`onClick`]),o(h,{type:`warning`,size:`small`,icon:r(S),onClick:n=>Z(e,Number(t))},{default:_(()=>[v(u(r(D)(`@60CAC:编辑`)),1)]),_:1},8,[`icon`,`onClick`]),o(h,{type:`danger`,size:`small`,onClick:t=>$(e)},{default:_(()=>[v(u(r(D)(`@60CAC:删除`)),1)]),_:1},8,[`onClick`])])]),_:2},1024)]),_:2},1024))),128))]))]))],2)]),_:1},8,[`modelValue`,`title`,`custom-class`])}}}),z=O(R,[[`__scopeId`,`data-v-0fd47867`]]);export{z as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.template-container[data-v-0fd47867]{gap:var(--spacing-xl);flex-direction:column;height:100%;display:flex}.template-form[data-v-0fd47867]{align-items:center;gap:var(--spacing-base);flex-direction:row;display:flex}.template-input[data-v-0fd47867]{flex:1;height:34px}.template-form-buttons[data-v-0fd47867]{gap:var(--spacing-base);flex-wrap:nowrap;justify-content:flex-start;display:flex}.template-list[data-v-0fd47867]{flex-direction:column;flex:1;display:flex;overflow:hidden}.template-list h3[data-v-0fd47867]{margin:0 0 var(--spacing-lg) 0;font-size:var(--font-size-md);font-weight:600}.template-list-scroll[data-v-0fd47867]{padding-right:var(--spacing-base);flex:1;overflow-y:auto}.template-list-scroll[data-v-0fd47867]::-webkit-scrollbar{width:6px}.template-list-scroll[data-v-0fd47867]::-webkit-scrollbar-thumb{background-color:var(--text-placeholder);border-radius:var(--radius-base)}.template-list-scroll[data-v-0fd47867]::-webkit-scrollbar-track{background-color:var(--bg-panel)}.template-item[data-v-0fd47867]{margin-bottom:var(--spacing-base);border-radius:var(--radius-md);transition:background-color var(--transition-base) ease, border-color var(--transition-base) ease}[data-v-0fd47867] .template-item.el-card{border:1px solid #eceff5;box-shadow:none!important}.template-item[data-v-0fd47867]:hover{background-color:#fafcff}.template-content[data-v-0fd47867]{color:var(--text-secondary);word-break:break-all;margin-right:var(--spacing-md);flex:1}.template-actions[data-v-0fd47867]{gap:var(--spacing-sm);flex-shrink:0;align-items:center;display:flex}.message-template-container[data-v-0fd47867]{flex-direction:column}.templates-container[data-v-0fd47867]{gap:var(--spacing-xl);flex:1;display:flex;overflow:hidden}.message-templates-list[data-v-0fd47867]{flex-direction:column;flex:1;display:flex;overflow:hidden}.templates-scroll-area[data-v-0fd47867]{padding-right:var(--spacing-base);flex:1;max-height:calc(100vh - 360px);overflow-y:auto}.current-default-message[data-v-0fd47867]{gap:var(--spacing-lg);flex-direction:column;flex:1;display:flex}.current-default-message h3[data-v-0fd47867]{font-size:var(--font-size-md);margin:0;font-weight:600}.default-message-card[data-v-0fd47867]{border-radius:var(--radius-md)}.default-message-content[data-v-0fd47867]{color:var(--text-secondary);word-break:break-all}.message-help-text[data-v-0fd47867]{padding:var(--spacing-lg);border-radius:var(--radius-md);border-left:4px solid var(--color-primary)}.message-help-text h4[data-v-0fd47867]{margin:0 0 var(--spacing-base) 0}.message-help-text p[data-v-0fd47867]{margin:0 0 var(--spacing-base) 0;font-size:var(--font-size-sm);color:var(--text-secondary);line-height:1.5}.message-help-text p[data-v-0fd47867]:last-child{margin-bottom:0}.templates-scroll-area[data-v-0fd47867]::-webkit-scrollbar{width:6px}.templates-scroll-area[data-v-0fd47867]::-webkit-scrollbar-thumb{background-color:var(--text-placeholder);border-radius:var(--radius-base)}.templates-scroll-area[data-v-0fd47867]::-webkit-scrollbar-track{background-color:var(--bg-panel)}.template-input[data-v-0fd47867]{height:36px}.template-form-buttons .el-button[data-v-0fd47867]{min-width:92px}.template-list[data-v-0fd47867]{position:relative}.template-list h3[data-v-0fd47867]{z-index:2;padding:var(--spacing-base) 0 10px 0;position:sticky;top:0}[data-v-0fd47867] .template-item .el-card__body{padding:var(--spacing-base) 10px}.template-item[data-v-0fd47867]:hover{transform:none;box-shadow:none!important}.template-actions .el-button[data-v-0fd47867]{min-width:66px}.pin-icon[data-v-0fd47867]{width:14px;height:14px;display:block}.pin-button[data-v-0fd47867]{color:var(--text-tertiary)}.pin-button[data-v-0fd47867]:hover{color:var(--color-primary)}.pin-button.is-disabled[data-v-0fd47867],[data-theme=dark] .pin-button[data-v-0fd47867]{color:var(--text-placeholder)}[data-theme=dark] .pin-button[data-v-0fd47867]:hover{color:#79bbff}[data-theme=dark] .pin-button.is-disabled[data-v-0fd47867]{color:#6c6e72}.message-templates-list[data-v-0fd47867]{position:relative}.message-templates-list h3[data-v-0fd47867]{z-index:2;padding:var(--spacing-base) 0 10px 0;position:sticky;top:0}.templates-scroll-area[data-v-0fd47867]{padding-top:var(--spacing-sm)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$n as e,Cn as t,Dn as n,En as r,Er as i,K as a,Mn as o,Nt as s,Pn as c,Pr as l,Qn as u,Qr as d,Rn as f,Tn as p,Xn as m,Yr as ee,bt as h,cr as g,jn as _,ln as v,nt as y,pr as b,qr as x,vn as S,wn as C,yn as w}from"./element-plus-Bx3j6vzG.js";import{n as T,t as E}from"./_plugin-vue_export-helper-CGArUtKL.js";import{t as te}from"./configStore-Vh8LZWlL.js";import{c as D,o as O}from"./vue-flow-fVVGZspa.js";f(),b(),v(),l();var k={key:0},A={key:1},j={key:2},M={key:3,class:`node-header`},N={class:`flow-node-icon`},P={class:`node-title`},F={class:`node-body`},I={key:4,class:`disabled-overlay`},L=E(c({__name:`BaseNode`,props:{id:{},nodeId:{},nodeType:{default:`command`},title:{},icon:{},enabled:{type:Boolean,default:!0},selected:{type:Boolean,default:!1},deletable:{type:Boolean,default:!0},showDeleteOnSelected:{type:Boolean,default:!1},sourceHandleIds:{},execStatus:{}},emits:[`delete`],setup(s,{emit:c}){let l=s,f=t(()=>!!(l.title&&String(l.title).trim()||l.icon&&String(l.icon).trim())),h=t(()=>f.value?16:0),_=t(()=>l.sourceHandleIds&&l.sourceHandleIds.length?l.sourceHandleIds:[`source`]),v=c;return(t,c)=>{let l=a;return m(),n(`div`,{class:x([`flow-node-wrapper`,[{disabled:!s.enabled,"is-selected":s.selected,"show-delete-on-selected":s.showDeleteOnSelected},s.nodeType?`node-type-${s.nodeType}`:``]])},[s.nodeType===`start`?r(``,!0):(m(),p(i(D),{key:0,id:`target`,type:`target`,position:i(O).Left,class:`flow-node-handle handle-left`},null,8,[`position`])),s.deletable===!1?r(``,!0):(m(),p(l,{key:1,class:`flow-node-delete-btn`,onClick:c[0]||=S(e=>v(`delete`,s.nodeId),[`stop`]),title:`删除节点`,role:`button`,tabindex:`0`},{default:g(()=>[o(i(y))]),_:1})),s.execStatus?(m(),n(`div`,{key:2,class:x([`flow-node-status`,[`status-${s.execStatus}`]])},[s.execStatus===`running`?(m(),n(`span`,k,`执行中`)):s.execStatus===`success`?(m(),n(`span`,A,`成功`)):(m(),n(`span`,j,`失败`))],2)):r(``,!0),s.title||s.icon?(m(),n(`div`,M,[C(`div`,N,d(s.icon),1),C(`div`,P,d(s.title),1)])):r(``,!0),C(`div`,F,[e(t.$slots,`default`,{},void 0,!0)]),s.enabled?r(``,!0):(m(),n(`div`,I,`已禁用`)),s.nodeType===`condition`?(m(!0),n(w,{key:5},u(_.value,e=>(m(),p(i(D),{key:e,id:e,type:`source`,position:i(O).Right,class:`flow-node-handle handle-right`,style:ee({top:`calc(50% + ${h.value}px + ${(_.value.indexOf(e)-(_.value.length-1)/2)*18}px)`})},null,8,[`id`,`position`,`style`]))),128)):(m(),p(i(D),{key:6,id:`source`,type:`source`,position:i(O).Right,class:`flow-node-handle handle-right`},null,8,[`position`]))],2)}}}),[[`__scopeId`,`data-v-24d6c096`]]);f(),b(),l();var R={class:`command-node-content`},z={class:`node-badges`},B={key:0,class:`node-badge terminal`},V={key:0,class:`node-warning`},H={key:1,class:`command-details`},U={class:`command-code`},W={key:0,class:`command-dir`},G=E(c({__name:`CommandNode`,props:{data:{},id:{}},setup(e){let c=e,l=te(),u=t(()=>!c.data.config||!c.data.config.commandId?null:l.customCommands.find(e=>e.id===c.data.config.commandId)||null),f=t(()=>c.data.config?{name:c.data.config.commandName||T(`@FLOWNODE:未配置`),terminal:c.data.config.useTerminal||!1,command:u.value?.command||``,directory:u.value?.directory||``}:null);return(t,c)=>{let l=a;return m(),n(`div`,R,[C(`div`,z,[f.value?.terminal?(m(),n(`div`,B,[o(l,null,{default:g(()=>[o(i(s))]),_:1}),C(`span`,null,d(i(T)(`@FLOWNODE:终端`)),1)])):r(``,!0)]),e.data.config?r(``,!0):(m(),n(`div`,V,d(i(T)(`@FLOWNODE:未配置`)),1)),f.value?.command?(m(),n(`div`,H,[C(`div`,U,[C(`code`,null,d(f.value.command),1)]),f.value.directory?(m(),n(`div`,W,[o(l,null,{default:g(()=>[o(i(h))]),_:1}),C(`span`,null,d(f.value.directory),1)])):r(``,!0)])):r(``,!0)])}}}),[[`__scopeId`,`data-v-7350df52`]]);f(),b(),l();var K={class:`wait-node-content`},q={key:0,class:`node-warning`},J={key:1,class:`wait-seconds`},Y=E(c({__name:`WaitNode`,props:{data:{},id:{}},setup(e){return(t,r)=>(m(),n(`div`,K,[e.data.config?(m(),n(`div`,J,d(i(T)(`@FLOWNODE:等待 {seconds} 秒`,{seconds:e.data.config?.waitSeconds??0})),1)):(m(),n(`div`,q,d(i(T)(`@FLOWNODE:未配置`)),1))]))}}),[[`__scopeId`,`data-v-20c314c4`]]);f(),b(),l();var X={class:`version-node-content`},Z={key:0,class:`node-badge`},Q={key:1,class:`info-grid`},ne={class:`info-label`},re=[`title`],ie={key:2,class:`node-warning`},ae=E(c({__name:`VersionNode`,props:{data:{},id:{}},setup(e){let a=e,o=t(()=>{if(!a.data.config)return null;let e=a.data.config,t=String(e?.versionTarget||`version`),n=String(e?.versionSource||`bump`),r=[];r.push({label:T(`@FLOWNODE:目标`),value:T(t===`dependency`?`@FLOWNODE:依赖版本`:`@FLOWNODE:version字段`)}),r.push({label:T(`@FLOWNODE:来源`),value:T(n===`reference`?`@FLOWNODE:引用输出`:n===`input`?`@FLOWNODE:引用输入`:n===`manual`?`@FLOWNODE:手动输入`:`@FLOWNODE:自动递增`)});let i=String(e?.packageJsonPath||``).trim();if(r.push({label:T(`@FLOWNODE:package.json`),value:i||T(`@FLOWNODE:当前目录`)}),t===`dependency`){let t=String(e?.dependencyType||`dependencies`),i=String(e?.dependencyName||``).trim();if(i&&r.push({label:T(`@FLOWNODE:依赖`),value:`${t}::${i}`}),n===`manual`){let t=String(e?.dependencyVersion||``).trim();t&&r.push({label:T(`@FLOWNODE:版本号`),value:t})}else if(n===`bump`){let t=String(e?.dependencyVersionBump||e?.versionBump||`patch`);r.push({label:T(`@FLOWNODE:递增`),value:t})}else if(n===`reference`){let t=String(e?.inputRef?.nodeId||``).trim(),n=String(e?.inputRef?.outputKey||``).trim(),i=t&&n?`${t}::${n}`:``;i&&r.push({label:T(`@FLOWNODE:引用`),value:i})}else if(n===`input`){let t=String(e?.dependencyVersionInputKey||e?.versionInputKey||``).trim();t&&r.push({label:T(`@FLOWNODE:引用`),value:t})}}else{let t=String(e?.versionBump||`patch`);r.push({label:T(`@FLOWNODE:递增`),value:t})}return{target:t,rows:r}});return(t,a)=>(m(),n(`div`,X,[o.value?.target===`dependency`?(m(),n(`div`,Z,d(i(T)(`@FLOWNODE:依赖`)),1)):r(``,!0),o.value?.rows?.length?(m(),n(`div`,Q,[(m(!0),n(w,null,u(o.value.rows,(e,t)=>(m(),n(`div`,{key:t,class:`info-row`},[C(`div`,ne,d(e.label),1),C(`div`,{class:`info-value`,title:e.value},d(e.value),9,re)]))),128))])):r(``,!0),e.data.config?r(``,!0):(m(),n(`div`,ie,d(i(T)(`@FLOWNODE:未配置`)),1))]))}}),[[`__scopeId`,`data-v-9b17d1ad`]]);f(),b(),l();var oe={key:0,class:`confirm-node-content`},se={class:`node-warning`},ce=E(c({__name:`ConfirmNode`,props:{data:{},id:{}},setup(e){return(t,a)=>e.data.config?r(``,!0):(m(),n(`div`,oe,[C(`div`,se,d(i(T)(`@FLOWNODE:未配置`)),1)]))}}),[[`__scopeId`,`data-v-7d3571a5`]]);f(),b(),l();var le={class:`code-node-content`},ue={key:0,class:`node-warning`},de={key:1,class:`code-details`},fe={class:`code-meta`},pe={class:`meta-item`},me={class:`meta-item`},he=E(c({__name:`CodeNode`,props:{data:{},id:{}},setup(e){let r=e,a=t(()=>{let e=r.data.config||{};return{hasScript:!!(e.codeScript&&String(e.codeScript).trim()),outputKeys:Array.isArray(e.codeOutputKeys)?e.codeOutputKeys:[]}});return(t,r)=>(m(),n(`div`,le,[e.data.config?(m(),n(`div`,de,[C(`div`,fe,[C(`span`,pe,d(i(T)(`@NODECFG:脚本`))+`: `+d(a.value.hasScript?i(T)(`@FLOWNODE:已添加`):i(T)(`@FLOWNODE:未配置`)),1),C(`span`,me,d(i(T)(`@NODECFG:输出键列表`))+`: `+d(a.value.outputKeys.length?a.value.outputKeys.join(`, `):i(T)(`@FLOWNODE:未配置`)),1)])])):(m(),n(`div`,ue,d(i(T)(`@FLOWNODE:未配置`)),1))]))}}),[[`__scopeId`,`data-v-1c3ce251`]]);f(),l();var ge={class:`condition-node`},_e={key:0,class:`condition-empty`},ve={key:1,class:`condition-branches`},ye={class:`branch-name`},be={class:`branch-meta`},$=E(c({__name:`ConditionNode`,props:{id:{type:String,required:!0},data:{type:Object,required:!0}},setup(e){let r=e,i=t(()=>{let e=r.data?.config;return[...Array.isArray(e?.conditionBranches)?e.conditionBranches:[]].sort((e,t)=>(e.priority??0)-(t.priority??0))});return(e,t)=>(m(),n(`div`,ge,[i.value.length===0?(m(),n(`div`,_e,`未配置条件分支`)):(m(),n(`div`,ve,[(m(!0),n(w,null,u(i.value,e=>(m(),n(`div`,{key:e.id,class:`condition-branch`},[C(`span`,ye,d(e.isDefault?`DEFAULT`:e.name),1),C(`span`,be,`(`+d(e.combine.toUpperCase())+` / `+d(e.rules.length)+`)`,1)]))),128))]))]))}}),[[`__scopeId`,`data-v-c1d4e61f`]]);f(),b(),l();var xe={class:`user-input-node-content`},Se={key:0,class:`node-warning`},Ce={key:0,class:`node-warning`},we={key:1,class:`param-summary`},Te={class:`param-count`},Ee={class:`param-list`},De={key:0,class:`star`},Oe={key:0,class:`more`},ke=E(c({__name:`UserInputNode`,props:{data:{},id:{}},setup(e){let a=e,o=t(()=>{let e=a.data?.config;return(Array.isArray(e?.userInputParams)?e.userInputParams:[]).map(e=>String(e?.name||``).trim()).filter(e=>!!e)}),s=t(()=>{let e=a.data?.config,t=Array.isArray(e?.userInputParams)?e.userInputParams:[],n=new Set;for(let e of t){let t=String(e?.name||``).trim();t&&e?.required&&n.add(t)}return n}),c=t(()=>o.value.slice(0,3)),l=t(()=>o.value.length>3);return(t,a)=>(m(),n(`div`,xe,[e.data.config?(m(),n(w,{key:1},[o.value.length===0?(m(),n(`div`,Ce,d(i(T)(`@UINPUT:暂无输入参数`)),1)):(m(),n(`div`,we,[C(`div`,Te,d(i(T)(`@UINPUT:参数名`))+` (`+d(o.value.length)+`)`,1),C(`div`,Ee,[(m(!0),n(w,null,u(c.value,e=>(m(),n(`span`,{key:e,class:x([`param-chip`,{required:s.value.has(e)}])},[s.value.has(e)?(m(),n(`span`,De,`*`)):r(``,!0),_(` `+d(e),1)],2))),128)),l.value?(m(),n(`span`,Oe,`+`+d(o.value.length-3),1)):r(``,!0)])]))],64)):(m(),n(`div`,Se,d(i(T)(`@FLOWNODE:未配置`)),1))]))}}),[[`__scopeId`,`data-v-9c44fa70`]]);export{ae as a,L as c,ce as i,$ as n,Y as o,he as r,G as s,ke as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.flow-node-wrapper[data-v-24d6c096]{padding:var(--spacing-md);border-radius:var(--radius-lg);background:var(--bg-container);box-shadow:var(--shadow-md);transition:var(--transition-all);border:2px solid var(--border-component);display:inline-block;position:relative}.flow-node-wrapper.is-selected[data-v-24d6c096]{box-shadow:var(--shadow-md);transform:scale(1.02)}.flow-node-wrapper.disabled[data-v-24d6c096]{opacity:.6}.flow-node-status[data-v-24d6c096]{z-index:12;font-size:var(--font-size-sm);border:1px solid var(--border-component);background:var(--bg-container);color:var(--text-secondary);border-radius:999px;padding:4px 6px;font-weight:600;line-height:1;position:absolute;top:8px;right:10px}.flow-node-status.status-running[data-v-24d6c096]{border-color:var(--tint-primary-45);color:var(--color-primary);background:var(--tint-primary-08)}.flow-node-status.status-success[data-v-24d6c096]{color:var(--color-success);background:#67c23a1a;border-color:#67c23a80}.flow-node-status.status-failed[data-v-24d6c096]{color:var(--color-danger);background:#f56c6c1a;border-color:#f56c6c8c}.node-type-condition[data-v-24d6c096]{border-color:var(--color-warning-light);min-width:220px;max-width:320px}.node-type-condition.is-selected[data-v-24d6c096]{border-color:var(--action-amber);box-shadow:0 0 0 3px #f59e0b33, var(--shadow-lg)}.node-type-condition .flow-node-handle[data-v-24d6c096]{background:var(--color-warning-light)!important}.node-header[data-v-24d6c096]{align-items:center;gap:var(--spacing-base);margin-bottom:0;display:flex}.node-header .flow-node-icon[data-v-24d6c096]{font-size:var(--font-size-md);line-height:1}.node-header .node-title[data-v-24d6c096]{font-size:var(--font-size-lg);color:var(--text-primary);font-weight:var(--font-weight-semibold);word-break:break-word}.node-body[data-v-24d6c096]{font-size:var(--font-size-mid);color:var(--text-primary);margin-top:var(--spacing-base)}.node-body[data-v-24d6c096]:empty{display:none}.flow-node-handle[data-v-24d6c096]{border:2px solid var(--bg-container);z-index:10;border-radius:50%;width:12px;height:12px}.handle-left[data-v-24d6c096]{left:-4px!important}.handle-right[data-v-24d6c096]{right:-4px!important}.node-type-command[data-v-24d6c096]{border-color:var(--action-teal);min-width:220px;max-width:320px}.node-type-command.is-selected[data-v-24d6c096]{box-shadow:0 0 0 3px #06b6d438, var(--shadow-lg);border-color:#0891b2}.node-type-command .flow-node-handle[data-v-24d6c096]{background:var(--action-teal)!important}.node-type-wait[data-v-24d6c096]{border-color:var(--color-warning);min-width:200px;max-width:250px}.node-type-wait.is-selected[data-v-24d6c096]{box-shadow:0 0 0 3px #faad1433, var(--shadow-lg);border-color:#d48806}.node-type-wait .flow-node-handle[data-v-24d6c096]{background:var(--color-warning)!important}.node-type-version[data-v-24d6c096]{border-color:var(--color-success);min-width:200px;max-width:250px}.node-type-version.is-selected[data-v-24d6c096]{box-shadow:0 0 0 3px #52c41a33, var(--shadow-lg);border-color:#389e0d}.node-type-version .flow-node-handle[data-v-24d6c096]{background:var(--color-success)!important}.node-type-confirm[data-v-24d6c096]{border-color:#ec4899;min-width:200px;max-width:250px}.node-type-confirm.is-selected[data-v-24d6c096]{box-shadow:0 0 0 3px #ec489938, var(--shadow-lg);border-color:#db2777}.node-type-confirm .flow-node-handle[data-v-24d6c096]{background:#ec4899!important}.node-type-code[data-v-24d6c096]{border-color:#7c3aed;min-width:220px;max-width:320px}.node-type-code.is-selected[data-v-24d6c096]{box-shadow:0 0 0 3px #7c3aed38, var(--shadow-lg);border-color:#6d28d9}.node-type-code .flow-node-handle[data-v-24d6c096]{background:#7c3aed!important}.node-type-user_input[data-v-24d6c096]{border-color:#64748b;min-width:220px;max-width:320px}.node-type-user_input.is-selected[data-v-24d6c096]{box-shadow:0 0 0 3px #64748b38, var(--shadow-lg);border-color:#475569}.node-type-user_input .flow-node-handle[data-v-24d6c096]{background:#64748b!important}.node-type-start[data-v-24d6c096]{border-color:var(--color-primary);min-width:200px;max-width:250px}.node-type-start.is-selected[data-v-24d6c096]{border-color:var(--color-primary-dark);box-shadow:0 0 0 3px #409eff38, var(--shadow-lg)}.node-type-start .flow-node-handle[data-v-24d6c096]{background:var(--color-primary)!important}.node-type-start .handle-right[data-v-24d6c096]{right:-4px!important}.flow-node-delete-btn[data-v-24d6c096]{color:#ff4d4f;cursor:pointer;transition:var(--transition-all);z-index:20;opacity:0;pointer-events:none;font-size:var(--font-size-md);background-color:#fff;border-radius:50%;position:absolute;top:-8px;right:-8px}.flow-node-wrapper:hover .flow-node-delete-btn[data-v-24d6c096],.flow-node-wrapper.show-delete-on-selected.is-selected .flow-node-delete-btn[data-v-24d6c096]{opacity:1;pointer-events:auto}.flow-node-wrapper.disabled .disabled-overlay[data-v-24d6c096]{font-size:var(--font-size-sm);color:var(--text-tertiary);border-radius:var(--radius-md);z-index:5;background:#0000001a;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.command-node-content .node-badges[data-v-7350df52]{flex-wrap:wrap;margin-top:4px;display:flex}.command-node-content .node-badge[data-v-7350df52]{border-radius:var(--radius-xl);font-size:var(--font-size-xs);align-items:center;gap:2px;padding:2px 8px;font-weight:500;display:inline-flex}.command-node-content .node-badge.terminal[data-v-7350df52]{background:var(--color-warning);color:#fff}.command-node-content .node-badge.terminal .el-icon[data-v-7350df52]{font-size:var(--font-size-sm)}.command-node-content .node-warning[data-v-7350df52]{color:var(--color-danger);font-size:var(--font-size-sm);margin-top:4px}.command-node-content .command-details[data-v-7350df52]{font-size:var(--font-size-xs);margin-top:8px}.command-node-content .command-details .command-code[data-v-7350df52]{border-radius:var(--radius-base);background:#0000000d;max-width:100%;margin-bottom:4px;padding:4px 6px;overflow:hidden}.command-node-content .command-details .command-code code[data-v-7350df52]{font-family:Consolas,Monaco,Courier New,monospace;font-size:var(--font-size-xs);color:var(--text-secondary);word-break:break-all;white-space:pre-wrap;-webkit-line-clamp:2;line-clamp:2;text-overflow:ellipsis;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.command-node-content .command-details .command-dir[data-v-7350df52]{color:var(--text-tertiary);align-items:center;gap:4px;display:flex}.command-node-content .command-details .command-dir .el-icon[data-v-7350df52]{font-size:var(--font-size-sm);flex-shrink:0}.command-node-content .command-details .command-dir span[data-v-7350df52]{font-size:var(--font-size-xs);word-break:break-all;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.wait-node-content .wait-seconds[data-v-20c314c4]{font-size:var(--font-size-sm);color:var(--text-secondary);margin-top:4px}.wait-node-content .node-warning[data-v-20c314c4]{color:var(--color-danger);font-size:var(--font-size-sm);margin-top:4px}.version-node-content .node-badge[data-v-9b17d1ad]{font-size:var(--font-size-xs);color:var(--color-info);white-space:nowrap;text-overflow:ellipsis;background:#68bdff26;border-radius:999px;align-items:center;max-width:100%;margin-top:6px;padding:2px 10px;font-weight:500;display:inline-flex;overflow:hidden}.version-node-content .info-grid[data-v-9b17d1ad]{flex-direction:column;gap:4px;margin-top:6px;display:flex}.version-node-content .info-row[data-v-9b17d1ad]{grid-template-columns:64px 1fr;align-items:center;gap:8px;display:grid}.version-node-content .info-label[data-v-9b17d1ad]{font-size:var(--font-size-xs);color:var(--text-secondary);line-height:1.2}.version-node-content .info-value[data-v-9b17d1ad]{font-size:var(--font-size-xs);color:var(--text-title);white-space:nowrap;text-overflow:ellipsis;line-height:1.2;overflow:hidden}.version-node-content .node-warning[data-v-9b17d1ad]{color:var(--color-danger);font-size:var(--font-size-sm);margin-top:4px}.confirm-node-content[data-v-7d3571a5]{justify-content:center;align-items:center;display:flex}.confirm-node-content .node-warning[data-v-7d3571a5]{color:var(--color-danger);font-size:var(--font-size-sm);line-height:1.2}.code-node-content .node-warning[data-v-1c3ce251]{color:var(--color-danger);font-size:var(--font-size-sm);margin-top:4px}.code-node-content .code-details[data-v-1c3ce251]{font-size:var(--font-size-xs);margin-top:8px}.code-node-content .code-details .code-meta[data-v-1c3ce251]{color:var(--text-tertiary);flex-direction:column;gap:2px;display:flex}.code-node-content .code-details .code-meta .meta-item[data-v-1c3ce251]{word-break:break-all}.condition-node[data-v-c1d4e61f]{flex-direction:column;gap:6px;padding-right:24px;display:flex}.condition-empty[data-v-c1d4e61f]{color:var(--text-secondary);font-size:var(--font-size-sm)}.condition-branches[data-v-c1d4e61f]{flex-direction:column;justify-content:center;gap:0;display:flex}.condition-branch[data-v-c1d4e61f]{font-size:var(--font-size-sm);align-items:center;gap:8px;height:18px;line-height:18px;display:flex}.branch-name[data-v-c1d4e61f]{font-weight:600}.branch-meta[data-v-c1d4e61f]{color:var(--text-secondary)}.user-input-node-content[data-v-9c44fa70]{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.user-input-node-content .node-warning[data-v-9c44fa70]{color:var(--color-danger);font-size:var(--font-size-sm);line-height:1.2}.user-input-node-content .param-summary[data-v-9c44fa70]{flex-direction:column;gap:6px;width:100%;display:flex}.user-input-node-content .param-count[data-v-9c44fa70]{font-size:var(--font-size-sm);color:var(--text-secondary)}.user-input-node-content .param-list[data-v-9c44fa70]{flex-wrap:wrap;gap:6px;display:flex}.user-input-node-content .param-chip[data-v-9c44fa70]{border-radius:var(--radius-base);background:var(--bg-panel);border:1px solid var(--border-component);color:var(--text-secondary);font-size:var(--font-size-sm);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:2px;max-width:160px;padding:2px 6px;display:inline-flex;overflow:hidden}.user-input-node-content .param-chip.required[data-v-9c44fa70]{color:var(--color-warning);background:#e6a23c14;border-color:#e6a23c59}.user-input-node-content .star[data-v-9c44fa70]{color:var(--color-danger);font-weight:700;line-height:1}.user-input-node-content .more[data-v-9c44fa70]{font-size:var(--font-size-sm);color:var(--text-tertiary);padding:2px}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$ as e,An as t,At as n,Bt as r,C as i,Cn as a,Dn as o,En as s,Er as c,F as l,Ft as u,It as d,J as f,Jn as p,K as ee,Kn as m,Kt as h,L as g,Lt as _,M as v,Mn as y,Nt as b,P as x,Pn as S,Pr as C,Qn as w,Qr as T,Rn as E,S as D,Tn as O,U as te,Un as k,Ut as ne,V as re,Vn as A,W as ie,Xn as j,Y as ae,Yr as oe,_n as M,_t as se,a as N,b as P,br as F,bt as ce,cr as I,dt as L,fn as le,gn as ue,hn as de,ht as R,i as fe,ir as pe,it as me,jn as z,ln as he,lr as B,lt as ge,mn as _e,o as ve,or as V,ot as H,pr as U,q as ye,qr as W,r as be,rn as xe,st as Se,tr as Ce,v as we,vn as G,vr as Te,w as Ee,wn as K,wt as De,xn as q,xt as Oe,y as ke,yn as J,zt as Ae}from"./element-plus-Bx3j6vzG.js";import{a as je,c as Me,n as Y,r as Ne,t as Pe}from"./vendor-BjomZKSS.js";import{n as X,t as Z}from"./_plugin-vue_export-helper-CGArUtKL.js";import{t as Fe}from"./SvgIcon-DyQoHzNw.js";import{a as Ie,c as Le,i as Re,s as ze,t as Be}from"./configStore-Vh8LZWlL.js";import{t as Ve}from"./toolsStore-DgCBDdhm.js";import{t as He}from"./useThemeObserver-DYxFoHh1.js";import{t as Ue}from"./CommonDialog-5bwugMhs.js";import{S as Q,a as We,c as Ge,d as Ke,f as qe,i as Je,l as Ye,m as $,o as Xe,p as Ze,s as Qe,u as $e}from"./index-DE-31lcL.js";import{a as et,i as tt,n as nt,o as rt,r as it,s as at,t as ot,u as st}from"./agentConversations-cmS8iux5.js";import{n as ct,t as lt}from"./AgentEngineSelector-CEayBStS.js";E(),U(),C(),he();var ut={class:`wb-attachments__head`},dt={class:`wb-attachments__label`},ft={class:`wb-attachments__count`},pt=[`disabled`],mt={key:0,class:`wb-attachments__paste-hint`},ht={key:1,class:`wb-attachments__list`},gt=[`title`,`onClick`,`onContextmenu`],_t=[`src`,`alt`],vt={key:1},yt={class:`wb-attachment__meta`},bt=[`title`],xt=[`onClick`,`title`],St=Z(S({__name:`AttachmentZone`,props:{attachments:{},isImage:{type:Function},humanSize:{type:Function},isUploading:{type:Boolean},isPasteHover:{type:Boolean},onPick:{type:Function},onRemove:{type:Function},rawBase:{}},emits:[`paste`,`drop`,`dragover`,`dragenter`,`dragleave`],setup(e,{emit:t}){let n=e;function r(e){return`${n.rawBase||`/api/workbench/attachments`}/${e.id}/raw`}let i=t,l=a(()=>n.attachments.filter(e=>n.isImage(e))),u=a(()=>l.value.map(e=>r(e))),d=F(0),f=F(!1);function p(e){if(n.isImage(e)){let t=l.value.findIndex(t=>t.id===e.id);d.value=t>=0?t:0,f.value=!0}else window.open(r(e),`_blank`,`noopener`)}function ee(){f.value=!1}let h=F({visible:!1,x:0,y:0,att:null}),g=F(!1);function _(e,t){if(!n.isImage(e))return;t.preventDefault();let r=window.innerWidth-180,i=window.innerHeight-120;h.value={visible:!0,x:Math.min(t.clientX,r),y:Math.min(t.clientY,i),att:e}}function v(){h.value.visible&&(h.value.visible=!1)}async function y(){let e=h.value.att;if(e&&!g.value){if(v(),!navigator.clipboard||typeof ClipboardItem>`u`){N({type:`warning`,message:X(`@WORKBENCH:当前浏览器不支持复制图片`)});return}g.value=!0;try{let t=await fetch(r(e),{credentials:`same-origin`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.blob(),i=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`].includes(n.type)?n.type:`image/png`,a=new ClipboardItem({[i]:n});await navigator.clipboard.write([a]),N({type:`success`,message:X(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){N({type:`error`,message:X(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{g.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,v),window.addEventListener(`scroll`,v,!0),window.addEventListener(`blur`,v)),m(()=>{typeof window<`u`&&(window.removeEventListener(`click`,v),window.removeEventListener(`scroll`,v,!0),window.removeEventListener(`blur`,v))}),(t,n)=>(j(),o(J,null,[K(`div`,{class:W([`wb-attachments`,{"is-paste-hover":e.isPasteHover}]),onPaste:n[1]||=e=>i(`paste`,e),onDrop:n[2]||=G(e=>i(`drop`,e),[`prevent`]),onDragover:n[3]||=G(e=>i(`dragover`,e),[`prevent`]),onDragenter:n[4]||=G(e=>i(`dragenter`,e),[`prevent`]),onDragleave:n[5]||=e=>i(`dragleave`,e)},[K(`div`,ut,[K(`span`,dt,[z(T(c(X)(`@WORKBENCH:附件`))+` `,1),K(`span`,ft,T(e.attachments.length),1)]),K(`button`,{class:`wb-attachments__add wb-soft-btn`,disabled:e.isUploading,onClick:n[0]||=(...t)=>e.onPick&&e.onPick(...t)},T(e.isUploading?c(X)(`@WORKBENCH:上传中…`):c(X)(`@WORKBENCH:添加附件`)),9,pt)]),e.isPasteHover?(j(),o(`div`,mt,T(c(X)(`@WORKBENCH:粘贴图片以快速添加`)),1)):s(``,!0),e.attachments.length>0?(j(),o(`ul`,ht,[(j(!0),o(J,null,w(e.attachments,t=>(j(),o(`li`,{key:t.id,class:`wb-attachment`},[K(`button`,{type:`button`,class:`wb-attachment__preview`,title:c(X)(`@WORKBENCH:点击预览`),onClick:e=>p(t),onContextmenu:e=>_(t,e)},[K(`div`,{class:W([`wb-attachment__icon`,{"wb-attachment__icon--img":e.isImage(t)}])},[e.isImage(t)?(j(),o(`img`,{key:0,src:r(t),alt:t.originalName,loading:`lazy`},null,8,_t)):(j(),o(`span`,vt,T(t.ext.toUpperCase()),1))],2),K(`div`,yt,[K(`div`,{class:`wb-attachment__name`,title:`${t.originalName} (${e.humanSize(t.size)})`},T(t.originalName),9,bt)])],40,gt),K(`button`,{class:`wb-attachment__del`,onClick:G(n=>e.onRemove(t),[`stop`]),title:c(X)(`@WORKBENCH:删除`)},`×`,8,xt)]))),128))])):s(``,!0)],34),f.value&&u.value.length>0?(j(),O(c(P),{key:0,"url-list":u.value,"initial-index":d.value,"hide-on-click-modal":!0,teleported:!0,onClose:ee},null,8,[`url-list`,`initial-index`])):s(``,!0),(j(),O(q,{to:`body`},[h.value.visible&&h.value.att&&e.isImage(h.value.att)?(j(),o(`ul`,{key:0,class:`wb-ctx-menu`,style:oe({top:h.value.y+`px`,left:h.value.x+`px`}),onContextmenu:n[6]||=G(()=>{},[`prevent`])},[K(`li`,{class:W([`wb-ctx-menu__item`,{"is-disabled":g.value}]),onClick:y},[n[7]||=K(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[K(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[K(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),K(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),K(`span`,null,T(c(X)(`@WORKBENCH:复制图片`)),1)],2)],36)):s(``,!0)]))],64))}}),[[`__scopeId`,`data-v-cbc0a709`]]),Ct=Y(`claude`),wt=Y(`opencode`),Tt=Y(`codex`);function Et(e){return e===`opencode`?wt:e===`codex`?Tt:Ct}function Dt(e){switch(e){case`todo`:return X(`@WORKBENCH:待执行`);case`running`:return X(`@WORKBENCH:执行中`);case`done`:return X(`@WORKBENCH:已完成`);case`error`:return X(`@WORKBENCH:出错`);case`cancelled`:return X(`@WORKBENCH:已取消`);case`pending`:return X(`@WORKBENCH:排队中`);default:return e}}function Ot(e){switch(e){case`running`:return`var(--color-primary)`;case`done`:return`#22c55e`;case`error`:return`#ef4444`;case`cancelled`:return`#9ca3af`;case`pending`:return`#f59e0b`;default:return`var(--text-tertiary)`}}var kt=8192;function At(e,t){return e.length>t?`…(前文已截断)\n${e.slice(-t)}`:e}function jt(e,t){let n=e||`done`;return n!==`pending`&&n!==`running`||t===`running`||t===`pending`?n:t===`cancelled`||t===`error`?`error`:`done`}function Mt(e){let t=e?.toolCalls;if(!Array.isArray(t)||t.length===0)return[];let n=e?.status||`done`,r=[];for(let e=0;e<t.length;e++){let i=t[e];if(!i||typeof i!=`object`)continue;let a=jt(i.status,n),o=typeof i.result==`string`?i.result:``;r.push({id:typeof i.id==`string`&&i.id?i.id:`tool-${e}`,name:typeof i.name==`string`?i.name:``,argsPreview:typeof i.argsPreview==`string`?i.argsPreview:``,arguments:typeof i.arguments==`string`?i.arguments:``,result:o?At(o,kt):``,status:a,error:typeof i.error==`string`&&i.error?i.error:void 0})}return r}E(),U(),C(),he();var Nt=[`aria-expanded`],Pt={class:`wb-log-summary__left`},Ft={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},It={class:`wb-log-summary__label`},Lt={key:0,class:`wb-log-summary__elapsed`},Rt={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},zt={class:`wb-log-summary__label`},Bt={class:`wb-log-summary__icon`},Vt={class:`wb-log-summary__label`},Ht={key:0,class:`wb-log-summary__elapsed`},Ut={key:3},Wt={class:`wb-log-summary__right`},Gt={class:`wb-log-summary__meta`},Kt=[`title`,`aria-label`],qt={class:`wb-log-details__body`},Jt={class:`wb-job-chat`},Yt={key:0,class:`wb-chat__foot`},Xt=[`title`,`aria-label`],Zt={key:1,class:`wb-log-fullscreen__empty`},Qt=65536,$t=Z(S({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(e,{emit:t}){let n=Be(),r=e,i=t,l=F(!1);function u(){l.value=!l.value}let d=a(()=>r.job.status===`running`||r.job.status===`pending`);V(()=>r.job.status,(e,t)=>{t!==`running`&&t!==`pending`&&(e===`running`||e===`pending`)&&(l.value=!1)});function f(){let e=r.job.output||``;return e?e.length<=Qt?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}function p(){let e=r.job.thinking||``;return e?e.length<=Qt?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function ee(e){try{if(navigator?.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}async function m(){let e=[];if(r.job.prompt&&e.push(`## ${X(`@WORKBENCH:用户提示词`)}\n\n${r.job.prompt}`),r.job.thinking&&e.push(`## ${X(`@WORKBENCH:Claude 思考`)}\n\n${r.job.thinking}`),r.job.output&&e.push(`## ${X(`@WORKBENCH:模型返回`)}\n\n${r.job.output}`),!e.length){N.warning(X(`@WORKBENCH:暂无内容可复制`));return}await ee(e.join(`
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
`))?N.success(X(`@WORKBENCH:已复制到剪贴板`)):N.error(X(`@WORKBENCH:复制失败`))}let h=a(()=>{let e=r.job.status;return e===`done`||e===`error`||e===`cancelled`}),g=a(()=>r.job.status===`cancelled`?`wb-log-summary__status--cancelled`:r.job.status===`error`?`wb-log-summary__status--error`:`wb-log-summary__status--done`),_=a(()=>r.job.status===`cancelled`?`⏹`:r.job.status===`error`?`✗`:`✓`),v=a(()=>r.job.status===`cancelled`?X(`@WORKBENCH:已停止`):r.job.status===`error`?X(`@WORKBENCH:执行出错`):X(`@WORKBENCH:执行完成`)),b=a(()=>Le(r.job?.agent)),x=a(()=>Et(r.job?.agent));function S(e,t){return e===`running`||e===`pending`?t?`streaming`:`pending`:e===`error`?`error`:`done`}let C=a(()=>{let e=r.job,t=[],n=e.startedAt?new Date(e.startedAt).getTime():Date.now();e.prompt&&t.push({id:`${e.id}-u`,role:`user`,content:e.prompt,status:`done`,createdAt:n});let i=f(),a=p(),o=!!i,s=!!a,c=Mt(e),l=c.length>0,u=o||s||l,d=S(e.status,u);return t.push({id:`${e.id}-a`,role:`assistant`,content:i,reasoning:s?a:void 0,reasoningStatus:s?o?`done`:d===`streaming`?`streaming`:`done`:void 0,toolCalls:l?c:void 0,status:d,error:d===`error`&&e.error||void 0,createdAt:n}),t}),w=F(null);V(()=>r.job.status,(e,t)=>{e===`running`&&t!==`running`&&(w.value=w.value??Date.now())});let E=a(()=>{if(!w.value)return``;let e=w.value,t=r.job.endedAt?new Date(r.job.endedAt).getTime():Date.now(),n=Math.max(0,Math.floor((t-e)/1e3));return n<60?`${n}s`:`${Math.floor(n/60)}分${(n%60).toString().padStart(2,`0`)}秒`}),D=F(!1),te=a(()=>!!(r.job.output&&r.job.output.length)),ne=a(()=>r.job.output||``),re=F(null);V(D,async e=>{e&&(await k(),re.value&&(re.value.scrollTop=re.value.scrollHeight))}),V(()=>(r.job.output||``).length,async()=>{D.value&&(await k(),re.value&&(re.value.scrollTop=re.value.scrollHeight))});function A(){}let ie=a(()=>h.value&&!!r.job.prompt);function ae(){i(`re-execute`,r.job)}return(t,r)=>(j(),o(`div`,{class:W([`wb-log-details`,{"is-running":d.value,"is-pending":e.job.status===`pending`,"is-finished":h.value}])},[K(`div`,{class:`wb-log-summary`,onClick:u,role:`button`,"aria-expanded":!l.value},[K(`span`,Pt,[e.job.status===`running`?(j(),o(`span`,Ft,[K(`span`,It,T(c(X)(`@WORKBENCH:正在执行…`)),1),r[1]||=K(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[K(`span`,{class:`wb-log-dots__dot`}),K(`span`,{class:`wb-log-dots__dot`}),K(`span`,{class:`wb-log-dots__dot`})],-1),E.value?(j(),o(`span`,Lt,T(E.value),1)):s(``,!0)])):e.job.status===`pending`?(j(),o(`span`,Rt,[K(`span`,zt,T(c(X)(`@WORKBENCH:排队中…`)),1),r[2]||=K(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[K(`span`,{class:`wb-log-dots__dot`}),K(`span`,{class:`wb-log-dots__dot`}),K(`span`,{class:`wb-log-dots__dot`})],-1)])):h.value?(j(),o(`span`,{key:2,class:W([`wb-log-summary__status`,g.value])},[K(`span`,Bt,T(_.value),1),K(`span`,Vt,T(v.value),1),E.value?(j(),o(`span`,Ht,T(E.value),1)):s(``,!0)],2)):(j(),o(`span`,Ut,T(c(X)(`@WORKBENCH:查看执行日志`)),1))]),K(`span`,Wt,[K(`span`,Gt,T((e.job.output||``).length)+` `+T(c(X)(`@WORKBENCH:字符`)),1),K(`button`,{type:`button`,class:`wb-log-copy`,title:c(X)(`@WORKBENCH:复制全部(含提示词与输出)`),"aria-label":c(X)(`@WORKBENCH:复制全部`),onClick:G(m,[`stop`])},` ⧉ `,8,Kt)])],8,Nt),B(K(`div`,qt,[K(`div`,Jt,[y(c(Me),{messages:C.value,"assistant-name":b.value,"assistant-avatar":x.value,"show-avatar":!0,theme:c(n).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:c(X)(`@AGENT:计划`),raw:c(X)(`@AGENT:原始参数`)}},"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`])]),ie.value?(j(),o(`footer`,Yt,[K(`button`,{type:`button`,class:`wb-chat__action`,title:c(X)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":c(X)(`@WORKBENCH:重新执行`),onClick:ae},` ↻ `,8,Xt)])):s(``,!0),y(Ue,{modelValue:D.value,"onUpdate:modelValue":r[0]||=e=>D.value=e,title:c(X)(`@WORKBENCH:模型返回 - 全屏查看`),size:`fullscreen`,type:`flex`,"close-on-click-modal":!1,"custom-class":`wb-log-fullscreen-dialog`,onClosed:A},{default:I(()=>[K(`div`,{ref_key:`fullscreenContainerRef`,ref:re,class:`wb-log-fullscreen`},[te.value?(j(),O(c(Ne),{key:0,source:ne.value,class:`wb-log-fullscreen__render`},null,8,[`source`])):(j(),o(`div`,Zt,T(c(X)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[ue,!l.value]])],2))}}),[[`__scopeId`,`data-v-1ef92184`]]);E(),U(),C(),he();var en={class:`exec-logs`},tn={class:`exec-logs__head`},nn={class:`exec-logs__title-block`},rn={class:`exec-logs__stats`},an={class:`exec-logs__head-actions`},on={class:`exec-logs__config`},sn={class:`exec-logs__config-label`},cn={class:`exec-logs__config-field`},ln={class:`exec-logs__config-name`},un={class:`exec-logs__config-field`},dn={class:`exec-logs__config-name`},fn={class:`exec-logs__filter`},pn={key:0,class:`exec-logs__batch-meta`},mn={key:0,class:`exec-logs__batch`},hn={class:`exec-logs__list`},gn={key:0,class:`exec-logs__empty`},_n={class:`exec-logs__empty-art`,"aria-hidden":`true`},vn={class:`exec-logs__empty-title`},yn={class:`exec-logs__empty-hint`},bn={class:`exec-card__head`},xn=[`title`],Sn={class:`exec-card__meta`},Cn={key:0,class:`exec-card__task`},wn={key:1,class:`exec-card__time`},Tn={key:2,class:`exec-card__exit`},En=[`title`,`onClick`],Dn={key:0,class:`exec-card__error`},On={key:1,class:`exec-logs__pager`},kn=50,An=Z(S({__name:`ExecutionLogManager`,setup(e){function t(e){return e instanceof Error?e.message:String(e)}let n=F([]),i=F(0),u=Te({count:0,sizeMB:0,byStatus:{}}),d=F(!1),f=F(new Set),m=Te({q:``,status:``,page:1}),h=F({maxCount:500,maxSizeMB:256}),_=Te({maxCount:500,maxSizeMB:256}),b=F(!1),S=[{value:`pending`,label:X(`@WORKBENCH:排队中`)},{value:`running`,label:X(`@WORKBENCH:执行中`)},{value:`done`,label:X(`@WORKBENCH:已完成`)},{value:`error`,label:X(`@WORKBENCH:出错`)},{value:`cancelled`,label:X(`@WORKBENCH:已取消`)}],C=a(()=>n.value.length>0&&n.value.every(e=>f.value.has(e.id))),E=a(()=>n.value.some(e=>f.value.has(e.id))&&!C.value);async function D(){d.value=!0;try{let e=new URLSearchParams;m.q&&e.set(`q`,m.q),m.status&&e.set(`status`,m.status),e.set(`limit`,String(kn)),e.set(`offset`,String((m.page-1)*kn));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);n.value=t.jobs,i.value=t.total,u.count=t.stats.count,u.sizeMB=t.stats.sizeMB,u.byStatus=t.stats.byStatus;let r=new Set(n.value.map(e=>e.id));for(let e of Array.from(f.value))r.has(e)||f.value.delete(e)}catch(e){N.error(X(`@WORKBENCH:加载失败`)+`: `+t(e))}finally{d.value=!1}}async function O(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(h.value=e.config,_.maxCount=e.config.maxCount,_.maxSizeMB=e.config.maxSizeMB)}catch{}}async function te(){b.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:_.maxCount,maxSizeMB:_.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);h.value=e.config,N.success(X(`@WORKBENCH:已保存策略`)),await D()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+t(e))}finally{b.value=!1}}function k(){m.page=1,D()}function ne(){m.q=``,m.status=``,m.page=1,D()}function A(e,t){t?f.value.add(e):f.value.delete(e),f.value=new Set(f.value)}function ie(e){if(e)for(let e of n.value)f.value.add(e.id);else for(let e of n.value)f.value.delete(e.id);f.value=new Set(f.value)}function ae(e){N.info(X(`@WORKBENCH:请到工作台主面板的对应任务上点击「重新执行」`))}async function se(e){try{await fe.confirm(X(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:1}),X(`@WORKBENCH:删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/${e}`,{method:`DELETE`}).then(e=>e.json());if(!t.success)throw Error(t.error||`delete failed`);f.value.delete(e),f.value=new Set(f.value),await D()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+t(e))}}async function P(){let e=Array.from(f.value);if(e.length!==0){try{await fe.confirm(X(`@WORKBENCH:确定要删除所选的 {count} 条日志吗?`,{count:e.length}),X(`@WORKBENCH:批量删除`),{type:`warning`})}catch{return}try{let t=await fetch(`/api/workbench/jobs/batch-delete`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({ids:e})}).then(e=>e.json());if(!t.success)throw Error(t.error||`batch delete failed`);N.success(X(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e.length})),f.value=new Set,await D()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+t(e))}}}async function ce(){let e=u.count;if(e!==0){try{await fe.confirm(X(`@WORKBENCH:确定要清空所有 {count} 条执行日志吗?此操作不可恢复。`,{count:e}),X(`@WORKBENCH:清空全部`),{type:`warning`,confirmButtonText:X(`@WORKBENCH:清空全部`)})}catch{return}try{let t=await fetch(`/api/workbench/jobs/clear`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({confirm:!0})}).then(e=>e.json());if(!t.success)throw Error(t.error||`clear failed`);N.success(X(`@WORKBENCH:成功删除 {count} 条`,{count:t.removed||e})),f.value=new Set,await D()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+t(e))}}}function le(e,t){if(!e)return``;let n=new Date(e).getTime(),r=t?new Date(t).getTime():Date.now(),i=Math.max(0,r-n);return i<1e3?`${i}ms`:i<6e4?`${(i/1e3).toFixed(1)}s`:i<36e5?`${Math.floor(i/6e4)}m ${Math.floor(i%6e4/1e3)}s`:`${Math.floor(i/36e5)}h ${Math.floor(i%36e5/6e4)}m`}return p(()=>{D(),O()}),(e,t)=>{let a=g,p=ke,h=re,O=x,N=l,F=v,ue=ee,de=we,R=ve;return j(),o(`div`,en,[K(`header`,tn,[K(`div`,nn,[K(`span`,rn,T(c(X)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:u.count,size:u.sizeMB})),1)]),K(`div`,an,[y(a,{icon:c(r),size:`small`,loading:d.value,onClick:D},{default:I(()=>[z(T(c(X)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),y(a,{type:`danger`,plain:``,size:`small`,disabled:u.count===0,onClick:ce},{default:I(()=>[z(T(c(X)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),K(`div`,on,[K(`span`,sn,T(c(X)(`@WORKBENCH:保存策略`)),1),K(`span`,cn,[K(`span`,ln,T(c(X)(`@WORKBENCH:最大条数`)),1),y(p,{modelValue:_.maxCount,"onUpdate:modelValue":t[0]||=e=>_.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),K(`span`,un,[K(`span`,dn,T(c(X)(`@WORKBENCH:最大体积 (MB)`)),1),y(p,{modelValue:_.maxSizeMB,"onUpdate:modelValue":t[1]||=e=>_.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),y(a,{type:`primary`,size:`small`,loading:b.value,onClick:te},{default:I(()=>[z(T(c(X)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),K(`div`,fn,[y(h,{modelValue:m.q,"onUpdate:modelValue":t[2]||=e=>m.q=e,placeholder:c(X)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:M(k,[`enter`]),onClear:k},null,8,[`modelValue`,`placeholder`]),y(N,{modelValue:m.status,"onUpdate:modelValue":t[3]||=e=>m.status=e,placeholder:c(X)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:k},{default:I(()=>[(j(),o(J,null,w(S,e=>y(O,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),y(a,{size:`small`,onClick:ne},{default:I(()=>[z(T(c(X)(`@WORKBENCH:重置`)),1)]),_:1}),t[5]||=K(`span`,{class:`exec-logs__filter-spacer`},null,-1),f.value.size>0?(j(),o(`span`,pn,T(c(X)(`@WORKBENCH:已选择 {count} 项`,{count:f.value.size})),1)):s(``,!0)]),f.value.size>0?(j(),o(`div`,mn,[y(F,{"model-value":C.value,indeterminate:E.value,onChange:ie},{default:I(()=>[z(T(C.value?c(X)(`@WORKBENCH:取消全选`):c(X)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),y(a,{type:`danger`,size:`small`,onClick:P},{default:I(()=>[z(T(c(X)(`@WORKBENCH:批量删除`)),1)]),_:1})])):s(``,!0),B((j(),o(`div`,hn,[!d.value&&n.value.length===0?(j(),o(`div`,gn,[K(`div`,_n,[y(ue,null,{default:I(()=>[y(c(L))]),_:1})]),K(`div`,vn,T(c(X)(`@WORKBENCH:暂无执行日志`)),1),K(`div`,yn,T(c(X)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):s(``,!0),(j(!0),o(J,null,w(n.value,e=>(j(),o(`article`,{key:e.id,class:W([`exec-card`,{"is-selected":f.value.has(e.id)}])},[K(`header`,bn,[y(F,{"model-value":f.value.has(e.id),onChange:t=>A(e.id,t)},null,8,[`model-value`,`onChange`]),K(`span`,{class:`exec-card__status`,style:oe({color:c(Ot)(e.status),borderColor:c(Ot)(e.status)})},T(c(Dt)(e.status)),5),K(`span`,{class:`exec-card__title`,title:e.title||c(X)(`@WORKBENCH:无标题`)},T(e.title||c(X)(`@WORKBENCH:无标题`)),9,xn),t[6]||=K(`span`,{class:`exec-card__spacer`},null,-1),K(`span`,Sn,[e.taskTitle?(j(),o(`span`,Cn,`📁 `+T(e.taskTitle),1)):s(``,!0),e.startedAt?(j(),o(`span`,wn,`⏱ `+T(le(e.startedAt,e.endedAt)),1)):s(``,!0),e.exitCode===null?s(``,!0):(j(),o(`span`,Tn,`exit `+T(e.exitCode),1))]),K(`button`,{type:`button`,class:`exec-card__del`,title:c(X)(`@WORKBENCH:删除`),onClick:t=>se(e.id)},`×`,8,En)]),e.error?(j(),o(`p`,Dn,`⚠ `+T(e.error),1)):s(``,!0),y($t,{job:e,onReExecute:ae},null,8,[`job`])],2))),128))])),[[R,d.value]]),i.value>kn?(j(),o(`footer`,On,[y(de,{"current-page":m.page,"onUpdate:currentPage":t[4]||=e=>m.page=e,"page-size":kn,total:i.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:D},null,8,[`current-page`,`total`])])):s(``,!0)])}}}),[[`__scopeId`,`data-v-7079b876`]]);U();var jn=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`]),Mn=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,Nn=20971520,Pn=3840,Fn=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/webp`,`image/bmp`]);function In(e){if(e.size<=3670016)return!1;let t=String(e.type||``).toLowerCase();return t?Fn.has(t):/\.(png|jpe?g|webp|bmp)$/i.test(e.name)}function Ln(e,t){return`${String(e||`attachment`).replace(/\.[^./\\]+$/,``)}.${t}`}async function Rn(e){if(typeof createImageBitmap==`function`)try{let t=await createImageBitmap(e);return{source:t,width:t.width,height:t.height,release:()=>t.close()}}catch{}return await new Promise(t=>{let n=URL.createObjectURL(e),r=new Image;r.onload=()=>t({source:r,width:r.naturalWidth,height:r.naturalHeight,release:()=>URL.revokeObjectURL(n)}),r.onerror=()=>{URL.revokeObjectURL(n),t(null)},r.src=n})}function zn(e,t,n){return new Promise(r=>{try{e.toBlob(e=>r(e&&e.type===t?e:null),t,n)}catch{r(null)}})}async function Bn(e){let t=await Rn(e);if(!t)return null;try{let n=[{edge:Pn,quality:.95},{edge:Pn,quality:.85},{edge:2560,quality:.85},{edge:1920,quality:.8}],r=null;for(let e of n){let n=Math.min(1,e.edge/Math.max(t.width,t.height)),i=Math.max(1,Math.round(t.width*n)),a=Math.max(1,Math.round(t.height*n)),o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s)return null;s.drawImage(t.source,0,0,i,a);let c=await zn(o,`image/webp`,e.quality)||await zn(o,`image/jpeg`,e.quality);if(!c)return null;if((!r||c.size<r.size)&&(r=c),c.size<=3670016)break}return!r||r.size>=e.size?null:{blob:r,ext:r.type===`image/webp`?`webp`:`jpg`}}catch{return null}finally{t.release()}}function Vn(){let e=F({}),t=F(null);function n(t){return!!e.value[t]}function r(e,t){if(e instanceof File)return e;let n=e.type||`application/octet-stream`;return new File([e],t,{type:n})}function i(e){return e.kind===`draft`?`draft`:`task-${e.task?.id??``}`}function a(e){if(e.kind===`draft`)return e.list;let t=e.task?.attachments;return Array.isArray(t)?t:[]}function o(e,t){if(e.kind===`draft`){e.replace(t);return}e.task&&(e.task.attachments=t)}function s(e){return e.kind===`draft`?`/api/workbench/orchestrator/attachments`:`/api/workbench/tasks/${e.task?.id??``}/attachments`}function c(e,t){return e.kind===`draft`?`/api/workbench/orchestrator/attachments/${t}`:`/api/workbench/tasks/${e.task?.id??``}/attachments/${t}`}function l(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 i=(n.type.split(`/`)[1]||`png`).replace(`jpeg`,`jpg`);d(t,r(n,`paste-${new Date().toISOString().replace(/[:.]/g,`-`)}.${i}`))}return}let i=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&!e.type.startsWith(`image/`));if(i.length>0){e.preventDefault();for(let e of i){let n=e.getAsFile();n&&d(t,r(n,n.name||`pasted-file`))}}}function u(e,n){t.value=null,Array.from(e.dataTransfer?.files||[]).forEach(e=>d(n,e))}async function d(t,n){if(!jn.has(n.type)&&!n.name.match(/\.(png|jpg|jpeg|gif|webp|bmp|svg|pdf|txt|md|markdown|csv|json|log)$/i)){N.error(`${X(`@WORKBENCH:不支持的文件类型`)}(${n.name})`);return}if(a(t).find(e=>e.originalName===n.name&&e.size===n.size)){N.info(`${n.name} ${X(`@WORKBENCH:已存在,已复用`)}`);return}let c=i(t);e.value[c]=!0;try{let e=n;if(In(n)){let t=await Bn(n);t&&(e=r(t.blob,Ln(n.name,t.ext)),N.info(X(`@WORKBENCH:图片过大,已压缩后上传:{from} → {to}`,{from:h(n.size),to:h(e.size)})))}if(e.size>20971520){N.error(`「${n.name}」${X(`@WORKBENCH:超过 {size} 限制`,{size:h(Nn)})}`);return}let i=await fetch(s(t),{method:`POST`,headers:{"Content-Type":`application/octet-stream`,"X-Original-Name":e.name,"X-Mime-Type":e.type||`application/octet-stream`},body:e}).then(e=>e.json());if(i.success){let n=a(t);n.push(i.attachment),o(t,n),N.success(`${X(`@WORKBENCH:已添加:`)}${e.name}`)}else N.error(i.error||X(`@WORKBENCH:上传失败`))}catch(e){N.error(X(`@WORKBENCH:上传失败`)+`:`+(e&&e.message||e))}finally{e.value[c]=!1}}async function f(e,t){try{await fe.confirm(X(`@WORKBENCH:删除附件「{name}」?`,{name:t.originalName}),X(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(c(e,t.id),{method:`DELETE`}).then(e=>e.json());n.success?(o(e,a(e).filter(e=>e.id!==t.id)),N.success(X(`@WORKBENCH:已删除`))):N.error(n.error||X(`@WORKBENCH:删除失败`))}function p(e){let t=document.createElement(`input`);t.type=`file`,t.accept=Mn,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>d(e,t))},t.click()}let ee=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function m(e){let t=String(e?.ext||``).toLowerCase();if(t&&ee.has(t)||String(e?.mimeType||``).toLowerCase().startsWith(`image/`))return!0;let n=String(e?.originalName||``).toLowerCase();return/\.(png|jpe?g|gif|webp|bmp|svg)$/.test(n)}function h(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(2)} MB`}return{uploadingTargets:e,pasteHoverId:t,isUploading:n,ensureFile:r,isImageAttachment:m,humanSize:h,targetKey:i,targetAttachments:a,setTargetAttachments:o,targetUploadUrl:s,targetDeleteUrl:c,onAttachmentPaste:l,onAttachmentDrop:u,uploadAttachment:d,removeAttachment:f,pickAttachmentFile:p}}E();var Hn=`__simple`,Un=65536;function Wn(e,t){function n(t){if(!t)return[];let n=`${t.id}${Hn}`;return e.value.filter(e=>e.subId===n||e.subId.startsWith(`${n}__r`)).sort((e,t)=>{let n=e.startedAt||``,r=t.startedAt||``;return n&&r?n.localeCompare(r):n?-1:+!!r})}function r(e){if(!e)return null;let t=n(e);return t.length>0?t[t.length-1]:null}function i(e){return e?e.status===`pending`||e.status===`running`?`running`:e.status===`done`?`done`:e.status===`cancelled`?`cancelled`:`error`:`idle`}return{simpleConversationMessages:a(()=>{if(!t.value)return[];let e=n(t.value);if(e.length===0)return[];let r=[];return e.forEach((t,n)=>{let i=n===e.length-1,a=t.startedAt?new Date(t.startedAt).getTime():Date.now();t.prompt&&r.push({id:`${t.id}-u`,role:`user`,content:t.prompt,status:`done`,createdAt:a});let o=t.output||``,s=t.thinking||``,c=o.length>Un?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>Un?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=Mt(t),p=f.length>0,ee=u||d||p,m;if(!i)m=`done`;else{let e=t.status;m=e===`running`||e===`pending`?ee?`streaming`:`pending`:e===`error`?`error`:`done`}r.push({id:`${t.id}-a`,role:`assistant`,content:c,reasoning:d?l:void 0,reasoningStatus:d?!i&&u||u?`done`:m===`streaming`?`streaming`:`done`:void 0,toolCalls:p?f:void 0,status:m,error:m===`error`&&t.error||void 0,createdAt:a})}),r}),simpleAllJobsFor:n,simpleJobFor:r,simpleJobState:i,SIMPLE_SUB_ID_SUFFIX:Hn,MAX_LOG_DISPLAY_SIMPLE:Un}}function Gn(e,t,n,r){function i(){return{executor:r.getExecutor()}}async function a(e){if(!n.value||n.value.id!==e.id)return!0;let i=t.value.find(t=>t.id===e.id);return i&&i.title===n.value.title&&i.desc===n.value.desc&&i.promptId===n.value.promptId&&(i.simpleOverride||``)===(n.value.simpleOverride||``)?!0:await r.persistTask(!1)}async function o(e){if(!await a(e))return;await r.clearJobsByTask(e.id);let t=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}/run`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i())}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));t.success?N.success(t.message||X(`@WORKBENCH:已加入执行队列`)):N.error(t.error||X(`@WORKBENCH:执行失败`))}async function s(t,n){let r=e.value.filter(e=>e.taskId===t.id).slice(-1)[0];if(!r){N.error(X(`@WORKBENCH:没有可续接的会话`));return}let i=Array.isArray(t.attachments)?t.attachments:[],a=await fetch(`/api/workbench/jobs/${r.id}/continue`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({userMessage:n,attachments:i})}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));a.success?N.success(a.message||X(`@WORKBENCH:已加入续接队列`)):N.error(a.error||X(`@WORKBENCH:续接失败`))}async function c(e,t){let n=t.text.trim();if(n){for(let n of t.files)await r.uploadAttachment({kind:`task`,task:e},n.file);await s(e,n)}}async function l(e){let n=t.value.find(t=>t.id===e.taskId)||t.value.find(t=>t.id===String(e.subId||``).replace(/__simple(?:__r\d+)?$/,``));if(!n){N.error(X(`@WORKBENCH:找不到对应任务,无法重新执行`));return}await o(n)}async function u(e){try{await fe.confirm(X(`@WORKBENCH:确认停止执行?已输出的内容会保留。`),X(`@WORKBENCH:停止执行`),{confirmButtonText:X(`@WORKBENCH:停止`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}let t=await fetch(`/api/workbench/jobs/${e.id}/cancel`,{method:`POST`}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));t.success?N.success(X(`@WORKBENCH:已发送停止信号`)):N.error(t.error||X(`@WORKBENCH:停止失败`))}async function d(){if(!n.value)return;let t=n.value,i=e.value.filter(e=>e.taskId===t.id),a=i.filter(e=>e.status===`running`||e.status===`pending`).length,o=i.length===0?X(`@WORKBENCH:当前任务还没有执行内容,确认仍要清空?`):X(`@WORKBENCH:将清空 {m} 条执行记录,任务描述/附件保留。`,{m:i.length});try{await fe.confirm(o,X(`@WORKBENCH:清空执行内容`),{confirmButtonText:X(`@WORKBENCH:清空`),cancelButtonText:X(`@WORKBENCH:取消`),type:`warning`})}catch{return}if(a>0){N.warning(X(`@WORKBENCH:任务正在执行,请先停止`));return}let s=await fetch(`/api/workbench/tasks/${encodeURIComponent(t.id)}/clear-execution`,{method:`POST`,headers:{"Content-Type":`application/json`}}).then(e=>e.json()).catch(e=>({success:!1,error:e?.message||String(e)}));s?.success?(e.value=e.value.filter(e=>e.taskId!==t.id),r.syncRunningCount(),N.success(s.message||X(`@WORKBENCH:已清空执行内容`))):N.error(s?.error||X(`@WORKBENCH:清空失败`))}return{runTask:o,continueChat:s,onContinueSendFromChat:c,onReExecuteJob:l,cancelJob:u,clearExecutionForSelectedTask:d}}U();function Kn(){let e=F([]),t=F([]),n=F([]),r=F({path:``,name:``}),i=Je();function a(){i.setRunning(n.value.filter(e=>e.status===`running`).length)}function o(e,r){if(e===`hello`){n.value=r.jobs||[],a();return}if(e===`job:update`){let e=r,t=n.value.findIndex(t=>t.id===e.id);t>=0?n.value[t]=e:n.value.push(e),a();return}if(e===`job:thinking-delta`||e===`job:output-delta`){let t=e===`job:thinking-delta`?`thinking`:`output`,i=r?.delta||``;if(!i)return;let a=n.value.findIndex(e=>e.id===r.id);if(a<0)return;let o=n.value[a][t]||``;n.value[a][t]=o+i;return}if(e===`job:toolcalls`){let e=Array.isArray(r?.updates)?r.updates:[];if(!e.length)return;let t=n.value.findIndex(e=>e.id===r.id);if(t<0)return;let i=n.value[t];for(let t of e){if(!t||!t.id)continue;Array.isArray(i.toolCalls)||(i.toolCalls=[]);let e=i.toolCalls.findIndex(e=>e.id===t.id);e>=0?i.toolCalls[e]={...i.toolCalls[e],...t}:i.toolCalls.push(t)}return}if(e===`task:update`){let e=t.value.findIndex(e=>e.id===r.id);e>=0&&(t.value[e]=r)}if(e===`tasks:reordered`){if(Array.isArray(r?.tasks)){if(r.tasks.length<t.value.length){console.warn(`[SSE tasks:reordered] 数据丢失风险:当前 ${t.value.length} 个任务,服务端只返回 ${r.tasks.length} 个,拒绝覆盖`);return}t.value=r.tasks}return}e===`task:error`&&N.error(r.error||X(`@WORKBENCH:执行出错`))}let s=null;function c(){s&&=(s.close(),null),s=new EventSource(`/api/workbench/events`),s.onmessage=e=>{try{let t=JSON.parse(e.data);o(t.event,t.payload)}catch{}},s.onerror=()=>{s&&=(s.close(),null),setTimeout(c,3e3)}}function l(){s&&=(s.close(),null)}async function u(){let t=await fetch(`/api/workbench/prompts`).then(e=>e.json()).catch(()=>({prompts:[]}));e.value=t.prompts||[]}async function d(e){let n=await fetch(`/api/workbench/tasks`).then(e=>e.json()).catch(()=>({tasks:[]}));t.value=n.tasks||[],e?.()}async function f(){let e=await fetch(`/api/workbench/current-project`).then(e=>e.json()).catch(()=>({}));e&&typeof e.projectPath==`string`&&(r.value={path:e.projectPath,name:e.projectName||``})}async function p(){let e=await fetch(`/api/workbench/jobs`).then(e=>e.json()).catch(()=>({jobs:[]}));n.value=e.jobs||[],a()}async function ee(e){try{let t=await fetch(`/api/workbench/jobs/by-task/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());return t?.success?(n.value=n.value.filter(t=>t.taskId!==e),a(),t.removed||0):(console.warn(`[clearJobsByTask] failed:`,t?.error),0)}catch(e){return console.warn(`[clearJobsByTask] error:`,e),0}}async function m(e){let t={title:``,desc:``,promptId:null,simpleOverride:``};e&&(t.projectPath=e);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}).then(e=>e.json());return e.success?e.task||null:(N.error(e.error||X(`@WORKBENCH:保存失败`)),null)}catch{return N.error(X(`@WORKBENCH:保存失败`)),null}}return{prompts:e,tasks:t,jobs:n,currentProject:r,syncRunningCount:a,applyJobEvent:o,connectSSE:c,disconnectSSE:l,loadPrompts:u,loadTasks:d,loadCurrentProject:f,loadJobs:p,clearJobsByTask:ee,createTask:m}}U(),E();var qn=`__no_project__`,Jn=`wb.collapsedGroupPaths.v1`,Yn=`wb.seenGroupPaths.v1`;function Xn(e){try{let t=localStorage.getItem(e);if(!t)return new Set;let n=JSON.parse(t);return new Set(Array.isArray(n)?n.filter(e=>typeof e==`string`):[])}catch{return new Set}}function Zn(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function Qn(e,t){let n=F(Xn(Jn)),r=F(Xn(Yn));V(n,e=>Zn(Jn,e),{deep:!1}),V(r,e=>Zn(Yn,e),{deep:!1});function i(e){return n.value.has(e)}function o(e){n.value.has(e)?n.value.delete(e):n.value.add(e),n.value=new Set(n.value);let t=new Set(r.value);t.add(e),r.value=t}let s=a(()=>{let r=e.value,i=new Map;for(let e of r){let t=Q(e.projectPath)||qn;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=Q(t.value.path),o=Array.from(i.keys()).sort((e,t)=>e===a?-1:t===a||e===qn?1:t===qn?-1:e.localeCompare(t));return{groups:o.map(e=>({path:e,label:e===qn?X(`@WORKBENCH:未关联项目`):e,tasks:i.get(e)})),hasMultiple:o.length>1||o.length===1&&n.value.has(o[0])}});function c(e){if(!e||e===qn)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}let l=a(()=>`${Q(t.value.path)}|${s.value.groups.map(e=>e.path).join(`
|
|
6
|
-
`)}`);return V(l,()=>{let e=Q(t.value.path);if(!e)return;let i=new Set(n.value),a=new Set(r.value),o=!1;for(let t of s.value.groups)a.has(t.path)||(a.add(t.path),t.path!==e&&(i.add(t.path),o=!0));o&&(n.value=i),r.value=a},{immediate:!0}),{groupedTasksList:s,isGroupCollapsed:i,toggleGroupCollapsed:o,shortProjectLabel:c}}E(),U(),C(),he();var $n={class:`wb-sidebar`},er={class:`wb-section`},tr=[`disabled`],nr=[`aria-expanded`,`title`,`onClick`,`onKeydown`],rr=[`title`],ir={class:`wb-pill wb-task-group__count`},ar=[`data-task-id`,`data-group-path`,`title`,`aria-pressed`,`onClick`,`onKeydown`,`onMousedown`],or={class:`wb-task-item__body`},sr=[`title`],cr=[`title`],lr={class:`wb-task-item__action-group`},ur=[`title`,`aria-label`,`onClick`],dr=[`onClick`,`title`,`aria-label`],fr={key:0,class:`wb-empty wb-empty--rich`},pr={class:`wb-empty__art`,"aria-hidden":`true`},mr={class:`wb-empty__title`},hr={class:`wb-empty__hint`},gr={class:`wb-empty__cta`},_r={class:`wb-section`},vr={class:`wb-section__head`},yr={class:`wb-section__tag wb-section__tag--accent`},br={class:`wb-section__title`},xr={class:`wb-pill wb-section__count`},Sr=[`title`,`aria-label`],Cr={class:`wb-prompt-list`},wr={class:`wb-prompt-item__icon`},Tr=[`onClick`,`title`],Er=[`title`],Dr=[`title`],Or=[`onClick`,`title`,`aria-label`],kr={key:0,class:`wb-empty wb-empty--compact`},Ar=5,jr=Z(S({__name:`WorkbenchSidebar`,props:{tasks:{},prompts:{},selectedTaskId:{},currentProject:{},creatingTask:{type:Boolean},isTaskRunning:{type:Function}},emits:[`select-task`,`delete-task`,`copy-task`,`create-task`,`open-create-prompt`,`open-edit-prompt`,`delete-prompt`,`reorder-tasks`],setup(e,{emit:t}){let r=e,i=t,l=a(()=>r.currentProject),{groupedTasksList:u,isGroupCollapsed:d,toggleGroupCollapsed:f,shortProjectLabel:p}=Qn(a(()=>r.tasks),l),m=a(()=>Q(r.currentProject.path));function h(e){return!!e.projectPath&&Q(e.projectPath)!==m.value}let v=a(()=>{let e=m.value;return r.prompts.filter(t=>!t.projectPath||Q(t.projectPath)===e)});function b(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function x(e){let t=b(e),n=X(`@WORKBENCH:拖动排序提示`);return t?`${t} · ${n}`:n}function S(e){return r.isTaskRunning(e)}let C=F(null),E=F(null),D=F(null),te=F(null),k=F(null),ne=null;function re(){C.value=null,E.value=null,D.value=null,te.value=null,k.value=null,ne=null}function A(e,t,n,r){e.button===0&&(ne={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,ie),window.addEventListener(`mouseup`,oe,{once:!0}))}function ie(e){if(!ne)return;if(C.value===null){if(Math.abs(e.clientY-ne.pointerY)<Ar)return;C.value=ne.taskId,E.value=ne.groupPath,window.getSelection()?.removeAllRanges(),document.body.style.userSelect=`none`}let t=document.elementFromPoint(e.clientX,e.clientY);if(!t)return;let n=t.closest(`.wb-task-item`);if(!n){D.value=null,te.value=null,k.value=null;return}let r=n.getAttribute(`data-task-id`),i=n.getAttribute(`data-group-path`);if(!r||!i)return;if(i!==E.value){D.value=null,te.value=null,k.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;D.value=r,te.value=i,k.value=e.clientY<o?`before`:`after`}function oe(e){if(window.removeEventListener(`mousemove`,ie),document.body.style.userSelect=``,!ne){re();return}let t=ne.groupPath,n=ne.taskId,r=D.value,a=k.value,o=te.value;if(re(),!r||!a||o!==t)return;let s=u.value.groups.find(e=>e.path===t);if(!s)return;let c=s.tasks.map(e=>e.id),l=c.indexOf(n);if(l<0)return;c.splice(l,1);let d=c.indexOf(r)+ +(a===`after`);c.splice(d,0,n),i(`reorder-tasks`,{groupPath:t,orderedIds:c})}return(t,r)=>{let a=ee,l=g;return j(),o(`aside`,$n,[K(`section`,er,[K(`button`,{class:`wb-new-btn`,disabled:e.creatingTask,onClick:r[0]||=e=>i(`create-task`)},[y(a,{class:`wb-new-btn__icon`},{default:I(()=>[y(c(_))]),_:1}),K(`span`,null,T(c(X)(`@WORKBENCH:新建任务`)),1),r[5]||=K(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,tr),K(`ul`,{class:W([`wb-task-list`,{"is-grouped":c(u).hasMultiple}])},[(j(!0),o(J,null,w(c(u).groups,t=>(j(),o(J,{key:t.path},[c(u).hasMultiple?(j(),o(`li`,{key:0,class:W([`wb-task-group__head`,{"is-current":t.path===m.value,"is-collapsed":c(d)(t.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!c(d)(t.path),title:c(d)(t.path)?c(X)(`@WORKBENCH:展开`):c(X)(`@WORKBENCH:收起`),onClick:e=>c(f)(t.path),onKeydown:[M(G(e=>c(f)(t.path),[`prevent`]),[`enter`]),M(G(e=>c(f)(t.path),[`prevent`]),[`space`])]},[y(a,{class:`wb-task-group__caret`},{default:I(()=>[(j(),O(Ce(c(d)(t.path)?c(ae):c(ye))))]),_:2},1024),y(a,{class:`wb-task-group__icon`},{default:I(()=>[y(c(ce))]),_:1}),K(`span`,{class:`wb-task-group__name`,title:t.path===m.value?e.currentProject.path:t.label},T(t.path===m.value?e.currentProject.name:c(p)(t.label)),9,rr),K(`span`,ir,T(t.tasks.length),1)],42,nr)):s(``,!0),c(d)(t.path)?s(``,!0):(j(!0),o(J,{key:1},w(t.tasks,n=>(j(),o(`li`,{key:n.id,class:W([`wb-task-item`,{active:n.id===e.selectedTaskId,"is-other-project":h(n),"is-running":S(n),"is-dragging":C.value===n.id,"is-drop-before":D.value===n.id&&k.value===`before`,"is-drop-after":D.value===n.id&&k.value===`after`}]),"data-task-id":n.id,"data-group-path":t.path,title:x(n),role:`button`,tabindex:`0`,"aria-pressed":n.id===e.selectedTaskId,onClick:e=>i(`select-task`,n),onKeydown:[M(G(e=>i(`select-task`,n),[`prevent`]),[`enter`]),M(G(e=>i(`select-task`,n),[`prevent`]),[`space`])],onMousedown:e=>A(e,n,t.path,e.currentTarget)},[K(`div`,or,[K(`div`,{class:`wb-task-item__title`,title:b(n)},T(b(n)),9,sr)]),S(n)?(j(),o(`span`,{key:0,class:`wb-task-item__running-dot`,title:c(X)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,cr)):s(``,!0),K(`div`,lr,[K(`button`,{class:`wb-task-item__copy`,title:c(X)(`@WORKBENCH:复制任务`),"aria-label":c(X)(`@WORKBENCH:复制任务`),onClick:G(e=>i(`copy-task`,n),[`stop`]),onKeydown:r[1]||=G(()=>{},[`stop`])},[y(a,null,{default:I(()=>[y(c(H))]),_:1})],40,ur),S(n)?s(``,!0):(j(),o(`button`,{key:0,class:`wb-task-item__del`,onClick:G(e=>i(`delete-task`,n),[`stop`]),onKeydown:r[2]||=G(()=>{},[`stop`]),title:c(X)(`@WORKBENCH:删除`),"aria-label":c(X)(`@WORKBENCH:删除`)},[y(a,null,{default:I(()=>[y(c(me))]),_:1})],40,dr))])],42,ar))),128))],64))),128)),e.tasks.length===0?(j(),o(`li`,fr,[K(`div`,pr,[y(a,null,{default:I(()=>[y(c(ge))]),_:1})]),K(`div`,mr,T(c(X)(`@WORKBENCH:暂无任务`)),1),K(`div`,hr,T(c(X)(`@WORKBENCH:点击上方按钮新建`)),1),K(`div`,gr,[y(l,{type:`primary`,size:`small`,icon:c(_),loading:e.creatingTask,onClick:r[3]||=e=>i(`create-task`)},{default:I(()=>[z(T(c(X)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])])])):s(``,!0)],2)]),K(`section`,_r,[K(`header`,vr,[K(`span`,yr,T(c(X)(`@WORKBENCH:提示`)),1),K(`h3`,br,T(c(X)(`@WORKBENCH:预置提示词`)),1),K(`span`,xr,T(v.value.length),1),K(`button`,{class:`wb-section__action`,onClick:r[4]||=e=>i(`open-create-prompt`),title:c(X)(`@WORKBENCH:新建提示词`),"aria-label":c(X)(`@WORKBENCH:新建提示词`)},[y(a,null,{default:I(()=>[y(c(_))]),_:1})],8,Sr)]),K(`ul`,Cr,[(j(!0),o(J,null,w(v.value,e=>(j(),o(`li`,{key:e.id,class:`wb-prompt-item`},[K(`div`,wr,[y(a,null,{default:I(()=>[y(c(n))]),_:1})]),K(`button`,{type:`button`,class:`wb-prompt-item__name`,onClick:t=>i(`open-edit-prompt`,e),title:e.content},T(e.name),9,Tr),e.projectPath?(j(),o(`span`,{key:1,class:`wb-prompt-item__tag wb-prompt-item__tag--project`,title:e.projectPath},T(c(p)(e.projectPath)),9,Dr)):(j(),o(`span`,{key:0,class:`wb-prompt-item__tag`,title:c(X)(`@WORKBENCH:全局(所有项目可用)`)},T(c(X)(`@WORKBENCH:全局(所有项目可用)`)),9,Er)),K(`button`,{class:`wb-prompt-item__del`,onClick:t=>i(`delete-prompt`,e),title:c(X)(`@WORKBENCH:删除`),"aria-label":c(X)(`@WORKBENCH:删除`)},[y(a,null,{default:I(()=>[y(c(me))]),_:1})],8,Or)]))),128)),v.value.length===0?(j(),o(`li`,kr,T(c(X)(`@WORKBENCH:暂无提示词`)),1)):s(``,!0)])])])}}}),[[`__scopeId`,`data-v-804a5462`]]);U();function Mr(){let e=F([]),t=F([]),n=F(``),r=F(!1),i=F(!1);async function a(a=!1){a||(r.value=!0);try{let r=await fetch(`/api/workbench/projects`,{cache:`no-store`}).then(e=>e.json());return r?.success?(e.value=Array.isArray(r.projects)?r.projects:[],t.value=Array.isArray(r.tasks)?r.tasks:[],n.value=r.currentProjectPath||``,i.value=!0,!0):(a||N.error(r?.error||X(`@WORKBENCH:读取项目列表失败`)),!1)}catch(e){return a||N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}finally{r.value=!1}}return{projects:e,boardTasks:t,currentProjectPath:n,loading:r,loaded:i,loadProjects:a}}var Nr=[0,5,10,15,30,60].map(e=>e*60*1e3),Pr=6e5;function Fr(e){let t=Number(e);return Nr.includes(t)?t:Pr}function Ir(e){return e?e>=36e5?`@WORKBENCH:每 {n} 小时报告`:`@WORKBENCH:每 {n} 分钟报告`:`@WORKBENCH:关闭自动报告`}function Lr(e){return e?{n:Math.round(e>=36e5?e/36e5:e/6e4)}:{}}function Rr(e){switch(e){case`NO_MODEL`:return`@WORKBENCH:没有可用的 AI 模型,只记录了任务事实`;case`LLM_TIMEOUT`:return`@WORKBENCH:生成超时,只记录了任务事实`;case`LLM_FAILED`:return`@WORKBENCH:生成失败,只记录了任务事实`;default:return`@WORKBENCH:生成失败,只记录了任务事实`}}U();var zr=1e5;function Br(){let e=F(!0),t=F([]),n=F([]),r=F(zr),i=F([]),a=F(null),o=F(!1),s=F(!1),c=F(!1),l=F(``),u=F({}),d=F([]),f=F(!1),p=F(!1),ee=F(Pr);async function m(s=!1){try{let c=await fetch(`/api/workbench/orchestrator`,{cache:`no-store`}).then(e=>e.json());return c?.success?(e.value=c.active!==!1,Number.isInteger(c.maxInstructionChars)&&c.maxInstructionChars>0&&(r.value=c.maxInstructionChars),t.value=Array.isArray(c.instructions)?c.instructions:[],n.value=Array.isArray(c.activity)?c.activity:[],i.value=Array.isArray(c.running)?c.running:[],a.value=c.updatedAt||null,l.value=typeof c.defaultPrompt==`string`?c.defaultPrompt:``,u.value=c.projectPrompts&&typeof c.projectPrompts==`object`?c.projectPrompts:{},ee.value=Fr(c.reportIntervalMs),o.value=!0,!0):(s||N.error(c?.error||X(`@WORKBENCH:读取编排状态失败`)),!1)}catch(e){return s||N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function h(e=!1){if(f.value)return!1;f.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/reports`,{cache:`no-store`}).then(e=>e.json());return t?.success?(d.value=Array.isArray(t.reports)?t.reports:[],!0):(e||N.error(t?.error||X(`@WORKBENCH:读取进度报告失败`)),!1)}catch(t){return e||N.error(X(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{f.value=!1}}async function g(){if(p.value)return null;p.value=!0;try{let e=String(Be().locale||``).startsWith(`en`)?`en`:`zh`,t=await fetch(`/api/workbench/orchestrator/report`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({locale:e})}).then(e=>e.json());return t?.success?t.report?(d.value=[t.report,...d.value].slice(0,20),t.report):(N.info(X(`@WORKBENCH:当前没有正在执行的任务,没有可汇报的进度`)),null):(N.error(t?.error||X(`@WORKBENCH:生成进度报告失败`)),null)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{p.value=!1}}async function _(e){try{let t=await fetch(`/api/workbench/orchestrator/report-interval`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({intervalMs:e})}).then(e=>e.json());return t?.success?(ee.value=Fr(t.reportIntervalMs),!0):(N.error(t?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function v(e){try{let t=await fetch(`/api/workbench/orchestrator/default-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({prompt:e})}).then(e=>e.json());return t?.success?(l.value=typeof t.defaultPrompt==`string`?t.defaultPrompt:``,N.success(X(`@WORKBENCH:已保存全局默认提示词`)),!0):(N.error(t?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function y(e,t){try{let n=await fetch(`/api/workbench/orchestrator/project-prompt`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({projectPath:e,prompt:t})}).then(e=>e.json());return n?.success?(u.value=n.projectPrompts&&typeof n.projectPrompts==`object`?n.projectPrompts:{},N.success(X(`@WORKBENCH:已保存项目默认提示词`)),!0):(N.error(n?.error||X(`@WORKBENCH:保存失败`)),!1)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function b(t){if(s.value)return!1;let n=e.value;e.value=t,s.value=!0;try{let r=await fetch(`/api/workbench/orchestrator/state`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({active:t})}).then(e=>e.json());return r?.success?(e.value=r.active!==!1,N.success(e.value?X(`@WORKBENCH:已恢复调度`):X(`@WORKBENCH:已暂停调度,派发将只建任务不执行`)),!0):(e.value=n,N.error(r?.error||X(`@WORKBENCH:切换调度状态失败`)),!1)}catch(t){return e.value=n,N.error(X(`@WORKBENCH:网络错误: `)+(t?.message||t)),!1}finally{s.value=!1}}async function x(e){if(c.value)return null;c.value=!0;try{let t=await fetch(`/api/workbench/orchestrator/dispatch`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({text:e.text,projectPath:e.projectPath||``,autoRun:e.autoRun!==!1,useDefaultPrompt:e.useDefaultPrompt!==!1,executor:e.executor,attachments:(e.attachments||[]).map(e=>({id:e.id,ext:e.ext,originalName:e.originalName}))})}).then(e=>e.json());return t?.success?(await m(!0),{task:t.task||null,ran:!!t.ran}):(N.error(t?.error||X(`@WORKBENCH:派发失败`)),null)}catch(e){return N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),null}finally{c.value=!1}}return{active:e,instructions:t,activity:n,running:i,updatedAt:a,loaded:o,togglingSchedule:s,dispatching:c,maxInstructionChars:r,defaultPrompt:l,projectPrompts:u,reports:d,loadingReports:f,generatingReport:p,reportIntervalMs:ee,loadOrchestrator:m,setSchedulingActive:b,dispatch:x,saveDefaultPrompt:v,saveProjectPrompt:y,loadReports:h,generateReport:g,setReportInterval:_}}var Vr=6e4,Hr=60*Vr,Ur=24*Hr;function Wr(e,t=Date.now()){if(!e)return``;let n=new Date(e).getTime();if(Number.isNaN(n))return``;let r=Math.max(0,t-n);return r<Vr?X(`@WORKBENCH:刚刚`):r<Hr?X(`@WORKBENCH:N 分钟前`,{n:Math.floor(r/Vr)}):r<Ur?X(`@WORKBENCH:N 小时前`,{n:Math.floor(r/Hr)}):r<30*Ur?X(`@WORKBENCH:N 天前`,{n:Math.floor(r/Ur)}):new Date(n).toLocaleDateString()}function Gr(e){let t=Number(e);if(!Number.isFinite(t)||t<0)return``;let n=Math.floor(t/1e3),r=Math.floor(n/3600),i=Math.floor(n%3600/60),a=n%60;return r>0?X(`@WORKBENCH:N 小时 M 分`,{n:r,m:i}):i>0?X(`@WORKBENCH:N 分 M 秒`,{n:i,m:a}):X(`@WORKBENCH:N 秒`,{n:a})}function Kr(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function qr(e,t=Date.now()){if(!e)return``;let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=e=>String(e).padStart(2,`0`),i=`${r(n.getHours())}:${r(n.getMinutes())}:${r(n.getSeconds())}`,a=new Date(t);if(Kr(n,a))return i;if(Kr(n,new Date(a.getFullYear(),a.getMonth(),a.getDate()-1)))return X(`@WORKBENCH:昨天 {time}`,{time:i});let o=`${n.getMonth()+1}/${n.getDate()}`;return n.getFullYear()===a.getFullYear()?`${o} ${i}`:`${n.getFullYear()}/${o} ${i}`}E(),U(),C(),he();var Jr={class:`proj`},Yr={class:`proj__head`},Xr={class:`proj__title`},Zr={class:`proj__count`},Qr={key:0,class:`proj__tools`},$r={class:`proj__search`},ei=[`placeholder`,`aria-label`],ti={class:`proj__toggles`},ni=[`aria-pressed`,`title`],ri=[`aria-pressed`,`title`],ii={class:`proj__list`},ai=[`title`],oi={class:`proj-item__row1`},si={class:`proj-item__name`},ci={key:0,class:`proj-item__running`,"aria-hidden":`true`},li={class:`proj-item__num`},ui={class:`proj-item__row2`},di={key:0,class:`proj-item__running-text`},fi={key:0,class:`proj-item__row3`},pi={class:`proj-item__bar`,"aria-hidden":`true`},mi={class:`proj-item__progress-text`},hi=[`title`,`onClick`,`onKeydown`],gi={class:`proj-item__row1`},_i={class:`proj-item__name`},vi={class:`proj-item__signals`},yi={key:0,class:`proj-item__running`,"aria-hidden":`true`},bi={key:1,class:`proj-item__badge`},xi={class:`proj-item__row2`},Si={key:0,class:`proj-chip proj-chip--missing`},Ci={key:0,class:`proj-item__branch`},wi={class:`proj-item__branch-name`},Ti={key:1,class:`proj-chip proj-chip--ahead`},Ei={key:2,class:`proj-chip proj-chip--behind`},Di={key:3,class:`proj-chip proj-chip--dirty`},Oi={class:`proj-item__time`},ki={key:0,class:`proj-item__row3`},Ai={class:`proj-item__bar`,"aria-hidden":`true`},ji={class:`proj-item__progress-text`},Mi={key:1,class:`proj-item__actions`},Ni=[`title`,`aria-label`,`onClick`],Pi=[`title`,`aria-label`,`aria-expanded`,`onClick`],Fi=[`aria-label`],Ii=[`onClick`,`onKeydown`],Li={class:`proj-menu__icon`},Ri={class:`proj-menu__label`},zi=[`onClick`,`onKeydown`],Bi={class:`proj-menu__icon`},Vi={class:`proj-menu__label`},Hi=[`onClick`,`onKeydown`],Ui={class:`proj-menu__icon`},Wi={class:`proj-menu__label`},Gi=[`onClick`,`onKeydown`],Ki={class:`proj-menu__icon`},qi={class:`proj-menu__label`},Ji={class:`proj-menu__title`,role:`presentation`},Yi=[`onClick`,`onKeydown`],Xi={class:`proj-menu__icon`},Zi={class:`proj-menu__label`},Qi={key:0,class:`proj-menu__hint`},$i=[`onClick`,`onKeydown`],ea={class:`proj-menu__icon`},ta=[`src`],na={class:`proj-menu__label`},ra={class:`proj-menu__hint`},ia=[`onClick`,`onKeydown`],aa={class:`proj-menu__icon`},oa=[`src`],sa={class:`proj-menu__label`},ca=[`onClick`,`onKeydown`],la={class:`proj-menu__icon`},ua={class:`proj-menu__label`},da=[`onClick`,`onKeydown`],fa={class:`proj-menu__icon`},pa={class:`proj-menu__label`},ma={key:0,class:`proj-menu__hint`},ha={key:1,class:`proj-menu__hint`},ga=[`onClick`,`onKeydown`],_a={class:`proj-menu__icon`},va={class:`proj-menu__label`},ya={key:0,class:`proj-empty`},ba={class:`proj-empty__title`},xa={class:`proj-empty__hint`},Sa={key:1,class:`proj-empty`},Ca={class:`proj-empty__title`},wa=Z(S({__name:`WorkbenchProjectPanel`,props:{projects:{},selectedKey:{},loading:{type:Boolean}},emits:[`select`],setup(e,{emit:t}){let n=e,r=t,i=a(()=>[...n.projects].sort((e,t)=>{if(e.stats.runningJobs>0!=t.stats.runningJobs>0)return e.stats.runningJobs>0?-1:1;let n=e.stats.lastActiveAt||``,r=t.stats.lastActiveAt||``;return n===r?e.name.localeCompare(t.name):r.localeCompare(n)})),l=F(``),d=F(!1),f=F(!1),h=a(()=>!!l.value.trim()||d.value||f.value),g=a(()=>{let e=l.value.trim().toLowerCase();return i.value.filter(t=>d.value&&t.stats.total===0||f.value&&t.git&&t.git.isGitRepo===!1?!1:!e||t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))});function _(){l.value=``,d.value=!1,f.value=!1}let v=a(()=>n.projects.reduce((e,t)=>({running:e.running+t.stats.runningJobs,done:e.done+t.stats.done,total:e.total+t.stats.total}),{running:0,done:0,total:0})),x=a(()=>v.value.total>0?Math.round(v.value.done/v.value.total*100):0);function S(e){return e.git?e.git.isGitRepo===null?X(`@WORKBENCH:未知`):e.git.isGitRepo?e.git.detached?X(`@WORKBENCH:游离 HEAD`):e.git.branch||X(`@WORKBENCH:未知`):``:``}function C(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}let E=F(null),D=F(null);function te(e,t){if(E.value===e.key){E.value=null;return}D.value=t.currentTarget,E.value=e.key}function k(){E.value=null}function re(e){if(!E.value)return;let t=e.target;if(t&&!D.value?.contains(t)){for(let e of Array.from(document.querySelectorAll(`.proj-open-menu`)))if(e.contains(t))return;E.value=null}}p(()=>document.addEventListener(`mousedown`,re,!0)),m(()=>document.removeEventListener(`mousedown`,re,!0));let A=Ve(),ie=F(!1),ae=F(null);function se(e){return A.lastCheckedAt!==null&&!A.isToolAvailable(e)}async function P(e){k();let t=await $e(e.path);t.success?N.success(t.message||X(`@WORKBENCH:已在文件管理器中打开文件夹`)):N.error(t.error||X(`@WORKBENCH:打开文件夹失败`))}async function L(e){k();let t=await Ke(e.path);t.success?N.success(t.message||X(`@67CE7:已在终端中打开目录`)):N.error(t.error||X(`@WORKBENCH:打开终端失败`))}async function le(e){k();let t=await Ye(e.path);t.success?N.success(X(`@WORKBENCH:已在新标签页启动 g ui`)):N.error(t.error||X(`@WORKBENCH:启动 g ui 失败`))}async function ue(e){if(k(),e.name)try{await navigator.clipboard.writeText(e.name),N.success(X(`@67CE7:已复制文件夹名称`))}catch{N.error(X(`@67CE7:复制失败`))}}async function R(e,t,n){if(k(),!await Ge()){N.warning(X(`@67CE7:工具检测失败,请稍后重试`));return}if(!A.isToolAvailable(t)){ae.value=t,ie.value=!0;return}let r=await qe(t,e.path,n);r.success?N.success(r.message||X(`@67CE7:已用 {tool} 打开目录`,{tool:Qe[t]})):N.error(`${X(`@67CE7:打开失败: `)}${r.error??``}`)}return(t,n)=>{let i=ee,a=be;return j(),o(`section`,Jr,[K(`header`,Yr,[K(`h3`,Xr,T(c(X)(`@WORKBENCH:项目列表`)),1),K(`span`,Zr,[h.value?(j(),o(J,{key:0},[z(T(c(X)(`@WORKBENCH:匹配 {n}/{total} 个项目`,{n:g.value.length,total:e.projects.length})),1)],64)):(j(),o(J,{key:1},[z(T(e.projects.length),1)],64))])]),e.projects.length>0?(j(),o(`div`,Qr,[K(`div`,$r,[y(i,{class:`proj__search-icon`,"aria-hidden":`true`},{default:I(()=>[y(c(ne))]),_:1}),B(K(`input`,{"onUpdate:modelValue":n[0]||=e=>l.value=e,class:`proj__search-input`,type:`search`,placeholder:c(X)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":c(X)(`@WORKBENCH:搜索项目名称或路径`),onKeydown:n[1]||=M(e=>l.value=``,[`esc`])},null,40,ei),[[de,l.value]])]),K(`div`,ti,[K(`button`,{type:`button`,class:W([`proj__toggle`,{"is-on":d.value}]),"aria-pressed":d.value,title:c(X)(`@WORKBENCH:只显示有任务的项目`),onClick:n[2]||=e=>d.value=!d.value},[K(`span`,null,T(c(X)(`@WORKBENCH:只看有任务`)),1)],10,ni),K(`button`,{type:`button`,class:W([`proj__toggle`,{"is-on":f.value}]),"aria-pressed":f.value,title:c(X)(`@WORKBENCH:只显示 Git 仓库`),onClick:n[3]||=e=>f.value=!f.value},[K(`span`,null,T(c(X)(`@WORKBENCH:隐藏非 Git`)),1)],10,ri)])])):s(``,!0),K(`ul`,ii,[K(`li`,{class:W([`proj-item proj-item--all`,{"is-active":e.selectedKey===``}]),role:`button`,tabindex:`0`,title:c(X)(`@WORKBENCH:全部项目`),onClick:n[4]||=e=>r(`select`,null),onKeydown:[n[5]||=M(G(e=>r(`select`,null),[`prevent`]),[`enter`]),n[6]||=M(G(e=>r(`select`,null),[`prevent`]),[`space`])]},[K(`div`,oi,[y(i,{class:`proj-item__icon`},{default:I(()=>[y(c(De))]),_:1}),K(`span`,si,T(c(X)(`@WORKBENCH:全部项目`)),1),v.value.running>0?(j(),o(`span`,ci)):s(``,!0),K(`span`,li,T(e.projects.length),1)]),K(`div`,ui,[K(`span`,null,T(c(X)(`@WORKBENCH:{n} 个项目`,{n:e.projects.length})),1),v.value.running>0?(j(),o(`span`,di,T(c(X)(`@WORKBENCH:{n} 个执行中`,{n:v.value.running})),1)):s(``,!0)]),v.value.total>0?(j(),o(`div`,fi,[K(`span`,pi,[K(`i`,{class:`proj-item__bar-fill`,style:oe({width:x.value+`%`})},null,4)]),K(`span`,mi,T(c(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:v.value.done,total:v.value.total})),1)])):s(``,!0)],42,ai),(j(!0),o(J,null,w(g.value,t=>(j(),o(`li`,{key:t.key,class:W([`proj-item`,{"is-active":t.key===e.selectedKey,"is-running":t.stats.runningJobs>0,"is-missing":t.exists===!1}]),role:`button`,tabindex:`0`,title:t.path,onClick:e=>r(`select`,t),onKeydown:[M(G(e=>r(`select`,t),[`self`,`prevent`]),[`enter`]),M(G(e=>r(`select`,t),[`self`,`prevent`]),[`space`])]},[K(`div`,gi,[y(i,{class:`proj-item__icon`},{default:I(()=>[y(c(ce))]),_:1}),K(`span`,_i,T(t.name),1),K(`span`,vi,[t.stats.runningJobs>0?(j(),o(`span`,yi)):s(``,!0),t.isCurrent?(j(),o(`span`,bi,T(c(X)(`@WORKBENCH:当前`)),1)):s(``,!0)])]),K(`div`,xi,[t.exists===!1?(j(),o(`span`,Si,T(c(X)(`@WORKBENCH:目录不存在`)),1)):(j(),o(J,{key:1},[S(t)?(j(),o(`span`,Ci,[C(t)?(j(),O(Fe,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):s(``,!0),K(`span`,wi,T(S(t)),1)])):s(``,!0),t.git&&t.git.ahead>0?(j(),o(`span`,Ti,`↑`+T(t.git.ahead),1)):s(``,!0),t.git&&t.git.behind>0?(j(),o(`span`,Ei,`↓`+T(t.git.behind),1)):s(``,!0),t.git&&t.git.changed>0?(j(),o(`span`,Di,`●`+T(t.git.changed),1)):s(``,!0)],64)),K(`span`,Oi,T(c(Wr)(t.stats.lastActiveAt)),1)]),t.stats.total>0?(j(),o(`div`,ki,[K(`span`,Ai,[K(`i`,{class:`proj-item__bar-fill`,style:oe({width:t.stats.progress+`%`})},null,4)]),K(`span`,ji,T(c(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:t.stats.done,total:t.stats.total})),1)])):s(``,!0),t.exists===!1?s(``,!0):(j(),o(`div`,Mi,[K(`button`,{type:`button`,class:`proj-item__action`,title:c(X)(`@WORKBENCH:打开文件夹`),"aria-label":`${c(X)(`@WORKBENCH:打开文件夹`)} ${t.name}`,onClick:G(e=>P(t),[`stop`])},[y(i,{"aria-hidden":`true`},{default:I(()=>[y(c(Oe))]),_:1})],8,Ni),y(a,{visible:E.value===t.key,trigger:`manual`,placement:`right-start`,width:272,"show-arrow":!1,offset:6,"popper-class":`proj-open-menu`},{reference:I(()=>[K(`button`,{type:`button`,class:W([`proj-item__action`,{"is-open":E.value===t.key}]),title:c(X)(`@WORKBENCH:打开方式`),"aria-label":`${c(X)(`@WORKBENCH:打开方式`)} ${t.name}`,"aria-expanded":E.value===t.key,"aria-haspopup":`menu`,onClick:G(e=>te(t,e),[`stop`])},[y(i,{"aria-hidden":`true`},{default:I(()=>[y(c(u))]),_:1})],10,Pi)]),default:I(()=>[E.value===t.key?(j(),o(`ul`,{key:0,class:`proj-menu`,role:`menu`,"aria-label":c(X)(`@WORKBENCH:打开方式`)},[K(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>P(t),onKeydown:[M(G(e=>P(t),[`prevent`]),[`enter`]),M(G(e=>P(t),[`prevent`]),[`space`])]},[K(`span`,Li,[y(i,{"aria-hidden":`true`},{default:I(()=>[y(c(Oe))]),_:1})]),K(`span`,Ri,T(c(X)(`@WORKBENCH:在文件管理器中打开`)),1)],40,Ii),K(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>L(t),onKeydown:[M(G(e=>L(t),[`prevent`]),[`enter`]),M(G(e=>L(t),[`prevent`]),[`space`])]},[K(`span`,Bi,[y(i,{"aria-hidden":`true`},{default:I(()=>[y(c(b))]),_:1})]),K(`span`,Vi,T(c(X)(`@WORKBENCH:在终端中打开`)),1)],40,zi),K(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>le(t),onKeydown:[M(G(e=>le(t),[`prevent`]),[`enter`]),M(G(e=>le(t),[`prevent`]),[`space`])]},[K(`span`,Ui,[y(i,{"aria-hidden":`true`},{default:I(()=>[y(c(Ae))]),_:1})]),K(`span`,Wi,T(c(X)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,Hi),K(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>ue(t),onKeydown:[M(G(e=>ue(t),[`prevent`]),[`enter`]),M(G(e=>ue(t),[`prevent`]),[`space`])]},[K(`span`,Ki,[y(i,{"aria-hidden":`true`},{default:I(()=>[y(c(H))]),_:1})]),K(`span`,qi,T(c(X)(`@67CE7:复制文件夹名称`)),1)],40,Gi),n[8]||=K(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),K(`li`,Ji,T(c(X)(`@WORKBENCH:用工具打开`)),1),(j(!0),o(J,null,w(c(Xe),e=>(j(),o(`li`,{key:e.id,class:W([`proj-menu__item`,{"is-missing":se(e.id)}]),role:`menuitem`,tabindex:`-1`,onClick:n=>R(t,e.id),onKeydown:[M(G(n=>R(t,e.id),[`prevent`]),[`enter`]),M(G(n=>R(t,e.id),[`prevent`]),[`space`])]},[K(`span`,Xi,[y(Fe,{"icon-class":e.icon},null,8,[`icon-class`])]),K(`span`,Zi,T(c(X)(e.labelKey)),1),se(e.id)?(j(),o(`span`,Qi,T(c(X)(`@67CE7:未安装`)),1)):s(``,!0)],42,Yi))),128)),K(`li`,{class:W([`proj-menu__item`,{"is-missing":se(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>R(t,`claude`),onKeydown:[M(G(e=>R(t,`claude`),[`prevent`]),[`enter`]),M(G(e=>R(t,`claude`),[`prevent`]),[`space`])]},[K(`span`,ea,[K(`img`,{src:c(Ze),alt:``,class:`proj-menu__img`},null,8,ta)]),K(`span`,na,T(c(X)(`@67CE7:用 Claude Code 打开`)),1),K(`span`,ra,T(se(`claude`)?c(X)(`@67CE7:未安装`):c(X)(`@67CE7:默认权限`)),1)],42,$i),K(`li`,{class:W([`proj-menu__item proj-menu__item--danger`,{"is-missing":se(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>R(t,`claude`,`bypassPermissions`),onKeydown:[M(G(e=>R(t,`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),M(G(e=>R(t,`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[K(`span`,aa,[K(`img`,{src:c(Ze),alt:``,class:`proj-menu__img`},null,8,oa)]),K(`span`,sa,T(c(X)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],42,ia),K(`li`,{class:W([`proj-menu__item proj-menu__item--danger`,{"is-missing":se(`opencode`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>R(t,`opencode`,`auto`),onKeydown:[M(G(e=>R(t,`opencode`,`auto`),[`prevent`]),[`enter`]),M(G(e=>R(t,`opencode`,`auto`),[`prevent`]),[`space`])]},[K(`span`,la,[y(Fe,{"icon-class":`opencode`})]),K(`span`,ua,T(c(X)(`@67CE7:用 OpenCode 打开(完全批准)`)),1)],42,ca),K(`li`,{class:W([`proj-menu__item`,{"is-missing":se(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>R(t,`codex`,`sandboxed`),onKeydown:[M(G(e=>R(t,`codex`,`sandboxed`),[`prevent`]),[`enter`]),M(G(e=>R(t,`codex`,`sandboxed`),[`prevent`]),[`space`])]},[K(`span`,fa,[y(Fe,{"icon-class":`codex`})]),K(`span`,pa,T(c(X)(`@67CE7:用 Codex 打开(自动批准)`)),1),se(`codex`)?(j(),o(`span`,ha,T(c(X)(`@67CE7:未安装`)),1)):(j(),o(`span`,ma,T(c(X)(`@67CE7:沙箱内`)),1))],42,da),K(`li`,{class:W([`proj-menu__item proj-menu__item--danger`,{"is-missing":se(`codex`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>R(t,`codex`,`bypass`),onKeydown:[M(G(e=>R(t,`codex`,`bypass`),[`prevent`]),[`enter`]),M(G(e=>R(t,`codex`,`bypass`),[`prevent`]),[`space`])]},[K(`span`,_a,[y(Fe,{"icon-class":`codex`})]),K(`span`,va,T(c(X)(`@67CE7:用 Codex 打开(完全批准)`)),1)],42,ga)],8,Fi)):s(``,!0)]),_:2},1032,[`visible`])]))],42,hi))),128)),!e.loading&&e.projects.length===0?(j(),o(`li`,ya,[K(`p`,ba,T(c(X)(`@WORKBENCH:尚无项目`)),1),K(`p`,xa,T(c(X)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):s(``,!0),!e.loading&&e.projects.length>0&&g.value.length===0?(j(),o(`li`,Sa,[K(`p`,Ca,T(c(X)(`@WORKBENCH:没有匹配的项目`)),1),K(`button`,{type:`button`,class:`proj-empty__clear`,onClick:_},T(c(X)(`@WORKBENCH:清除筛选`)),1)])):s(``,!0)]),y($,{modelValue:ie.value,"onUpdate:modelValue":n[7]||=e=>ie.value=e,tool:ae.value},null,8,[`modelValue`,`tool`])])}}}),[[`__scopeId`,`data-v-0b7cddf4`]]),Ta=[140,170,200,230,260,290,320,350];function Ea(e){return(e||``).replace(/\\/g,`/`).trim().toLowerCase()}function Da(e){let t=Ea(e),n=2166136261;for(let e=0;e<t.length;e++)n^=t.charCodeAt(e),n=Math.imul(n,16777619);return n^=n>>>16,n=Math.imul(n,2246822507),n^=n>>>13,n=Math.imul(n,3266489909),n^=n>>>16,Ta[(n>>>0)%Ta.length]}function Oa(e){return{"--tag-hue":String(Da(e))}}E(),U(),C(),he();var ka={class:`kb`},Aa={class:`kb__toolbar`},ja={class:`kb__views`,role:`tablist`},Ma=[`aria-selected`],Na=[`aria-selected`],Pa={class:`kb__filters`},Fa={class:`kb__search`},Ia=[`placeholder`,`aria-label`],La={class:`kb-col__head`},Ra={class:`kb-col__title`},za={class:`kb-col__count`},Ba={class:`kb-col__list`},Va=[`data-task-id`,`onClick`,`onKeydown`],Ha={class:`kb-card__row1`},Ua=[`title`],Wa=[`title`],Ga={class:`kb-card__time`},Ka={key:0,class:`kb-card__live`},qa={class:`kb-card__live-meta`},Ja=[`title`],Ya=[`title`],Xa={key:2,class:`kb-card__live-pid`},Za={key:3,class:`kb-card__live-silent`},Qa=[`title`],$a=[`title`],eo={class:`kb-card__live-tag`},to=[`title`],no={class:`kb-card__live-tag`},ro=[`title`],io=[`title`],ao={class:`kb-card__reply-text`},oo={class:`kb-card__actions`},so=[`title`,`onClick`],co=[`title`,`aria-label`,`onClick`],lo={key:0,class:`kb-col__add`},uo={key:1,class:`kb-col__empty`},fo={key:1,class:`kb__table-wrap`},po={class:`kb-table`},mo={class:`kb-table__th`},ho={class:`kb-table__th kb-table__th--narrow`},go={class:`kb-table__th kb-table__th--narrow`},_o=[`onClick`,`onKeydown`],vo={class:`kb-table__td`},yo={class:`kb-table__name`},bo=[`title`],xo={key:1,class:`kb-table__live`},So=[`title`],Co={key:1,class:`kb-table__live-silent`},wo={key:2,class:`kb-table__live kb-table__live--reply`},To=[`title`],Eo={class:`kb-table__td`},Do={class:`kb-table__td kb-table__td--num`},Oo={key:0},ko={class:`kb-table__td kb-table__empty`,colspan:`3`},Ao=`wb.boardView.v1`,jo=Z(S({__name:`WorkbenchKanban`,props:{tasks:{},projectLabels:{},showProjectLabel:{type:Boolean}},emits:[`open-task`,`run-task`,`delete-task`,`create-task`],setup(e,{emit:t}){let n=e,r=t,i=F((()=>{try{return localStorage.getItem(Ao)===`list`?`list`:`kanban`}catch{return`kanban`}})());V(i,e=>{try{localStorage.setItem(Ao,e)}catch{}});let l=F(``),u=[{key:`todo`,labelKey:`@WORKBENCH:待处理`},{key:`doing`,labelKey:`@WORKBENCH:进行中`},{key:`done`,labelKey:`@WORKBENCH:已完成`}],d=a(()=>{let e=l.value.trim().toLowerCase();return n.tasks.filter(t=>!e||(t.title||``).toLowerCase().includes(e)||(t.desc||``).toLowerCase().includes(e))}),f=a(()=>u.map(e=>e.key===`done`?{...e,tasks:d.value.filter(t=>t.column===e.key).sort(m)}:{...e,tasks:d.value.filter(t=>t.column===e.key)}));function p(e){return String(e.lastJobEndedAt||e.updatedAt||e.createdAt||``)}function m(e,t){return p(t).localeCompare(p(e))}function h(e){return e.column===`done`?p(e):e.updatedAt||e.createdAt||``}let g=a(()=>({gridTemplateColumns:`repeat(${f.value.length}, minmax(0, 1fr))`}));function _(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function v(e){return n.projectLabels[e.projectPath]||``}function b(e){return e.lastJobStatus===`error`}function x(e){return e.live?.agent||e.lastJobAgent||``}function S(e){let t=X(`@WORKBENCH:已运行 {elapsed}`,{elapsed:Gr(e.elapsedMs)}),n=e.lastLine||e.lastThought||e.lastTool;return n?`${t} · ${n}`:t}return(t,n)=>{let a=ee;return j(),o(`div`,ka,[K(`div`,Aa,[K(`div`,ja,[K(`button`,{type:`button`,role:`tab`,class:W([`kb__view-btn`,{"is-active":i.value===`kanban`}]),"aria-selected":i.value===`kanban`,onClick:n[0]||=e=>i.value=`kanban`},T(c(X)(`@WORKBENCH:看板视图`)),11,Ma),K(`button`,{type:`button`,role:`tab`,class:W([`kb__view-btn`,{"is-active":i.value===`list`}]),"aria-selected":i.value===`list`,onClick:n[1]||=e=>i.value=`list`},T(c(X)(`@WORKBENCH:列表视图`)),11,Na)]),K(`div`,Pa,[K(`div`,Fa,[y(a,{class:`kb__search-icon`},{default:I(()=>[y(c(ne))]),_:1}),B(K(`input`,{class:`kb__search-input`,type:`search`,"onUpdate:modelValue":n[2]||=e=>l.value=e,placeholder:c(X)(`@WORKBENCH:搜索任务标题或描述`),"aria-label":c(X)(`@WORKBENCH:搜索任务标题或描述`)},null,8,Ia),[[de,l.value]])])])]),i.value===`kanban`?(j(),o(`div`,{key:0,class:`kb__columns`,style:oe(g.value)},[(j(!0),o(J,null,w(f.value,t=>(j(),o(`section`,{key:t.key,class:W([`kb-col`,`kb-col--`+t.key])},[K(`header`,La,[n[6]||=K(`span`,{class:`kb-col__dot`,"aria-hidden":`true`},null,-1),K(`h3`,Ra,T(c(X)(t.labelKey)),1),K(`span`,za,T(t.tasks.length),1)]),K(`ul`,Ba,[(j(!0),o(J,null,w(t.tasks,t=>(j(),o(`li`,{key:t.id,class:W([`kb-card`,{"is-running":t.runningJobs>0,"has-error":b(t)}]),"data-task-id":t.id,role:`button`,tabindex:`0`,onClick:e=>r(`open-task`,t),onKeydown:[M(G(e=>r(`open-task`,t),[`prevent`]),[`enter`]),M(G(e=>r(`open-task`,t),[`prevent`]),[`space`])]},[K(`div`,Ha,[e.showProjectLabel&&v(t)?(j(),o(`span`,{key:0,class:`kb-card__project-chip`,style:oe(c(Oa)(t.projectPath)),title:t.projectPath},T(v(t)),13,Ua)):s(``,!0),K(`p`,{class:`kb-card__title`,title:_(t)},T(_(t)||c(X)(`@WORKBENCH:未命名任务`)),9,Wa),K(`span`,Ga,T(c(Wr)(h(t))),1)]),t.live?(j(),o(`div`,Ka,[K(`p`,qa,[x(t)?(j(),o(`span`,{key:0,class:`kb-card__live-agent`,title:c(Le)(x(t))},[y(We,{executor:x(t),class:`kb-card__live-agent-icon`},null,8,[`executor`])],8,Ja)):s(``,!0),K(`span`,null,T(c(X)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:c(Gr)(t.live.elapsedMs)})),1),t.live.toolCallCount?(j(),o(`span`,{key:1,title:t.live.toolMix||``},T(c(X)(`@WORKBENCH:工具 {n} 次`,{n:t.live.toolCallCount})),9,Ya)):s(``,!0),t.live.pid?(j(),o(`span`,Xa,`PID `+T(t.live.pid),1)):s(``,!0),typeof t.live.silentMs==`number`?(j(),o(`span`,Za,T(c(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:c(Gr)(t.live.silentMs)})),1)):s(``,!0)]),t.live.lastTool?(j(),o(`p`,{key:0,class:`kb-card__live-line is-tool`,title:t.live.lastTool},T(t.live.lastTool),9,Qa)):s(``,!0),t.live.lastThought?(j(),o(`p`,{key:1,class:`kb-card__live-line is-thought`,title:t.live.lastThought},[K(`span`,eo,T(c(X)(`@WORKBENCH:最近思考`)),1),z(T(t.live.lastThought),1)],8,$a)):s(``,!0),t.live.lastLine?(j(),o(`p`,{key:2,class:`kb-card__live-line`,title:t.live.lastLine},[K(`span`,no,T(c(X)(`@WORKBENCH:最新回复`)),1),z(T(t.live.lastLine),1)],8,to)):s(``,!0)])):t.lastReply?(j(),o(`p`,{key:1,class:`kb-card__reply`,title:t.lastReply},[x(t)?(j(),o(`span`,{key:0,class:`kb-card__quote-agent`,title:c(Le)(x(t))},[y(We,{executor:x(t),class:`kb-card__quote-agent-icon`},null,8,[`executor`])],8,io)):s(``,!0),K(`span`,ao,T(t.lastReply),1)],8,ro)):s(``,!0),K(`div`,oo,[t.runningJobs===0?(j(),o(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:c(X)(`@WORKBENCH:执行`),onClick:G(e=>r(`run-task`,t),[`stop`]),onKeydown:n[3]||=G(()=>{},[`stop`])},T(c(X)(`@WORKBENCH:执行`)),41,so)):s(``,!0),K(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:c(X)(`@WORKBENCH:删除`),"aria-label":c(X)(`@WORKBENCH:删除`),onClick:G(e=>r(`delete-task`,t),[`stop`]),onKeydown:n[4]||=G(()=>{},[`stop`])},`×`,40,co)])],42,Va))),128)),t.key===`todo`?(j(),o(`li`,lo,[K(`button`,{type:`button`,class:W([`kb-col__add-btn`,{"kb-col__add-btn--solo":t.tasks.length===0}]),onClick:n[5]||=e=>r(`create-task`)},[n[7]||=K(`span`,{class:`kb-col__add-plus`,"aria-hidden":`true`},`+`,-1),K(`span`,null,T(c(X)(`@WORKBENCH:新建任务`)),1)],2)])):t.tasks.length===0?(j(),o(`li`,uo,[K(`span`,null,T(c(X)(`@WORKBENCH:暂无任务`)),1)])):s(``,!0)])],2))),128))],4)):(j(),o(`div`,fo,[K(`table`,po,[K(`thead`,null,[K(`tr`,null,[K(`th`,mo,T(c(X)(`@WORKBENCH:任务`)),1),K(`th`,ho,T(c(X)(`@WORKBENCH:状态`)),1),K(`th`,go,T(c(X)(`@WORKBENCH:更新时间`)),1)])]),K(`tbody`,null,[(j(!0),o(J,null,w(d.value,t=>(j(),o(`tr`,{key:t.id,class:`kb-table__row`,tabindex:`0`,onClick:e=>r(`open-task`,t),onKeydown:[M(G(e=>r(`open-task`,t),[`prevent`]),[`enter`]),M(G(e=>r(`open-task`,t),[`prevent`]),[`space`])]},[K(`td`,vo,[K(`span`,yo,T(_(t)||c(X)(`@WORKBENCH:未命名任务`)),1),e.showProjectLabel&&v(t)?(j(),o(`span`,{key:0,class:`kb-table__project`,style:oe(c(Oa)(t.projectPath)),title:t.projectPath},T(v(t)),13,bo)):s(``,!0),t.live?(j(),o(`span`,xo,[x(t)?(j(),o(`span`,{key:0,class:`kb-table__agent`,title:c(Le)(x(t))},[y(We,{executor:x(t),class:`kb-table__agent-icon`},null,8,[`executor`])],8,So)):s(``,!0),z(` `+T(S(t.live))+` `,1),typeof t.live.silentMs==`number`?(j(),o(`span`,Co,T(c(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:c(Gr)(t.live.silentMs)})),1)):s(``,!0)])):t.lastReply?(j(),o(`span`,wo,[x(t)?(j(),o(`span`,{key:0,class:`kb-table__agent`,title:c(Le)(x(t))},[y(We,{executor:x(t),class:`kb-table__agent-icon`},null,8,[`executor`])],8,To)):s(``,!0),z(T(t.lastReply),1)])):s(``,!0)]),K(`td`,Eo,[K(`span`,{class:W([`kb-table__status`,`is-`+t.column])},T(c(X)(u.find(e=>e.key===t.column).labelKey)),3)]),K(`td`,Do,T(c(Wr)(t.updatedAt||t.createdAt)),1)],40,_o))),128)),d.value.length===0?(j(),o(`tr`,Oo,[K(`td`,ko,T(c(X)(`@WORKBENCH:暂无任务`)),1)])):s(``,!0)])])]))])}}}),[[`__scopeId`,`data-v-462616d4`]]);E(),U(),C();var Mo=[`title`,`aria-label`],No={class:`tep__btn-name`},Po={class:`tep__item`},Fo={class:`tep__item-name`},Io=[`title`],Lo={key:2,class:`tep__item-missing`},Ro=Z(S({__name:`TaskExecutorPicker`,props:A({title:{}},{modelValue:{required:!0},modelModifiers:{}}),emits:[`update:modelValue`],setup(t){let n=pe(t,`modelValue`),r=t,l=Ve();p(()=>{l.fetchExecutorModels()});function u(e){return l.executorModelText(e)}function d(e){return[u(e),l.executorModelDetail(e)].filter(Boolean).join(` · `)}let f=a(()=>[r.title,d(n.value)].filter(Boolean).join(` · `)),m=a(()=>({claude:l.claudeAvailable,opencode:l.opencodeAvailable,codex:l.codexAvailable}));function h(e){m.value[e]&&(n.value=e,ze(e))}let g=a(()=>Object.keys(m.value).find(e=>m.value[e]));return g.value&&!m.value[n.value]&&h(g.value),(t,r)=>{let a=ee,l=i,p=Ee,g=D;return j(),O(g,{trigger:`click`,class:`tep`,onCommand:h},{dropdown:I(()=>[y(p,null,{default:I(()=>[(j(!0),o(J,null,w(c(Re),t=>(j(),O(l,{key:t.id,command:t.id,disabled:!m.value[t.id]},{default:I(()=>[K(`span`,Po,[y(We,{executor:t.id,class:`tep__item-icon`},null,8,[`executor`]),K(`span`,Fo,T(t.name),1),u(t.id)?(j(),o(`span`,{key:0,class:`tep__item-model`,title:d(t.id)},T(u(t.id)),9,Io)):s(``,!0),n.value===t.id?(j(),O(a,{key:1,class:`tep__item-check`},{default:I(()=>[y(c(e))]),_:1})):m.value[t.id]?s(``,!0):(j(),o(`span`,Lo,T(c(X)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:I(()=>[K(`button`,{type:`button`,class:`tep__btn`,title:f.value,"aria-label":c(X)(`@WORKBENCH:任务执行器`)},[y(We,{executor:n.value,class:`tep__btn-icon`},null,8,[`executor`]),K(`span`,No,T(c(Le)(n.value)),1),y(a,{class:`tep__btn-caret`},{default:I(()=>[y(c(ye))]),_:1})],8,Mo)]),_:1})}}}),[[`__scopeId`,`data-v-5c61a348`]]);E(),U(),C(),he();var zo={class:`acs__head`},Bo=[`title`,`aria-label`],Vo={class:`acs__title`},Ho=[`title`,`aria-label`],Uo={class:`acs__convs`},Wo={class:`acs__chat`},Go=[`data-theme`],Ko={key:0,class:`acs__foot`},qo={key:0,class:`acs__notice`},Jo={class:`acs__foot-label`},Yo={class:`acs__foot-hint`},Xo=Z(S({__name:`AgentChatSurface`,props:A({title:{},active:{type:Boolean},allowDispatch:{type:Boolean},dispatchUseDefaultPrompt:{type:Boolean},placeholder:{}},{dispatchExecutor:{default:`claude`},dispatchExecutorModifiers:{}}),emits:[`update:dispatchExecutor`],setup(e){let n=e,r=pe(e,`dispatchExecutor`),{theme:i}=He(),l=a(()=>i.value===`dark`?`dark`:`light`),{sessions:u,sessionsLoading:d,currentSessionId:f,messages:ee,isStreaming:m,pendingQuestion:h,answeringQuestion:g,isSessionGenerating:_,currentEngine:v,pendingEngine:b,isEngineLocked:x,pickEngine:S,loadSessions:C,loadSession:w,deleteSession:E,renameSession:D,newSession:te,sendMessage:ne,answerQuestion:re,stop:A}=at(),ie=a(()=>x.value?v.value:b.value);function ae(e){x.value||S(e)}let oe=a(()=>n.allowDispatch!==!1&&ie.value!==`gai`),M=a(()=>et(u.value,_)),se=it(),N=tt(),P=F(null),{width:ce,narrow:I}=ct(P),L=F(`chat`),le=F(null);function de(e=!0){le.value?.scrollToBottom?.(e)}async function R(e){await ne(e.text,e.files,{allowDispatch:n.allowDispatch===!0,dispatchExecutor:r.value,dispatchUseDefaultPrompt:n.dispatchUseDefaultPrompt!==!1}),await k(),de()}function fe(e){w(e),L.value=`chat`}function me(){te(),L.value=`chat`}return V(()=>ee.value.length,()=>{k(()=>de(!1))}),V(()=>n.active,e=>{e&&(C().catch(()=>{}),k(()=>de(!1)))}),V(I,e=>{e||(L.value=`chat`)}),p(()=>{C().catch(()=>{}),k(()=>de(!1))}),(n,i)=>(j(),o(`div`,{ref_key:`rootRef`,ref:P,class:`acs`},[K(`div`,zo,[c(I)&&L.value===`list`?(j(),o(`button`,{key:0,type:`button`,class:`acs__icon-btn`,title:c(X)(`@EDITOR:返回对话`),"aria-label":c(X)(`@EDITOR:返回对话`),onClick:i[0]||=e=>L.value=`chat`},[...i[3]||=[K(`svg`,{viewBox:`0 0 24 24`,width:`12`,height:`12`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[K(`line`,{x1:`19`,y1:`12`,x2:`5`,y2:`12`}),K(`polyline`,{points:`12 19 5 12 12 5`})],-1)]],8,Bo)):s(``,!0),K(`span`,Vo,T(e.title||c(X)(`@WORKBENCH:g ai 对话`)),1),i[5]||=K(`span`,{class:`acs__spacer`},null,-1),!c(I)||L.value===`chat`?(j(),O(lt,{key:1,class:`acs__engine`,engine:ie.value,locked:c(x),onSelect:ae},null,8,[`engine`,`locked`])):s(``,!0),c(I)&&L.value===`chat`?(j(),o(`button`,{key:2,type:`button`,class:`acs__icon-btn`,title:c(X)(`@EDITOR:会话列表`),"aria-label":c(X)(`@EDITOR:会话列表`),onClick:i[1]||=e=>L.value=`list`},[...i[4]||=[t(`<svg viewBox="0 0 24 24" width="12" height="12" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" data-v-5d8c52a2><line x1="8" y1="6" x2="21" y2="6" data-v-5d8c52a2></line><line x1="8" y1="12" x2="21" y2="12" data-v-5d8c52a2></line><line x1="8" y1="18" x2="21" y2="18" data-v-5d8c52a2></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-5d8c52a2></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-5d8c52a2></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-5d8c52a2></line></svg>`,1)]],8,Ho)):s(``,!0)]),K(`div`,{class:W([`acs__body`,{"is-wide":!c(I)}])},[B(K(`div`,Uo,[y(c(Pe),{"show-search":!0,items:M.value,"active-id":c(f),loading:c(d),labels:c(se),onSelect:fe,onNew:me,onRename:c(D),onDelete:c(E)},null,8,[`items`,`active-id`,`loading`,`labels`,`onRename`,`onDelete`])],512),[[ue,!c(I)||L.value===`list`]]),B(K(`div`,Wo,[y(c(Me),{ref_key:`chatRef`,ref:le,"show-input":!1,messages:c(ee),"assistant-name":c(nt),"assistant-avatar":c(ot),theme:l.value,question:c(h),"question-submitting":c(g),"question-labels":c(N),"plan-config":{labels:{title:c(X)(`@AGENT:计划`),raw:c(X)(`@AGENT:原始参数`)}},onAnswer:c(re)},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`question`,`question-submitting`,`question-labels`,`plan-config`,`onAnswer`])],512),[[ue,!c(I)||L.value===`chat`]]),c(ce)>0?(j(),o(`div`,{key:0,class:`acs__composer acu-root`,"data-theme":l.value},[y(c(je),{disabled:c(m),generating:c(m),placeholder:e.placeholder||(c(m)?c(X)(`@AGENT:正在生成中...`):c(X)(`@AGENT:输入消息,Enter 发送`)),"upload-config":{accept:c(rt)},onSend:R,onStop:c(A)},null,8,[`disabled`,`generating`,`placeholder`,`upload-config`,`onStop`])],8,Go)):s(``,!0)],2),e.allowDispatch&&L.value===`chat`?(j(),o(`div`,Ko,[oe.value?(j(),o(`p`,qo,T(c(X)(`@WORKBENCH:当前引擎「{name}」只能对话,不能派发任务 —— 切到内置 g ai 才能派活`,{name:c(st)(ie.value)})),1)):(j(),o(J,{key:1},[K(`span`,Jo,T(c(X)(`@WORKBENCH:派发执行器`)),1),y(Ro,{modelValue:r.value,"onUpdate:modelValue":i[2]||=e=>r.value=e,title:c(X)(`@WORKBENCH:它派出去的任务由这个执行器跑(与执行按钮的临时切换共用)`)},null,8,[`modelValue`,`title`]),K(`span`,Yo,T(c(X)(`@WORKBENCH:任务会落到看板,跑完有完成提示`)),1)],64))])):s(``,!0)],512))}}),[[`__scopeId`,`data-v-5d8c52a2`]]);E(),U(),C(),he();var Zo=[`title`,`aria-label`],Qo={class:`oc__rail-text`},$o={class:`oc__head`},es={class:`oc__title`},ts=[`disabled`,`title`],ns=[`title`,`aria-label`],rs={class:`oc__state-label`},is={class:`oc__state-value`},as={class:`oc__state-meta`},os=[`aria-label`],ss=[`aria-selected`],cs=[`aria-selected`],ls={class:`oc__report`},us={class:`oc__report-head`},ds={class:`oc__panel-title`},fs=[`value`,`title`,`aria-label`],ps=[`value`],ms=[`disabled`,`title`],hs={class:`oc__report-list`},gs={key:0,class:`rp`},_s={class:`rp__head`},vs={class:`rp__count`},ys={class:`rp__time`},bs={key:0,class:`rp__text`},xs=[`title`],Ss={key:2,class:`rp__tasks`},Cs={class:`rpt__title`},ws={class:`rpt__meta`},Ts={key:0,class:`rpt__project`},Es={key:1,class:`rpt__agent`},Ds=[`title`],Os={key:3,class:`rpt__silent`},ks=[`title`],As=[`title`],js={class:`rpt__thought-tag`},Ms=[`title`],Ns={key:1,class:`oc-empty`},Ps={key:0,class:`oc__history`},Fs={class:`oc__history-title`},Is={class:`oc__history-list`},Ls=[`onClick`],Rs={class:`oc__history-time`},zs={class:`oc__history-sum`},Bs={class:`oc__git`},Vs={class:`oc__panel-title`},Hs={class:`oc__git-name`},Us={class:`oc__git-list`},Ws={class:`oc__git-label`},Gs={class:`oc__git-label`},Ks={class:`oc__git-value`},qs={class:`oc__git-label`},Js={class:`oc__git-value`},Ys=[`placeholder`],Xs={key:0},Zs={key:1},Qs={class:`oc__compose-foot`},$s=[`disabled`,`title`,`aria-label`],ec=[`title`,`aria-label`],tc=[`title`],nc=[`title`],rc=[`disabled`],ic={class:`oc__hint`},ac=`wb.ocMode.v2`,oc=`/api/workbench/orchestrator/attachments`,sc=`wb.ocInputHeight.v1`,cc=76,lc=20,uc=Z(S({__name:`OrchestratorConsole`,props:{active:{type:Boolean},runningCount:{},selectedProject:{},dispatching:{type:Boolean},togglingSchedule:{type:Boolean},todayDone:{},collapsed:{type:Boolean},defaultPrompt:{},projectPrompts:{},reports:{},reportIntervalMs:{},generatingReport:{type:Boolean},maxInstructionChars:{}},emits:[`toggle-schedule`,`toggle-collapse`,`open-prompt-settings`,`generate-report`,`set-report-interval`,`dispatch`],setup(e,{expose:t,emit:n}){let i=e,l=n,u=F(``),f=F(!0),g=F(!0),_=F(Ie()),v=F((()=>{try{return localStorage.getItem(ac)===`chat`?`chat`:`command`}catch{return`command`}})());function b(e){v.value=e;try{localStorage.setItem(ac,e)}catch{}}let x=F([]),S=a(()=>({kind:`draft`,list:x.value,replace:e=>{x.value=e}})),{isUploading:C,isImageAttachment:E,humanSize:D,onAttachmentPaste:te,onAttachmentDrop:k,removeAttachment:ne,pickAttachmentFile:re}=Vn(),A=a(()=>C(`draft`)),ie=F(!1);function ae(e){e.stopPropagation(),te(e,S.value)}function M(e){ie.value=!1,k(e,S.value)}function N(){re(S.value)}function P(e){ne(S.value,e)}function ce(){x.value=[]}function L(){u.value=``}t({clearAttachments:ce,clearDraft:L});let fe=a(()=>i.selectedProject?.key||``),pe=a(()=>(i.defaultPrompt||``).trim()),me=a(()=>{let e=fe.value;return e?(i.projectPrompts?.[e]?.prompt||``).trim():``}),he=a(()=>Object.values(i.projectPrompts||{}).some(e=>(e?.prompt||``).trim().length>0)),ge=a(()=>!!pe.value||he.value),_e=a(()=>{let e=!!pe.value,t=fe.value?me.value?`project`:`none`:he.value?`target`:`none`;return X(e&&t===`project`?`@WORKBENCH:全局 + 本项目`:e&&t===`target`?`@WORKBENCH:全局 + 落点项目`:e?`@WORKBENCH:全局`:t===`project`?`@WORKBENCH:本项目`:t===`target`?`@WORKBENCH:落点项目`:`@WORKBENCH:未设置`)}),ve=a(()=>u.value.trim().length),V=a(()=>i.maxInstructionChars||1e5),H=a(()=>ve.value>V.value),U=a(()=>!H.value&&ve.value>=V.value*.9),ye=a(()=>u.value.trim().length>0&&!i.dispatching&&!A.value&&!H.value);function be(){ye.value&&l(`dispatch`,{text:u.value.trim(),autoRun:f.value,attachments:x.value,projectPath:i.selectedProject?i.selectedProject.path:``,useDefaultPrompt:g.value,executor:_.value})}function xe(e){e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||(e.preventDefault(),be())}function Se(){try{let e=localStorage.getItem(sc);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=cc?Math.round(t):null}catch{return null}}let Ce=F(null),we=F(Se()),Te=a(()=>{let e={};return we.value&&(e.height=`${we.value}px`),e}),Ee=null,De=!1,q=!0;function Oe(e){let t=Ce.value;if(!t)return;let n=t.getBoundingClientRect();De=n.right-e.clientX<=lc&&n.bottom-e.clientY<=lc}function ke(){De=!1}function je(e){let t=Math.round(e.offsetHeight);if(!(t<cc||t===we.value)){we.value=t;try{localStorage.setItem(sc,String(t))}catch{}}}p(()=>{let e=Ce.value;e&&(window.addEventListener(`mouseup`,ke),typeof ResizeObserver<`u`&&(Ee=new ResizeObserver(()=>{if(q){q=!1;return}let t=parseFloat(getComputedStyle(e).maxHeight),n=Number.isFinite(t)&&e.offsetHeight>=t-1;(De||!n)&&je(e)}),Ee.observe(e)))}),m(()=>{window.removeEventListener(`mouseup`,ke),Ee?.disconnect(),Ee=null});let Me=F(null),Y=a(()=>{let e=i.reports||[];return e.length?e.find(e=>e.id===Me.value)||e[0]:null});function Ne(e){Me.value=e.id}function Pe(e){let t=String(e.text||``).replace(/\s+/g,` `).trim();return t?t.length>42?t.slice(0,42)+`…`:t:e.errorCode?X(Rr(e.errorCode)):X(`@WORKBENCH:当时没有任务在执行`)}function Z(e){return e.errorCode?X(Rr(e.errorCode)):e.tasks.length?X(`@WORKBENCH:模型没有返回内容`):X(`@WORKBENCH:生成这份报告时没有任务在执行`)}function Fe(e){let t=e.target,n=Number(t.value);Nr.includes(n)&&l(`set-report-interval`,n)}let Le=a(()=>{let e=i.selectedProject;if(!e)return[];let t=[];if(e.exists===!1)return t.push({label:X(`@WORKBENCH:工作区`),value:X(`@WORKBENCH:目录不存在`),tone:`danger`}),t;let n=e.git;return!n||n.isGitRepo===null?(t.push({label:X(`@WORKBENCH:Git 状态`),value:X(`@WORKBENCH:未知`),tone:``}),t):n.isGitRepo?(t.push({label:X(`@WORKBENCH:分支`),value:n.detached?X(`@WORKBENCH:游离 HEAD`):n.branch||X(`@WORKBENCH:未知`),tone:``}),t.push({label:X(`@WORKBENCH:工作区`),value:n.changed>0?X(`@WORKBENCH:未提交 {n} 项`,{n:n.changed}):X(`@WORKBENCH:干净`),tone:n.changed>0?`warn`:``}),n.hasUpstream&&(n.ahead>0||n.behind>0)&&t.push({label:X(`@WORKBENCH:与上游`),value:X(`@WORKBENCH:领先 {ahead} / 落后 {behind}`,{ahead:n.ahead,behind:n.behind}),tone:n.behind>0?`warn`:``}),t):(t.push({label:X(`@WORKBENCH:Git 状态`),value:X(`@WORKBENCH:不是 Git 仓库`),tone:``}),t)});return(t,n)=>{let i=ee;return j(),o(`aside`,{class:W([`oc`,{"is-collapsed":e.collapsed}])},[e.collapsed?(j(),o(`button`,{key:0,type:`button`,class:`oc__rail`,title:c(X)(`@WORKBENCH:展开主 Agent 控制台`),"aria-label":c(X)(`@WORKBENCH:展开主 Agent 控制台`),"aria-expanded":!1,onClick:n[0]||=e=>l(`toggle-collapse`)},[y(i,{class:`oc__rail-icon`},{default:I(()=>[y(c(se))]),_:1}),K(`span`,{class:W([`oc__rail-live`,{"is-off":!e.active}]),"aria-hidden":`true`},null,2),K(`span`,Qo,T(c(X)(`@WORKBENCH:主 Agent 控制台`)),1)],8,Zo)):s(``,!0),B(K(`header`,$o,[K(`span`,{class:W([`oc__live`,{"is-off":!e.active}]),"aria-hidden":`true`},null,2),K(`h3`,es,T(c(X)(`@WORKBENCH:主 Agent 控制台`)),1),K(`button`,{type:`button`,class:`oc__toggle`,disabled:e.togglingSchedule,title:e.active?c(X)(`@WORKBENCH:暂停后派发只建任务,不会自动执行`):c(X)(`@WORKBENCH:恢复后派发会自动执行`),onClick:n[1]||=t=>l(`toggle-schedule`,!e.active)},T(e.active?c(X)(`@WORKBENCH:暂停调度`):c(X)(`@WORKBENCH:恢复调度`)),9,ts),K(`button`,{type:`button`,class:`oc__collapse`,title:c(X)(`@WORKBENCH:收起主 Agent 控制台`),"aria-label":c(X)(`@WORKBENCH:收起主 Agent 控制台`),"aria-expanded":!0,onClick:n[2]||=e=>l(`toggle-collapse`)},[y(i,null,{default:I(()=>[y(c(R))]),_:1})],8,ns)],512),[[ue,!e.collapsed]]),B(K(`div`,{class:W([`oc__state`,{"is-paused":!e.active}])},[K(`span`,rs,T(c(X)(`@WORKBENCH:调度状态`)),1),K(`span`,is,T(e.active?c(X)(`@WORKBENCH:调度中`):c(X)(`@WORKBENCH:已暂停`)),1),K(`span`,as,T(c(X)(`@WORKBENCH:{n} 个执行中`,{n:e.runningCount})),1)],2),[[ue,!e.collapsed]]),B(K(`div`,{class:`oc__mode`,role:`tablist`,"aria-label":c(X)(`@WORKBENCH:切换主 Agent 控制台的工作方式`)},[K(`button`,{type:`button`,role:`tab`,class:W([`oc__mode-btn`,{"is-active":v.value===`chat`}]),"aria-selected":v.value===`chat`,onClick:n[3]||=e=>b(`chat`)},T(c(X)(`@WORKBENCH:对话`)),11,ss),K(`button`,{type:`button`,role:`tab`,class:W([`oc__mode-btn`,{"is-active":v.value===`command`}]),"aria-selected":v.value===`command`,onClick:n[4]||=e=>b(`command`)},T(c(X)(`@WORKBENCH:指令`)),11,cs)],8,os),[[ue,!e.collapsed]]),B(y(Xo,{"dispatch-executor":_.value,"onUpdate:dispatchExecutor":n[5]||=e=>_.value=e,class:`oc__chat`,active:!e.collapsed&&v.value===`chat`,"allow-dispatch":``,"dispatch-use-default-prompt":g.value,title:c(X)(`@WORKBENCH:g ai 对话`)},null,8,[`dispatch-executor`,`active`,`dispatch-use-default-prompt`,`title`]),[[ue,!e.collapsed&&v.value===`chat`]]),B(K(`div`,ls,[K(`div`,us,[K(`p`,ds,T(c(X)(`@WORKBENCH:进度报告`)),1),K(`select`,{class:`oc__interval`,value:String(e.reportIntervalMs??0),title:c(X)(`@WORKBENCH:自动报告的间隔(关掉后仍可随时点「立即报告」)`),"aria-label":c(X)(`@WORKBENCH:自动报告间隔`),onChange:Fe},[(j(!0),o(J,null,w(c(Nr),e=>(j(),o(`option`,{key:e,value:String(e)},T(c(X)(c(Ir)(e),c(Lr)(e))),9,ps))),128))],40,fs),K(`button`,{type:`button`,class:`oc__report-run`,disabled:e.generatingReport,title:c(X)(`@WORKBENCH:让主 Agent 现在汇报一次正在执行的任务进度`),onClick:n[6]||=e=>l(`generate-report`)},[y(i,{class:W([`oc__report-run-icon`,{"is-spin":e.generatingReport}])},{default:I(()=>[y(c(r))]),_:1},8,[`class`]),K(`span`,null,T(e.generatingReport?c(X)(`@WORKBENCH:生成中…`):c(X)(`@WORKBENCH:立即报告`)),1)],8,ms)]),K(`ul`,hs,[Y.value?(j(),o(`li`,gs,[K(`div`,_s,[K(`span`,{class:W([`rp__trigger`,{"is-auto":Y.value.trigger===`auto`}])},T(Y.value.trigger===`auto`?c(X)(`@WORKBENCH:自动`):c(X)(`@WORKBENCH:手动`)),3),K(`span`,vs,T(c(X)(`@WORKBENCH:{n} 个任务进行中`,{n:Y.value.tasks.length})),1),K(`span`,ys,T(c(qr)(Y.value.at)),1)]),Y.value.text?(j(),o(`p`,bs,T(Y.value.text),1)):(j(),o(`p`,{key:1,class:`rp__notice`,title:Y.value.errorDetail},T(Z(Y.value)),9,xs)),Y.value.tasks.length?(j(),o(`ul`,Ss,[(j(!0),o(J,null,w(Y.value.tasks,(e,t)=>(j(),o(`li`,{key:e.taskId||t,class:`rpt`},[K(`p`,Cs,T(e.taskTitle||c(X)(`@WORKBENCH:未命名任务`)),1),K(`p`,ws,[e.projectName?(j(),o(`span`,Ts,T(e.projectName),1)):s(``,!0),K(`span`,null,T(c(X)(`@WORKBENCH:已运行 {elapsed}`,{elapsed:c(Gr)(e.elapsedMs)})),1),e.agent?(j(),o(`span`,Es,T(e.agent),1)):s(``,!0),e.toolCallCount?(j(),o(`span`,{key:2,title:e.toolMix||``},T(c(X)(`@WORKBENCH:工具 {n} 次`,{n:e.toolCallCount})),9,Ds)):s(``,!0),typeof e.silentMs==`number`?(j(),o(`span`,Os,T(c(X)(`@WORKBENCH:静默 {elapsed}`,{elapsed:c(Gr)(e.silentMs)})),1)):s(``,!0)]),e.lastTool?(j(),o(`p`,{key:0,class:`rpt__line`,title:e.lastTool},T(e.lastTool),9,ks)):s(``,!0),e.lastThought?(j(),o(`p`,{key:1,class:`rpt__line is-thought`,title:e.lastThought},[K(`span`,js,T(c(X)(`@WORKBENCH:最近思考`)),1),z(T(e.lastThought),1)],8,As)):s(``,!0),e.lastLine?(j(),o(`p`,{key:2,class:`rpt__line`,title:e.lastLine},T(e.lastLine),9,Ms)):s(``,!0)]))),128))])):s(``,!0)])):(j(),o(`li`,Ns,T(c(X)(`@WORKBENCH:暂无进度报告`)),1))]),(e.reports||[]).length>1?(j(),o(`div`,Ps,[K(`p`,Fs,T(c(X)(`@WORKBENCH:历史报告`)),1),K(`ul`,Is,[(j(!0),o(J,null,w(e.reports,e=>(j(),o(`li`,{key:e.id},[K(`button`,{type:`button`,class:W([`oc__history-item`,{"is-active":e.id===Y.value?.id}]),onClick:t=>Ne(e)},[K(`span`,Rs,T(c(qr)(e.at)),1),K(`span`,zs,T(Pe(e)),1)],10,Ls)]))),128))])])):s(``,!0)],512),[[ue,!e.collapsed&&v.value===`command`]]),B(K(`div`,Bs,[K(`p`,Vs,[z(T(c(X)(`@WORKBENCH:项目概览`))+` `,1),K(`span`,Hs,T(e.selectedProject?e.selectedProject.name:c(X)(`@WORKBENCH:全部项目`)),1)]),K(`dl`,Us,[(j(!0),o(J,null,w(Le.value,e=>(j(),o(J,{key:e.label},[K(`dt`,Ws,T(e.label),1),K(`dd`,{class:W([`oc__git-value`,{"is-warn":e.tone===`warn`,"is-danger":e.tone===`danger`}])},T(e.value),3)],64))),128)),K(`dt`,Gs,T(c(X)(`@WORKBENCH:今日完成`)),1),K(`dd`,Ks,T(e.todayDone),1),K(`dt`,qs,T(c(X)(`@WORKBENCH:最后活跃`)),1),K(`dd`,Js,T(e.selectedProject&&c(Wr)(e.selectedProject.stats.lastActiveAt)||`—`),1)])],512),[[ue,!e.collapsed&&v.value===`command`]]),B(K(`div`,{class:`oc__compose`,onPaste:ae,onDrop:G(M,[`prevent`]),onDragover:n[15]||=G(e=>ie.value=!0,[`prevent`]),onDragleave:n[16]||=e=>ie.value=!1},[B(K(`textarea`,{ref_key:`inputRef`,ref:Ce,class:W([`oc__input`,{"is-over":H.value}]),"onUpdate:modelValue":n[7]||=e=>u.value=e,style:oe(Te.value),rows:`4`,placeholder:c(X)(`@WORKBENCH:给主 Agent 下一条指令,例如:把登录模块的错误处理重构一遍`),onKeydown:xe,onPaste:ae,onMousedown:Oe},null,46,Ys),[[de,u.value]]),x.value.length>0||A.value?(j(),O(St,{key:0,attachments:x.value,"is-image":c(E),"human-size":c(D),"is-uploading":A.value,"is-paste-hover":ie.value,"on-pick":N,"on-remove":P,"raw-base":oc,onPaste:ae,onDrop:M,onDragover:n[8]||=G(e=>ie.value=!0,[`prevent`]),onDragenter:n[9]||=G(e=>ie.value=!0,[`prevent`]),onDragleave:n[10]||=e=>ie.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`])):s(``,!0),ve.value>0?(j(),o(`p`,{key:1,class:W([`oc__count`,{"is-warn":U.value,"is-over":H.value}])},[H.value?(j(),o(`span`,Xs,T(c(X)(`@WORKBENCH:超出上限 {max} 字,请精简后再派发(超出的部分不会被发出)`,{max:V.value})),1)):(j(),o(`span`,Zs,T(ve.value)+` / `+T(V.value),1))],2)):s(``,!0),K(`div`,Qs,[K(`button`,{type:`button`,class:`oc__attach`,disabled:A.value,title:c(X)(`@WORKBENCH:添加附件(也可直接粘贴或拖入文件)`),"aria-label":c(X)(`@WORKBENCH:添加附件`),onClick:N},[y(i,null,{default:I(()=>[y(c(d))]),_:1})],8,$s),K(`button`,{type:`button`,class:W([`oc__attach`,{"is-on":ge.value}]),title:c(X)(`@WORKBENCH:设置派发时自动附加的默认提示词(全局 / 各项目)`),"aria-label":c(X)(`@WORKBENCH:默认提示词设置`),onClick:n[11]||=e=>l(`open-prompt-settings`)},[y(i,null,{default:I(()=>[y(c(h))]),_:1})],10,ec),K(`label`,{class:`oc__autorn`,title:c(X)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[B(K(`input`,{type:`checkbox`,"onUpdate:modelValue":n[12]||=e=>f.value=e},null,512),[[le,f.value]]),K(`span`,null,T(c(X)(`@WORKBENCH:立即执行`)),1)],8,tc),ge.value?(j(),o(`label`,{key:0,class:`oc__autorn`,title:c(X)(`@WORKBENCH:取消勾选则本次派发的任务不带默认提示词(设置本身不受影响)`)},[B(K(`input`,{type:`checkbox`,"onUpdate:modelValue":n[13]||=e=>g.value=e},null,512),[[le,g.value]]),K(`span`,null,T(c(X)(`@WORKBENCH:默认提示词({state})`,{state:_e.value})),1)],8,nc)):s(``,!0),y(Ro,{modelValue:_.value,"onUpdate:modelValue":n[14]||=e=>_.value=e,title:c(X)(`@WORKBENCH:本次派发使用的执行器(与执行按钮的临时切换共用)`)},null,8,[`modelValue`,`title`]),K(`button`,{type:`button`,class:`oc__send`,disabled:!ye.value,onClick:be},[y(i,{class:`oc__send-icon`},{default:I(()=>[y(c(Ae))]),_:1}),K(`span`,null,T(e.dispatching?c(X)(`@WORKBENCH:派发中…`):c(X)(`@WORKBENCH:派发`)),1)],8,rc)]),K(`p`,ic,[e.selectedProject?(j(),o(J,{key:0},[z(T(c(X)(`@WORKBENCH:指令会在「{name}」下新建一个任务;Enter 派发,Shift+Enter 换行`,{name:e.selectedProject.name})),1)],64)):(j(),o(J,{key:1},[z(T(c(X)(`@WORKBENCH:指令落到哪个项目由主 Agent 判断;Enter 派发,Shift+Enter 换行`)),1)],64))])],544),[[ue,!e.collapsed&&v.value===`command`]])],2)}}}),[[`__scopeId`,`data-v-956b148c`]]);E(),U(),C(),he();var dc={class:`pd`},fc={class:`pd__intro`},pc={class:`pd__field`},mc={class:`pd__head`},hc={class:`pd__label`,for:`pd-global`},gc={class:`pd__count`},_c=[`placeholder`],vc={class:`pd__field`},yc={class:`pd__head`},bc={class:`pd__label`,for:`pd-project`},xc={key:0,class:`pd__count`},Sc=[`disabled`,`placeholder`],Cc={class:`pd__hint`},wc={class:`pd__foot`},Tc=[`disabled`],Ec=4e3,Dc=Z(S({__name:`WorkbenchDefaultPromptDialog`,props:{modelValue:{type:Boolean},defaultPrompt:{},projectPath:{},projectName:{},projectPrompt:{},saving:{type:Boolean}},emits:[`update:modelValue`,`save`],setup(e,{emit:t}){let n=e,r=t,i=F(``),l=F(``);V(()=>n.modelValue,e=>{e&&(i.value=n.defaultPrompt||``,l.value=n.projectPrompt||``)});let u=a(()=>!!n.projectPath),d=a(()=>i.value.trim()!==(n.defaultPrompt||``).trim()||u.value&&l.value.trim()!==(n.projectPrompt||``).trim());function f(){n.saving||r(`save`,{globalPrompt:i.value,projectPrompt:l.value})}function p(){r(`update:modelValue`,!1)}return(t,n)=>(j(),O(Ue,{"model-value":e.modelValue,title:c(X)(`@WORKBENCH:默认提示词`),width:`min(640px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[2]||=e=>r(`update:modelValue`,e)},{footer:I(()=>[K(`div`,wc,[K(`button`,{type:`button`,class:`pd__btn`,onClick:p},T(c(X)(`@WORKBENCH:取消`)),1),n[3]||=K(`span`,{class:`pd__foot-spacer`},null,-1),K(`button`,{type:`button`,class:`pd__btn pd__btn--primary`,disabled:e.saving||!d.value,onClick:f},T(e.saving?c(X)(`@WORKBENCH:保存中…`):c(X)(`@WORKBENCH:保存`)),9,Tc)])]),default:I(()=>[K(`div`,dc,[K(`p`,fc,T(c(X)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),K(`div`,pc,[K(`div`,mc,[K(`label`,hc,T(c(X)(`@WORKBENCH:全局默认提示词`)),1),K(`span`,gc,T(i.value.length)+` / `+T(Ec),1)]),B(K(`textarea`,{id:`pd-global`,"onUpdate:modelValue":n[0]||=e=>i.value=e,class:`pd__area`,rows:`5`,maxlength:Ec,placeholder:c(X)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,_c),[[de,i.value]])]),K(`div`,vc,[K(`div`,yc,[K(`label`,bc,T(u.value?c(X)(`@WORKBENCH:「{name}」的项目提示词`,{name:e.projectName}):c(X)(`@WORKBENCH:项目提示词`)),1),u.value?(j(),o(`span`,xc,T(l.value.length)+` / `+T(Ec),1)):s(``,!0)]),B(K(`textarea`,{id:`pd-project`,"onUpdate:modelValue":n[1]||=e=>l.value=e,class:`pd__area`,rows:`5`,maxlength:Ec,disabled:!u.value,placeholder:u.value?c(X)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):c(X)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,Sc),[[de,l.value]]),K(`p`,Cc,T(u.value?c(X)(`@WORKBENCH:项目提示词追加在全局提示词之后(不覆盖全局),派发到「{name}」时一起带上`,{name:e.projectName}):c(X)(`@WORKBENCH:选中的是「全部项目」,落点由主 Agent 判断 —— 想给某个项目单设提示词,先选中它`)),1)])])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-bc4078f5`]]);E(),U(),C(),he();var Oc={class:`nc`},kc={class:`nc__field`},Ac={class:`nc__label`,for:`nc-project`},jc={value:``},Mc=[`value`],Nc=[`title`],Pc={class:`nc__field`},Fc={class:`nc__label`,for:`nc-title`},Ic=[`placeholder`],Lc={class:`nc__field`},Rc={class:`nc__label`,for:`nc-desc`},zc=[`placeholder`],Bc={key:0,class:`nc__error`},Vc={class:`nc__foot`},Hc=[`disabled`],Uc=[`disabled`],Wc=Z(S({__name:`WorkbenchTaskCreateDialog`,props:{modelValue:{type:Boolean},projects:{},defaultProjectPath:{}},emits:[`update:modelValue`,`created`],setup(e,{emit:t}){let n=e,r=t,i=F(``),l=F(``),u=F(``),d=F(!1),f=F(``);function p(e){let t=Q(e);if(!t)return``;let r=n.projects.find(e=>Q(e.path)===t);return r?r.path:``}V(()=>n.modelValue,e=>{e&&(i.value=``,l.value=``,u.value=p(n.defaultProjectPath),f.value=``,d.value=!1)});let ee=a(()=>n.projects),m=a(()=>!d.value&&(i.value.trim().length>0||l.value.trim().length>0)),h=a(()=>{let e=Q(u.value);if(!e)return``;let t=ee.value.find(t=>Q(t.path)===e);return t?t.name:``});async function g(e){if(m.value){d.value=!0,f.value=``;try{let t={title:i.value.trim(),desc:l.value,promptId:null,simpleOverride:``};u.value&&(t.projectPath=u.value);let n=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}).then(e=>e.json()).catch(()=>null);if(!n?.success){f.value=n?.error||X(`@WORKBENCH:保存失败`);return}r(`update:modelValue`,!1),r(`created`,{task:n.task,openEditor:e})}finally{d.value=!1}}}return(t,n)=>(j(),O(Ue,{"model-value":e.modelValue,title:c(X)(`@WORKBENCH:新建开发任务`),width:`min(600px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[9]||=e=>r(`update:modelValue`,e)},{footer:I(()=>[K(`div`,Vc,[K(`button`,{type:`button`,class:`nc__btn`,onClick:n[6]||=e=>r(`update:modelValue`,!1)},T(c(X)(`@WORKBENCH:取消`)),1),n[10]||=K(`span`,{class:`nc__foot-spacer`},null,-1),K(`button`,{type:`button`,class:`nc__btn`,disabled:!m.value,onClick:n[7]||=e=>g(!0)},T(c(X)(`@WORKBENCH:创建并打开编辑器`)),9,Hc),K(`button`,{type:`button`,class:`nc__btn nc__btn--primary`,disabled:!m.value,onClick:n[8]||=e=>g(!1)},T(d.value?c(X)(`@WORKBENCH:创建中…`):c(X)(`@WORKBENCH:创建`)),9,Uc)])]),default:I(()=>[K(`div`,Oc,[K(`div`,kc,[K(`label`,Ac,T(c(X)(`@WORKBENCH:项目`)),1),B(K(`select`,{id:`nc-project`,"onUpdate:modelValue":n[0]||=e=>u.value=e,class:`nc__select`},[K(`option`,jc,T(c(X)(`@WORKBENCH:跟随当前项目`)),1),(j(!0),o(J,null,w(ee.value,e=>(j(),o(`option`,{key:e.key,value:e.path},T(e.name)+T(e.exists===!1?` · ${c(X)(`@WORKBENCH:目录不存在`)}`:``),9,Mc))),128))],512),[[_e,u.value]]),K(`p`,{class:`nc__hint`,title:u.value},T(h.value?c(X)(`@WORKBENCH:任务会在「{name}」目录下执行`,{name:h.value}):c(X)(`@WORKBENCH:任务会跟随应用当前的工作目录`)),9,Nc)]),K(`div`,Pc,[K(`label`,Fc,T(c(X)(`@WORKBENCH:标题`)),1),B(K(`input`,{id:`nc-title`,"onUpdate:modelValue":n[1]||=e=>i.value=e,class:`nc__input`,type:`text`,maxlength:`200`,placeholder:c(X)(`@WORKBENCH:一句话说清要做什么`),onKeydown:n[2]||=M(G(e=>g(!1),[`prevent`]),[`enter`])},null,40,Ic),[[de,i.value]])]),K(`div`,Lc,[K(`label`,Rc,T(c(X)(`@WORKBENCH:描述`)),1),B(K(`textarea`,{id:`nc-desc`,"onUpdate:modelValue":n[3]||=e=>l.value=e,class:`nc__input nc__input--area`,rows:`6`,placeholder:c(X)(`@WORKBENCH:把背景、验收标准、相关文件路径写进来,执行时用它当上下文`),onKeydown:[n[4]||=M(G(e=>g(!1),[`ctrl`,`prevent`]),[`enter`]),n[5]||=M(G(e=>g(!1),[`meta`,`prevent`]),[`enter`])]},null,40,zc),[[de,l.value]])]),f.value?(j(),o(`p`,Bc,T(f.value),1)):s(``,!0)])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-5e9238ae`]]);E(),U(),C(),he();var Gc={class:`board__top`},Kc=[`title`,`aria-label`,`aria-expanded`],qc={class:`board__brand`},Jc={class:`board__brand-text`},Yc={class:`board__title`},Xc={class:`board__subtitle`},Zc={class:`board__stats`},Qc={class:`board__stat`},$c={class:`board__stat-label`},el={class:`board__stat-value`},tl={class:`board__stat`},nl={class:`board__stat-label`},rl={class:`board__stat-value`},il={class:`board__stat`},al={class:`board__stat-label`},ol={class:`board__stat`},sl={class:`board__stat-label`},cl={class:`board__stat-value`},ll=[`title`],ul={class:`board__main`},dl={class:`board__main-head`},fl={class:`board__main-title`},pl={class:`board__project-name`},ml=[`title`],hl={key:1,class:`board__project-path`},gl={key:0,class:`board__project-meta`},_l=[`title`],vl=`wb.boardProject.v1`,yl=5e3,bl=3e4,xl=`wb.boardLayout.v1`,Sl=180,Cl=420,wl=260,Tl=900,El=.26,Dl=.46,Ol=Z(S({__name:`WorkbenchBoard`,emits:[`open-task`],setup(e,{emit:t}){let n=t,{projects:r,boardTasks:i,currentProjectPath:l,loading:u,loadProjects:d}=Mr(),{active:f,activity:h,running:g,dispatching:_,togglingSchedule:v,maxInstructionChars:b,defaultPrompt:x,projectPrompts:S,reports:C,generatingReport:w,reportIntervalMs:E,loadOrchestrator:D,setSchedulingActive:te,dispatch:k,saveDefaultPrompt:ne,saveProjectPrompt:re,loadReports:A,generateReport:ie,setReportInterval:ae}=Br(),P=(()=>{try{return localStorage.getItem(vl)}catch{return null}})(),ce=F(P||``);V(ce,e=>{try{localStorage.setItem(vl,e)}catch{}});let L=a(()=>ce.value&&r.value.find(e=>e.key===ce.value)||null);V(r,e=>{ce.value&&(e.some(e=>e.key===ce.value)||(ce.value=``))});let le=!1;function ue(){if(le||(le=!0,P!==null))return;let e=l.value?Q(l.value):``;e&&r.value.some(t=>t.key===e)&&(ce.value=e)}let de=a(()=>{let e=new Map(r.value.map(e=>[e.key,e.name])),t={};for(let n of i.value)n.projectPath&&(t[n.projectPath]=e.get(Q(n.projectPath))||``);return t}),pe=a(()=>{if(!ce.value)return i.value;let e=ce.value;return i.value.filter(t=>Q(t.projectPath)===e)}),me=a(()=>{let e=new Date;e.setHours(0,0,0,0);let t=e.getTime();return{projects:r.value.length,tasks:i.value.length,running:g.value.length,todayDone:h.value.filter(e=>e.kind===`done`&&e.at&&new Date(e.at).getTime()>=t).length}});function z(e){n(`open-task`,{taskId:e.id,projectPath:e.projectPath})}let he=null,B=!1,ge=null;async function _e(e=!0){if(!B){B=!0;try{await Promise.all([d(e),D(e)])}finally{B=!1}}}function ve(){document.hidden||(_e(!0),A(!0))}p(async()=>{window.addEventListener(`resize`,xe),await _e(!1),A(!0),ue(),he=setInterval(()=>{document.hidden||_e(!0)},yl),ge=setInterval(()=>{document.hidden||A(!0)},bl),document.addEventListener(`visibilitychange`,ve)}),m(()=>{window.removeEventListener(`resize`,xe),he&&=(clearInterval(he),null),ge&&=(clearInterval(ge),null),document.removeEventListener(`visibilitychange`,ve)});let H=Te({left:null,right:null,leftCollapsed:!1,rightCollapsed:!1});function U(){try{let e=localStorage.getItem(xl);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(H.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(H.right=t.right),H.leftCollapsed=t.leftCollapsed===!0,H.rightCollapsed=t.rightCollapsed===!0}catch{}}U();function ye(){try{localStorage.setItem(xl,JSON.stringify(H))}catch{}}let be=F(typeof window>`u`?1920:window.innerWidth);function xe(){be.value=window.innerWidth}let Se=a(()=>be.value<=1024),Ce=a(()=>be.value<=860);function we(e,t){let n=e===`left`?Sl:wl,r=Math.min(e===`left`?Cl:Tl,be.value*(e===`left`?El:Dl));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}let G=a(()=>{let e={};return H.left!=null&&(e[`--wb-left-w`]=we(`left`,H.left)+`px`),H.right!=null&&!Ce.value&&(e[`--wb-right-w`]=we(`right`,H.right)+`px`),e}),Ee=F(null),De=F(null);function q(e){return Ee.value?.querySelector(e===`left`?`.board__left`:`.oc`)}function Oe(e){window.removeEventListener(`mousemove`,e),document.body.style.userSelect=``,document.body.style.cursor=``,De.value=null,ye()}function ke(e,t){if(e===`left`?Se.value:Ce.value)return;let n=q(e);if(!n)return;t.preventDefault();let r=t.clientX,i=n.getBoundingClientRect().width;De.value=e,document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let a=t=>{let n=(t.clientX-r)*(e===`left`?1:-1);H[e]=we(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>Oe(a),{once:!0})}function J(e){H[e]=null,ye()}let Ae=F(!1),je=a(()=>Se.value?!Ae.value:H.leftCollapsed);function Me(){if(Se.value){Ae.value=!Ae.value;return}H.leftCollapsed=!H.leftCollapsed,ye()}function Y(){Se.value&&(Ae.value=!1)}let Ne=a(()=>H.rightCollapsed&&!Ce.value);function Pe(){H.rightCollapsed=!H.rightCollapsed,ye()}function Z(e){ce.value=e?e.key:``,Ae.value=!1}let Fe=F(!1);function Le(){Fe.value=!0}async function Re(e){if(await _e(!0),e.openEditor){n(`open-task`,{taskId:e.task.id,projectPath:e.task.projectPath||``});return}N.success(X(`@WORKBENCH:已创建任务`))}async function ze(e){if(e.runningJobs>0)return;let t=Ve(),n={claude:t.claudeAvailable,opencode:t.opencodeAvailable,codex:t.codexAvailable},r=Ie();n[r]||(r=Object.keys(n).find(e=>n[e])||r);let i=`/api/workbench/tasks/${encodeURIComponent(e.id)}/run`,a=await fetch(i,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({executor:r})}).then(e=>e.json()).catch(()=>null);if(!a?.success){N.error(a?.error||X(`@WORKBENCH:执行失败`));return}N.success(X(`@WORKBENCH:已开始执行`)),await _e(!0)}async function Be(e){let t=(e.title||``).trim()||X(`@WORKBENCH:未命名任务`);try{await fe.confirm(X(`@WORKBENCH:删除任务「{title}」?`,{title:t}),X(`@WORKBENCH:确认`),{type:`warning`})}catch{return}let n=await fetch(`/api/workbench/tasks/${encodeURIComponent(e.id)}`,{method:`DELETE`}).then(e=>e.json()).catch(()=>null);if(n&&n.success===!1){N.error(n.error||X(`@WORKBENCH:删除失败`));return}await _e(!0)}let He=F(null),Ue=a(()=>L.value?.path||l.value);async function We(e){let t=await k({text:e.text,projectPath:e.projectPath,autoRun:e.autoRun,attachments:e.attachments,useDefaultPrompt:e.useDefaultPrompt,executor:e.executor});t&&(He.value?.clearAttachments(),He.value?.clearDraft(),N.success(t.ran?X(`@WORKBENCH:已派发并开始执行`):X(`@WORKBENCH:已派发(只建任务未执行)`)),await _e(!0))}async function Ge(e){await te(e)}let Ke=F(!1),qe=F(!1),Je=a(()=>{let e=L.value?.key;return e&&S.value?.[e]?.prompt||``});async function Ye(e){if(qe.value)return;let t=e.globalPrompt.trim(),n=e.projectPrompt.trim(),r=L.value;qe.value=!0;try{let e=!0;t!==(x.value||``).trim()&&(e=await ne(t)),e&&r&&n!==Je.value.trim()&&(e=await re(r.path,n)),e&&(Ke.value=!1)}finally{qe.value=!1}}return(e,t)=>{let n=ee;return j(),o(`div`,{class:`board`,style:oe(G.value)},[K(`header`,Gc,[K(`button`,{type:`button`,class:W([`board__icon-btn board__fold-btn`,{"is-on":!je.value}]),title:je.value?c(X)(`@WORKBENCH:展开项目列表`):c(X)(`@WORKBENCH:收起项目列表`),"aria-label":je.value?c(X)(`@WORKBENCH:展开项目列表`):c(X)(`@WORKBENCH:收起项目列表`),"aria-expanded":!je.value,onClick:Me},[je.value?(j(),O(n,{key:1},{default:I(()=>[y(c(R))]),_:1})):(j(),O(n,{key:0},{default:I(()=>[y(c(se))]),_:1}))],10,Kc),K(`div`,qc,[K(`span`,{class:W([`board__live`,{"is-off":!c(f)}]),"aria-hidden":`true`},null,2),K(`div`,Jc,[K(`h1`,Yc,T(c(X)(`@WORKBENCH:多项目编排台`)),1),K(`p`,Xc,T(c(f)?c(X)(`@WORKBENCH:主 Agent 调度中`):c(X)(`@WORKBENCH:主 Agent 已暂停`)),1)])]),K(`div`,Zc,[K(`span`,Qc,[K(`span`,$c,T(c(X)(`@WORKBENCH:项目`)),1),K(`strong`,el,T(me.value.projects),1)]),K(`span`,tl,[K(`span`,nl,T(c(X)(`@WORKBENCH:任务`)),1),K(`strong`,rl,T(me.value.tasks),1)]),K(`span`,il,[K(`span`,al,T(c(X)(`@WORKBENCH:活跃执行`)),1),K(`strong`,{class:W([`board__stat-value`,{"is-live":me.value.running>0}])},T(me.value.running),3)]),K(`span`,ol,[K(`span`,sl,T(c(X)(`@WORKBENCH:今日完成`)),1),K(`strong`,cl,T(me.value.todayDone),1)])])]),K(`div`,{ref_key:`colsRef`,ref:Ee,class:W([`board__cols`,{"is-resizing":De.value!==null}])},[K(`div`,{class:W([`board__scrim`,{"is-on":Ae.value}]),"aria-hidden":`true`,onClick:t[0]||=e=>Ae.value=!1},null,2),K(`aside`,{class:W([`board__left`,{"is-collapsed":je.value}]),onKeydown:M(Y,[`esc`])},[y(wa,{projects:c(r),"selected-key":ce.value,loading:c(u),onSelect:Z},null,8,[`projects`,`selected-key`,`loading`])],34),je.value?s(``,!0):(j(),o(`div`,{key:0,class:`board__splitter board__splitter--left`,role:`separator`,"aria-orientation":`vertical`,title:c(X)(`@WORKBENCH:拖动调整项目列表宽度,双击恢复默认`),onMousedown:t[1]||=e=>ke(`left`,e),onDblclick:t[2]||=e=>J(`left`)},null,40,ll)),K(`main`,ul,[K(`div`,dl,[K(`div`,fl,[K(`h2`,pl,T(L.value?L.value.name:c(X)(`@WORKBENCH:全部项目`)),1),L.value?(j(),o(`span`,{key:0,class:`board__project-path`,title:L.value.path},T(L.value.path),9,ml)):(j(),o(`span`,hl,T(c(X)(`@WORKBENCH:共 {n} 个项目的任务`,{n:c(r).length})),1))]),L.value?(j(),o(`span`,gl,T(c(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:L.value.stats.done,total:L.value.stats.total})),1)):s(``,!0)]),y(jo,{tasks:pe.value,"project-labels":de.value,"show-project-label":!L.value,onOpenTask:z,onRunTask:ze,onDeleteTask:Be,onCreateTask:Le},null,8,[`tasks`,`project-labels`,`show-project-label`])]),!Ne.value&&!Ce.value?(j(),o(`div`,{key:1,class:`board__splitter board__splitter--right`,role:`separator`,"aria-orientation":`vertical`,title:c(X)(`@WORKBENCH:拖动调整主 Agent 控制台宽度,双击恢复默认`),onMousedown:t[3]||=e=>ke(`right`,e),onDblclick:t[4]||=e=>J(`right`)},null,40,_l)):s(``,!0),y(uc,{ref_key:`consoleRef`,ref:He,active:c(f),"running-count":c(g).length,"selected-project":L.value,dispatching:c(_),"toggling-schedule":c(v),"today-done":me.value.todayDone,collapsed:Ne.value,"default-prompt":c(x),"project-prompts":c(S),reports:c(C),"report-interval-ms":c(E),"generating-report":c(w),"max-instruction-chars":c(b),onToggleCollapse:Pe,onToggleSchedule:Ge,onDispatch:We,onGenerateReport:c(ie),onSetReportInterval:c(ae),onOpenPromptSettings:t[5]||=e=>Ke.value=!0},null,8,[`active`,`running-count`,`selected-project`,`dispatching`,`toggling-schedule`,`today-done`,`collapsed`,`default-prompt`,`project-prompts`,`reports`,`report-interval-ms`,`generating-report`,`max-instruction-chars`,`onGenerateReport`,`onSetReportInterval`])],2),y(Dc,{modelValue:Ke.value,"onUpdate:modelValue":t[6]||=e=>Ke.value=e,"default-prompt":c(x),"project-path":L.value?.path||``,"project-name":L.value?.name||``,"project-prompt":Je.value,saving:qe.value,onSave:Ye},null,8,[`modelValue`,`default-prompt`,`project-path`,`project-name`,`project-prompt`,`saving`]),y(Wc,{modelValue:Fe.value,"onUpdate:modelValue":t[7]||=e=>Fe.value=e,projects:c(r),"default-project-path":Ue.value,onCreated:Re},null,8,[`modelValue`,`projects`,`default-project-path`])],4)}}}),[[`__scopeId`,`data-v-bad405be`]]);E(),U(),C(),he();var kl={class:`workbench`},Al={class:`wb-editor`},jl={class:`wb-editor-bar`},Ml=[`title`],Nl=[`title`],Pl=[`title`],Fl={class:`wb-editor-bar__hint`},Il={class:`workbench__editor-row`},Ll=[`aria-label`,`aria-valuenow`,`title`],Rl={class:`wb-split`},zl={key:0,class:`wb-placeholder`},Bl={class:`wb-split__header`},Vl={class:`wb-split__title-wrap`},Hl=[`placeholder`,`aria-label`],Ul=[`title`,`aria-label`],Wl=[`title`],Gl={key:0,class:`wb-meta-save__dot`},Kl={key:1,class:`wb-meta-save__check`},ql={key:2,class:`wb-meta-save__bang`},Jl={key:3,class:`wb-meta-save__dot`},Yl=[`aria-label`],Xl={value:null},Zl=[`value`],Ql=[`title`],$l={class:`wb-executor-item`},eu={class:`wb-executor-item__name`},tu=[`title`],nu={key:2,class:`wb-executor-item__missing`},ru={key:2,class:`wb-no-claude-hint`,role:`status`},iu={class:`wb-no-claude-hint__text`},au={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},ou=[`title`,`aria-label`],su=[`title`,`aria-label`],cu=[`open`],lu={class:`wb-task-desc__summary`},uu={class:`wb-task-desc__label`},du=[`title`,`aria-label`],fu={key:0,class:`wb-task-desc__tag`},pu={key:0},mu={key:1,class:`wb-task-desc__tag-attachment`},hu=[`placeholder`,`aria-label`],gu={class:`wb-execution-body`},_u={class:`wb-exec-detail`},vu={class:`wb-form-item__label wb-simple__override-summary`},yu=[`title`],bu=[`placeholder`,`aria-label`],xu={class:`wb-simple-chat`},Su={key:0,class:`wb-simple-chat__footer`},Cu={style:{display:`flex`,gap:`8px`,"align-items":`center`}},wu=`wb.lastTaskByProject.v1`,Tu=`__no_project__`,Eu=`wb.sidebarWidth.v1`,Du=200,Ou=480,ku=268,Au=3e3,ju=52,Mu=320,Nu=500,Pu=Z(S({__name:`WorkbenchView`,setup(t){let n=Be(),r=Ve(),u=F((()=>{try{let e=parseInt(localStorage.getItem(Eu)||``,10);return Number.isFinite(e)?Math.min(Ou,Math.max(Du,e)):ku}catch{return ku}})());function d(e){e.preventDefault();let t=e.clientX,n=u.value;document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let r=e=>{u.value=Math.min(Ou,Math.max(Du,n+e.clientX-t))};window.addEventListener(`mousemove`,r),window.addEventListener(`mouseup`,()=>{window.removeEventListener(`mousemove`,r),document.body.style.userSelect=``,document.body.style.cursor=``;try{localStorage.setItem(Eu,String(u.value))}catch{}},{once:!0})}function h(e){u.value=Math.min(Ou,Math.max(Du,u.value+e));try{localStorage.setItem(Eu,String(u.value))}catch{}}function _(){try{let e=localStorage.getItem(wu),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function v(e){try{localStorage.setItem(wu,JSON.stringify(e))}catch{}}function b(e,t){let n=_();n[e||Tu]=t,v(n)}let S=F(!1);function C(){S.value=!1}async function E(e){await ge(),De.value=e.taskId,Ae(),q.value&&b(Q(P.value.path),e.taskId),S.value=!0}let{prompts:ne,tasks:A,jobs:se,currentProject:P,syncRunningCount:ce,connectSSE:le,disconnectSSE:ue,loadPrompts:R,loadCurrentProject:pe,loadJobs:me,clearJobsByTask:he,loadTasks:ge}=Kn();function ve(){let e=Q(P.value.path),t=A.value.filter(t=>!t.projectPath||Q(t.projectPath)===e),n=_(),r=e&&n[e]||!e&&n[Tu]||``,i=r?A.value.find(e=>e.id===r):null,a=t[0]||A.value[0]||null,o=i&&i.projectPath&&Q(i.projectPath)!==e?null:i?i.id:a?a.id:null;De.value=o,Ae()}async function U(){let e=De.value;if(await ge(),e&&A.value.some(t=>t.id===e)){Ae();return}ve()}async function be(){await ge(),ve()}let we=F(!1),De=F(null),q=a(()=>A.value.find(e=>e.id===De.value)||null),Oe=a(()=>{let e=q.value?.projectPath||``;return!e||Q(e)===Q(P.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),ke=F({title:``,desc:``,promptId:null,simpleOverride:``});function Ae(){q.value?ke.value={title:q.value.title,desc:q.value.desc,promptId:q.value.promptId,simpleOverride:q.value.simpleOverride||``}:ke.value={title:``,desc:``,promptId:null,simpleOverride:``}}let Y=F(`idle`),Ne=F(0),Pe=null,Z=a(()=>{if(!q.value)return!1;let e=q.value;return ke.value.title!==e.title||ke.value.desc!==e.desc||ke.value.promptId!==e.promptId||ke.value.simpleOverride!==(e.simpleOverride||``)});function Fe(){Pe!==null&&(clearTimeout(Pe),Pe=null)}function He(e){return!(!e||(e.title||``).trim()||(e.desc||``).trim()||e.promptId||(e.simpleOverride||``).trim()||Array.isArray(e.attachments)&&e.attachments.length>0)}async function Ge(e){try{await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`})}catch{}let t=A.value.findIndex(t=>t.id===e.id);t!==-1&&A.value.splice(t,1)}async function Ke(){let e=A.value.filter(e=>e.id!==De.value&&He(e));for(let t of e)await Ge(t)}async function qe(){if(!q.value)return!1;if(!Z.value)return!0;if(Y.value=`saving`,await Lt(!1))return Ne.value=Date.now(),Y.value=`saved`,setTimeout(()=>{Y.value===`saved`&&Date.now()-Ne.value>=4e3&&(Y.value=`idle`)},4e3),!0;Y.value=`error`;let e=Date.now();return setTimeout(()=>{Y.value===`error`&&Date.now()-e>=4e3&&(Y.value=`idle`)},4e3),!1}V(()=>q.value?{id:q.value.id,title:q.value.title,desc:q.value.desc,promptId:q.value.promptId,simpleOverride:q.value.simpleOverride||``}:null,(e,t)=>{e&&t&&e.id===t.id&&(Pe!==null&&clearTimeout(Pe),Pe=window.setTimeout(()=>{qe()},1500))},{deep:!0}),V(De,async(e,t)=>{Fe(),q.value&&Z.value&&await qe()}),V(P,async e=>{if(!e.path)return;let t=Q(e.path),n=q.value;n&&n.projectPath&&Q(n.projectPath)!==t&&await be()});function Je(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function Ye(){q.value&&Z.value&&!He(q.value)&&Je(q.value)}let $=Te({visible:!1,editing:null,name:``,content:``,aiLoading:!1,projectPath:``}),Xe=Te({visible:!1,text:``,loading:!1,saving:!1}),Ze=F(!0),Qe=a(()=>{let e=Q(P.value.path);return ne.value.filter(t=>!t.projectPath||Q(t.projectPath)===e)});async function $e(e){try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(e),!0}catch{}try{let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=document.execCommand(`copy`);return document.body.removeChild(t),n}catch{return!1}}let et=F(null),tt=F(null);async function nt(e){if(e){if(!await $e((e.title||``).trim()||X(`@WORKBENCH:未命名任务`))){N.error(X(`@WORKBENCH:复制失败`));return}et.value=e.id,N.success(X(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{et.value===e.id&&(et.value=null)},1500)}}async function rt(e){if(!e)return;let t=(e.desc||``).trim();if(!t){N.warning(X(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await $e(t)){N.error(X(`@WORKBENCH:复制失败`));return}tt.value=e.id,N.success(X(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{tt.value===e.id&&(tt.value=null)},1500)}let{simpleConversationMessages:it,simpleAllJobsFor:at,simpleJobFor:ot,simpleJobState:st}=Wn(se,q),ct=[`wheel`,`touchstart`,`pointerdown`,`keydown`],lt=F(null),ut=F(null),dt=null,ft=null,pt=null;function mt(){if(dt&&=(dt.disconnect(),null),ft!==null&&(clearTimeout(ft),ft=null),pt){for(let e of ct)pt.removeEventListener(e,mt);pt=null}}function ht(){mt();let e=lt.value;if(!e)return;e.scrollToBottom?.(!1);let t=ut.value?.querySelector(`.acu-message-list`);if(t&&typeof ResizeObserver<`u`){pt=t;for(let e of ct)t.addEventListener(e,mt,{passive:!0});dt=new ResizeObserver(()=>lt.value?.scrollToBottom?.(!1)),dt.observe(t),t.firstElementChild&&dt.observe(t.firstElementChild),ft=setTimeout(mt,Au)}}let gt=a(()=>S.value&&q.value&&at(q.value).length>0?q.value.id:``);V(gt,async e=>{mt(),e&&(await k(),ht())}),m(mt);function _t(e){if(!e)return!1;let t=ot(e);return!!t&&(t.status===`running`||t.status===`pending`)}function vt(){$.editing=null,$.name=``,$.content=``,$.aiLoading=!1,$.projectPath=(P.value.path||``).trim(),$.visible=!0}function yt(e){$.editing=e,$.name=e.name,$.content=e.content,$.aiLoading=!1,$.projectPath=(e.projectPath||``).trim(),$.visible=!0}async function bt(){if(!$.aiLoading){$.aiLoading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-generate`,{method:`POST`}).then(e=>e.json());e.success?($.name=e.name||$.name,$.content=e.result||``,N.success(X(`@WORKBENCH:已生成,可继续编辑`))):N.error(e.error||X(`@WORKBENCH:生成失败`))}catch(e){N.error(X(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{$.aiLoading=!1}}}async function xt(){Xe.visible=!0,Xe.loading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`).then(e=>e.json());e.success?Xe.text=e.instruction||``:N.error(e.error||X(`@WORKBENCH:读取指令失败`))}catch(e){N.error(X(`@WORKBENCH:读取指令失败`)+`: `+(e&&e.message||e))}finally{Xe.loading=!1}}async function Ct(){if(!Xe.text.trim()){N.warning(X(`@WORKBENCH:指令内容不能为空`));return}Xe.saving=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:Xe.text})}).then(e=>e.json());e.success?(N.success(X(`@WORKBENCH:已保存指令`)),Xe.visible=!1):N.error(e.error||X(`@WORKBENCH:保存失败`))}catch(e){N.error(X(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{Xe.saving=!1}}async function wt(){if(!$.name.trim()||!$.content.trim()){N.warning(X(`@WORKBENCH:名称和内容不能为空`));return}let e={id:$.editing?.id,name:$.name.trim(),content:$.content,projectPath:($.projectPath||``).trim()},t=await fetch(`/api/workbench/prompts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());t.success?(N.success(X(`@WORKBENCH:已保存`)),$.visible=!1,R()):N.error(t.error||X(`@WORKBENCH:保存失败`))}async function Tt(e){await fe.confirm(X(`@WORKBENCH:删除提示词「{name}」?`,{name:e.name}),X(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/prompts/${e.id}`,{method:`DELETE`}),R();for(let t of A.value)t.promptId===e.id&&(t.promptId=null,await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}));await U()}let Dt=F(!1),Ot=F(null),kt=F(null);function At(e){let t=e?.currentTarget||kt.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?Nu:Mu,r=Math.min(Math.max(t.scrollHeight,ju),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}V(Ze,async e=>{e&&(await k(),At())}),V(()=>q.value?.id,async()=>{Ze.value&&(await k(),At())});async function jt(){if(Dt.value)return;Dt.value=!0;let e={title:``,desc:``,promptId:null,simpleOverride:``};P.value.path&&(e.projectPath=P.value.path);try{let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(e=>e.json());if(!t.success){N.error(t.error||X(`@WORKBENCH:保存失败`));return}Fe(),q.value&&He(q.value)?await Ge(q.value):q.value&&Z.value&&await qe(),await be(),t.task?.id&&(De.value=t.task.id,Ae(),N.success(X(`@WORKBENCH:已新建任务`)),await k(),Ot.value?.focus())}finally{Dt.value=!1}}async function Mt(e){await fe.confirm(X(`@WORKBENCH:删除任务「{title}」?`,{title:e.title}),X(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),De.value===e.id&&(De.value=null),be()}async function Nt(e){let t=(e.title||X(`@WORKBENCH:未命名任务`)).trim(),n={title:X(`@WORKBENCH:{title} (副本)`,{title:t}),desc:e.desc||``,promptId:e.promptId||null,simpleOverride:e.simpleOverride||``};P.value.path&&(n.projectPath=P.value.path);try{let e=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n)}).then(e=>e.json());if(!e.success){N.error(e.error||X(`@WORKBENCH:复制失败`));return}await be(),e.task?.id&&(De.value=e.task.id,Ae()),N.success(X(`@WORKBENCH:已复制任务`))}catch(e){N.error(X(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function Pt(e){if(De.value===e.id)return;Fe();let t=q.value;t&&He(t)?await Ge(t):t&&Z.value&&await qe(),De.value=e.id,Ae(),b(Q(P.value.path),e.id)}async function Ft(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=A.value.slice(),i=It(A.value,t,n);if(i!==A.value){A.value=i;try{let e=await fetch(`/api/workbench/tasks/reorder`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({orderedIds:n,groupPath:t})}).then(e=>e.json()).catch(()=>({success:!1,error:X(`@WORKBENCH:排序保存失败`)}));e?.success||(A.value=r,N.error(e?.error||X(`@WORKBENCH:排序保存失败`)))}catch(e){A.value=r,N.error(X(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function It(e,t,n){let r=e=>Q(e)||Tu,i=e.filter(e=>r(e.projectPath)===t).map(e=>e.id),a=new Set(i);if(n.length!==a.size||n.some(e=>!a.has(e)))return e;let o=new Map(e.map(e=>[e.id,e])),s=n.map(e=>o.get(e)).filter(Boolean),c=[],l=0;for(let n of e)r(n.projectPath)===t?c.push(s[l++]):c.push(n);return c}async function Lt(e){if(!q.value)return!1;let t=await fetch(`/api/workbench/tasks`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(q.value)}).then(e=>e.json());return t.success?(e&&N.success(X(`@WORKBENCH:已保存`)),await U(),!0):(N.error(t.error||X(`@WORKBENCH:保存失败`)),!1)}p(async()=>{await Promise.all([R(),be(),pe(),me()]),await Ke(),le(),window.addEventListener(`beforeunload`,Ye),r.fetchExecutorModels()}),m(()=>{ue(),window.removeEventListener(`beforeunload`,Ye),q.value&&Z.value&&!He(q.value)&&Je(q.value)});let{pasteHoverId:Rt,isUploading:zt,isImageAttachment:Bt,humanSize:Vt,onAttachmentPaste:Ht,onAttachmentDrop:Ut,uploadAttachment:Wt,removeAttachment:Gt,pickAttachmentFile:Kt}=Vn(),{runTask:qt,onContinueSendFromChat:Jt,cancelJob:Yt,clearExecutionForSelectedTask:Xt}=Gn(se,A,q,{syncRunningCount:ce,clearJobsByTask:he,persistTask:Lt,uploadAttachment:Wt,getExecutor:()=>Zt.value}),Zt=F(Ie()),Qt=a(()=>({claude:r.claudeAvailable,opencode:r.opencodeAvailable,codex:r.codexAvailable})),$t=a(()=>Re.some(e=>Qt.value[e.id]));V(Qt,e=>{if(e[Zt.value])return;let t=Object.keys(e).find(t=>e[t]);t&&(Zt.value=t)},{immediate:!0});function en(e){Qt.value[e]&&(Zt.value=e,ze(e))}function tn(e){return Le(e)}function nn(e){return r.executorModelText(e)}function rn(e){return[nn(e),r.executorModelDetail(e)].filter(Boolean).join(` · `)}let an=a(()=>at(q.value).slice(-1)[0]),on=a(()=>Le(an.value?.agent)),sn=a(()=>Et(an.value?.agent));return(t,r)=>{let a=ee,p=i,m=Ee,_=D,v=re,b=ie,k=x,se=l,N=g,F=te;return j(),o(`div`,kl,[y(Ol,{onOpenTask:E}),y(Ue,{modelValue:S.value,"onUpdate:modelValue":r[23]||=e=>S.value=e,title:c(X)(`@WORKBENCH:任务执行`),type:`flex`,"height-mode":`fixed`,"height-offset":`88px`,top:`2vh`,width:`min(1520px, 96vw)`},{default:I(()=>[K(`div`,Al,[K(`div`,jl,[K(`button`,{type:`button`,class:`wb-back-btn`,title:c(X)(`@WORKBENCH:返回看板`),onClick:C},[y(a,{class:`wb-back-btn__icon`},{default:I(()=>[y(c(f))]),_:1}),K(`span`,null,T(c(X)(`@WORKBENCH:返回看板`)),1)],8,Ml),K(`span`,{class:`wb-editor-bar__project`,title:c(P).path},T(c(P).name),9,Nl),Oe.value?(j(),o(`span`,{key:0,class:`wb-editor-bar__repo`,title:Oe.value.path},T(c(X)(`@WORKBENCH:执行于 {name}`,{name:Oe.value.name})),9,Pl)):s(``,!0),K(`span`,Fl,T(c(X)(`@WORKBENCH:任务执行`)),1)]),K(`div`,Il,[y(jr,{style:oe({width:u.value+`px`}),tasks:c(A),prompts:c(ne),"selected-task-id":De.value,"current-project":c(P),"creating-task":Dt.value,"is-task-running":_t,onSelectTask:Pt,onDeleteTask:Mt,onCopyTask:Nt,onCreateTask:jt,onOpenCreatePrompt:vt,onOpenEditPrompt:yt,onDeletePrompt:Tt,onReorderTasks:Ft},null,8,[`style`,`tasks`,`prompts`,`selected-task-id`,`current-project`,`creating-task`]),K(`div`,{class:`wb-splitter`,role:`separator`,tabindex:`0`,"aria-orientation":`vertical`,"aria-label":c(X)(`@WORKBENCH:拖动调整侧边栏宽度`),"aria-valuenow":u.value,"aria-valuemin":Du,"aria-valuemax":Ou,title:c(X)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:d,onKeydown:[r[0]||=M(G(e=>h(-16),[`prevent`]),[`left`]),r[1]||=M(G(e=>h(16),[`prevent`]),[`right`])]},null,40,Ll),K(`section`,Rl,[q.value?(j(),o(J,{key:1},[K(`div`,Bl,[K(`div`,Vl,[B(K(`input`,{ref_key:`titleInputRef`,ref:Ot,class:`wb-input wb-input--title`,"onUpdate:modelValue":r[2]||=e=>q.value.title=e,placeholder:c(X)(`@WORKBENCH:任务标题`),"aria-label":c(X)(`@WORKBENCH:任务标题`)},null,8,Hl),[[de,q.value.title]]),K(`button`,{type:`button`,class:W([`wb-copy-btn`,{"is-flash":et.value===q.value.id}]),title:c(X)(`@WORKBENCH:复制任务标题`),"aria-label":c(X)(`@WORKBENCH:复制任务标题`),onClick:r[3]||=e=>nt(q.value)},[et.value===q.value.id?(j(),O(a,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:I(()=>[...r[33]||=[z(`✓`,-1)]]),_:1})):(j(),O(a,{key:0,class:`wb-copy-btn__icon`},{default:I(()=>[y(c(H))]),_:1}))],10,Ul)]),Y.value!==`idle`||Z.value?(j(),o(`span`,{key:0,class:W([`wb-meta-save`,{"is-saving":Y.value===`saving`,"is-saved":Y.value===`saved`,"is-error":Y.value===`error`,"is-dirty":Z.value&&Y.value===`idle`}]),title:Y.value===`saving`?c(X)(`@WORKBENCH:保存中…`):Y.value===`error`?c(X)(`@WORKBENCH:保存失败`):Y.value===`saved`?c(X)(`@WORKBENCH:已保存`):``},[Y.value===`saving`?(j(),o(`span`,Gl)):Y.value===`saved`?(j(),o(`span`,Kl,`✓`)):Y.value===`error`?(j(),o(`span`,ql,`!`)):(j(),o(`span`,Jl)),z(` `+T(Y.value===`saving`?c(X)(`@WORKBENCH:保存中…`):Y.value===`saved`?c(X)(`@WORKBENCH:已保存`):Y.value===`error`?c(X)(`@WORKBENCH:保存失败`):c(X)(`@WORKBENCH:有未保存的更改`)),1)],10,Wl)):s(``,!0),B(K(`select`,{class:`wb-select`,"onUpdate:modelValue":r[4]||=e=>q.value.promptId=e,"aria-label":c(X)(`@WORKBENCH:预置提示词`)},[K(`option`,Xl,T(c(X)(`@WORKBENCH:不绑定预置提示词`)),1),(j(!0),o(J,null,w(Qe.value,e=>(j(),o(`option`,{key:e.id,value:e.id},T(e.name),9,Zl))),128))],8,Yl),[[_e,q.value.promptId]]),$t.value?(j(),O(_,{key:1,"split-button":``,type:`primary`,class:`wb-executor-split`,trigger:`click`,onClick:r[5]||=e=>c(qt)(q.value),onCommand:en},{dropdown:I(()=>[y(m,null,{default:I(()=>[(j(!0),o(J,null,w(c(Re),t=>(j(),O(p,{key:t.id,command:t.id,disabled:!Qt.value[t.id]},{default:I(()=>[K(`span`,$l,[y(We,{executor:t.id,class:`wb-executor-item__icon`},null,8,[`executor`]),K(`span`,eu,T(t.name),1),nn(t.id)?(j(),o(`span`,{key:0,class:`wb-executor-item__model`,title:rn(t.id)},T(nn(t.id)),9,tu)):s(``,!0),Zt.value===t.id?(j(),O(a,{key:1,class:`wb-executor-item__check`},{default:I(()=>[y(c(e))]),_:1})):Qt.value[t.id]?s(``,!0):(j(),o(`span`,nu,T(c(X)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:I(()=>[z(T(c(X)(`@WORKBENCH:执行任务`))+` `,1),K(`span`,{class:`wb-executor-split__hint`,title:rn(Zt.value)},[y(We,{executor:Zt.value,class:`wb-executor-split__hint-icon`},null,8,[`executor`]),z(` `+T(tn(Zt.value)),1)],8,Ql)]),_:1})):(j(),o(`div`,ru,[y(a,{class:`wb-no-claude-hint__icon`},{default:I(()=>[y(c(xe))]),_:1}),K(`span`,iu,T(c(X)(`@WORKBENCH:未检测到本地 claude / opencode,无法执行任务`)),1),K(`a`,au,T(c(X)(`@WORKBENCH:查看安装指引`)),1)])),K(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:c(X)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":c(X)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:r[6]||=(...e)=>c(Xt)&&c(Xt)(...e)},[y(a,{class:`wb-logs-inline-btn__icon`},{default:I(()=>[y(c(Se))]),_:1}),K(`span`,null,T(c(X)(`@WORKBENCH:清空执行`)),1)],8,ou),K(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:c(X)(`@WORKBENCH:执行日志`),"aria-label":c(X)(`@WORKBENCH:执行日志`),onClick:r[7]||=e=>we.value=!0},[y(a,{class:`wb-logs-inline-btn__icon`},{default:I(()=>[y(c(L))]),_:1}),K(`span`,null,T(c(X)(`@WORKBENCH:执行日志`)),1)],8,su)]),K(`details`,{class:`wb-task-desc`,open:Ze.value,onToggle:r[19]||=e=>Ze.value=e.target.open},[K(`summary`,lu,[y(a,{class:`wb-task-desc__caret`},{default:I(()=>[(j(),O(Ce(Ze.value?c(ye):c(ae))))]),_:1}),K(`span`,uu,T(c(X)(`@WORKBENCH:任务描述(可选)`)),1),K(`button`,{type:`button`,class:W([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":tt.value===q.value.id}]),title:q.value.desc&&q.value.desc.trim()?c(X)(`@WORKBENCH:复制任务描述`):c(X)(`@WORKBENCH:任务描述为空,无需复制`),"aria-label":c(X)(`@WORKBENCH:复制任务描述`),onClick:r[8]||=G(e=>rt(q.value),[`stop`,`prevent`])},[tt.value===q.value.id?(j(),O(a,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:I(()=>[...r[34]||=[z(`✓`,-1)]]),_:1})):(j(),O(a,{key:0,class:`wb-copy-btn__icon`},{default:I(()=>[y(c(H))]),_:1}))],10,du),q.value.desc&&q.value.desc.length>0||q.value.attachments&&q.value.attachments.length>0?(j(),o(`span`,fu,[q.value.desc&&q.value.desc.length>0?(j(),o(`span`,pu,T(c(X)(`@WORKBENCH:已填写`)),1)):s(``,!0),q.value.attachments&&q.value.attachments.length>0?(j(),o(`span`,mu,T(q.value.attachments.length),1)):s(``,!0)])):s(``,!0)]),B(K(`textarea`,{ref_key:`taskDescTextareaRef`,ref:kt,class:`wb-textarea wb-textarea--autogrow`,"onUpdate:modelValue":r[9]||=e=>q.value.desc=e,placeholder:c(X)(`@WORKBENCH:任务描述(可选)`),"aria-label":c(X)(`@WORKBENCH:任务描述(可选)`),onInput:r[10]||=e=>At(e),onFocus:r[11]||=e=>At(e),onBlur:r[12]||=e=>At(e),onPaste:r[13]||=e=>c(Ht)(e,{kind:`task`,task:q.value})},null,40,hu),[[de,q.value.desc]]),y(St,{attachments:q.value.attachments||[],"is-image":c(Bt),"human-size":c(Vt),"is-uploading":c(zt)(`task-`+q.value.id),"is-paste-hover":c(Rt)===`task-`+q.value.id,"on-pick":()=>c(Kt)({kind:`task`,task:q.value}),"on-remove":e=>c(Gt)({kind:`task`,task:q.value},e),onPaste:r[14]||=e=>c(Ht)(e,{kind:`task`,task:q.value}),onDrop:r[15]||=G(e=>c(Ut)(e,{kind:`task`,task:q.value}),[`prevent`]),onDragover:r[16]||=G(e=>Rt.value=`task-`+q.value.id,[`prevent`]),onDragenter:r[17]||=G(e=>Rt.value=`task-`+q.value.id,[`prevent`]),onDragleave:r[18]||=e=>Rt.value=c(Rt)===`task-`+q.value.id?null:c(Rt)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,cu),K(`div`,gu,[K(`div`,_u,[K(`details`,{class:W([`wb-simple__override`,{"has-content":!!(q.value.simpleOverride&&q.value.simpleOverride.trim())}])},[K(`summary`,vu,[y(a,{class:`wb-simple__override-caret`},{default:I(()=>[y(c(ae))]),_:1}),K(`span`,null,T(c(X)(`@WORKBENCH:覆盖预置提示词(可选)`)),1),q.value.simpleOverride&&q.value.simpleOverride.trim()?(j(),o(`span`,{key:0,class:`wb-simple__override-tag`,title:c(X)(`@WORKBENCH:已填写覆盖内容`)},T(c(X)(`@WORKBENCH:已填写`)),9,yu)):s(``,!0),c(st)(c(ot)(q.value))===`running`&&c(ot)(q.value)?(j(),o(`button`,{key:1,class:`wb-simple__stop`,onClick:r[20]||=G(e=>c(Yt)(c(ot)(q.value)),[`stop`])},T(c(X)(`@WORKBENCH:停止`)),1)):s(``,!0)]),B(K(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":r[21]||=e=>q.value.simpleOverride=e,placeholder:c(X)(`@WORKBENCH:留空则使用上方选定的「预置提示词」模板;可用变量:{{task.title}} {{task.desc}} {{repo.path}} {{branch}}`),"aria-label":c(X)(`@WORKBENCH:覆盖预置提示词(可选)`),rows:`6`},null,8,bu),[[de,q.value.simpleOverride]])],2),c(at)(q.value).length>0?(j(),o(`div`,{key:0,class:`wb-simple-chat-wrap`,ref_key:`chatWrapRef`,ref:ut},[K(`div`,xu,[(j(),O(c(Me),{ref_key:`chatRef`,ref:lt,key:q.value.id,messages:c(it),"assistant-name":on.value,"assistant-avatar":sn.value,"show-avatar":!0,theme:c(n).theme,"tool-calls-config":{group:!0,collapseThreshold:2},"plan-config":{labels:{title:c(X)(`@AGENT:计划`),raw:c(X)(`@AGENT:原始参数`)}},"show-input":!1},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`,`plan-config`]))]),c(ot)(q.value)&&[`done`,`error`,`cancelled`].includes(c(st)(c(ot)(q.value)))?(j(),o(`div`,Su,[(j(),O(c(je),{key:`input-`+q.value.id,placeholder:c(X)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:c(Mn),multiple:!0,maxCount:0,maxSize:c(Nn)},class:`wb-simple-chat__input`,onSend:r[22]||=e=>c(Jt)(q.value,e)},null,8,[`placeholder`,`upload-config`]))])):s(``,!0)],512)):s(``,!0)])])],64)):(j(),o(`div`,zl,[K(`p`,null,T(c(X)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])])]),_:1},8,[`modelValue`,`title`]),y(Ue,{modelValue:we.value,"onUpdate:modelValue":r[24]||=e=>we.value=e,title:c(X)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,type:`flex`,"custom-class":`wb-logs-dialog`,"append-to-body":``},{default:I(()=>[y(An)]),_:1},8,[`modelValue`,`title`]),y(Ue,{modelValue:$.visible,"onUpdate:modelValue":r[29]||=e=>$.visible=e,title:$.editing?c(X)(`@WORKBENCH:编辑提示词`):c(X)(`@WORKBENCH:新建提示词`),width:`640px`,type:`flex`,"append-to-body":``},{footer:I(()=>[y(N,{onClick:r[28]||=e=>$.visible=!1},{default:I(()=>[z(T(c(X)(`@WORKBENCH:取消`)),1)]),_:1}),y(N,{type:`primary`,onClick:wt},{default:I(()=>[z(T(c(X)(`@WORKBENCH:保存`)),1)]),_:1})]),default:I(()=>[y(F,{"label-position":`top`},{default:I(()=>[y(b,{label:c(X)(`@WORKBENCH:名称`)},{default:I(()=>[y(v,{modelValue:$.name,"onUpdate:modelValue":r[25]||=e=>$.name=e,placeholder:c(X)(`@WORKBENCH:如:代码审查 / 写测试`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),y(b,{label:c(X)(`@WORKBENCH:所属项目`)},{default:I(()=>[y(se,{modelValue:$.projectPath,"onUpdate:modelValue":r[26]||=e=>$.projectPath=e,placeholder:c(X)(`@WORKBENCH:所属项目`),style:{width:`100%`},disabled:!c(P).path},{default:I(()=>[y(k,{label:c(X)(`@WORKBENCH:全局(所有项目可用)`),value:``},null,8,[`label`]),c(P).path?(j(),O(k,{key:c(P).path,label:c(P).name||c(P).path,value:c(P).path},null,8,[`label`,`value`])):s(``,!0)]),_:1},8,[`modelValue`,`placeholder`,`disabled`])]),_:1},8,[`label`]),y(b,null,{default:I(()=>[K(`div`,Cu,[y(N,{type:`primary`,plain:``,loading:$.aiLoading,onClick:bt},{default:I(()=>[z(T(c(X)(`@WORKBENCH:AI 生成项目架构说明`)),1)]),_:1},8,[`loading`]),y(N,{onClick:xt},{default:I(()=>[z(T(c(X)(`@WORKBENCH:编辑指令`)),1)]),_:1})])]),_:1}),y(b,{label:c(X)(`@WORKBENCH:内容`)},{default:I(()=>[y(v,{modelValue:$.content,"onUpdate:modelValue":r[27]||=e=>$.content=e,type:`textarea`,rows:10,placeholder:c(X)(`@WORKBENCH:可用变量:`)+`{{task.title}} {{task.desc}} {{sub.title}} {{sub.desc}} {{repo.path}} {{branch}}`},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`]),y(Ue,{modelValue:Xe.visible,"onUpdate:modelValue":r[32]||=e=>Xe.visible=e,title:c(X)(`@WORKBENCH:编辑生成指令`),width:`720px`,type:`flex`,"append-to-body":``},{footer:I(()=>[y(N,{onClick:r[31]||=e=>Xe.visible=!1},{default:I(()=>[z(T(c(X)(`@WORKBENCH:取消`)),1)]),_:1}),y(N,{type:`primary`,loading:Xe.saving,onClick:Ct},{default:I(()=>[z(T(c(X)(`@WORKBENCH:保存`)),1)]),_:1},8,[`loading`])]),default:I(()=>[y(F,{"label-position":`top`},{default:I(()=>[y(b,{label:c(X)(`@WORKBENCH:指令内容`)},{default:I(()=>[y(v,{modelValue:Xe.text,"onUpdate:modelValue":r[30]||=e=>Xe.text=e,type:`textarea`,rows:18,placeholder:c(X)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-9a12642c`]]);export{Pu as default};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{Cn as e,Rn as t,a as n,br as r,i,pr as a,vr as o}from"./element-plus-Bx3j6vzG.js";import{i as s,l as c,o as l,s as u}from"./vendor-BjomZKSS.js";import{n as d}from"./_plugin-vue_export-helper-CGArUtKL.js";import{i as f,o as p,t as m}from"./configStore-Vh8LZWlL.js";var h=`g ai`,g=`g-ai`,_=[{id:`gai`,name:h},...f.map(e=>({id:e.id,name:e.name}))],v=`zen-gitsync-agent-engine`;function y(e){return e===`gai`||p(e)}function b(e){return _.find(t=>t.id===e)?.name||`g ai`}function x(e){return p(e)}function S(){try{let e=localStorage.getItem(v);if(y(e))return e}catch{}return`gai`}function C(e){try{localStorage.setItem(v,e)}catch{}}t(),a();var w=[`image/*`,`.pdf`,`.txt`,`.md`,`.json`,`.csv`,`.log`,`.yml`,`.yaml`,`.xml`,`.toml`,`.ini`,`.html`,`.css`,`.js`,`.ts`,`.tsx`,`.vue`,`.py`,`.java`,`.go`,`.rs`,`.sql`,`.sh`].join(`,`),T=65536,E=`local-`;function D(e){if(!e||!Array.isArray(e.messages))return[];let t=[],n=e.messages.length;for(let r=0;r<n;r++){let i=e.messages[r];if(i.role!==`system`){if(i.role===`user`){let e=``,n;if(typeof i.content==`string`)e=i.content;else if(Array.isArray(i.content)){e=i.content.filter(e=>e?.type===`text`).map(e=>e.text||``).join(` `);let t=i.content.filter(e=>e?.type===`image_url`&&typeof e.image_url?.url==`string`).map((e,t)=>({id:`att-${r}-${t}`,name:`image`,size:0,type:A(e.image_url?.url||``)||`image/*`,preview:e.image_url?.url}));t.length>0&&(n=t)}(e||n)&&t.push({id:`msg-${r}`,role:`user`,content:e,attachments:n,status:`done`,createdAt:Date.now()})}else if(i.role===`assistant`){let i=`msg-${r}`,a=``,o=[],s=r;for(;s<n;){let t=e.messages[s];if(t.role!==`assistant`&&t.role!==`tool`)break;if(t.role===`assistant`){if(typeof t.content==`string`&&(a+=t.content),t.tool_calls&&t.tool_calls.length>0)for(let e of t.tool_calls)o.push({id:e.id||e.function?.name||l(),name:e.function?.name||``,arguments:e.function?.arguments||``,argsPreview:O(e.function?.name||``,e.function?.arguments||``),status:`done`,result:``})}else{let e=t.tool_call_id||t.name||``,n=o.find(t=>t.id===e);if(n){let e=t.content;typeof e!=`string`&&(e=`(non-text result)`),e.length>T&&(e=`…(前文已截断)\n${e.slice(-65536)}`),n.result=e}}s++}r=s-1,a.length>T&&(a=`…(前文已截断)\n${a.slice(-65536)}`);let c=!!a,u=o.length>0;(c||u)&&t.push({id:i,role:`assistant`,content:a,toolCalls:u?o:void 0,status:`done`,createdAt:Date.now()})}}}return t}function O(e,t){try{let n=JSON.parse(t);switch(e){case`run_command`:return String(n.command||``).slice(0,200);case`read_file`:case`write_file`:case`edit_file`:return String(n.path||``);case`list_files`:return String(n.path||`.`);case`search_text`:return String(n.pattern||``);case`update_plan`:{let e=c(t,`update_plan`);if(!e)return``;let{total:r,done:i}=s(e),a=String(n.explanation||``).replace(/\s+/g,` `).trim();return[`${i}/${r}`,a].filter(Boolean).join(` — `).slice(0,200)}default:return JSON.stringify(n).slice(0,200)}}catch{return t.slice(0,200)}}function k(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result||``)),r.onerror=()=>n(r.error||Error(`FileReader failed`)),r.readAsDataURL(e)})}function A(e){let t=/^data:([^;,]+)/.exec(e);return t?t[1]:``}function j(){let t=m(),a=r([]),s=r(!1),c=r(S());function f(e){y(e)&&(c.value=e,C(e))}let p=o(new Map),h=r(null),g=r(!1),_=0,v=0,b=new Set;function x(e){return{key:e,sessionId:e.startsWith(E)?null:e,title:``,messages:[],isStreaming:!1,abortController:null,nonce:0,pendingQuestion:null,answeringQuestion:!1}}function w(e){let t=p.get(e);return t||=(p.set(e,x(e)),p.get(e)),t}let O=e(()=>h.value?p.get(h.value)??null:null),A=e(()=>O.value?.messages??[]),j=e(()=>O.value?.isStreaming??!1),M=e(()=>{let e=a.value.find(e=>e.sessionId===h.value);return y(e?.engine)?e.engine:c.value}),N=e(()=>a.value.some(e=>e.sessionId===h.value)),P=e(()=>O.value?.pendingQuestion??null),F=e(()=>O.value?.answeringQuestion??!1);function I(e){return!!p.get(e)?.isStreaming}function L(e){let n=[...e];for(let e of p.values()){if(!e.sessionId)continue;let r=n.findIndex(t=>t.sessionId===e.sessionId);if(r!==-1){b.delete(e.sessionId),e.isStreaming&&(n[r]={...n[r],isGenerating:!0});continue}if(!e.isStreaming&&!b.has(e.sessionId))continue;let i=new Date().toISOString();n.unshift({sessionId:e.sessionId,title:e.title||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:c.value,createdAt:i,updatedAt:i,messageCount:e.messages.filter(e=>e.role===`user`).length||1,size:0,isGenerating:e.isStreaming})}return n}async function R(){let e=++_,r=t.currentDirectory||``;if(!r){a.value=[],s.value=!1;return}s.value=!0;try{let t=`/api/agent/sessions?cwd=${encodeURIComponent(r)}`,i=await fetch(t).then(e=>e.json());if(e!==_)return;if(!i.success){n.error(i.error||d(`@AGENT:加载会话列表失败`));return}let o=Array.isArray(i.sessions)?i.sessions:[];a.value=L(o)}catch(t){if(e!==_)return;n.error(d(`@AGENT:加载会话列表失败`)+`: `+(t?.message||t))}finally{e===_&&(s.value=!1)}}function z(e,n){let r=new Date().toISOString(),i=a.value.find(t=>t.sessionId===e);if(i){i.isGenerating=!0,i.updatedAt=r;return}a.value=[{sessionId:e,title:n||d(`@AGENT:无标题`),source:`web`,cwd:t.currentDirectory||``,model:``,engine:c.value,createdAt:r,updatedAt:r,messageCount:1,size:0,isGenerating:!0},...a.value]}function B(e){let t=a.value.find(t=>t.sessionId===e);t&&(t.isGenerating=!1)}async function V(e){if(p.get(e)?.isStreaming){h.value=e;return}g.value=!0,h.value=e;try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`).then(e=>e.json());if(!t.success){n.error(t.error||d(`@AGENT:加载会话失败`));return}let r=w(e);r.sessionId=e,r.messages=D(t.session),t.session?.title&&(r.title=t.session.title)}catch(e){n.error(d(`@AGENT:加载会话失败`)+`: `+(e?.message||e))}finally{g.value=!1}}async function H(e){try{await i.confirm(d(`@AGENT:确认删除该会话`),d(`@AGENT:删除后无法恢复`),{type:`warning`})}catch{return}let t=p.get(e);if(t?.abortController)try{t.abortController.abort()}catch{}p.delete(e);try{let t=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`DELETE`}).then(e=>e.json());if(!t.success){n.error(t.error||d(`@AGENT:删除失败`));return}a.value=a.value.filter(t=>t.sessionId!==e),h.value===e&&(h.value=null),n.success(d(`@AGENT:已删除`))}catch(e){n.error(d(`@AGENT:删除失败`)+`: `+(e?.message||e))}}async function U(e,t){try{let r=await fetch(`/api/agent/sessions/${encodeURIComponent(e)}`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:t})}).then(e=>e.json());if(!r.success){n.error(r.error||d(`@AGENT:重命名失败`));return}let i=a.value.find(t=>t.sessionId===e);i&&(i.title=t);let o=p.get(e);o&&(o.title=t),n.success(d(`@AGENT:已重命名`))}catch(e){n.error(d(`@AGENT:重命名失败`)+`: `+(e?.message||e))}}function W(){h.value=null}async function G(e,r=[],i={}){let a=r.filter(e=>e?.file?.type?.startsWith(`image/`)),s=r.filter(e=>!e?.file?.type?.startsWith(`image/`)),c=[],f=0;for(let e of s){let t=e.file.size||0;if(!(t>10485760)){if(c.length>=10||f+t>20971520)break;f+=t,c.push(e)}}let m=s.filter(e=>!c.includes(e));m.length>0&&n.warning(`${d(`@AGENT:以下附件超过大小或数量上限,已忽略:`)}${m.map(e=>e.file.name).join(`、`)}`);let g=w(h.value||`${E}${Date.now()}-${++v}`);if(!e.trim()&&a.length===0&&c.length===0||g.isStreaming)return;let _=(await Promise.allSettled(a.map(e=>k(e.file)))).map(e=>e.status===`fulfilled`?e.value:``).filter(e=>e.startsWith(`data:image/`)),y=(await Promise.allSettled(c.map(async e=>({name:e.file.name||`file`,dataUrl:await k(e.file)})))).map(e=>e.status===`fulfilled`?e.value:null).filter(e=>!!e&&typeof e.dataUrl==`string`&&e.dataUrl.startsWith(`data:`));h.value=g.key,g.nonce+=1;let x=g.nonce;g.abortController=new AbortController;let S=g.abortController;g.pendingQuestion=null,g.answeringQuestion=!1;let C={id:l(),role:`user`,content:e,status:`done`,createdAt:Date.now()},D=[...a,...c];D.length>0&&(C.attachments=D.map(e=>({id:e.id,name:e.file.name||`image`,size:e.file.size||0,type:e.file.type||``,preview:e.preview}))),g.messages.push(C);let O=o({id:l(),role:`assistant`,content:``,status:`pending`,createdAt:Date.now()});g.messages.push(O),g.isStreaming=!0;let A=[],j=g.sessionId,N=!1;try{let n=await fetch(`/api/agent/chat`,{method:`POST`,headers:{"Content-Type":`application/json`,Accept:`text/event-stream`},body:JSON.stringify({sessionId:g.sessionId||``,userMessage:e,cwd:t.currentDirectory||``,engine:i.engine??M.value,..._.length>0?{images:_}:{},...y.length>0?{attachments:y}:{},...i.openFilePath?{openFilePath:i.openFilePath}:{},...i.dirStatus?.length?{dirStatus:i.dirStatus}:{},...i.dirSummary?{dirSummary:i.dirSummary}:{},...i.allowDispatch?{allowDispatch:!0,dispatchExecutor:i.dispatchExecutor||``,dispatchUseDefaultPrompt:i.dispatchUseDefaultPrompt!==!1}:{}}),signal:S.signal});if(x!==g.nonce)return;if(!n.ok||!n.body){let e=await n.text().catch(()=>``);throw Error(e||`HTTP ${n.status}`)}let r=n.body.getReader(),a=new TextDecoder(`utf-8`),s=``;for(;;){let{value:t,done:n}=await r.read();if(x!==g.nonce)return;if(n)break;s+=a.decode(t,{stream:!0});let i=s.split(`
|
|
2
|
-
`);s=i.pop()??``;for(let t of i){let n=t.trim();if(!n.startsWith(`data:`))continue;let r=n.slice(5).trim();if(!r)continue;let i;try{i=JSON.parse(r)}catch{continue}switch(i.type){case`meta`:if(i.sessionId){let t=String(i.sessionId);if(j=t,g.sessionId!==t){let e=g.key;g.sessionId=t,g.key=t,e!==t&&(p.delete(e),p.set(t,g),h.value===e&&(h.value=t))}let n=String(i.title||``).trim()||e.trim().split(`
|
|
3
|
-
`)[0].trim().slice(0,40)||d(`@AGENT:无标题`);g.title||=n,z(t,n)}break;case`thinking`:O.reasoning||(O.reasoning=``,O.reasoningStatus=`streaming`),O.reasoning+=String(i.delta||``),O.status=`streaming`;break;case`content`:O.status===`pending`&&(O.status=`streaming`);{let e=String(i.delta||``);O.content+=e;let t=u(O.content);t.reasoning&&(O.reasoning||(O.reasoning=``,O.reasoningStatus=`streaming`),O.reasoning=t.reasoning,O.content=t.content)}break;case`tool_call_start`:{let e=o({id:i.toolCallId||l(),name:i.name||``,argsPreview:i.argsPreview||``,arguments:i.arguments||i.argsPreview||``,status:`running`,result:``});A.push(e),O.toolCalls||=[],O.toolCalls.push(e),O.status===`pending`&&(O.status=`streaming`);break}case`tool_output`:{let e=A.find(e=>e.id===i.toolCallId);if(e){let t=`${e.result||``}${String(i.chunk||``)}`;e.result=t.length>T?`…(前文已截断)\n${t.slice(-65536)}`:t}break}case`tool_result`:{let e=A.find(e=>e.id===i.toolCallId);e&&(e.result=String(i.result||``),e.status=`done`,e.name===`ask_user`&&(g.pendingQuestion=null));break}case`ask_user`:g.pendingQuestion={interactionId:String(i.interactionId||``),question:String(i.question||``),options:Array.isArray(i.options)?i.options.map(e=>String(e)):[],allowFreeText:i.allowFreeText!==!1,multiple:i.multiple===!0};break;case`done`:{let e=i.content||O.content,t=u(e);t.reasoning&&!O.reasoning&&(O.reasoning=t.reasoning),O.content=t.content,O.status=`done`,O.reasoningStatus===`streaming`&&(O.reasoningStatus=`done`);break}case`error`:O.status=`error`,O.error=String(i.error||d(`@AGENT:未知错误`)),O.reasoningStatus===`streaming`&&(O.reasoningStatus=`done`)}}}if(x!==g.nonce)return;O.status===`pending`&&(O.status=`done`)}catch(e){if(x!==g.nonce)return;e?.name===`AbortError`||S.signal.aborted?(N=!0,O.content=(O.content||``)+`
|
|
4
|
-
|
|
5
|
-
[`+d(`@AGENT:已停止`)+`]`,O.status=`done`,O.reasoningStatus===`streaming`&&(O.reasoningStatus=`done`)):(O.status=`error`,O.error=e?.message||String(e),n.error(O.error||d(`@AGENT:对话失败`)))}finally{x===g.nonce&&(g.isStreaming=!1,g.pendingQuestion=null,g.answeringQuestion=!1,g.abortController=null),j&&(N&&b.add(j),B(j)),R().catch(()=>{})}}async function K(e){let t=O.value,r=t?.pendingQuestion,i=t?.sessionId,a=(Array.isArray(e)?e:[e]).map(e=>String(e??``).trim()).filter(Boolean);if(!t||!r||!i||!a.length||t.answeringQuestion)return!1;t.answeringQuestion=!0;try{let e=await fetch(`/api/agent/respond`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sessionId:i,interactionId:r.interactionId,answer:r.multiple?a:a[0]})}).then(e=>e.json());if(!e.success)throw Error(e.error||d(`@AGENT:回答提交失败`));return t.pendingQuestion=null,!0}catch(e){return n.error(e?.message||d(`@AGENT:回答提交失败`)),!1}finally{t.answeringQuestion=!1}}function q(){let e=O.value;e?.abortController&&(e.abortController.abort(),e.abortController=null)}return{sessions:a,sessionsLoading:s,currentSessionId:h,messages:A,isStreaming:j,sessionLoading:g,pendingQuestion:P,answeringQuestion:F,isSessionGenerating:I,currentEngine:M,pendingEngine:c,isEngineLocked:N,pickEngine:f,loadSessions:R,loadSession:V,deleteSession:H,renameSession:U,newSession:W,sendMessage:G,answerQuestion:K,stop:q}}var M=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2032%2032'%20fill='none'%3e%3crect%20x='2'%20y='6'%20width='27'%20height='23'%20rx='6'%20fill='%235364E8'/%3e%3cpath%20d='M9.419%2012.581a1.3%201.3%200%200%200-1.838%201.838L11.162%2018l-3.581%203.581a1.3%201.3%200%200%200%201.838%201.838l4.5-4.5a1.3%201.3%200%200%200%200-1.838Z'%20fill='%23FFFFFF'/%3e%3crect%20x='15.7'%20y='21.2'%20width='7.6'%20height='2.6'%20rx='1.3'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%20.4%2027.115%204.885%2031.6%207l-4.485%202.115L25%2013.6l-2.115-4.485L18.4%207l4.485-2.115Z'%20fill='%23FFFFFF'/%3e%3cpath%20d='M25%202.5%2026.22%205.78%2029.5%207l-3.28%201.22L25%2011.5l-1.22-3.28L20.5%207l3.28-1.22Z'%20fill='%2339D7B5'/%3e%3c/svg%3e`;function N(e){if(!e)return``;try{let t=new Date(e);if(Number.isNaN(t.getTime()))return e;let n=new Date,r=n.getTime()-t.getTime(),i=e=>String(e).padStart(2,`0`);if(t.toDateString()===n.toDateString())return`${i(t.getHours())}:${i(t.getMinutes())}`;if(r<6048e5){let e=Math.floor(r/864e5);return e===0?d(`@AGENT:今天`):`${e}${d(`@AGENT:天前`)}`}return`${t.getFullYear()}-${i(t.getMonth()+1)}-${i(t.getDate())}`}catch{return e}}function P(e,t){return e.map(e=>({id:e.sessionId,title:e.title||d(`@AGENT:无标题`),meta:`${N(e.updatedAt)} · ${e.messageCount??0} ${d(`@AGENT:条`)}`,generatingText:e.isGenerating||t(e.sessionId)?d(`@AGENT:正在生成中...`):``,badge:e.source===`cli`?`CLI`:``,searchText:e.model}))}function F(){return{newConversation:d(`@AGENT:新建会话`),searchPlaceholder:d(`@AGENT:搜索会话...`),empty:d(`@AGENT:暂无会话`),emptyHint:d(`@AGENT:点击上方按钮开始对话`),noResult:d(`@AGENT:未找到匹配的会话`),loading:d(`@AGENT:加载会话中...`),rename:d(`@AGENT:重命名`),delete:d(`@AGENT:删除`),untitled:d(`@AGENT:无标题`)}}var I=`g ai`,L=M;function R(){return{title:d(`@AGENT:等待你的回答`),placeholder:d(`@AGENT:输入回答`),submit:d(`@AGENT:提交回答`)}}export{P as a,_ as c,x as d,R as i,g as l,I as n,w as o,F as r,j as s,L as t,b as u};
|