zen-gitsync 2.17.12 → 2.17.14
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 +6 -2
- package/package.json +1 -1
- package/scripts/release.js +201 -9
- package/src/cli/ai/agent.js +16 -0
- package/src/ui/public/assets/AgentView-DLHlVWRg.js +5 -0
- package/src/ui/public/assets/AgentView-vvVhbIQ5.css +1 -0
- package/src/ui/public/assets/{AppVersionBadge-D5tJzJfa.css → AppVersionBadge-CJrDr7GV.css} +1 -1
- package/src/ui/public/assets/AppVersionBadge-JxpMuGwP.js +2 -0
- package/src/ui/public/assets/BranchSelector-B0eLkAdv.css +1 -0
- package/src/ui/public/assets/BranchSelector-XIN87Mkw.js +1 -0
- package/src/ui/public/assets/CommitForm-CQ0K8Yy2.css +1 -0
- package/src/ui/public/assets/CommitForm-CW53Er5m.js +6 -0
- package/src/ui/public/assets/CommonDialog-BiNTGpA-.js +1 -0
- package/src/ui/public/assets/CommonDialog-jP0E9mco.css +1 -0
- package/src/ui/public/assets/EditorView-D0JoJhgt.js +1 -0
- package/src/ui/public/assets/EditorView-DZMLvQds.css +1 -0
- package/src/ui/public/assets/FileDiffViewer-B9EkuKdF.css +1 -0
- package/src/ui/public/assets/FileDiffViewer-Yas2nO2U.js +15 -0
- package/src/ui/public/assets/FlowExecutionViewer-D9Vzgh91.js +1 -0
- package/src/ui/public/assets/FlowExecutionViewer-jNHI5zdm.css +1 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CYGp-PqS.css +1 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-DQ3fg5b9.js +21 -0
- package/src/ui/public/assets/IconButton-DysyaC1j.js +1 -0
- package/src/ui/public/assets/IconButton-tjkOjzkC.css +1 -0
- package/src/ui/public/assets/LogList-BlJplIi1.css +1 -0
- package/src/ui/public/assets/LogList-QDgok-UJ.js +7 -0
- package/src/ui/public/assets/MindmapView-BQTqx842.css +1 -0
- package/src/ui/public/assets/MindmapView-CeZsQNBK.js +2 -0
- package/src/ui/public/assets/MonitorView-D1tgmjjS.js +1 -0
- package/src/ui/public/assets/MonitorView-DetlFFXq.css +1 -0
- package/src/ui/public/assets/ProjectStartupButton-COntA4q1.js +1 -0
- package/src/ui/public/assets/ProjectStartupButton-QLPltCK5.css +1 -0
- package/src/ui/public/assets/RemoteManagerDialog-3dihAOab.js +4 -0
- package/src/ui/public/assets/RemoteManagerDialog-BauAeH2w.css +1 -0
- package/src/ui/public/assets/RemoteRepoCard-Bn9cKt1D.js +7 -0
- package/src/ui/public/assets/RemoteRepoCard-CG-jARTe.css +1 -0
- package/src/ui/public/assets/SourceMapView-C8UdzQXF.js +3 -0
- package/src/ui/public/assets/SourceMapView-CN4Hkyp4.css +1 -0
- package/src/ui/public/assets/{SvgIcon-BQ6bR7l0.css → SvgIcon-CDNsk4-Q.css} +1 -1
- package/src/ui/public/assets/SvgIcon-CvtoU5yo.js +1 -0
- package/src/ui/public/assets/TemplateManager-DMuG4i3G.css +1 -0
- package/src/ui/public/assets/TemplateManager-saqC9kdQ.js +1 -0
- package/src/ui/public/assets/UserInputNode-BVgQkB2l.css +1 -0
- package/src/ui/public/assets/UserInputNode-CvEfvX3i.js +1 -0
- package/src/ui/public/assets/WorkbenchView-B1BJhWHi.css +1 -0
- package/src/ui/public/assets/WorkbenchView-B7WAu1Ay.js +56 -0
- package/src/ui/public/assets/_plugin-vue_export-helper-BdTxl34g.js +19 -0
- package/src/ui/public/assets/configStore-AQMSazCM.js +1 -0
- package/src/ui/public/assets/element-plus-CMSkP_w2.js +48 -0
- package/src/ui/public/assets/element-plus-Dc1iTOWq.css +1 -0
- package/src/ui/public/assets/{flow-mindmap-C_w8GJXm.js → flow-mindmap-CHxAWdLw.js} +16 -16
- package/src/ui/public/assets/gitStore-BgC8OY0k.js +6 -0
- package/src/ui/public/assets/index-Dpx9Bcqn.css +1 -0
- package/src/ui/public/assets/index-qAmzFO10.js +104 -0
- package/src/ui/public/assets/office-docx-CmBY5bpF.js +32 -0
- package/src/ui/public/assets/{office-excel-CDjN3Va1.js → office-excel-BEhsBUNX.js} +1 -1
- package/src/ui/public/assets/office-pptx-DWfi413x.js +74 -0
- package/src/ui/public/assets/{previewSandbox-B6Ud9g6a.css → previewSandbox-CgdwPcuW.css} +1 -1
- package/src/ui/public/assets/previewSandbox-CyuMMYaq.js +0 -0
- package/src/ui/public/assets/socket-io-BFqQXqAp.js +1 -0
- package/src/ui/public/assets/{useThemeObserver-DAWKXvWv.js → useThemeObserver-DhCU3SIo.js} +1 -1
- package/src/ui/public/assets/{vendor-DcK6TCKZ.js → vendor-CZnXb2r9.js} +46 -39
- package/src/ui/public/assets/vue-flow-7_n4vJqi.js +39 -0
- package/src/ui/public/index.html +24 -25
- package/src/ui/server/index.js +4 -0
- package/src/ui/server/routes/fs.js +3 -1
- package/src/ui/server/routes/git/clone.js +166 -0
- package/src/ui/server/routes/git/clone.test.js +253 -0
- package/src/ui/server/routes/gitOps.js +5 -0
- package/src/ui/server/routes/localRepos.js +60 -0
- package/src/ui/server/routes/localRepos.test.js +151 -0
- package/src/ui/server/routes/workbench/agentChat.js +16 -0
- package/src/ui/server/routes/workbench/envContext.js +16 -2
- package/src/ui/server/routes/workbench/envContext.test.js +14 -0
- package/src/ui/server/routes/workbench/remoteCliPromptParity.test.js +9 -0
- package/src/ui/server/utils/directoryGitState.js +49 -0
- package/src/ui/server/utils/directoryGitState.test.js +47 -0
- package/src/ui/server/utils/localRepoScan.js +314 -0
- package/src/ui/server/utils/localRepoScan.test.js +291 -0
- package/src/ui/public/assets/AgentView-BNH92bKu.js +0 -5
- package/src/ui/public/assets/AgentView-BV15UtEF.css +0 -1
- package/src/ui/public/assets/AppVersionBadge-DXWTExsY.js +0 -2
- package/src/ui/public/assets/BranchSelector-CJI-I8JY.js +0 -1
- package/src/ui/public/assets/BranchSelector-T_rJm-JY.css +0 -1
- package/src/ui/public/assets/CommitForm-CTYhgpkj.js +0 -6
- package/src/ui/public/assets/CommitForm-Oij8R6P-.css +0 -1
- package/src/ui/public/assets/CommonDialog-C_RjF9Mp.css +0 -1
- package/src/ui/public/assets/CommonDialog-DNnN70HC.js +0 -1
- package/src/ui/public/assets/EditorView-BgA-_8WV.css +0 -1
- package/src/ui/public/assets/EditorView-C2AbXelw.js +0 -1
- package/src/ui/public/assets/FileDiffViewer-B2_ghtbv.css +0 -1
- package/src/ui/public/assets/FileDiffViewer-ZD705xXx.js +0 -14
- package/src/ui/public/assets/FlowExecutionViewer-B5kh7VxS.css +0 -1
- package/src/ui/public/assets/FlowExecutionViewer-BP9w_OQb.js +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-BAQDU9Jd.css +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-DeSI8Mlj.js +0 -21
- package/src/ui/public/assets/IconButton-BxRsG5E1.js +0 -1
- package/src/ui/public/assets/IconButton-CTwyZrv2.css +0 -1
- package/src/ui/public/assets/LogList-1sIFUx4e.js +0 -7
- package/src/ui/public/assets/LogList-DlWwSZet.css +0 -1
- package/src/ui/public/assets/MindmapView-6_fbvhh3.js +0 -1
- package/src/ui/public/assets/MindmapView-CS2t30Ko.css +0 -1
- package/src/ui/public/assets/MonitorView-CURagJDe.js +0 -1
- package/src/ui/public/assets/MonitorView-CphDOlQu.css +0 -1
- package/src/ui/public/assets/ProjectStartupButton-B7zvqRj_.css +0 -1
- package/src/ui/public/assets/ProjectStartupButton-COyb4Fbk.js +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-DoS9EWQr.js +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-bpwaVAvX.css +0 -1
- package/src/ui/public/assets/RemoteRepoCard-BwrdI5UH.js +0 -1
- package/src/ui/public/assets/RemoteRepoCard-CDykPlPj.css +0 -1
- package/src/ui/public/assets/SourceMapView-DADzBGfb.js +0 -3
- package/src/ui/public/assets/SourceMapView-DjYKJZLj.css +0 -1
- package/src/ui/public/assets/SvgIcon-VCh_kGGV.js +0 -1
- package/src/ui/public/assets/TemplateManager-C0rm8xfC.css +0 -1
- package/src/ui/public/assets/TemplateManager-C4go4RZu.js +0 -1
- package/src/ui/public/assets/UserInputNode-Cl5-bI42.js +0 -1
- package/src/ui/public/assets/UserInputNode-DDtvv9Iq.css +0 -1
- package/src/ui/public/assets/WorkbenchView-B8QOp8nM.css +0 -1
- package/src/ui/public/assets/WorkbenchView-DtCyyW3b.js +0 -6
- package/src/ui/public/assets/_plugin-vue_export-helper-Dcylt9fO.js +0 -19
- package/src/ui/public/assets/configStore-BlqdtNUA.js +0 -1
- package/src/ui/public/assets/element-plus-C1PloHQu.css +0 -1
- package/src/ui/public/assets/element-plus-IG-bwpR5.js +0 -28
- package/src/ui/public/assets/gitStore-BKkZm2m3.js +0 -4
- package/src/ui/public/assets/index-Bq7iCtof.css +0 -1
- package/src/ui/public/assets/index-DGHrUfrh.js +0 -28
- package/src/ui/public/assets/office-docx-CkLOvV7H.js +0 -31
- package/src/ui/public/assets/office-pptx-CVu3fXsL.js +0 -60
- package/src/ui/public/assets/previewSandbox-DYMhXJ91.js +0 -0
- package/src/ui/public/assets/socket-io-TBtw0msS.js +0 -1
- package/src/ui/public/assets/toolsStore-BlRHNqXl.js +0 -1
- package/src/ui/public/assets/vue-flow-B3gZmkCI.js +0 -39
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.wb-ctx-menu[data-v-4713db74]{z-index:9999;background:var(--bg-container);border:1px solid var(--border-color);min-width:140px;box-shadow:var(--shadow-md);-webkit-user-select:none;user-select:none;border-radius:6px;margin:0;padding:4px;font-size:13px;list-style:none;position:fixed}.wb-ctx-menu__item[data-v-4713db74]{cursor:pointer;color:var(--text-primary);border-radius:4px;align-items:center;gap:8px;padding:6px 10px;display:flex}.wb-ctx-menu__item[data-v-4713db74]:hover{background:var(--tint-primary-12);color:var(--color-primary)}.wb-ctx-menu__item.is-disabled[data-v-4713db74]{cursor:progress;opacity:.6}.wb-ctx-menu__icon[data-v-4713db74]{justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}.wb-log-details[data-v-55345953]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-code);flex-direction:column;flex:1;height:100%;min-height:0;margin-top:6px;display:flex;overflow:auto}.wb-log-details__body[data-v-55345953]{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.wb-job-chat[data-v-55345953]{flex:1;min-height:0}.wb-job-chat[data-v-55345953] .acu-chat-footer{display:none}.wb-job-chat[data-v-55345953] .acu-chat{background:0 0}.wb-job-chat[data-v-55345953] .acu-message-list-inner{gap:10px;padding:10px 12px 14px}.wb-job-chat[data-v-55345953] .acu-bubble{font-size:12px}.wb-job-chat[data-v-55345953] .acu-bubble-name{font-size:10px}.wb-log-summary[data-v-55345953]{cursor:pointer;color:var(--text-secondary);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:space-between;align-items:center;gap:8px;padding:6px 10px;font-size:12px;display:flex}.wb-log-summary[data-v-55345953]:hover{background:var(--tint-primary-06)}.wb-log-summary__left[data-v-55345953]{flex:1;align-items:center;gap:6px;min-width:0;display:inline-flex}.wb-log-summary__right[data-v-55345953]{flex-shrink:0;align-items:center;gap:8px;display:inline-flex}.wb-log-summary__meta[data-v-55345953]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:11px}.wb-log-copy[data-v-55345953]{color:var(--text-secondary);background:var(--bg-container);border:1px solid var(--border-color-medium);border-radius:var(--radius-sm,4px);cursor:pointer;-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:3px;padding:2px 7px;font-size:11px;font-weight:500;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.wb-log-copy[data-v-55345953]:hover{background:color-mix(in srgb, var(--color-primary) 10%, transparent);border-color:color-mix(in srgb, var(--color-primary) 35%, transparent);color:var(--color-primary)}.wb-log-copy[data-v-55345953]:active{background:color-mix(in srgb, var(--color-primary) 18%, transparent)}.wb-log-copy[data-v-55345953]:focus-visible{outline:2px solid color-mix(in srgb, var(--color-primary) 50%, transparent);outline-offset:1px}.wb-chat__foot[data-v-55345953]{border-top:1px solid color-mix(in srgb, var(--border-color) 60%, transparent);background:color-mix(in srgb, var(--text-tertiary) 3%, transparent);flex-shrink:0;justify-content:flex-end;gap:6px;padding:4px 10px 6px;display:flex}.wb-chat__action[data-v-55345953]{color:#6d28d9;background:color-mix(in srgb, #8b5cf6 10%, var(--bg-container));border-radius:var(--radius-sm,4px);cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #8b5cf64d;align-items:center;gap:3px;padding:2px 8px;font-size:11px;font-weight:500;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.wb-chat__action[data-v-55345953]:hover{background:color-mix(in srgb, #8b5cf6 18%, var(--bg-container));color:#5b21b6;border-color:#8b5cf680}.wb-chat__action[data-v-55345953]:active{background:color-mix(in srgb, #8b5cf6 26%, var(--bg-container))}.wb-chat__action[data-v-55345953]:focus-visible{outline-offset:1px;outline:2px solid #8b5cf680}.wb-log-fullscreen-dialog .el-dialog__body[data-v-55345953]{flex-direction:column;height:calc(100vh - 54px);padding:0 16px 16px;display:flex;overflow:hidden}.wb-log-fullscreen[data-v-55345953]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-code);flex:1;min-height:0;display:flex;overflow:hidden}.wb-log-fullscreen__render[data-v-55345953]{min-height:0;color:var(--text-primary);flex:1;padding:14px 18px;font-size:13px;line-height:1.65;overflow:auto}.wb-log-fullscreen__render[data-v-55345953] pre{margin:8px 0}.wb-log-fullscreen__empty[data-v-55345953]{color:var(--text-tertiary);padding:14px 18px;font-style:italic}.wb-log-summary__status[data-v-55345953]{align-items:center;gap:6px;font-size:12px;font-weight:600;display:inline-flex}.wb-log-summary__status--running[data-v-55345953]{color:var(--color-warning-dark,#b45309)}.wb-log-summary__status--pending[data-v-55345953]{color:var(--color-primary)}.wb-log-summary__status--done[data-v-55345953]{color:var(--color-success-dark,#15803d)}.wb-log-summary__status--cancelled[data-v-55345953]{color:#9ca3af}.wb-log-summary__status--error[data-v-55345953]{color:var(--color-danger,#ef4444)}.wb-log-summary__icon[data-v-55345953]{font-size:13px;line-height:1}.wb-log-summary__elapsed[data-v-55345953]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;margin-left:2px;font-size:11px;font-weight:400}.wb-log-dots[data-v-55345953]{align-items:center;gap:3px;margin-left:-2px;display:inline-flex}.wb-log-dots__dot[data-v-55345953]{opacity:.35;background:currentColor;border-radius:50%;width:4px;height:4px;animation:1.4s ease-in-out infinite wb-log-dot-bounce-55345953}.wb-log-dots__dot[data-v-55345953]:nth-child(2){animation-delay:.2s}.wb-log-dots__dot[data-v-55345953]:nth-child(3){animation-delay:.4s}.wb-log-details.is-running .wb-log-summary[data-v-55345953]{background:color-mix(in srgb, var(--color-warning,#f59e0b) 8%, transparent)}.wb-log-details.is-pending .wb-log-summary[data-v-55345953]{background:color-mix(in srgb, var(--color-primary) 6%, transparent)}.wb-log-details.is-finished .wb-log-summary[data-v-55345953]{background:color-mix(in srgb, var(--color-success,#22c55e) 6%, transparent)}.wb-log-details.is-finished[data-v-55345953]{animation:1.5s ease-out wb-log-finished-flash-55345953}@keyframes wb-log-dot-bounce-55345953{0%,80%,to{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@keyframes wb-log-finished-flash-55345953{0%{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-success,#22c55e) 50%, transparent)}60%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-success,#22c55e) 0%, transparent)}to{box-shadow:0 0 #0000}}@media (prefers-reduced-motion:reduce){.wb-log-dots__dot[data-v-55345953],.wb-log-details.is-finished[data-v-55345953]{animation:none}}.exec-logs[data-v-be6a2090]{flex-direction:column;gap:12px;height:100%;padding:16px 20px;display:flex;overflow:auto}.exec-logs__head[data-v-be6a2090]{align-items:center;gap:12px;display:flex}.exec-logs__title-block[data-v-be6a2090]{flex:1;align-items:baseline;gap:10px;min-width:0;display:flex}.exec-logs__stats[data-v-be6a2090]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:12px}.exec-logs__head-actions[data-v-be6a2090]{flex-shrink:0;gap:8px;display:inline-flex}.exec-logs__config[data-v-be6a2090]{background:var(--bg-subtle,var(--bg-container));border:1px solid var(--border-color);border-radius:var(--radius-md,6px);flex-wrap:wrap;align-items:center;gap:16px;padding:10px 14px;display:flex}.exec-logs__config-label[data-v-be6a2090]{color:var(--text-secondary);font-size:12px;font-weight:600}.exec-logs__config-field[data-v-be6a2090]{align-items:center;gap:8px;display:inline-flex}.exec-logs__config-name[data-v-be6a2090]{color:var(--text-tertiary);font-size:12px}.exec-logs__filter[data-v-be6a2090]{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.exec-logs__filter-spacer[data-v-be6a2090]{flex:1}.exec-logs__batch-meta[data-v-be6a2090]{color:var(--text-secondary);font-variant-numeric:tabular-nums;font-size:12px}.exec-logs__batch[data-v-be6a2090]{background:color-mix(in srgb, var(--color-primary) 6%, transparent);border:1px solid color-mix(in srgb, var(--color-primary) 25%, transparent);border-radius:var(--radius-md,6px);align-items:center;gap:12px;padding:8px 14px;display:flex}.exec-logs__list[data-v-be6a2090]{flex-direction:column;flex:1;gap:10px;min-height:200px;display:flex}.exec-logs__empty[data-v-be6a2090]{border:1px dashed var(--border-color);border-radius:var(--radius-md,6px);color:var(--text-tertiary);text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:60px 20px;display:flex}.exec-logs__empty-art[data-v-be6a2090]{opacity:.5;margin-bottom:8px;font-size:36px}.exec-logs__empty-title[data-v-be6a2090]{color:var(--text-secondary);margin-bottom:4px;font-size:14px;font-weight:600}.exec-logs__empty-hint[data-v-be6a2090]{max-width:400px;font-size:12px}.exec-logs__pager[data-v-be6a2090]{justify-content:center;padding-top:8px;display:flex}.exec-card[data-v-be6a2090]{background:var(--bg-container);border:1px solid var(--border-color);border-radius:var(--radius-md,6px);flex-direction:column;gap:6px;padding:12px 14px;transition:border-color .15s,box-shadow .15s;display:flex}.exec-card[data-v-be6a2090]:hover{border-color:var(--color-primary)}.exec-card.is-selected[data-v-be6a2090]{border-color:var(--color-primary);box-shadow:0 0 0 1px var(--color-primary)}.exec-card__head[data-v-be6a2090]{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.exec-card__status[data-v-be6a2090]{border:1px solid;border-radius:999px;flex-shrink:0;padding:1px 8px;font-size:11px;font-weight:600;display:inline-block}.exec-card__title[data-v-be6a2090]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;min-width:0;max-width:360px;font-size:14px;font-weight:600;overflow:hidden}.exec-card__spacer[data-v-be6a2090]{flex:1}.exec-card__meta[data-v-be6a2090]{color:var(--text-tertiary);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:10px;font-size:11px;display:inline-flex}.exec-card__task[data-v-be6a2090]{white-space:nowrap;text-overflow:ellipsis;max-width:200px;overflow:hidden}.exec-card__time[data-v-be6a2090]{font-variant-numeric:tabular-nums}.exec-card__exit[data-v-be6a2090]{font-family:var(--font-mono,ui-monospace, monospace)}.exec-card__del[data-v-be6a2090]{width:22px;height:22px;color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;transition:background .15s,color .15s;display:inline-flex}.exec-card__del[data-v-be6a2090]:hover{background:var(--tint-danger-14);color:var(--color-danger-bright,#ef4444)}.exec-card__error[data-v-be6a2090]{color:var(--color-danger-dark,#b91c1c);background:var(--tint-danger-06);border-left:2px solid var(--color-danger-bright,#ef4444);font-size:12px;font-family:var(--font-mono,ui-monospace, monospace);white-space:pre-wrap;word-break:break-word;border-radius:3px;margin:0;padding:6px 10px}.wb-sidebar[data-v-ef57209b]{background:var(--bg-panel);flex-direction:column;flex-shrink:0;gap:18px;width:268px;padding:14px 12px 18px;display:flex;overflow-y:auto}.wb-section[data-v-ef57209b]{flex-direction:column;flex-shrink:0;gap:8px;min-height:0;display:flex}.wb-section+.wb-section[data-v-ef57209b]{padding-top:16px}.wb-section__head[data-v-ef57209b]{align-items:center;gap:6px;padding:0 4px;display:flex}.wb-section__tag[data-v-ef57209b]{letter-spacing:.4px;height:18px;color:var(--text-tertiary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-sm);text-transform:uppercase;font-variant-numeric:tabular-nums;flex-shrink:0;align-items:center;padding:0 6px;font-size:10px;font-weight:600;display:inline-flex}.wb-section__tag--accent[data-v-ef57209b]{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 9%, transparent);border-color:var(--tint-primary-22)}.wb-section__title[data-v-ef57209b]{color:var(--text-secondary);letter-spacing:.2px;flex:1;min-width:0;margin:0;font-size:12px;font-weight:600}.wb-section__action[data-v-ef57209b]{color:var(--text-tertiary);border-radius:var(--radius-sm);cursor:pointer;width:28px;height:28px;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;display:inline-flex}.wb-section__action[data-v-ef57209b]:hover{background:var(--tint-primary-12);color:var(--color-primary)}.wb-new-btn[data-v-ef57209b]{border:1px dashed var(--tint-primary-35,color-mix(in srgb, var(--color-primary) 35%, transparent));background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 4%, transparent) 0%, color-mix(in srgb, var(--color-primary) 2%, transparent) 100%);width:100%;height:32px;color:var(--color-primary);letter-spacing:.05px;cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);border-radius:10px;align-items:center;gap:6px;padding:0 12px;font-size:12.5px;font-weight:600;display:flex}.wb-new-btn__icon[data-v-ef57209b]{transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0;font-size:13px}.wb-new-btn__shortcut[data-v-ef57209b]{display:none}.wb-new-btn[data-v-ef57209b]:hover{background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 10%, transparent) 0%, color-mix(in srgb, var(--color-primary) 6%, transparent) 100%);color:var(--color-primary);border-style:solid;border-color:var(--tint-primary-50)}.wb-new-btn:hover .wb-new-btn__icon[data-v-ef57209b]{transform:rotate(90deg)}.wb-new-btn[data-v-ef57209b]:active{transform:scale(.99)}.wb-new-btn[data-v-ef57209b]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-task-list[data-v-ef57209b],.wb-prompt-list[data-v-ef57209b]{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.wb-task-list.is-grouped .wb-task-item[data-v-ef57209b]{margin-left:14px}.wb-task-item[data-v-ef57209b]{cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:7px 10px;display:flex;position:relative}.wb-task-item.is-running[data-v-ef57209b]{background:color-mix(in srgb, var(--color-warning) 8%, transparent)}.wb-task-item.is-running[data-v-ef57209b]:hover{background:color-mix(in srgb, var(--color-warning) 14%, transparent)}.wb-task-item[data-v-ef57209b]:hover{background:var(--bg-container-hover);border-color:#0000;transform:translateY(-.5px)}.wb-task-item.active[data-v-ef57209b]{background:color-mix(in srgb, var(--color-primary) 10%, var(--bg-container));box-shadow:0 1px 3px color-mix(in srgb, var(--color-primary) 12%, transparent), 0 0 0 1px color-mix(in srgb, var(--color-primary) 18%, transparent);border-color:#0000}.wb-task-item.active[data-v-ef57209b]:after{content:"";background:linear-gradient(180deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 70%, #fff) 100%);width:3px;box-shadow:0 0 8px color-mix(in srgb, var(--color-primary) 50%, transparent), 0 1px 3px color-mix(in srgb, var(--color-primary) 25%, transparent);border-radius:3px;position:absolute;top:5px;bottom:5px;left:-1px}.wb-task-item.active .wb-task-item__title[data-v-ef57209b],.wb-task-item.active .wb-task-item__del[data-v-ef57209b]{color:var(--color-primary)}.wb-task-item__running-dot[data-v-ef57209b]{background:var(--color-warning);width:6px;height:6px;box-shadow:0 0 0 0 color-mix(in srgb, var(--color-warning) 60%, transparent);border-radius:50%;flex:none;margin-left:auto;animation:1.4s ease-in-out infinite wb-running-pulse-ef57209b}@keyframes wb-running-pulse-ef57209b{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-warning) 60%, transparent);opacity:1;transform:scale(1)}50%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-warning) 0%, transparent);opacity:.75;transform:scale(1.35)}}.wb-task-item__body[data-v-ef57209b]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.wb-task-item__title[data-v-ef57209b]{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;letter-spacing:-.05px;font-size:12px;font-weight:500;line-height:1.3;overflow:hidden}.wb-task-item.is-other-project[data-v-ef57209b]{opacity:.78}.wb-task-item.is-other-project[data-v-ef57209b]:hover{opacity:1}.wb-task-item[data-v-ef57209b]{cursor:grab}.wb-task-item.is-dragging[data-v-ef57209b]{opacity:.5;cursor:grabbing;pointer-events:none}.wb-task-item.is-drop-before[data-v-ef57209b]:before,.wb-task-item.is-drop-after[data-v-ef57209b]:after{content:"";background:var(--color-primary);height:2px;box-shadow:0 0 8px color-mix(in srgb, var(--color-primary) 50%, transparent);pointer-events:none;border-radius:2px;position:absolute;left:8px;right:8px}.wb-task-item.is-drop-before[data-v-ef57209b]:before{top:-2px}.wb-task-item.is-drop-after[data-v-ef57209b]:after{bottom:-2px}.wb-task-group__head.is-no-drop[data-v-ef57209b]{cursor:not-allowed;opacity:.55}.wb-task-item__action-group[data-v-ef57209b]{background:linear-gradient(to right, transparent 0%, var(--bg-container-hover) 40%);opacity:0;pointer-events:none;transition:opacity var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);border-radius:8px;align-items:center;gap:2px;padding:1px 1px 1px 14px;display:inline-flex;position:absolute;top:50%;right:6px;transform:translateY(-50%)translate(-2px)}.wb-task-item:hover .wb-task-item__action-group[data-v-ef57209b],.wb-task-item.active .wb-task-item__action-group[data-v-ef57209b]{opacity:1;pointer-events:auto;transform:translateY(-50%)translate(0)}.wb-task-item.active .wb-task-item__action-group[data-v-ef57209b]{background:linear-gradient(to right, transparent 0%, color-mix(in srgb, var(--color-primary) 10%, var(--bg-container)) 40%)}.wb-task-item.is-running .wb-task-item__action-group[data-v-ef57209b]{background:linear-gradient(to right, transparent 0%, color-mix(in srgb, var(--color-warning,#f59e0b) 8%, var(--bg-panel)) 40%)}.wb-task-item__copy[data-v-ef57209b]{color:var(--text-tertiary);cursor:pointer;width:22px;height:22px;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-task-item__copy[data-v-ef57209b]:hover{background:color-mix(in srgb, var(--color-primary) 12%, transparent);color:var(--color-primary)}.wb-task-item__copy[data-v-ef57209b]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset)}.wb-task-item__copy[data-v-ef57209b]:active{transform:scale(.9)}.wb-task-item__del[data-v-ef57209b]{color:var(--text-tertiary);cursor:pointer;width:22px;height:22px;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-task-item__del[data-v-ef57209b]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger)}.wb-task-item__del[data-v-ef57209b]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset);opacity:1}.wb-task-item__del[data-v-ef57209b],.wb-prompt-item__del[data-v-ef57209b],.wb-sub-item__del[data-v-ef57209b]{font-size:13px}.wb-prompt-item[data-v-ef57209b]{border-radius:var(--radius-md);font-size:var(--font-size-125);color:var(--text-primary);transition:background var(--transition-fast) var(--ease-custom);align-items:center;gap:8px;padding:7px 8px;display:flex;position:relative}.wb-prompt-item[data-v-ef57209b]:hover{background:var(--bg-container-hover)}.wb-prompt-item:hover .wb-prompt-item__del[data-v-ef57209b]{opacity:1}.wb-prompt-item__icon[data-v-ef57209b]{border-radius:var(--radius-sm);background:var(--tint-primary-08);width:22px;height:22px;color:var(--color-primary);flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-prompt-item__name[data-v-ef57209b]{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--text-primary);letter-spacing:-.05px;flex:1;font-weight:500;overflow:hidden}.wb-prompt-item__tag[data-v-ef57209b]{border-radius:var(--radius-xs);letter-spacing:.1px;background:var(--tint-primary-08);max-width:96px;color:var(--color-primary);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;padding:1px 6px;font-size:10px;line-height:16px;overflow:hidden}.wb-prompt-item__tag--project[data-v-ef57209b]{background:var(--bg-subtle);color:var(--text-secondary);border:1px solid var(--border-color-light)}.wb-prompt-item__del[data-v-ef57209b]{color:var(--text-tertiary);border-radius:var(--radius-xs);cursor:pointer;opacity:0;width:20px;height:20px;transition:opacity var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-prompt-item__del[data-v-ef57209b]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger)}.wb-prompt-item__del[data-v-ef57209b]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset);opacity:1}.wb-empty[data-v-ef57209b]{text-align:center;color:var(--text-tertiary);border-radius:var(--radius-md);background:linear-gradient(135deg, var(--bg-subtle) 0%, color-mix(in srgb, var(--tint-primary-05) 50%, transparent) 100%);border:1px dashed var(--border-color-light,color-mix(in srgb, var(--border-color) 60%, transparent));flex-direction:column;align-items:center;gap:8px;padding:24px 14px 20px;display:flex;position:relative;overflow:hidden}.wb-empty[data-v-ef57209b]:before{content:"";background:radial-gradient(circle, color-mix(in srgb, var(--color-primary) 5%, transparent) 0%, transparent 70%);pointer-events:none;border-radius:50%;width:100px;height:100px;position:absolute;top:-25px;right:-25px}.wb-empty--compact[data-v-ef57209b]{background:var(--bg-subtle);border-style:solid;flex-direction:row;justify-content:center;gap:0;padding:10px 12px}.wb-empty--compact[data-v-ef57209b]:before{display:none}.wb-empty__art[data-v-ef57209b]{background:linear-gradient(135deg, var(--tint-primary-12) 0%, var(--tint-primary-08) 100%);width:52px;height:52px;color:var(--color-primary);box-shadow:0 4px 12px color-mix(in srgb, var(--color-primary) 10%, transparent);z-index:1;border-radius:14px;justify-content:center;align-items:center;margin-bottom:4px;font-size:24px;display:flex;position:relative}.wb-empty__title[data-v-ef57209b]{letter-spacing:var(--letter-spacing-heading,-.25px);color:var(--text-secondary);z-index:1;font-size:15px;font-weight:600;line-height:1.45;position:relative}.wb-empty--rich .wb-empty__hint[data-v-ef57209b]{color:var(--text-tertiary);z-index:1;max-width:280px;font-size:12px;line-height:1.6;position:relative}.wb-empty__cta[data-v-ef57209b]{z-index:1;flex-wrap:wrap;justify-content:center;align-items:center;gap:14px;margin-top:8px;display:flex;position:relative}.wb-pill[data-v-ef57209b]{min-width:16px;height:16px;color:var(--text-tertiary);background:var(--bg-subtle);font-variant-numeric:tabular-nums;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:600;display:inline-flex}.wb-section__count[data-v-ef57209b]{background:var(--tint-primary-12);color:var(--color-primary)}.wb-task-group__head[data-v-ef57209b]{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--text-secondary);transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);border-radius:6px;align-items:center;gap:6px;margin-bottom:2px;padding:5px 6px;font-size:13px;font-weight:600;display:flex}.wb-task-group__head[data-v-ef57209b]:hover{background:var(--bg-container-hover);color:var(--text-primary)}.wb-task-group__head.is-current[data-v-ef57209b]{color:var(--color-primary);font-weight:600}.wb-task-group__caret[data-v-ef57209b]{flex-shrink:0;font-size:12px;transition:transform .15s}.wb-task-group__icon[data-v-ef57209b]{opacity:.7;flex-shrink:0;font-size:14px}.wb-task-group__name[data-v-ef57209b]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.wb-task-group__count[data-v-ef57209b]{background:var(--bg-subtle);min-width:14px;height:14px;padding:0 4px;font-size:9px}.proj[data-v-ae54875f]{flex-direction:column;flex:auto;min-height:0;display:flex;overflow:hidden}.proj__head[data-v-ae54875f]{flex-shrink:0;align-items:center;gap:6px;padding:10px 12px 6px;display:flex}.proj__title[data-v-ae54875f]{color:var(--text-secondary);flex:1;min-width:0;margin:0;font-size:12px;font-weight:500}.proj__count[data-v-ae54875f]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;text-align:right;font-size:10px}.proj__tools[data-v-ae54875f]{flex-direction:column;flex-shrink:0;gap:6px;padding:0 12px 8px;display:flex}.proj__search[data-v-ae54875f]{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-subtle);height:24px;transition:border-color var(--transition-fast) var(--ease-custom);align-items:center;gap:5px;padding:0 7px;display:flex}.proj__search[data-v-ae54875f]:focus-within{border-color:var(--color-primary)}.proj__search-icon[data-v-ae54875f]{color:var(--text-tertiary);flex-shrink:0;font-size:12px}.proj__search-input[data-v-ae54875f]{min-width:0;color:var(--text-primary);background:0 0;border:none;outline:none;flex:1;font-family:inherit;font-size:11.5px}.proj__search-input[data-v-ae54875f]::placeholder{color:var(--text-tertiary)}.proj__toggles[data-v-ae54875f]{align-items:center;gap:6px;display:flex}.proj__toggle[data-v-ae54875f]{border:1px solid var(--border-color);border-radius:var(--radius-md);min-width:0;height:22px;color:var(--text-tertiary);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;flex:1 1 0;padding:0 6px;font-family:inherit;font-size:10.5px;line-height:1}.proj__toggle>span[data-v-ae54875f]{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.proj__toggle[data-v-ae54875f]:hover{color:var(--text-secondary);border-color:var(--text-tertiary)}.proj__toggle.is-on[data-v-ae54875f]{color:var(--color-primary);border-color:var(--color-primary);background:var(--tint-primary-12)}.proj__toggle[data-v-ae54875f]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.proj__list[data-v-ae54875f]{flex:auto;min-height:0;margin:0;padding:0 6px 8px;list-style:none;overflow-y:auto}.proj-item[data-v-ae54875f]{cursor:pointer;transition:background var(--transition-fast) var(--ease-custom);border-radius:6px;outline:none;padding:7px 8px;position:relative}.proj-item[data-v-ae54875f]:hover{background:var(--bg-container-hover)}.proj-item.is-active[data-v-ae54875f]{background:color-mix(in srgb, var(--color-primary) 10%, transparent)}.proj-item[data-v-ae54875f]:focus-visible{outline:var(--focus-outline);outline-offset:-1px}.proj-item.is-running[data-v-ae54875f]{background:color-mix(in srgb, var(--color-warning) 7%, transparent)}.proj-item--all[data-v-ae54875f]{border-bottom:1px solid var(--border-color);border-radius:6px 6px 0 0;margin-bottom:4px}.proj-item__num[data-v-ae54875f]{color:var(--text-secondary);background:var(--bg-subtle);font-variant-numeric:tabular-nums;border-radius:4px;flex-shrink:0;padding:0 5px;font-size:10px;line-height:15px}.proj-item__running-text[data-v-ae54875f]{color:var(--color-warning);font-variant-numeric:tabular-nums;flex-shrink:0;margin-left:auto}.proj-item__row1[data-v-ae54875f]{align-items:center;gap:6px;min-width:0;display:flex}.proj-item__icon[data-v-ae54875f]{color:var(--text-tertiary);flex-shrink:0;font-size:13px}.proj-item.is-active .proj-item__icon[data-v-ae54875f]{color:var(--color-primary)}.proj-item__name[data-v-ae54875f]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;padding-right:44px;font-size:13px;font-weight:500;line-height:1.4;overflow:hidden}.proj-item__signals[data-v-ae54875f]{transition:opacity var(--transition-fast) var(--ease-custom);flex-shrink:0;align-items:center;gap:6px;display:inline-flex}.proj-item:not(.is-missing):hover .proj-item__signals[data-v-ae54875f]{opacity:0}.proj-item:not(.is-missing):has(.proj-item__action:focus-visible) .proj-item__signals[data-v-ae54875f]{opacity:0}.proj-item__running[data-v-ae54875f]{background:var(--color-warning);border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:1.4s ease-in-out infinite proj-pulse-ae54875f}@keyframes proj-pulse-ae54875f{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(1.3)}}.proj-item__badge[data-v-ae54875f]{color:var(--color-primary);background:var(--tint-primary-12);border-radius:4px;flex-shrink:0;padding:0 5px;font-size:10px;line-height:15px}.proj-item__actions[data-v-ae54875f]{opacity:0;pointer-events:none;transition:opacity var(--transition-fast) var(--ease-custom);align-items:center;gap:2px;display:inline-flex;position:absolute;top:6px;right:8px}.proj-item:hover .proj-item__actions[data-v-ae54875f]{opacity:1;pointer-events:auto}.proj-item:has(.proj-item__action:focus-visible) .proj-item__actions[data-v-ae54875f]{opacity:1;pointer-events:auto}.proj-item:has(.proj-item__action.is-open) .proj-item__actions[data-v-ae54875f]{opacity:1;pointer-events:auto}.proj-item__action[data-v-ae54875f]{width:20px;height:20px;color:var(--text-tertiary);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}.proj-item__action[data-v-ae54875f]:hover{color:var(--color-primary);background:var(--tint-primary-12)}.proj-item__action[data-v-ae54875f]:active{color:var(--color-primary)}.proj-item__action[data-v-ae54875f]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.proj-item__action.is-open[data-v-ae54875f]{color:var(--color-primary);background:var(--tint-primary-12)}.proj-menu[data-v-ae54875f]{color:var(--text-primary);margin:0;padding:2px 0;font-size:12.5px;list-style:none}.proj-menu__item[data-v-ae54875f]{border-radius:var(--radius-md);cursor:pointer;-webkit-user-select:none;user-select:none;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);align-items:center;gap:9px;padding:7px 10px;display:flex}.proj-menu__item[data-v-ae54875f]:hover,.proj-menu__item[data-v-ae54875f]:focus-visible{background:var(--tint-primary-12);outline:none}.proj-menu__icon[data-v-ae54875f]{width:16px;height:16px;color:var(--text-secondary);flex-shrink:0;justify-content:center;align-items:center;font-size:15px;display:inline-flex}.proj-menu__icon[data-v-ae54875f] svg{width:16px;height:16px}.proj-menu__img[data-v-ae54875f]{object-fit:contain;-webkit-user-drag:none;width:16px;height:16px}.proj-menu__label[data-v-ae54875f]{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.proj-menu__hint[data-v-ae54875f]{color:var(--text-tertiary);transition:color var(--transition-fast) var(--ease-custom);flex-shrink:0;font-size:10.5px}.proj-menu__item:hover .proj-menu__hint[data-v-ae54875f]{color:var(--color-primary)}.proj-menu__sep[data-v-ae54875f]{background:var(--border-color);height:1px;margin:4px 6px}.proj-menu__title[data-v-ae54875f]{letter-spacing:.3px;color:var(--text-tertiary);padding:4px 10px 3px;font-size:10.5px;font-weight:600}.proj-menu__item--danger .proj-menu__label[data-v-ae54875f]{color:var(--color-warning)}.proj-menu__item.is-missing .proj-menu__icon[data-v-ae54875f]{opacity:.5;filter:grayscale(.65)}.proj-menu__item.is-missing:hover .proj-menu__icon[data-v-ae54875f]{opacity:.85;filter:grayscale(.2)}.proj-item__row2[data-v-ae54875f]{min-width:0;color:var(--text-tertiary);align-items:center;gap:5px;margin-top:2px;font-size:11px;display:flex}.proj-item__branch[data-v-ae54875f]{min-width:0;max-width:130px;font-family:var(--font-mono,ui-monospace, monospace);align-items:center;gap:4px;display:inline-flex}.proj-item__branch-name[data-v-ae54875f]{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.proj-item__branch[data-v-ae54875f] .proj-item__branch-icon{color:currentColor;flex-shrink:0;width:11px;height:11px}.proj-item__time[data-v-ae54875f]{font-variant-numeric:tabular-nums;flex-shrink:0;margin-left:auto}.proj-chip[data-v-ae54875f]{font-variant-numeric:tabular-nums;border-radius:3px;flex-shrink:0;padding:0 4px;font-size:10px;line-height:14px}.proj-chip--ahead[data-v-ae54875f]{color:var(--color-primary);background:var(--tint-primary-12)}.proj-chip--behind[data-v-ae54875f]{color:var(--color-warning);background:color-mix(in srgb, var(--color-warning) 14%, transparent)}.proj-chip--dirty[data-v-ae54875f]{color:var(--text-secondary);background:var(--bg-subtle)}.proj-chip--missing[data-v-ae54875f]{color:var(--color-danger-light);background:color-mix(in srgb, var(--color-danger) 12%, transparent)}.proj-item__row3[data-v-ae54875f]{align-items:center;gap:6px;margin-top:5px;display:flex}.proj-item__bar[data-v-ae54875f]{background:var(--bg-subtle);border-radius:2px;flex:1;min-width:0;height:3px;overflow:hidden}.proj-item__bar-fill[data-v-ae54875f]{background:var(--color-primary);height:100%;transition:width var(--transition-base) var(--ease-custom);border-radius:2px;display:block}.proj-item__progress-text[data-v-ae54875f]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:10px}.proj-empty[data-v-ae54875f]{text-align:center;padding:20px 12px;list-style:none}.proj-empty__title[data-v-ae54875f]{color:var(--text-secondary);margin:0 0 4px;font-size:12.5px}.proj-empty__hint[data-v-ae54875f]{color:var(--text-tertiary);margin:0;font-size:11px;line-height:1.6}.proj-empty__clear[data-v-ae54875f]{color:var(--color-primary);cursor:pointer;background:0 0;border:none;margin-top:8px;padding:2px 4px;font-family:inherit;font-size:11px}.proj-empty__clear[data-v-ae54875f]:hover{text-decoration:underline}.proj-empty__clear[data-v-ae54875f]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.agents[data-v-49b8136e]{min-height:0;height:var(--wb-agents-h,auto);max-height:var(--wb-agents-h,42%);flex-direction:column;flex:none;display:flex;overflow:hidden}.agents__head[data-v-49b8136e]{flex-shrink:0;align-items:center;gap:6px;padding:10px 12px 6px;display:flex}.agents__title[data-v-49b8136e]{color:var(--text-secondary);flex:1;min-width:0;margin:0;font-size:12px;font-weight:500}.agents__count[data-v-49b8136e]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.agents__count.is-live[data-v-49b8136e]{color:var(--color-warning)}.agents__list[data-v-49b8136e]{flex:auto;min-height:0;margin:0;padding:0 6px 8px;list-style:none;overflow-y:auto}.agent-item[data-v-49b8136e]{background:color-mix(in srgb, var(--color-warning) 7%, transparent);border-radius:6px;margin-bottom:4px;padding:7px 8px}.agent-item__row1[data-v-49b8136e]{align-items:center;gap:6px;min-width:0;display:flex}.agent-item__dot[data-v-49b8136e]{background:var(--color-warning);border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:1.4s ease-in-out infinite agent-pulse-49b8136e}.agent-item__dot.is-pending[data-v-49b8136e]{background:var(--text-tertiary);animation:none}@keyframes agent-pulse-49b8136e{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(1.3)}}.agent-item__project[data-v-49b8136e]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:12px;font-weight:500;overflow:hidden}.agent-item__status[data-v-49b8136e]{color:var(--color-warning);flex-shrink:0;font-size:10px}.agent-item__task[data-v-49b8136e]{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;margin:3px 0 0 12px;font-size:11.5px;line-height:1.5;overflow:hidden}.agent-item__row3[data-v-49b8136e]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;align-items:center;gap:8px;margin:3px 0 0 12px;font-size:10px;display:flex}.agent-item__elapsed[data-v-49b8136e]{margin-left:auto}.agents-empty[data-v-49b8136e]{text-align:center;color:var(--text-tertiary);padding:14px 10px;font-size:11px;list-style:none}.kb[data-v-8e2192af]{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}.kb__toolbar[data-v-8e2192af]{border-bottom:1px solid var(--border-color);flex-wrap:wrap;flex-shrink:0;align-items:center;gap:10px;padding:8px 12px;display:flex}.kb__views[data-v-8e2192af]{border-radius:var(--radius-md);background:var(--bg-subtle);flex-shrink:0;align-items:center;gap:2px;padding:2px;display:inline-flex}.kb__view-btn[data-v-8e2192af]{color:var(--text-secondary);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:4px;padding:0 10px;font-size:11.5px;line-height:20px}.kb__view-btn[data-v-8e2192af]:hover{color:var(--text-primary)}.kb__view-btn.is-active[data-v-8e2192af]{background:var(--bg-panel);color:var(--color-primary);font-weight:500}.kb__filters[data-v-8e2192af]{flex-wrap:wrap;align-items:center;gap:10px;margin-left:auto;display:flex}.kb__check[data-v-8e2192af]{color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-size:11.5px;display:inline-flex}.kb__check input[data-v-8e2192af]{cursor:pointer}.kb__search[data-v-8e2192af]{align-items:center;display:inline-flex;position:relative}.kb__search-icon[data-v-8e2192af]{color:var(--text-tertiary);pointer-events:none;font-size:12px;position:absolute;left:7px}.kb__search-input[data-v-8e2192af]{width:168px;height:24px;color:var(--text-primary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:border-color var(--transition-fast) var(--ease-custom), width var(--transition-base) var(--ease-custom);outline:none;padding:0 8px 0 24px;font-size:11.5px}.kb__search-input[data-v-8e2192af]:focus{border-color:var(--color-primary);width:216px}.kb__search-input[data-v-8e2192af]::placeholder{color:var(--text-tertiary)}.kb__columns[data-v-8e2192af]{flex:auto;min-height:0;display:grid;overflow:hidden}.kb-col[data-v-8e2192af]{border-left:1px solid var(--border-color);flex-direction:column;min-width:0;min-height:0;display:flex}.kb-col[data-v-8e2192af]:first-child{border-left:none}.kb-col__head[data-v-8e2192af]{flex-shrink:0;align-items:center;gap:6px;padding:9px 10px 7px;display:flex}.kb-col__dot[data-v-8e2192af]{background:var(--text-tertiary);border-radius:50%;flex-shrink:0;width:6px;height:6px}.kb-col--doing .kb-col__dot[data-v-8e2192af]{background:var(--color-warning);animation:1.4s ease-in-out infinite kb-pulse-8e2192af}.kb-col--done .kb-col__dot[data-v-8e2192af]{background:var(--color-success)}@keyframes kb-pulse-8e2192af{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(1.35)}}.kb-col__title[data-v-8e2192af]{color:var(--text-secondary);flex:1;min-width:0;margin:0;font-size:12px;font-weight:500}.kb-col__count[data-v-8e2192af]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;font-size:10px}.kb-col__list[data-v-8e2192af]{flex:auto;min-height:0;margin:0;padding:0 8px 10px;list-style:none;overflow-y:auto}.kb-card[data-v-8e2192af]{border:1px solid var(--border-color);border-radius:var(--radius-md);background:var(--bg-panel);cursor:pointer;transition:border-color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);margin-bottom:6px;padding:8px 10px;position:relative}.kb-card[data-v-8e2192af]:hover{border-color:var(--border-card-hover);background:var(--bg-container-hover)}.kb-card.is-running[data-v-8e2192af]{border-color:color-mix(in srgb, var(--color-warning) 45%, var(--border-color))}.kb-card.has-error[data-v-8e2192af]{border-color:color-mix(in srgb, var(--color-danger) 40%, var(--border-color))}.kb-card__row1[data-v-8e2192af]{min-width:0;color:var(--text-tertiary);align-items:center;gap:4px;margin-bottom:4px;font-size:10px;display:flex}.kb-card__running[data-v-8e2192af]{background:var(--color-warning);border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:1.4s ease-in-out infinite kb-pulse-8e2192af}.kb-card__time[data-v-8e2192af]{font-variant-numeric:tabular-nums;flex-shrink:0;margin-left:auto}.kb-card__title[data-v-8e2192af]{color:var(--text-primary);-webkit-line-clamp:2;line-clamp:2;word-break:break-word;-webkit-box-orient:vertical;margin:0;font-size:12.5px;line-height:1.5;display:-webkit-box;overflow:hidden}.kb-card__project[data-v-8e2192af]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;margin:3px 0 0;font-size:10.5px;overflow:hidden}.kb-card__actions[data-v-8e2192af]{opacity:0;pointer-events:none;transition:opacity var(--transition-fast) var(--ease-custom);align-items:center;gap:2px;padding-left:12px;display:inline-flex;position:absolute;bottom:6px;right:8px}.kb-card:hover .kb-card__actions[data-v-8e2192af],.kb-card:focus-within .kb-card__actions[data-v-8e2192af]{opacity:1;pointer-events:auto}.kb-card:hover .kb-card__title[data-v-8e2192af],.kb-card:focus-within .kb-card__title[data-v-8e2192af],.kb-card:hover .kb-card__project[data-v-8e2192af],.kb-card:focus-within .kb-card__project[data-v-8e2192af]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 80px),#0000 calc(100% - 64px));mask-image:linear-gradient(90deg,#000 calc(100% - 80px),#0000 calc(100% - 64px))}.kb-card__btn[data-v-8e2192af]{color:var(--text-tertiary);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:4px;padding:0 5px;font-size:11px;line-height:18px}.kb-card__btn[data-v-8e2192af]:hover{color:var(--color-primary)}.kb-card__btn--danger[data-v-8e2192af]{padding:0 4px;font-size:14px}.kb-card__btn--danger[data-v-8e2192af]:hover{color:var(--color-danger-light)}.kb-card__btn[data-v-8e2192af]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.kb-col__empty[data-v-8e2192af]{text-align:center;color:var(--text-tertiary);padding:18px 8px;font-size:11px;list-style:none}.kb-col__empty-btn[data-v-8e2192af]{border:1px dashed var(--border-color-medium);color:var(--text-tertiary);border-radius:var(--radius-md);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom);background:0 0;padding:3px 10px;font-size:11px}.kb-col__empty-btn[data-v-8e2192af]:hover{color:var(--color-primary);border-color:var(--color-primary)}.kb__table-wrap[data-v-8e2192af]{flex:auto;min-height:0;overflow:auto}.kb-table[data-v-8e2192af]{border-collapse:collapse;width:100%;font-size:12px}.kb-table__th[data-v-8e2192af]{z-index:1;text-align:left;color:var(--text-tertiary);background:var(--bg-subtle);border-bottom:1px solid var(--border-color);white-space:nowrap;padding:7px 10px;font-size:11px;font-weight:500;position:sticky;top:0}.kb-table__th--narrow[data-v-8e2192af]{width:96px}.kb-table__row[data-v-8e2192af]{cursor:pointer;transition:background var(--transition-fast) var(--ease-custom)}.kb-table__row[data-v-8e2192af]:hover{background:var(--bg-container-hover)}.kb-table__td[data-v-8e2192af]{border-bottom:1px solid var(--border-color);color:var(--text-secondary);vertical-align:middle;padding:8px 10px}.kb-table__td--num[data-v-8e2192af]{font-variant-numeric:tabular-nums}.kb-table__name[data-v-8e2192af]{color:var(--text-primary)}.kb-table__project[data-v-8e2192af]{color:var(--text-tertiary);margin-left:6px;font-size:10.5px}.kb-table__status[data-v-8e2192af]{background:var(--bg-subtle);color:var(--text-secondary);border-radius:3px;padding:1px 6px;font-size:11px}.kb-table__status.is-doing[data-v-8e2192af]{color:var(--color-warning)}.kb-table__status.is-done[data-v-8e2192af]{color:var(--color-success)}.kb-table__empty[data-v-8e2192af]{text-align:center;color:var(--text-tertiary);padding:28px 10px}@media (width<=860px){.kb__columns[data-v-8e2192af]{display:block;overflow-y:auto}.kb-col[data-v-8e2192af]{border-left:none;border-top:1px solid var(--border-color)}.kb-col[data-v-8e2192af]:first-child{border-top:none}.kb-col__list[data-v-8e2192af]{overflow:visible}}.oc[data-v-df4963bd]{width:var(--wb-right-w,300px);border-left:1px solid var(--border-color);background:var(--bg-panel);min-height:0;transition:width var(--transition-base) var(--ease-custom);flex-direction:column;flex-shrink:0;display:flex}.board__cols.is-resizing .oc[data-v-df4963bd]{transition:none}.oc.is-collapsed[data-v-df4963bd]{width:32px}.oc__rail[data-v-df4963bd]{width:100%;min-height:0;color:var(--text-tertiary);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-direction:column;flex:auto;align-items:center;gap:8px;padding:10px 0;display:flex}.oc__rail[data-v-df4963bd]:hover{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 8%, transparent)}.oc__rail[data-v-df4963bd]:focus-visible{outline:var(--focus-outline);outline-offset:-2px}.oc__rail-icon[data-v-df4963bd]{flex-shrink:0;font-size:14px}.oc__rail-live[data-v-df4963bd]{background:var(--color-success);border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:1.6s ease-in-out infinite oc-pulse-df4963bd}.oc__rail-live.is-off[data-v-df4963bd]{background:var(--color-warning);animation:none}.oc__rail-text[data-v-df4963bd]{writing-mode:vertical-rl;letter-spacing:1px;color:var(--text-secondary);-webkit-user-select:none;user-select:none;font-size:11.5px}.oc__head[data-v-df4963bd]{border-bottom:1px solid var(--border-color);flex-shrink:0;align-items:center;gap:6px;padding:10px 12px;display:flex}.oc__live[data-v-df4963bd]{background:var(--color-success);border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:1.6s ease-in-out infinite oc-pulse-df4963bd}.oc__live.is-off[data-v-df4963bd]{background:var(--color-warning);animation:none}@keyframes oc-pulse-df4963bd{0%,to{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(1.35)}}.oc__title[data-v-df4963bd]{color:var(--text-secondary);flex:1;min-width:0;margin:0;font-size:12px;font-weight:500}.oc__toggle[data-v-df4963bd]{color:var(--text-tertiary);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:4px;padding:2px 6px;font-size:11px}.oc__toggle[data-v-df4963bd]:hover:not(:disabled){color:var(--color-warning);background:color-mix(in srgb, var(--color-warning) 10%, transparent)}.oc__toggle[data-v-df4963bd]:disabled{opacity:.5;cursor:default}.oc__toggle[data-v-df4963bd]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__collapse[data-v-df4963bd]{width:22px;height:22px;color:var(--text-tertiary);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}.oc__collapse[data-v-df4963bd]:hover{color:var(--color-primary)}.oc__collapse[data-v-df4963bd]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__state[data-v-df4963bd]{color:var(--text-secondary);background:var(--bg-subtle);flex-shrink:0;align-items:center;gap:6px;padding:6px 12px;font-size:11px;display:flex}.oc__state.is-paused[data-v-df4963bd]{color:var(--color-warning)}.oc__state-label[data-v-df4963bd]{color:var(--text-tertiary)}.oc__state-value[data-v-df4963bd]{font-weight:500}.oc__state-meta[data-v-df4963bd]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;margin-left:auto}.oc__feed[data-v-df4963bd]{flex-direction:column;flex:auto;min-height:0;padding:8px 0 0;display:flex}.oc__feed-title[data-v-df4963bd]{color:var(--text-tertiary);flex-shrink:0;align-items:center;gap:6px;margin:0 12px 6px;font-size:11px;display:flex}.oc__feed-list[data-v-df4963bd]{flex:auto;min-height:0;margin:0;padding:0 10px 10px;list-style:none;overflow-y:auto}.oc-row[data-v-df4963bd]{border-radius:var(--radius-md);background:var(--bg-subtle);margin-bottom:4px;padding:6px 8px}.oc-row--user[data-v-df4963bd]{background:color-mix(in srgb, var(--color-primary) 9%, transparent)}.oc-row--error[data-v-df4963bd]{background:color-mix(in srgb, var(--color-danger) 9%, transparent)}.oc-row--done[data-v-df4963bd]{background:color-mix(in srgb, var(--color-success) 8%, transparent)}.oc-row__head[data-v-df4963bd]{align-items:center;gap:6px;margin-bottom:2px;font-size:10px;display:flex}.oc-row__kind[data-v-df4963bd]{color:var(--text-tertiary)}.oc-row--user .oc-row__kind[data-v-df4963bd]{color:var(--color-primary)}.oc-row--error .oc-row__kind[data-v-df4963bd]{color:var(--color-danger-light)}.oc-row--done .oc-row__kind[data-v-df4963bd]{color:var(--color-success)}.oc-row__time[data-v-df4963bd]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;margin-left:auto}.oc-row__text[data-v-df4963bd]{color:var(--text-secondary);word-break:break-word;white-space:pre-wrap;margin:0;font-size:11.5px;line-height:1.55}.oc-row--user .oc-row__text[data-v-df4963bd]{color:var(--text-primary)}.oc-row__note[data-v-df4963bd]{color:var(--text-tertiary);margin:2px 0 0;font-size:10px}.oc-row__error[data-v-df4963bd]{color:var(--color-danger-light);-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;margin:3px 0 0;font-size:10px;line-height:1.5;display:-webkit-box;overflow:hidden}.oc-empty[data-v-df4963bd]{text-align:center;color:var(--text-tertiary);padding:20px 10px;font-size:11px;list-style:none}.oc__git[data-v-df4963bd]{border-top:1px solid var(--border-color);flex-shrink:0;padding:8px 12px 10px}.oc__git-name[data-v-df4963bd]{color:var(--text-secondary);font-weight:500}.oc__git-list[data-v-df4963bd]{grid-template-columns:auto 1fr;gap:4px 10px;margin:0;font-size:11px;display:grid}.oc__git-label[data-v-df4963bd]{color:var(--text-tertiary)}.oc__git-value[data-v-df4963bd]{text-align:right;color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;margin:0;overflow:hidden}.oc__git-value.is-warn[data-v-df4963bd]{color:var(--color-warning)}.oc__git-value.is-danger[data-v-df4963bd]{color:var(--color-danger-light)}.oc__compose[data-v-df4963bd]{border-top:1px solid var(--border-color);flex-shrink:0;padding:8px 12px 10px}.oc__input[data-v-df4963bd]{resize:vertical;width:100%;min-height:76px;max-height:min(380px,45vh);color:var(--text-primary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:border-color var(--transition-fast) var(--ease-custom);outline:none;padding:7px 8px;font-family:inherit;font-size:12px;line-height:1.5}.oc__input[data-v-df4963bd]:focus{border-color:var(--color-primary)}.oc__input[data-v-df4963bd]::placeholder{color:var(--text-tertiary)}.oc__compose-foot[data-v-df4963bd]{flex-wrap:wrap;align-items:center;gap:6px 8px;margin-top:6px;display:flex}.oc__attach[data-v-df4963bd]{width:26px;height:26px;color:var(--text-tertiary);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:14px;display:inline-flex}.oc__attach[data-v-df4963bd]:hover:not(:disabled),.oc__attach.is-on[data-v-df4963bd]{color:var(--color-primary)}.oc__attach[data-v-df4963bd]:disabled{opacity:.4;cursor:default}.oc__attach[data-v-df4963bd]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__autorn[data-v-df4963bd]{color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:4px;font-size:11px;display:inline-flex}.oc__autorn input[data-v-df4963bd]{cursor:pointer}.oc__executor[data-v-df4963bd]{vertical-align:middle}.oc__executor-btn[data-v-df4963bd]{border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-panel);height:22px;color:var(--text-secondary);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom);align-items:center;gap:5px;padding:0 8px;font-size:11px;display:inline-flex}.oc__executor-btn[data-v-df4963bd]:hover,.oc__executor-btn[data-v-df4963bd]:focus-visible{color:var(--color-primary);border-color:var(--color-primary)}.oc__executor-btn[data-v-df4963bd]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__executor-btn__icon[data-v-df4963bd]{font-size:13px}.oc__executor-btn__caret[data-v-df4963bd]{opacity:.7;font-size:10px}.oc__executor-item[data-v-df4963bd]{align-items:center;gap:8px;min-width:132px;display:inline-flex}.oc__executor-item__icon[data-v-df4963bd]{flex:none;font-size:14px}.oc__executor-item__name[data-v-df4963bd]{flex:1}.oc__executor-item__check[data-v-df4963bd]{color:var(--color-primary);font-size:12px}.oc__executor-item__missing[data-v-df4963bd]{color:var(--text-tertiary,var(--text-secondary));font-size:10px}.oc__send[data-v-df4963bd]{border-radius:var(--radius-md);background:var(--color-primary);color:#fff;cursor:pointer;transition:opacity var(--transition-fast) var(--ease-custom);border:none;align-items:center;gap:4px;margin-left:auto;padding:0 12px;font-size:11.5px;line-height:24px;display:inline-flex}.oc__send[data-v-df4963bd]:hover:not(:disabled){opacity:.88}.oc__send[data-v-df4963bd]:disabled{opacity:.45;cursor:default}.oc__send[data-v-df4963bd]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.oc__send-icon[data-v-df4963bd]{font-size:12px}.oc__hint[data-v-df4963bd]{color:var(--text-tertiary);margin:6px 0 0;font-size:10px;line-height:1.5}@media (width<=860px){.oc[data-v-df4963bd]{border-left:none;border-top:1px solid var(--border-color);min-height:72vh}.oc__collapse[data-v-df4963bd]{display:none}}.pd[data-v-eddf8c4d]{flex-direction:column;gap:14px;line-height:1.5;display:flex}.pd__intro[data-v-eddf8c4d]{color:var(--text-tertiary);margin:0;font-size:11.5px;line-height:1.6}.pd__field[data-v-eddf8c4d]{flex-direction:column;gap:5px;display:flex}.pd__head[data-v-eddf8c4d]{align-items:baseline;gap:8px;display:flex}.pd__label[data-v-eddf8c4d]{color:var(--text-secondary);font-size:11.5px;font-weight:500}.pd__count[data-v-eddf8c4d]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;margin-left:auto;font-size:10.5px}.pd__area[data-v-eddf8c4d]{box-sizing:border-box;resize:vertical;width:100%;min-height:92px;max-height:280px;color:var(--text-primary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:border-color var(--transition-fast) var(--ease-custom);outline:none;padding:7px 9px;font-family:inherit;font-size:12.5px;line-height:1.5}.pd__area[data-v-eddf8c4d]:focus{border-color:var(--color-primary)}.pd__area[data-v-eddf8c4d]::placeholder{color:var(--text-tertiary)}.pd__area[data-v-eddf8c4d]:disabled{opacity:.55;cursor:not-allowed}.pd__hint[data-v-eddf8c4d]{color:var(--text-tertiary);margin:0;font-size:10.5px;line-height:1.6}.pd__foot[data-v-eddf8c4d]{align-items:center;gap:8px;width:100%;display:flex}.pd__foot-spacer[data-v-eddf8c4d]{flex:1}.pd__btn[data-v-eddf8c4d]{color:var(--text-secondary);border-radius:var(--radius-md);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;padding:0 12px;font-size:12px;line-height:28px}.pd__btn[data-v-eddf8c4d]:hover:not(:disabled){color:var(--color-primary);background:var(--bg-container-hover)}.pd__btn[data-v-eddf8c4d]:disabled{opacity:.45;cursor:default}.pd__btn[data-v-eddf8c4d]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.pd__btn--primary[data-v-eddf8c4d]{background:var(--color-primary);color:#fff}.pd__btn--primary[data-v-eddf8c4d]:hover:not(:disabled){background:var(--color-primary);color:#fff;opacity:.88}.nc[data-v-518ff0be]{flex-direction:column;gap:14px;line-height:1.5;display:flex}.nc__field[data-v-518ff0be]{flex-direction:column;gap:5px;display:flex}.nc__label[data-v-518ff0be]{color:var(--text-secondary);font-size:11.5px;font-weight:500}.nc__input[data-v-518ff0be],.nc__select[data-v-518ff0be]{width:100%;color:var(--text-primary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:border-color var(--transition-fast) var(--ease-custom);box-sizing:border-box;outline:none;padding:7px 9px;font-family:inherit;font-size:12.5px;line-height:1.5}.nc__input[data-v-518ff0be]:focus,.nc__select[data-v-518ff0be]:focus{border-color:var(--color-primary)}.nc__input[data-v-518ff0be]::placeholder{color:var(--text-tertiary)}.nc__select[data-v-518ff0be]{cursor:pointer}.nc__input--area[data-v-518ff0be]{resize:vertical;min-height:92px;max-height:260px}.nc__hint[data-v-518ff0be]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;margin:0;font-size:10.5px;overflow:hidden}.nc__error[data-v-518ff0be]{border-radius:var(--radius-md);color:var(--color-danger-light);background:color-mix(in srgb, var(--color-danger) 10%, transparent);margin:0;padding:6px 8px;font-size:11.5px}.nc__foot[data-v-518ff0be]{align-items:center;gap:8px;width:100%;display:flex}.nc__foot-spacer[data-v-518ff0be]{flex:1}.nc__btn[data-v-518ff0be]{color:var(--text-secondary);border-radius:var(--radius-md);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);background:0 0;border:none;padding:0 12px;font-size:12px;line-height:28px}.nc__btn[data-v-518ff0be]:hover:not(:disabled){color:var(--color-primary);background:var(--bg-container-hover)}.nc__btn[data-v-518ff0be]:disabled{opacity:.45;cursor:default}.nc__btn[data-v-518ff0be]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.nc__btn--primary[data-v-518ff0be]{background:var(--color-primary);color:#fff}.nc__btn--primary[data-v-518ff0be]:hover:not(:disabled){background:var(--color-primary);color:#fff;opacity:.88}.board[data-v-6b379f54]{background:var(--bg-container);height:100%;min-height:0;color:var(--text-primary);--wb-left-w:264px;--wb-right-w:360px;flex-direction:column;display:flex}.board__top[data-v-6b379f54]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);flex-shrink:0;align-items:center;gap:16px;height:52px;padding:0 14px;display:flex}.board__brand[data-v-6b379f54]{align-items:center;gap:8px;min-width:0;display:flex}.board__live[data-v-6b379f54]{background:var(--color-success);border-radius:50%;flex-shrink:0;width:8px;height:8px;animation:1.6s ease-in-out infinite board-pulse-6b379f54}.board__live.is-off[data-v-6b379f54]{background:var(--color-warning);animation:none}@keyframes board-pulse-6b379f54{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(1.4)}}.board__brand-text[data-v-6b379f54]{min-width:0}.board__title[data-v-6b379f54]{color:var(--text-primary);margin:0;font-size:13.5px;font-weight:500;line-height:1.3}.board__subtitle[data-v-6b379f54]{color:var(--text-tertiary);margin:0;font-size:10.5px;line-height:1.3}.board__stats[data-v-6b379f54]{flex-wrap:wrap;align-items:center;gap:14px;min-width:0;margin-left:4px;display:flex}.board__stat[data-v-6b379f54]{color:var(--text-tertiary);align-items:baseline;gap:4px;font-size:11px;display:inline-flex}.board__stat-value[data-v-6b379f54]{color:var(--text-secondary);font-variant-numeric:tabular-nums;font-size:12.5px;font-weight:500}.board__stat-value.is-live[data-v-6b379f54]{color:var(--color-warning)}.board__actions[data-v-6b379f54]{flex-shrink:0;align-items:center;gap:8px;margin-left:auto;display:flex}.board__icon-btn[data-v-6b379f54]{color:var(--text-tertiary);cursor:pointer;width:26px;height:26px;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;font-size:14px;display:inline-flex}.board__icon-btn[data-v-6b379f54]:hover{color:var(--color-primary)}.board__icon-btn[data-v-6b379f54]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.board__scrim[data-v-6b379f54]{display:none}.board__cols[data-v-6b379f54]{flex:auto;min-height:0;display:flex;position:relative}.board__left[data-v-6b379f54]{width:var(--wb-left-w);background:var(--bg-panel);flex-direction:column;flex-shrink:0;min-height:0;display:flex}.board__splitter[data-v-6b379f54]{z-index:5;cursor:col-resize;touch-action:none;flex:0 0 5px;position:relative}.board__splitter[data-v-6b379f54]:after{content:"";width:1px;transition:background var(--transition-fast) var(--ease-custom);background:0 0;position:absolute;top:0;bottom:0;left:2px}.board__splitter[data-v-6b379f54]:hover:after,.board__splitter[data-v-6b379f54]:active:after,.board__cols.is-resizing .board__splitter[data-v-6b379f54]:after{background:var(--color-primary)}.board__splitter--h[data-v-6b379f54]{cursor:row-resize;flex:0 0 5px}.board__splitter--h[data-v-6b379f54]:after{background:var(--border-color);width:auto;height:1px;top:2px;bottom:auto;left:0}.board__splitter--h[data-v-6b379f54]:hover:after,.board__splitter--h[data-v-6b379f54]:active:after{background:var(--color-primary)}.board__main[data-v-6b379f54]{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}.board__main-head[data-v-6b379f54]{flex-shrink:0;align-items:center;gap:10px;min-width:0;padding:10px 14px 8px;display:flex}.board__main-title[data-v-6b379f54]{flex:1;align-items:baseline;gap:8px;min-width:0;display:flex}.board__project-name[data-v-6b379f54]{color:var(--text-primary);white-space:nowrap;flex-shrink:0;margin:0;font-size:14px;font-weight:500}.board__project-path[data-v-6b379f54]{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:11px;overflow:hidden}.board__project-meta[data-v-6b379f54]{color:var(--text-tertiary);font-variant-numeric:tabular-nums;flex-shrink:0;font-size:11px}@media (width<=1440px){.board[data-v-6b379f54]{--wb-left-w:224px;--wb-right-w:320px}}@media (width<=1180px){.board[data-v-6b379f54]{--wb-left-w:200px;--wb-right-w:280px}}@media (width>=1025px){.board__left[data-v-6b379f54]{transition:width var(--transition-base) var(--ease-custom)}.board__left.is-collapsed[data-v-6b379f54]{width:0;overflow:hidden}.board__cols.is-resizing .board__left[data-v-6b379f54]{transition:none}}@media (width<=1024px){.board__splitter--left[data-v-6b379f54]{display:none}.board__left[data-v-6b379f54]{z-index:20;width:min(var(--wb-left-w), 86vw);background:var(--bg-container);border-right:1px solid var(--border-color);box-shadow:var(--dialog-shadow);transition:transform var(--transition-base) var(--ease-custom);position:absolute;top:0;bottom:0;left:0}.board__left.is-collapsed[data-v-6b379f54]{pointer-events:none;transform:translate(-100%)}.board__scrim.is-on[data-v-6b379f54]{z-index:15;display:block;position:absolute;inset:0}}@media (width<=860px){.board[data-v-6b379f54]{--wb-right-w:100%}.board__splitter--right[data-v-6b379f54]{display:none}.board__cols[data-v-6b379f54]{flex-direction:column;overflow-y:auto}.board__main[data-v-6b379f54]{flex:none;min-height:72vh}.board__top[data-v-6b379f54]{flex-wrap:wrap;gap:6px 12px;height:auto;padding:8px 12px}.board__stats[data-v-6b379f54]{flex-basis:100%;order:3;gap:12px;margin-left:0}.board__actions[data-v-6b379f54]{margin-left:auto}}.workbench[data-v-0d7b3e71]{background:var(--bg-container);height:100%;color:var(--text-primary);flex-direction:column;display:flex}.wb-editor[data-v-0d7b3e71]{flex-direction:column;flex:auto;min-height:0;line-height:1.5;display:flex}.wb-editor-bar[data-v-0d7b3e71]{border-bottom:1px solid var(--border-color);background:var(--bg-panel);flex-shrink:0;align-items:center;gap:8px;height:34px;padding:0 12px;display:flex}.wb-back-btn[data-v-0d7b3e71]{color:var(--text-secondary);border-radius:var(--radius-md);cursor:pointer;transition:color var(--transition-fast) var(--ease-custom);background:0 0;border:none;align-items:center;gap:4px;padding:0 6px;font-size:12px;line-height:22px;display:inline-flex}.wb-back-btn[data-v-0d7b3e71]:hover{color:var(--color-primary)}.wb-back-btn[data-v-0d7b3e71]:focus-visible{outline:var(--focus-outline);outline-offset:1px}.wb-back-btn__icon[data-v-0d7b3e71]{font-size:13px}.wb-editor-bar__project[data-v-0d7b3e71]{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:12px;font-weight:500;overflow:hidden}.wb-editor-bar__hint[data-v-0d7b3e71]{color:var(--text-tertiary);flex-shrink:0;margin-left:auto;font-size:11px}.wb-editor-bar__repo[data-v-0d7b3e71]{text-overflow:ellipsis;white-space:nowrap;max-width:320px;color:var(--color-warning);background:color-mix(in srgb, var(--color-warning) 12%, transparent);font-variant-numeric:tabular-nums;border-radius:4px;flex-shrink:0;padding:0 6px;font-size:10.5px;line-height:16px;overflow:hidden}.wb-task-desc[data-v-0d7b3e71]{background:var(--bg-subtle);border-radius:10px;flex-shrink:0;min-width:0;margin:0;padding:0;overflow:hidden}.wb-task-options[data-v-0d7b3e71]{color:var(--text-secondary);align-items:center;gap:12px;padding:8px 12px 0;font-size:12px;display:flex}.wb-task-desc[open][data-v-0d7b3e71]{background:var(--bg-container)}.wb-task-desc__summary[data-v-0d7b3e71]{cursor:pointer;color:var(--text-secondary);-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:8px 0;font-size:12px;list-style:none;display:flex}.wb-task-desc__summary[data-v-0d7b3e71]::-webkit-details-marker{display:none}.wb-task-desc__summary[data-v-0d7b3e71]:hover{background:var(--bg-container-hover)}.wb-task-desc__caret[data-v-0d7b3e71]{color:var(--text-tertiary);font-size:12px;transition:transform .15s}.wb-task-desc__label[data-v-0d7b3e71]{letter-spacing:.1px;font-weight:500}.wb-task-desc__tag[data-v-0d7b3e71]{color:var(--color-primary);align-items:center;gap:5px;margin-left:auto;font-size:10px;font-weight:600;display:inline-flex}.wb-task-desc__tag-attachment[data-v-0d7b3e71]{background:var(--tint-primary-14);min-width:18px;height:16px;color:var(--color-primary);font-variant-numeric:tabular-nums;border-radius:8px;justify-content:center;align-items:center;padding:0 5px;display:inline-flex}.wb-task-desc[open] .wb-task-desc__summary[data-v-0d7b3e71]{margin-bottom:0}.wb-task-desc>.wb-textarea[data-v-0d7b3e71],.wb-task-desc[data-v-0d7b3e71]>.attachment-zone{margin:0 14px 0 0}.wb-task-desc>.wb-textarea[data-v-0d7b3e71]{max-width:100%;margin-bottom:0}.wb-task-desc[data-v-0d7b3e71]>.attachment-zone{margin-top:8px}.workbench__editor-row[data-v-0d7b3e71]{flex:1;min-height:0;display:flex}.wb-splitter[data-v-0d7b3e71]{cursor:col-resize;z-index:5;flex:0 0 5px;margin-right:-5px;position:relative}.wb-splitter[data-v-0d7b3e71]:after{content:"";width:1px;transition:background var(--transition-fast) var(--ease-custom);background:0 0;position:absolute;top:0;bottom:0;left:2px}.wb-splitter[data-v-0d7b3e71]:hover:after,.wb-splitter[data-v-0d7b3e71]:active:after{background:var(--color-primary)}.wb-sidebar[data-v-0d7b3e71]{background:var(--bg-panel);flex-direction:column;flex-shrink:0;gap:18px;width:268px;padding:14px 12px 18px;display:flex;overflow-y:auto}.wb-section[data-v-0d7b3e71]{flex-direction:column;flex-shrink:0;gap:8px;min-height:0;display:flex}.wb-section+.wb-section[data-v-0d7b3e71]{padding-top:16px}.wb-section__head[data-v-0d7b3e71]{align-items:center;gap:6px;padding:0 4px;display:flex}.wb-section__tag[data-v-0d7b3e71]{letter-spacing:.4px;height:18px;color:var(--text-tertiary);background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:var(--radius-sm);text-transform:uppercase;font-variant-numeric:tabular-nums;flex-shrink:0;align-items:center;padding:0 6px;font-size:10px;font-weight:600;display:inline-flex}.wb-section__tag--accent[data-v-0d7b3e71]{color:var(--color-primary);background:color-mix(in srgb, var(--color-primary) 9%, transparent);border-color:var(--tint-primary-22)}.wb-section__title[data-v-0d7b3e71]{color:var(--text-secondary);letter-spacing:.2px;flex:1;min-width:0;margin:0;font-size:12px;font-weight:600}.wb-section__action[data-v-0d7b3e71]{color:var(--text-tertiary);border-radius:var(--radius-sm);cursor:pointer;width:28px;height:28px;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:13px;display:inline-flex}.wb-section__action[data-v-0d7b3e71]:hover{background:var(--tint-primary-12);color:var(--color-primary)}.wb-new-btn[data-v-0d7b3e71]{border:1px dashed var(--tint-primary-35,color-mix(in srgb, var(--color-primary) 35%, transparent));background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 4%, transparent) 0%, color-mix(in srgb, var(--color-primary) 2%, transparent) 100%);width:100%;height:32px;color:var(--color-primary);letter-spacing:.05px;cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);border-radius:10px;align-items:center;gap:6px;padding:0 12px;font-size:12.5px;font-weight:600;display:flex}.wb-new-btn__icon[data-v-0d7b3e71]{transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0;font-size:13px}.wb-new-btn__shortcut[data-v-0d7b3e71]{display:none}.wb-new-btn[data-v-0d7b3e71]:hover{background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 10%, transparent) 0%, color-mix(in srgb, var(--color-primary) 6%, transparent) 100%);color:var(--color-primary);border-style:solid;border-color:var(--tint-primary-50)}.wb-new-btn:hover .wb-new-btn__icon[data-v-0d7b3e71]{transform:rotate(90deg)}.wb-new-btn[data-v-0d7b3e71]:active{transform:scale(.99)}.wb-new-btn[data-v-0d7b3e71]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-task-list[data-v-0d7b3e71],.wb-prompt-list[data-v-0d7b3e71]{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.wb-task-item[data-v-0d7b3e71]{cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:7px 10px;display:flex;position:relative}.wb-task-item[data-v-0d7b3e71]:hover{background:var(--bg-container-hover);border-color:#0000;transform:translateY(-.5px)}.wb-task-item:hover .wb-task-item__del[data-v-0d7b3e71]{opacity:1;transform:translate(0)}.wb-task-item.is-running[data-v-0d7b3e71]{background:color-mix(in srgb, var(--color-warning) 8%, transparent)}.wb-task-item.is-running[data-v-0d7b3e71]:hover{background:color-mix(in srgb, var(--color-warning) 14%, transparent);transform:none}.wb-task-item.active[data-v-0d7b3e71]{background:color-mix(in srgb, var(--color-primary) 10%, var(--bg-container));box-shadow:0 1px 3px color-mix(in srgb, var(--color-primary) 12%, transparent), 0 0 0 1px color-mix(in srgb, var(--color-primary) 18%, transparent);border-color:#0000}.wb-task-item.active[data-v-0d7b3e71]:after{content:"";background:linear-gradient(180deg, var(--color-primary) 0%, color-mix(in srgb, var(--color-primary) 70%, #fff) 100%);width:3px;box-shadow:0 0 8px color-mix(in srgb, var(--color-primary) 50%, transparent), 0 1px 3px color-mix(in srgb, var(--color-primary) 25%, transparent);border-radius:3px;position:absolute;top:5px;bottom:5px;left:-1px}.wb-task-item.active .wb-task-item__title[data-v-0d7b3e71]{color:var(--color-primary)}.wb-task-item.active .wb-task-item__del[data-v-0d7b3e71]{opacity:1;color:var(--color-primary)}.wb-task-item__running-dot[data-v-0d7b3e71]{background:var(--color-warning);width:6px;height:6px;box-shadow:0 0 0 0 color-mix(in srgb, var(--color-warning) 60%, transparent);border-radius:50%;flex:none;margin-left:auto;animation:1.4s ease-in-out infinite wb-running-pulse-0d7b3e71}@keyframes wb-running-pulse-0d7b3e71{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--color-warning) 60%, transparent);opacity:1;transform:scale(1)}50%{box-shadow:0 0 0 4px color-mix(in srgb, var(--color-warning) 0%, transparent);opacity:.75;transform:scale(1.35)}}.wb-task-item__body[data-v-0d7b3e71]{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.wb-task-item__title[data-v-0d7b3e71]{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;letter-spacing:-.05px;font-size:12px;font-weight:500;line-height:1.3;overflow:hidden}.wb-task-item__meta[data-v-0d7b3e71]{color:var(--text-tertiary);align-items:center;gap:5px;font-size:10px;line-height:1;display:flex}.wb-task-item__meta-item[data-v-0d7b3e71]{font-variant-numeric:tabular-nums;align-items:center;gap:3px;font-weight:500;display:inline-flex}.wb-task-item__meta-item--accent[data-v-0d7b3e71]{color:var(--color-primary)}.wb-task-item__meta-item--project[data-v-0d7b3e71]{background:color-mix(in srgb, var(--color-warning,#f59e0b) 14%, transparent);height:15px;color:color-mix(in srgb, var(--color-warning,#f59e0b) 80%, var(--text-primary));letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;border-radius:7px;align-items:center;max-width:110px;padding:0 5px;font-size:10px;font-weight:600;display:inline-flex;overflow:hidden}.wb-task-item.is-other-project[data-v-0d7b3e71]{opacity:.78}.wb-task-item.is-other-project[data-v-0d7b3e71]:hover{opacity:1}.wb-task-item__meta-icon[data-v-0d7b3e71]{opacity:.85;font-size:11px}.wb-task-item__num[data-v-0d7b3e71]{min-width:14px;color:var(--text-secondary);transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);padding:0 4px}.wb-task-item.active .wb-task-item__num[data-v-0d7b3e71]{color:var(--color-primary);background:var(--tint-primary-14)}.wb-task-item__meta-item--running .wb-task-item__num[data-v-0d7b3e71]{color:color-mix(in srgb, var(--color-warning,#f59e0b) 85%, var(--text-primary));background:color-mix(in srgb, var(--color-warning,#f59e0b) 18%, transparent);font-weight:600}.wb-task-item.is-running .wb-task-item__meta-icon[data-v-0d7b3e71]{color:color-mix(in srgb, var(--color-warning,#f59e0b) 80%, var(--text-primary));animation:1.4s ease-in-out infinite wb-task-running-icon-0d7b3e71}@keyframes wb-task-running-icon-0d7b3e71{0%,to{opacity:.55}50%{opacity:1}}.wb-task-item__del[data-v-0d7b3e71]{color:var(--text-tertiary);cursor:pointer;opacity:0;width:22px;height:22px;transition:opacity var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), transform var(--transition-fast) var(--ease-custom);background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex;transform:translate(-2px)}.wb-task-item__del[data-v-0d7b3e71]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger)}.wb-task-item__del[data-v-0d7b3e71]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset);opacity:1}.wb-task-item__del[data-v-0d7b3e71],.wb-prompt-item__del[data-v-0d7b3e71]{font-size:13px}.wb-prompt-item[data-v-0d7b3e71]{border-radius:var(--radius-md);font-size:var(--font-size-125);color:var(--text-primary);transition:background var(--transition-fast) var(--ease-custom);align-items:center;gap:8px;padding:7px 8px;display:flex;position:relative}.wb-prompt-item[data-v-0d7b3e71]:hover{background:var(--bg-container-hover)}.wb-prompt-item:hover .wb-prompt-item__del[data-v-0d7b3e71]{opacity:1}.wb-prompt-item__icon[data-v-0d7b3e71]{border-radius:var(--radius-sm);background:var(--tint-primary-08);width:22px;height:22px;color:var(--color-primary);flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-prompt-item__name[data-v-0d7b3e71]{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;min-width:0;color:var(--text-primary);letter-spacing:-.05px;flex:1;font-weight:500;overflow:hidden}.wb-prompt-item__tag[data-v-0d7b3e71]{border-radius:var(--radius-xs);letter-spacing:.1px;background:var(--tint-primary-08);max-width:96px;color:var(--color-primary);white-space:nowrap;text-overflow:ellipsis;flex-shrink:0;padding:1px 6px;font-size:10px;line-height:16px;overflow:hidden}.wb-prompt-item__tag--project[data-v-0d7b3e71]{background:var(--bg-subtle);color:var(--text-secondary);border:1px solid var(--border-color-light)}.wb-prompt-item__del[data-v-0d7b3e71]{color:var(--text-tertiary);border-radius:var(--radius-xs);cursor:pointer;opacity:0;width:20px;height:20px;transition:opacity var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.wb-prompt-item__del[data-v-0d7b3e71]:hover{background:color-mix(in srgb, var(--color-danger) 14%, transparent);color:var(--color-danger)}.wb-prompt-item__del[data-v-0d7b3e71]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset);opacity:1}.wb-split[data-v-0d7b3e71]{flex-direction:column;flex:1;gap:10px;min-height:0;padding:12px 24px 14px;display:flex;overflow:hidden}.wb-placeholder[data-v-0d7b3e71]{color:var(--text-tertiary);flex:1;justify-content:center;align-items:center;font-size:13px;display:flex}.wb-execution-body[data-v-0d7b3e71]{border:none;border-radius:0;flex:1;grid-template-columns:1fr;gap:16px;min-height:0;display:grid;overflow:hidden}.wb-exec-detail[data-v-0d7b3e71]{background:0 0;flex-direction:column;gap:14px;min-width:0;min-height:0;padding:4px 4px 8px;display:flex;overflow:auto}.wb-split__header[data-v-0d7b3e71]{flex-shrink:0;align-items:center;gap:10px;padding-bottom:4px;padding-right:8px;display:flex}.wb-split__title-wrap[data-v-0d7b3e71]{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.wb-split__title-wrap .wb-input--title[data-v-0d7b3e71]{flex:1;min-width:0}.wb-copy-btn[data-v-0d7b3e71]{appearance:none;border:1px solid var(--border-color);background:var(--bg-container);width:28px;height:28px;color:var(--text-tertiary);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom), transform .1s var(--ease-custom);border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.wb-copy-btn[data-v-0d7b3e71]:hover:not(:disabled){background:var(--tint-primary-12);border-color:var(--tint-primary-35);color:var(--color-primary)}.wb-copy-btn[data-v-0d7b3e71]:active:not(:disabled){transform:scale(.94)}.wb-copy-btn[data-v-0d7b3e71]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-copy-btn.is-flash[data-v-0d7b3e71]{background:var(--tint-success-14,color-mix(in srgb, var(--color-success) 14%, transparent));border-color:var(--tint-success-35,color-mix(in srgb, var(--color-success) 35%, transparent));color:var(--color-success-dark,#047857)}.wb-copy-btn__icon[data-v-0d7b3e71]{font-size:13px;line-height:1}.wb-copy-btn__icon--check[data-v-0d7b3e71]{font-size:14px;font-weight:800}.wb-copy-btn--inline[data-v-0d7b3e71]{border-radius:6px;width:22px;height:22px;margin-left:2px}.wb-copy-btn--inline .wb-copy-btn__icon[data-v-0d7b3e71]{font-size:11px}@keyframes wb-ai-sparkle-pulse-0d7b3e71{0%,to{opacity:.9;transform:scale(1)}50%{opacity:1;transform:scale(1.12)}}.wb-no-claude-hint[data-v-0d7b3e71]{border:1px solid color-mix(in srgb, var(--color-warning,#f59e0b) 32%, transparent);background:color-mix(in srgb, var(--color-warning,#f59e0b) 8%, transparent);height:32px;color:color-mix(in srgb, var(--color-warning,#f59e0b) 75%, var(--text-primary));border-radius:var(--radius-md);white-space:nowrap;flex-shrink:0;align-items:center;gap:6px;padding:0 12px;font-size:12px;font-weight:500;display:inline-flex}.wb-executor-split[data-v-0d7b3e71]{flex-shrink:0}.wb-executor-split__hint[data-v-0d7b3e71]{opacity:.85;border-left:1px solid #ffffff59;align-items:center;gap:4px;margin-left:6px;padding-left:8px;font-size:11px;font-weight:400;display:inline-flex}.wb-executor-split__hint-icon[data-v-0d7b3e71]{font-size:12px}.wb-executor-item[data-v-0d7b3e71]{align-items:center;gap:8px;min-width:132px;display:inline-flex}.wb-executor-item__icon[data-v-0d7b3e71]{flex:none;font-size:14px}.wb-executor-item__name[data-v-0d7b3e71]{flex:1}.wb-executor-item__check[data-v-0d7b3e71]{color:var(--el-color-primary)}.wb-executor-item__missing[data-v-0d7b3e71]{color:var(--text-secondary,var(--el-text-color-secondary));font-size:11px}.wb-no-claude-hint__icon[data-v-0d7b3e71]{opacity:.9;font-size:14px}.wb-no-claude-hint__text[data-v-0d7b3e71]{letter-spacing:-.05px}.wb-no-claude-hint__link[data-v-0d7b3e71]{color:var(--color-primary);border-bottom:1px dashed color-mix(in srgb, var(--color-primary) 45%, transparent);margin-left:2px;font-weight:600;text-decoration:none}.wb-no-claude-hint__link[data-v-0d7b3e71]:hover{border-bottom-style:solid}.wb-logs-inline-btn[data-v-0d7b3e71]{appearance:none;border:1px solid var(--border-color);background:var(--bg-container);height:32px;color:var(--text-secondary);border-radius:var(--radius-md);cursor:pointer;white-space:nowrap;flex-shrink:0;align-items:center;gap:5px;padding:0 12px;font-size:12.5px;font-weight:500;transition:background .15s,color .15s,border-color .15s;display:inline-flex}.wb-logs-inline-btn[data-v-0d7b3e71]:hover{background:var(--tint-primary-12);color:var(--color-primary);border-color:var(--tint-primary-35)}.wb-logs-inline-btn--danger[data-v-0d7b3e71]{color:var(--text-secondary);border-color:var(--border-color);background:var(--bg-container)}.wb-logs-inline-btn--danger[data-v-0d7b3e71]:hover{color:var(--color-danger,#ef4444);border-color:var(--tint-danger-50);background:var(--tint-danger-06)}.wb-logs-inline-btn[data-v-0d7b3e71]:focus-visible{outline:2px solid var(--color-primary);outline-offset:1px}.wb-logs-inline-btn__icon[data-v-0d7b3e71]{font-size:14px}.wb-input[data-v-0d7b3e71],.wb-select[data-v-0d7b3e71],.wb-textarea[data-v-0d7b3e71]{color:var(--text-primary);background:var(--bg-container);border:1px solid var(--border-color-medium);border-radius:var(--radius-md);box-shadow:var(--wb-card-inset-shadow);transition:border-color var(--transition-fast) var(--ease-custom), box-shadow var(--transition-fast) var(--ease-custom), background var(--transition-fast) var(--ease-custom);appearance:none;outline:none;font-family:inherit}.wb-input[data-v-0d7b3e71]::placeholder,.wb-textarea[data-v-0d7b3e71]::placeholder{color:var(--text-placeholder);font-weight:400}.wb-input[data-v-0d7b3e71]{height:36px;font-size:var(--font-size-135);letter-spacing:-.05px;padding:0 12px;line-height:1.2}.wb-input[data-v-0d7b3e71]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background:var(--bg-container-hover)}.wb-input[data-v-0d7b3e71]:focus{border-color:var(--color-primary);background:var(--bg-container);box-shadow:0 0 0 3px var(--tint-primary-18), var(--wb-card-inset-shadow)}.wb-input--title[data-v-0d7b3e71]{letter-spacing:-.4px;border-color:var(--border-color);height:36px;box-shadow:none;background:0 0;flex:1;padding:0 12px;font-size:14px;font-weight:600}.wb-input--title[data-v-0d7b3e71]:hover:not(:focus){border-color:var(--border-color-medium);background:var(--bg-container)}.wb-input--title[data-v-0d7b3e71]:focus{border-color:var(--color-primary);background:var(--bg-container);box-shadow:0 0 0 3px var(--tint-primary-14)}.wb-input--title[data-v-0d7b3e71]::placeholder{color:var(--text-placeholder);font-weight:500}.wb-select[data-v-0d7b3e71]{cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'><path d='M3 4.5l3 3 3-3' fill='none' stroke='%236b7280' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/></svg>");background-position:right 10px center;background-repeat:no-repeat;background-size:12px 12px;flex-shrink:0;min-width:168px;height:36px;padding:0 32px 0 12px;font-size:13px;font-weight:500}.wb-select[data-v-0d7b3e71]:hover:not(:focus){border-color:var(--border-input-hover,#cbd5e1);background-color:var(--bg-container-hover)}.wb-select[data-v-0d7b3e71]:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--tint-primary-18)}.wb-textarea[data-v-0d7b3e71]{letter-spacing:-.05px;resize:vertical;box-sizing:border-box;background:var(--bg-container);width:100%;min-height:52px;box-shadow:none;border-color:var(--border-color);flex-shrink:0;padding:10px 14px;font-size:13px;line-height:1.55;display:block}.wb-textarea[data-v-0d7b3e71]::placeholder{color:var(--text-placeholder);line-height:1.55}.wb-textarea[data-v-0d7b3e71]:hover:not(:focus){border-color:var(--border-color-medium);background:var(--bg-container-hover)}.wb-textarea[data-v-0d7b3e71]:focus{border-color:var(--color-primary);background:var(--bg-container-hover);box-shadow:0 0 0 3px var(--tint-primary-14)}.wb-textarea--focus-expand[data-v-0d7b3e71]:focus{max-height:500px;transition:max-height .2s var(--ease-custom)}.wb-textarea--autogrow[data-v-0d7b3e71]{resize:none;min-height:52px;max-height:320px;transition:height .12s var(--ease-custom);overflow-y:hidden}.wb-split__sub-header[data-v-0d7b3e71]{flex-shrink:0;justify-content:space-between;align-items:center;margin-top:8px;display:flex}.wb-split__sub-header h4[data-v-0d7b3e71]{color:var(--text-secondary);margin:0;font-size:13px;font-weight:600}.wb-simple__header[data-v-0d7b3e71]{border-left:2px solid var(--color-primary);flex-shrink:0;align-items:baseline;gap:10px;margin-top:8px;padding-left:8px;display:flex}.wb-simple__header h4[data-v-0d7b3e71]{color:var(--text-primary);letter-spacing:-.05px;margin:0;font-size:13px;font-weight:600}.wb-simple__hint[data-v-0d7b3e71]{font-size:var(--font-size-115);color:var(--text-tertiary)}.wb-simple__status-row[data-v-0d7b3e71]{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:8px;margin-top:2px;display:flex}.wb-simple__status[data-v-0d7b3e71]{width:8px;height:8px;transition:background var(--transition-fast) var(--ease-custom);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;gap:5px;padding:0;display:inline-flex}.wb-simple__status--dot[data-v-0d7b3e71]{border-radius:50%}.wb-simple__status-text[data-v-0d7b3e71]{display:none}.wb-simple__meta[data-v-0d7b3e71]{font-size:var(--font-size-115);color:var(--text-tertiary);letter-spacing:-.05px;text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.wb-simple__meta--error[data-v-0d7b3e71]{color:var(--color-danger)}.wb-simple__status[style*=--text-tertiary] .wb-simple__status-dot[data-v-0d7b3e71]{background:var(--text-tertiary)}.wb-simple__stop[data-v-0d7b3e71]{border-radius:var(--radius-sm);border:1px solid var(--color-danger-bright);color:var(--color-danger-bright);font-size:var(--font-size-115);cursor:pointer;transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);background:0 0;margin-left:auto;padding:2px 10px;font-weight:600}.wb-simple__stop[data-v-0d7b3e71]:hover:not(:disabled){background:var(--color-danger-bright);color:#fff}.wb-simple__stop[data-v-0d7b3e71]:disabled{opacity:.45;cursor:not-allowed}.wb-simple__override[data-v-0d7b3e71]{border-radius:var(--radius-md)}.wb-simple__override>.wb-textarea[data-v-0d7b3e71]{margin-top:8px}.wb-simple__override-summary[data-v-0d7b3e71]{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;padding:4px 0;list-style:none;display:flex}.wb-simple__override-summary[data-v-0d7b3e71]::-webkit-details-marker{display:none}.wb-simple__override-caret[data-v-0d7b3e71]{color:var(--text-tertiary);transition:transform var(--transition-fast) var(--ease-custom);font-size:12px}.wb-simple__override[open]>.wb-simple__override-summary .wb-simple__override-caret[data-v-0d7b3e71]{color:var(--color-primary);transform:rotate(90deg)}.wb-simple__override.has-content>.wb-simple__override-summary[data-v-0d7b3e71]{color:var(--text-primary)}.wb-simple__override-tag[data-v-0d7b3e71]{background:var(--tint-primary-12,color-mix(in srgb, var(--color-primary) 12%, transparent));color:var(--color-primary);letter-spacing:.2px;border-radius:8px;padding:1px 6px;font-size:10px;font-weight:600}.wb-simple-chat-wrap[data-v-0d7b3e71]{border:1px solid var(--border-color);border-radius:var(--radius-sm,4px);background:var(--bg-code);--acu-bg:var(--bg-code);flex-direction:column;flex:1;min-height:0;margin-top:6px;display:flex;overflow:hidden}.wb-simple-chat[data-v-0d7b3e71]{flex:1;min-height:0}.wb-simple-chat[data-v-0d7b3e71] .acu-chat-footer{display:none}.wb-simple-chat[data-v-0d7b3e71] .acu-chat,.wb-simple-chat[data-v-0d7b3e71] .acu-message-list,.wb-simple-chat[data-v-0d7b3e71] .acu-message-list-inner>*{background:0 0}.wb-simple-chat[data-v-0d7b3e71] .acu-chat,.wb-simple-chat[data-v-0d7b3e71] .acu-message-list{background:var(--bg-code)}.wb-simple-chat[data-v-0d7b3e71] .acu-message-list-inner{gap:10px;max-width:100%;margin:0;padding:10px 8px 14px}.wb-simple-chat[data-v-0d7b3e71] .acu-bubble-main{max-width:100%}.wb-simple-chat[data-v-0d7b3e71] .acu-bubble{font-size:12px}.wb-simple-chat[data-v-0d7b3e71] .acu-bubble-name{font-size:10px}.wb-simple-chat__footer[data-v-0d7b3e71]{background:var(--bg-code);flex-shrink:0;padding:0 4px 4px}.wb-simple-chat__input[data-v-0d7b3e71]{width:100%}.wb-form-item[data-v-0d7b3e71]{flex-direction:column;flex-shrink:0;gap:6px;display:flex}.wb-form-item__label[data-v-0d7b3e71]{color:var(--text-secondary);letter-spacing:-.05px;font-size:12px;font-weight:500}.wb-sub-list[data-v-0d7b3e71]{flex-direction:column;flex:1;gap:8px;min-height:0;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}@keyframes wb-progress-slide-0d7b3e71{0%{background-position:-50% 0}to{background-position:150% 0}}@keyframes wb-card-glow-0d7b3e71{0%,to{box-shadow:0 0 0 1px var(--tint-primary-30), 0 4px 18px -4px color-mix(in srgb, var(--color-primary) 25%, transparent)}50%{box-shadow:0 0 0 1px var(--tint-primary-50), 0 6px 24px -2px color-mix(in srgb, var(--color-primary) 38%, transparent)}}@keyframes wb-card-sweep-0d7b3e71{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes wb-border-shimmer-0d7b3e71{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes wb-status-dot-pulse-0d7b3e71{0%,to{transform:scale(1);box-shadow:0 0 4px #ffffff73}50%{transform:scale(1.35);box-shadow:0 0 8px #ffffffd9}}@keyframes wb-status-dot-0d7b3e71{0%,to{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.7)}}@media (prefers-reduced-motion:reduce){.wb-sub-expand-enter-active[data-v-0d7b3e71],.wb-sub-expand-leave-active[data-v-0d7b3e71]{transition:none}}.wb-sub-expand-enter-active[data-v-0d7b3e71],.wb-sub-expand-leave-active[data-v-0d7b3e71]{transition:grid-template-rows var(--transition-base,.22s) var(--ease-custom), opacity var(--transition-fast) var(--ease-custom);overflow:hidden}.wb-sub-expand-enter-from[data-v-0d7b3e71],.wb-sub-expand-leave-to[data-v-0d7b3e71]{opacity:0;grid-template-rows:0fr}.wb-sub-expand-enter-to[data-v-0d7b3e71],.wb-sub-expand-leave-from[data-v-0d7b3e71]{opacity:1;grid-template-rows:1fr}.wb-sub-expand-inner[data-v-0d7b3e71]{min-height:0;overflow:hidden}.wb-task-group__head[data-v-0d7b3e71]{color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:var(--radius-sm);transition:background var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);align-items:center;gap:6px;margin-top:4px;padding:8px 6px 4px;font-size:13px;font-weight:600;display:flex}.wb-task-group__head[data-v-0d7b3e71]:first-child{border-top:none;margin-top:0;padding-top:4px}.wb-task-group__head[data-v-0d7b3e71]:hover{background:var(--tint-primary-08);color:var(--text-secondary)}.wb-task-group__head[data-v-0d7b3e71]:focus-visible{outline:var(--focus-outline);outline-offset:var(--focus-outline-offset)}.wb-task-group__head.is-current[data-v-0d7b3e71]{color:var(--color-primary);border-top-color:var(--tint-primary-30)}.wb-task-group__head.is-collapsed[data-v-0d7b3e71]{background:var(--bg-subtle);border-top-style:solid;margin-top:6px;padding-top:6px;padding-bottom:6px}.wb-task-group__head.is-collapsed.is-current[data-v-0d7b3e71]{background:color-mix(in srgb, var(--color-primary) 8%, var(--bg-subtle))}.wb-task-group__caret[data-v-0d7b3e71]{opacity:.75;transition:transform var(--transition-fast) var(--ease-custom);flex-shrink:0;font-size:12px}.wb-task-group__icon[data-v-0d7b3e71]{opacity:.8;flex-shrink:0;font-size:14px}.wb-task-group__name[data-v-0d7b3e71]{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.wb-task-group__count[data-v-0d7b3e71]{min-width:18px}.wb-task-group__head.is-current .wb-task-group__count[data-v-0d7b3e71]{background:var(--tint-primary-16,color-mix(in srgb, var(--color-primary) 16%, transparent));color:var(--color-primary)}.wb-meta-save[data-v-0d7b3e71]{letter-spacing:.1px;border:1px solid var(--border-color-medium);background:var(--bg-container);height:24px;color:var(--text-tertiary);-webkit-user-select:none;user-select:none;transition:background var(--transition-fast) var(--ease-custom), border-color var(--transition-fast) var(--ease-custom), color var(--transition-fast) var(--ease-custom);border-radius:12px;flex-shrink:0;align-items:center;gap:5px;padding:0 10px;font-size:11px;font-weight:600;display:inline-flex}.wb-meta-save__dot[data-v-0d7b3e71]{opacity:.85;background:currentColor;border-radius:50%;width:6px;height:6px;display:inline-block}.wb-meta-save__check[data-v-0d7b3e71]{font-size:12px;line-height:1}.wb-meta-save__bang[data-v-0d7b3e71]{color:#fff;background:currentColor;border-radius:50%;justify-content:center;align-items:center;width:12px;height:12px;font-size:9px;font-weight:800;line-height:1;display:inline-flex}.wb-meta-save.is-saving[data-v-0d7b3e71]{color:var(--color-primary);border-color:var(--tint-primary-35);background:color-mix(in srgb, var(--color-primary) 8%, var(--bg-container))}.wb-meta-save.is-saving .wb-meta-save__dot[data-v-0d7b3e71]{animation:1.2s ease-in-out infinite wb-meta-pulse-0d7b3e71}.wb-meta-save.is-saved[data-v-0d7b3e71]{color:var(--color-success-dark,#047857);border-color:var(--tint-success-35);background:var(--tint-success-08)}.wb-meta-save.is-dirty[data-v-0d7b3e71]{color:var(--color-warning-dark,#b45309);border-color:var(--tint-warning-45);background:var(--tint-warning-06)}.wb-meta-save.is-error[data-v-0d7b3e71]{color:var(--color-danger-dark,#b91c1c);border-color:var(--tint-danger-45);background:var(--tint-danger-06)}@keyframes wb-meta-pulse-0d7b3e71{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.1)}}@media (prefers-reduced-motion:reduce){.wb-meta-save.is-saving .wb-meta-save__dot[data-v-0d7b3e71]{animation:none}}.wb-logs-dialog{flex-direction:column;max-height:88vh;display:flex}.wb-logs-dialog .el-dialog__body{flex:auto;min-height:0;max-height:calc(88vh - 60px);padding:12px 20px 16px;overflow:auto}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import"./rolldown-runtime-C0FnF6B9.js";import{$n as e,Bn as t,C as n,Cn as r,Dn as i,E as a,En as o,Er as s,F as c,Ft as l,Gt as u,Ht as d,In as f,J as p,Jt as m,K as h,L as g,Lt as _,M as ee,Mt as v,Nn as y,On as b,P as te,Pn as x,Pr as S,Qr as C,Rt as ne,S as w,St as T,Tn as E,Tt as D,U as O,V as k,Vt as A,W as re,Wn as j,Y as ie,Yn as ae,Yr as oe,Zn as M,_n as se,a as N,an as ce,at as P,b as F,bn as I,br as L,cr as R,ct as le,dn as z,et as ue,ft as de,gn as fe,gt as pe,i as me,kn as B,lr as V,mn as he,nr as ge,o as _e,or as H,pr as U,q as ve,qn as ye,qr as W,r as be,st as xe,ut as Se,v as Ce,vn as we,vr as Te,vt as Ee,w as De,xn as G,xt as K,y as q,yn as J,zt as Oe}from"./element-plus-IG-bwpR5.js";import{a as ke,i as Ae,o as je,r as Y}from"./vendor-DcK6TCKZ.js";import{n as X,t as Me}from"./_plugin-vue_export-helper-Dcylt9fO.js";import{t as Ne}from"./SvgIcon-VCh_kGGV.js";import{t as Pe}from"./configStore-BlqdtNUA.js";import{t as Fe}from"./toolsStore-BlRHNqXl.js";import{t as Ie}from"./CommonDialog-DNnN70HC.js";import{T as Z,_ as Le,a as Re,c as ze,d as Be,f as Ve,g as He,h as Ue,i as We,l as Ge,m as Ke,o as qe,p as Q,s as Je,u as $}from"./index-DGHrUfrh.js";t(),U(),S(),z();var Ye={class:`wb-attachments__head`},Xe={class:`wb-attachments__label`},Ze={class:`wb-attachments__count`},Qe=[`disabled`],$e={key:0,class:`wb-attachments__paste-hint`},et={key:1,class:`wb-attachments__list`},tt=[`title`,`onClick`,`onContextmenu`],nt=[`src`,`alt`],rt={key:1},it={class:`wb-attachment__meta`},at=[`title`],ot=[`onClick`,`title`],st=Me(f({__name:`AttachmentZone`,props:{attachments:{},isImage:{type:Function},humanSize:{type:Function},isUploading:{type:Boolean},isPasteHover:{type:Boolean},maxCount:{},onPick:{type:Function},onRemove:{type:Function},rawBase:{}},emits:[`paste`,`drop`,`dragover`,`dragenter`,`dragleave`],setup(t,{emit:n}){let a=t;function c(e){return`${a.rawBase||`/api/workbench/attachments`}/${e.id}/raw`}let l=n,u=E(()=>a.attachments.filter(e=>a.isImage(e))),d=E(()=>u.value.map(e=>c(e))),f=L(0),p=L(!1);function m(e){if(a.isImage(e)){let t=u.value.findIndex(t=>t.id===e.id);f.value=t>=0?t:0,p.value=!0}else window.open(c(e),`_blank`,`noopener`)}function h(){p.value=!1}let g=L({visible:!1,x:0,y:0,att:null}),_=L(!1);function ee(e,t){if(!a.isImage(e))return;t.preventDefault();let n=window.innerWidth-180,r=window.innerHeight-120;g.value={visible:!0,x:Math.min(t.clientX,n),y:Math.min(t.clientY,r),att:e}}function v(){g.value.visible&&(g.value.visible=!1)}async function te(){let e=g.value.att;if(e&&!_.value){if(v(),!navigator.clipboard||typeof ClipboardItem>`u`){N({type:`warning`,message:X(`@WORKBENCH:当前浏览器不支持复制图片`)});return}_.value=!0;try{let t=await fetch(c(e),{credentials:`same-origin`});if(!t.ok)throw Error(`HTTP ${t.status}`);let n=await t.blob(),r=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`].includes(n.type)?n.type:`image/png`,i=new ClipboardItem({[r]:n});await navigator.clipboard.write([i]),N({type:`success`,message:X(`@WORKBENCH:图片已复制到剪贴板`),duration:1800})}catch(e){N({type:`error`,message:X(`@WORKBENCH:复制失败 {error}`,{error:e?.message||``})})}finally{_.value=!1}}}return typeof window<`u`&&(window.addEventListener(`click`,v),window.addEventListener(`scroll`,v,!0),window.addEventListener(`blur`,v)),ye(()=>{typeof window<`u`&&(window.removeEventListener(`click`,v),window.removeEventListener(`scroll`,v,!0),window.removeEventListener(`blur`,v))}),(n,a)=>(M(),B(G,null,[o(`div`,{class:W([`wb-attachments`,{"is-paste-hover":t.isPasteHover}]),onPaste:a[1]||=e=>l(`paste`,e),onDrop:a[2]||=I(e=>l(`drop`,e),[`prevent`]),onDragover:a[3]||=I(e=>l(`dragover`,e),[`prevent`]),onDragenter:a[4]||=I(e=>l(`dragenter`,e),[`prevent`]),onDragleave:a[5]||=e=>l(`dragleave`,e)},[o(`div`,Ye,[o(`span`,Xe,[y(C(s(X)(`@WORKBENCH:附件`))+` `,1),o(`span`,Ze,C(t.attachments.length)+` / `+C(t.maxCount),1)]),o(`button`,{class:`wb-attachments__add wb-soft-btn`,disabled:t.isUploading||t.attachments.length>=t.maxCount,onClick:a[0]||=(...e)=>t.onPick&&t.onPick(...e)},C(t.isUploading?s(X)(`@WORKBENCH:上传中…`):s(X)(`@WORKBENCH:添加附件`)),9,Qe)]),t.isPasteHover?(M(),B(`div`,$e,C(s(X)(`@WORKBENCH:粘贴图片以快速添加`)),1)):b(``,!0),t.attachments.length>0?(M(),B(`ul`,et,[(M(!0),B(G,null,e(t.attachments,e=>(M(),B(`li`,{key:e.id,class:`wb-attachment`},[o(`button`,{type:`button`,class:`wb-attachment__preview`,title:s(X)(`@WORKBENCH:点击预览`),onClick:t=>m(e),onContextmenu:t=>ee(e,t)},[o(`div`,{class:W([`wb-attachment__icon`,{"wb-attachment__icon--img":t.isImage(e)}])},[t.isImage(e)?(M(),B(`img`,{key:0,src:c(e),alt:e.originalName,loading:`lazy`},null,8,nt)):(M(),B(`span`,rt,C(e.ext.toUpperCase()),1))],2),o(`div`,it,[o(`div`,{class:`wb-attachment__name`,title:`${e.originalName} (${t.humanSize(e.size)})`},C(e.originalName),9,at)])],40,tt),o(`button`,{class:`wb-attachment__del`,onClick:I(n=>t.onRemove(e),[`stop`]),title:s(X)(`@WORKBENCH:删除`)},`×`,8,ot)]))),128))])):b(``,!0)],34),p.value&&d.value.length>0?(M(),i(s(F),{key:0,"url-list":d.value,"initial-index":f.value,"hide-on-click-modal":!0,teleported:!0,onClose:h},null,8,[`url-list`,`initial-index`])):b(``,!0),(M(),i(r,{to:`body`},[g.value.visible&&g.value.att&&t.isImage(g.value.att)?(M(),B(`ul`,{key:0,class:`wb-ctx-menu`,style:oe({top:g.value.y+`px`,left:g.value.x+`px`}),onContextmenu:a[6]||=I(()=>{},[`prevent`])},[o(`li`,{class:W([`wb-ctx-menu__item`,{"is-disabled":_.value}]),onClick:te},[a[7]||=o(`span`,{class:`wb-ctx-menu__icon`,"aria-hidden":`true`},[o(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,fill:`none`,stroke:`currentColor`,"stroke-width":`1.8`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[o(`rect`,{x:`9`,y:`9`,width:`11`,height:`11`,rx:`2`}),o(`path`,{d:`M5 15V5a2 2 0 0 1 2-2h10`})])],-1),o(`span`,null,C(s(X)(`@WORKBENCH:复制图片`)),1)],2)],36)):b(``,!0)]))],64))}}),[[`__scopeId`,`data-v-4713db74`]]),ct=je(`claude`),lt=je(`opencode`);function ut(e){return e===`opencode`?lt: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 ft(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 pt=8192;function mt(e,t){return e.length>t?`…(前文已截断)\n${e.slice(-t)}`:e}function ht(e,t){let n=e||`done`;return n!==`pending`&&n!==`running`||t===`running`||t===`pending`?n:t===`cancelled`||t===`error`?`error`:`done`}function gt(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=ht(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?mt(o,pt):``,status:a,error:typeof i.error==`string`&&i.error?i.error:void 0})}return r}t(),U(),S(),z();var _t=[`aria-expanded`],vt={class:`wb-log-summary__left`},yt={key:0,class:`wb-log-summary__status wb-log-summary__status--running`},bt={class:`wb-log-summary__label`},xt={key:0,class:`wb-log-summary__elapsed`},St={key:1,class:`wb-log-summary__status wb-log-summary__status--pending`},Ct={class:`wb-log-summary__label`},wt={class:`wb-log-summary__icon`},Tt={class:`wb-log-summary__label`},Et={key:0,class:`wb-log-summary__elapsed`},Dt={key:3},Ot={class:`wb-log-summary__right`},kt={class:`wb-log-summary__meta`},At=[`title`,`aria-label`],jt={class:`wb-log-details__body`},Mt={key:0,class:`wb-chat__foot`},Nt=[`title`,`aria-label`],Pt={key:1,class:`wb-log-fullscreen__empty`},Ft=65536,It=Me(f({__name:`JobLogDetails`,props:{job:{}},emits:[`re-execute`],setup(e,{emit:t}){let n=Pe(),r=e,c=t,l=L(!1);function u(){l.value=!l.value}let d=E(()=>r.job.status===`running`||r.job.status===`pending`);H(()=>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<=Ft?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}function p(){let e=r.job.thinking||``;return e?e.length<=Ft?e:`${X(`@WORKBENCH:…(前文已截断)`)}\n${e.slice(-65536)}`:``}async function m(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 h(){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 m(e.join(`
|
|
2
|
-
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
`))?N.success(X(`@WORKBENCH:已复制到剪贴板`)):N.error(X(`@WORKBENCH:复制失败`))}let g=E(()=>{let e=r.job.status;return e===`done`||e===`error`||e===`cancelled`}),_=E(()=>r.job.status===`cancelled`?`wb-log-summary__status--cancelled`:r.job.status===`error`?`wb-log-summary__status--error`:`wb-log-summary__status--done`),ee=E(()=>r.job.status===`cancelled`?`⏹`:r.job.status===`error`?`✗`:`✓`),v=E(()=>r.job.status===`cancelled`?X(`@WORKBENCH:已停止`):r.job.status===`error`?X(`@WORKBENCH:执行出错`):X(`@WORKBENCH:执行完成`)),y=E(()=>r.job?.agent===`opencode`?`OpenCode`:`Claude`),te=E(()=>ut(r.job?.agent));function S(e,t){return e===`running`||e===`pending`?t?`streaming`:`pending`:e===`error`?`error`:`done`}let ne=E(()=>{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=gt(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=L(null);H(()=>r.job.status,(e,t)=>{e===`running`&&t!==`running`&&(w.value=w.value??Date.now())});let T=E(()=>{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=L(!1),O=E(()=>!!(r.job.output&&r.job.output.length)),k=E(()=>r.job.output||``),A=L(null);H(D,async e=>{e&&(await j(),A.value&&(A.value.scrollTop=A.value.scrollHeight))}),H(()=>(r.job.output||``).length,async()=>{D.value&&(await j(),A.value&&(A.value.scrollTop=A.value.scrollHeight))});function re(){}let ie=E(()=>g.value&&!!r.job.prompt);function ae(){c(`re-execute`,r.job)}return(t,r)=>{let c=a;return M(),B(`div`,{class:W([`wb-log-details`,{"is-running":d.value,"is-pending":e.job.status===`pending`,"is-finished":g.value}])},[o(`div`,{class:`wb-log-summary`,onClick:u,role:`button`,"aria-expanded":!l.value},[o(`span`,vt,[e.job.status===`running`?(M(),B(`span`,yt,[o(`span`,bt,C(s(X)(`@WORKBENCH:正在执行…`)),1),r[1]||=o(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[o(`span`,{class:`wb-log-dots__dot`}),o(`span`,{class:`wb-log-dots__dot`}),o(`span`,{class:`wb-log-dots__dot`})],-1),T.value?(M(),B(`span`,xt,C(T.value),1)):b(``,!0)])):e.job.status===`pending`?(M(),B(`span`,St,[o(`span`,Ct,C(s(X)(`@WORKBENCH:排队中…`)),1),r[2]||=o(`span`,{class:`wb-log-dots`,"aria-hidden":`true`},[o(`span`,{class:`wb-log-dots__dot`}),o(`span`,{class:`wb-log-dots__dot`}),o(`span`,{class:`wb-log-dots__dot`})],-1)])):g.value?(M(),B(`span`,{key:2,class:W([`wb-log-summary__status`,_.value])},[o(`span`,wt,C(ee.value),1),o(`span`,Tt,C(v.value),1),T.value?(M(),B(`span`,Et,C(T.value),1)):b(``,!0)],2)):(M(),B(`span`,Dt,C(s(X)(`@WORKBENCH:查看执行日志`)),1))]),o(`span`,Ot,[o(`span`,kt,C((e.job.output||``).length)+` `+C(s(X)(`@WORKBENCH:字符`)),1),o(`button`,{type:`button`,class:`wb-log-copy`,title:s(X)(`@WORKBENCH:复制全部(含提示词与输出)`),"aria-label":s(X)(`@WORKBENCH:复制全部`),onClick:I(h,[`stop`])},` ⧉ `,8,At)])],8,_t),V(o(`div`,jt,[x(s(Ae),{messages:ne.value,"assistant-name":y.value,"assistant-avatar":te.value,"show-avatar":!0,theme:s(n).theme,"tool-calls-config":{group:!0,collapseThreshold:2},class:`wb-job-chat`},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`]),ie.value?(M(),B(`footer`,Mt,[o(`button`,{type:`button`,class:`wb-chat__action`,title:s(X)(`@WORKBENCH:用相同的提示词重新执行此任务`),"aria-label":s(X)(`@WORKBENCH:重新执行`),onClick:ae},` ↻ `,8,Nt)])):b(``,!0),x(c,{modelValue:D.value,"onUpdate:modelValue":r[0]||=e=>D.value=e,title:s(X)(`@WORKBENCH:模型返回 - 全屏查看`),fullscreen:``,"close-on-click-modal":!1,class:`wb-log-fullscreen-dialog`,onClosed:re},{default:R(()=>[o(`div`,{ref_key:`fullscreenContainerRef`,ref:A,class:`wb-log-fullscreen`},[O.value?(M(),i(s(Y),{key:0,source:k.value,class:`wb-log-fullscreen__render`},null,8,[`source`])):(M(),B(`div`,Pt,C(s(X)(`@WORKBENCH:(暂无输出)`)),1))],512)]),_:1},8,[`modelValue`,`title`])],512),[[we,!l.value]])],2)}}}),[[`__scopeId`,`data-v-55345953`]]);t(),U(),S(),z();var Lt={class:`exec-logs`},Rt={class:`exec-logs__head`},zt={class:`exec-logs__title-block`},Bt={class:`exec-logs__stats`},Vt={class:`exec-logs__head-actions`},Ht={class:`exec-logs__config`},Ut={class:`exec-logs__config-label`},Wt={class:`exec-logs__config-field`},Gt={class:`exec-logs__config-name`},Kt={class:`exec-logs__config-field`},qt={class:`exec-logs__config-name`},Jt={class:`exec-logs__filter`},Yt={key:0,class:`exec-logs__batch-meta`},Xt={key:0,class:`exec-logs__batch`},Zt={class:`exec-logs__list`},Qt={key:0,class:`exec-logs__empty`},$t={class:`exec-logs__empty-art`,"aria-hidden":`true`},en={class:`exec-logs__empty-title`},tn={class:`exec-logs__empty-hint`},nn={class:`exec-card__head`},rn=[`title`],an={class:`exec-card__meta`},on={key:0,class:`exec-card__task`},sn={key:1,class:`exec-card__time`},cn={key:2,class:`exec-card__exit`},ln=[`title`,`onClick`],un={key:0,class:`exec-card__error`},dn={key:1,class:`exec-logs__pager`},fn=50,pn=Me(f({__name:`ExecutionLogManager`,setup(t){function n(e){return e instanceof Error?e.message:String(e)}let r=L([]),i=L(0),a=Te({count:0,sizeMB:0,byStatus:{}}),l=L(!1),u=L(new Set),f=Te({q:``,status:``,page:1}),p=L({maxCount:500,maxSizeMB:256}),m=Te({maxCount:500,maxSizeMB:256}),_=L(!1),v=[{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:已取消`)}],S=E(()=>r.value.length>0&&r.value.every(e=>u.value.has(e.id))),ne=E(()=>r.value.some(e=>u.value.has(e.id))&&!S.value);async function w(){l.value=!0;try{let e=new URLSearchParams;f.q&&e.set(`q`,f.q),f.status&&e.set(`status`,f.status),e.set(`limit`,String(fn)),e.set(`offset`,String((f.page-1)*fn));let t=await fetch(`/api/workbench/jobs/list?${e.toString()}`).then(e=>e.json());if(!t.success)throw Error(t.error||`list failed`);r.value=t.jobs,i.value=t.total,a.count=t.stats.count,a.sizeMB=t.stats.sizeMB,a.byStatus=t.stats.byStatus;let n=new Set(r.value.map(e=>e.id));for(let e of Array.from(u.value))n.has(e)||u.value.delete(e)}catch(e){N.error(X(`@WORKBENCH:加载失败`)+`: `+n(e))}finally{l.value=!1}}async function T(){try{let e=await fetch(`/api/workbench/jobs/config`).then(e=>e.json());e.success&&(p.value=e.config,m.maxCount=e.config.maxCount,m.maxSizeMB=e.config.maxSizeMB)}catch{}}async function D(){_.value=!0;try{let e=await fetch(`/api/workbench/jobs/config`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({maxCount:m.maxCount,maxSizeMB:m.maxSizeMB})}).then(e=>e.json());if(!e.success)throw Error(e.error||`save failed`);p.value=e.config,N.success(X(`@WORKBENCH:已保存策略`)),await w()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+n(e))}finally{_.value=!1}}function O(){f.page=1,w()}function A(){f.q=``,f.status=``,f.page=1,w()}function re(e,t){t?u.value.add(e):u.value.delete(e),u.value=new Set(u.value)}function j(e){if(e)for(let e of r.value)u.value.add(e.id);else for(let e of r.value)u.value.delete(e.id);u.value=new Set(u.value)}function ie(e){N.info(X(`@WORKBENCH:请到工作台主面板的对应任务上点击「重新执行」`))}async function se(e){try{await me.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`);u.value.delete(e),u.value=new Set(u.value),await w()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+n(e))}}async function ce(){let e=Array.from(u.value);if(e.length!==0){try{await me.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})),u.value=new Set,await w()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+n(e))}}}async function P(){let e=a.count;if(e!==0){try{await me.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})),u.value=new Set,await w()}catch(e){N.error(X(`@WORKBENCH:保存失败`)+`: `+n(e))}}}function F(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 ae(()=>{w(),T()}),(t,n)=>{let p=g,T=q,E=k,ae=te,N=c,I=ee,L=h,le=Ce,z=_e;return M(),B(`div`,Lt,[o(`header`,Rt,[o(`div`,zt,[o(`span`,Bt,C(s(X)(`@WORKBENCH:共 {count} 条,占 {size} MB`,{count:a.count,size:a.sizeMB})),1)]),o(`div`,Vt,[x(p,{icon:s(d),size:`small`,loading:l.value,onClick:w},{default:R(()=>[y(C(s(X)(`@WORKBENCH:刷新`)),1)]),_:1},8,[`icon`,`loading`]),x(p,{type:`danger`,plain:``,size:`small`,disabled:a.count===0,onClick:P},{default:R(()=>[y(C(s(X)(`@WORKBENCH:清空全部`)),1)]),_:1},8,[`disabled`])])]),o(`div`,Ht,[o(`span`,Ut,C(s(X)(`@WORKBENCH:保存策略`)),1),o(`span`,Wt,[o(`span`,Gt,C(s(X)(`@WORKBENCH:最大条数`)),1),x(T,{modelValue:m.maxCount,"onUpdate:modelValue":n[0]||=e=>m.maxCount=e,min:0,max:1e4,step:50,size:`small`,"controls-position":`right`,style:{width:`130px`}},null,8,[`modelValue`])]),o(`span`,Kt,[o(`span`,qt,C(s(X)(`@WORKBENCH:最大体积 (MB)`)),1),x(T,{modelValue:m.maxSizeMB,"onUpdate:modelValue":n[1]||=e=>m.maxSizeMB=e,min:0,max:10240,step:32,size:`small`,"controls-position":`right`,style:{width:`140px`}},null,8,[`modelValue`])]),x(p,{type:`primary`,size:`small`,loading:_.value,onClick:D},{default:R(()=>[y(C(s(X)(`@WORKBENCH:保存策略`)),1)]),_:1},8,[`loading`])]),o(`div`,Jt,[x(E,{modelValue:f.q,"onUpdate:modelValue":n[2]||=e=>f.q=e,placeholder:s(X)(`@WORKBENCH:搜索标题 / 任务`),clearable:``,size:`small`,style:{width:`240px`},onKeyup:J(O,[`enter`]),onClear:O},null,8,[`modelValue`,`placeholder`]),x(N,{modelValue:f.status,"onUpdate:modelValue":n[3]||=e=>f.status=e,placeholder:s(X)(`@WORKBENCH:全部状态`),clearable:``,size:`small`,style:{width:`130px`},onChange:O},{default:R(()=>[(M(),B(G,null,e(v,e=>x(ae,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`placeholder`]),x(p,{size:`small`,onClick:A},{default:R(()=>[y(C(s(X)(`@WORKBENCH:重置`)),1)]),_:1}),n[5]||=o(`span`,{class:`exec-logs__filter-spacer`},null,-1),u.value.size>0?(M(),B(`span`,Yt,C(s(X)(`@WORKBENCH:已选择 {count} 项`,{count:u.value.size})),1)):b(``,!0)]),u.value.size>0?(M(),B(`div`,Xt,[x(I,{"model-value":S.value,indeterminate:ne.value,onChange:j},{default:R(()=>[y(C(S.value?s(X)(`@WORKBENCH:取消全选`):s(X)(`@WORKBENCH:全选`)),1)]),_:1},8,[`model-value`,`indeterminate`]),x(p,{type:`danger`,size:`small`,onClick:ce},{default:R(()=>[y(C(s(X)(`@WORKBENCH:批量删除`)),1)]),_:1})])):b(``,!0),V((M(),B(`div`,Zt,[!l.value&&r.value.length===0?(M(),B(`div`,Qt,[o(`div`,$t,[x(L,null,{default:R(()=>[x(s(de))]),_:1})]),o(`div`,en,C(s(X)(`@WORKBENCH:暂无执行日志`)),1),o(`div`,tn,C(s(X)(`@WORKBENCH:点击「执行任务」开始一次执行,日志会出现在这里。`)),1)])):b(``,!0),(M(!0),B(G,null,e(r.value,e=>(M(),B(`article`,{key:e.id,class:W([`exec-card`,{"is-selected":u.value.has(e.id)}])},[o(`header`,nn,[x(I,{"model-value":u.value.has(e.id),onChange:t=>re(e.id,t)},null,8,[`model-value`,`onChange`]),o(`span`,{class:`exec-card__status`,style:oe({color:s(ft)(e.status),borderColor:s(ft)(e.status)})},C(s(dt)(e.status)),5),o(`span`,{class:`exec-card__title`,title:e.title||s(X)(`@WORKBENCH:无标题`)},C(e.title||s(X)(`@WORKBENCH:无标题`)),9,rn),n[6]||=o(`span`,{class:`exec-card__spacer`},null,-1),o(`span`,an,[e.taskTitle?(M(),B(`span`,on,`📁 `+C(e.taskTitle),1)):b(``,!0),e.startedAt?(M(),B(`span`,sn,`⏱ `+C(F(e.startedAt,e.endedAt)),1)):b(``,!0),e.exitCode===null?b(``,!0):(M(),B(`span`,cn,`exit `+C(e.exitCode),1))]),o(`button`,{type:`button`,class:`exec-card__del`,title:s(X)(`@WORKBENCH:删除`),onClick:t=>se(e.id)},`×`,8,ln)]),e.error?(M(),B(`p`,un,`⚠ `+C(e.error),1)):b(``,!0),x(It,{job:e,onReExecute:ie},null,8,[`job`])],2))),128))])),[[z,l.value]]),i.value>fn?(M(),B(`footer`,dn,[x(le,{"current-page":f.page,"onUpdate:currentPage":n[4]||=e=>f.page=e,"page-size":fn,total:i.value,layout:`prev, pager, next, total`,background:``,small:``,onCurrentChange:w},null,8,[`current-page`,`total`])])):b(``,!0)])}}}),[[`__scopeId`,`data-v-be6a2090`]]);U();var mn=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`]),hn=`.png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.pdf,.txt,.md,.csv,.json,.log`,gn=20971520,_n=3840,vn=new Set([`image/png`,`image/jpeg`,`image/jpg`,`image/webp`,`image/bmp`]);function yn(e){if(e.size<=3670016)return!1;let t=String(e.type||``).toLowerCase();return t?vn.has(t):/\.(png|jpe?g|webp|bmp)$/i.test(e.name)}function bn(e,t){return`${String(e||`attachment`).replace(/\.[^./\\]+$/,``)}.${t}`}async function xn(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 Sn(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 Cn(e){let t=await xn(e);if(!t)return null;try{let n=[{edge:_n,quality:.95},{edge:_n,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 Sn(o,`image/webp`,e.quality)||await Sn(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 wn(){let e=L({}),t=L(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(!mn.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}let c=a(t);if(c.length>=9){N.error(X(`@WORKBENCH:单个任务最多 9 个附件`));return}if(c.find(e=>e.originalName===n.name&&e.size===n.size)){N.info(`${n.name} ${X(`@WORKBENCH:已存在,已复用`)}`);return}let l=i(t);e.value[l]=!0;try{let e=n;if(yn(n)){let t=await Cn(n);t&&(e=r(t.blob,bn(n.name,t.ext)),N.info(X(`@WORKBENCH:图片过大,已压缩后上传:{from} → {to}`,{from:g(n.size),to:g(e.size)})))}if(e.size>20971520){N.error(`「${n.name}」${X(`@WORKBENCH:超过 {size} 限制`,{size:g(gn)})}`);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[l]=!1}}async function f(e,t){try{await me.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=hn,t.multiple=!0,t.onchange=()=>{Array.from(t.files||[]).forEach(t=>d(e,t))},t.click()}let m=new Set([`png`,`jpg`,`jpeg`,`gif`,`webp`,`bmp`,`svg`]);function h(e){let t=String(e?.ext||``).toLowerCase();if(t&&m.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 g(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:h,humanSize:g,targetKey:i,targetAttachments:a,setTargetAttachments:o,targetUploadUrl:s,targetDeleteUrl:c,onAttachmentPaste:l,onAttachmentDrop:u,uploadAttachment:d,removeAttachment:f,pickAttachmentFile:p}}t();var Tn=`__simple`,En=65536;function Dn(e,t){function n(t){if(!t)return[];let n=`${t.id}${Tn}`;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:E(()=>{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>En?`\u2026(前文已截断)\n${o.slice(-65536)}`:o,l=s.length>En?`\u2026(前文已截断)\n${s.slice(-65536)}`:s,u=!!c,d=!!l,f=gt(t),p=f.length>0,m=u||d||p,h;if(!i)h=`done`;else{let e=t.status;h=e===`running`||e===`pending`?m?`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`:h===`streaming`?`streaming`:`done`:void 0,toolCalls:p?f:void 0,status:h,error:h===`error`&&t.error||void 0,createdAt:a})}),r}),simpleAllJobsFor:n,simpleJobFor:r,simpleJobState:i,SIMPLE_SUB_ID_SUFFIX:Tn,MAX_LOG_DISPLAY_SIMPLE:En}}function On(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 me.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 me.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=L([]),t=L([]),n=L([]),r=L({path:``,name:``}),i=We();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 m(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 h(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:m,createTask:h}}U(),t();var An=`__no_project__`,jn=`wb.collapsedGroupPaths.v1`,Mn=`wb.seenGroupPaths.v1`;function Nn(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 Pn(e,t){try{localStorage.setItem(e,JSON.stringify(Array.from(t)))}catch{}}function Fn(e,t){let n=L(Nn(jn)),r=L(Nn(Mn));H(n,e=>Pn(jn,e),{deep:!1}),H(r,e=>Pn(Mn,e),{deep:!1});function i(e){return n.value.has(e)}function a(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 o=E(()=>{let r=e.value,i=new Map;for(let e of r){let t=Z(e.projectPath)||An;i.has(t)||i.set(t,[]),i.get(t).push(e)}let a=Z(t.value.path),o=Array.from(i.keys()).sort((e,t)=>e===a?-1:t===a||e===An?1:t===An?-1:e.localeCompare(t));return{groups:o.map(e=>({path:e,label:e===An?X(`@WORKBENCH:未关联项目`):e,tasks:i.get(e)})),hasMultiple:o.length>1||o.length===1&&n.value.has(o[0])}});function s(e){if(!e||e===An)return e;let t=e.split(/[\\/]/).filter(Boolean);return t.length<=1?e:t.slice(-2).join(`/`)}let c=E(()=>`${Z(t.value.path)}|${o.value.groups.map(e=>e.path).join(`
|
|
6
|
-
`)}`);return H(c,()=>{let e=Z(t.value.path);if(!e)return;let i=new Set(n.value),a=new Set(r.value),s=!1;for(let t of o.value.groups)a.has(t.path)||(a.add(t.path),t.path!==e&&(i.add(t.path),s=!0));s&&(n.value=i),r.value=a},{immediate:!0}),{groupedTasksList:o,isGroupCollapsed:i,toggleGroupCollapsed:a,shortProjectLabel:s}}t(),U(),S(),z();var In={class:`wb-sidebar`},Ln={class:`wb-section`},Rn=[`disabled`],zn=[`aria-expanded`,`title`,`onClick`,`onKeydown`],Bn=[`title`],Vn={class:`wb-pill wb-task-group__count`},Hn=[`data-task-id`,`data-group-path`,`title`,`onClick`,`onMousedown`],Un={class:`wb-task-item__body`},Wn=[`title`],Gn=[`title`],Kn={class:`wb-task-item__action-group`},qn=[`title`,`aria-label`,`onClick`],Jn=[`onClick`,`title`,`aria-label`],Yn={key:0,class:`wb-empty wb-empty--rich`},Xn={class:`wb-empty__art`,"aria-hidden":`true`},Zn={class:`wb-empty__title`},Qn={class:`wb-empty__hint`},$n={class:`wb-empty__cta`},er={class:`wb-section`},tr={class:`wb-section__head`},nr={class:`wb-section__tag wb-section__tag--accent`},rr={class:`wb-section__title`},ir={class:`wb-pill wb-section__count`},ar=[`title`,`aria-label`],or={class:`wb-prompt-list`},sr={class:`wb-prompt-item__icon`},cr=[`onClick`,`title`],lr=[`title`],ur=[`title`],dr=[`onClick`,`title`,`aria-label`],fr={key:0,class:`wb-empty wb-empty--compact`},pr=5,mr=Me(f({__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(t,{emit:n}){let r=t,a=n,c=E(()=>r.currentProject),{groupedTasksList:l,isGroupCollapsed:u,toggleGroupCollapsed:d,shortProjectLabel:f}=Fn(E(()=>r.tasks),c),p=E(()=>Z(r.currentProject.path));function m(e){return!!e.projectPath&&Z(e.projectPath)!==p.value}let _=E(()=>{let e=p.value;return r.prompts.filter(t=>!t.projectPath||Z(t.projectPath)===e)});function ee(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function te(e){let t=ee(e),n=X(`@WORKBENCH:拖动排序提示`);return t?`${t} · ${n}`:n}function S(e){return r.isTaskRunning(e)}let ne=L(null),w=L(null),T=L(null),D=L(null),O=L(null),k=null;function A(){ne.value=null,w.value=null,T.value=null,D.value=null,O.value=null,k=null}function re(e,t,n,r){e.button===0&&(k={pointerY:e.clientY,li:r,taskId:t.id,groupPath:n},window.addEventListener(`mousemove`,j),window.addEventListener(`mouseup`,ae,{once:!0}))}function j(e){if(!k)return;if(ne.value===null){if(Math.abs(e.clientY-k.pointerY)<pr)return;ne.value=k.taskId,w.value=k.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){T.value=null,D.value=null,O.value=null;return}let r=n.getAttribute(`data-task-id`),i=n.getAttribute(`data-group-path`);if(!r||!i)return;if(i!==w.value){T.value=null,D.value=null,O.value=null;return}let a=n.getBoundingClientRect(),o=a.top+a.height/2;T.value=r,D.value=i,O.value=e.clientY<o?`before`:`after`}function ae(e){if(window.removeEventListener(`mousemove`,j),document.body.style.userSelect=``,!k){A();return}let t=k.groupPath,n=k.taskId,r=T.value,i=O.value,o=D.value;if(A(),!r||!i||o!==t)return;let s=l.value.groups.find(e=>e.path===t);if(!s)return;let c=s.tasks.map(e=>e.id),u=c.indexOf(n);if(u<0)return;c.splice(u,1);let d=c.indexOf(r)+ +(i===`after`);c.splice(d,0,n),a(`reorder-tasks`,{groupPath:t,orderedIds:c})}return(n,r)=>{let c=h,w=g;return M(),B(`aside`,In,[o(`section`,Ln,[o(`button`,{class:`wb-new-btn`,disabled:t.creatingTask,onClick:r[0]||=e=>a(`create-task`)},[x(c,{class:`wb-new-btn__icon`},{default:R(()=>[x(s(Oe))]),_:1}),o(`span`,null,C(s(X)(`@WORKBENCH:新建任务`)),1),r[3]||=o(`span`,{class:`wb-new-btn__shortcut`},`N`,-1)],8,Rn),o(`ul`,{class:W([`wb-task-list`,{"is-grouped":s(l).hasMultiple}])},[(M(!0),B(G,null,e(s(l).groups,n=>(M(),B(G,{key:n.path},[s(l).hasMultiple?(M(),B(`li`,{key:0,class:W([`wb-task-group__head`,{"is-current":n.path===p.value,"is-collapsed":s(u)(n.path)}]),role:`button`,tabindex:`0`,"aria-expanded":!s(u)(n.path),title:s(u)(n.path)?s(X)(`@WORKBENCH:展开`):s(X)(`@WORKBENCH:收起`),onClick:e=>s(d)(n.path),onKeydown:[J(I(e=>s(d)(n.path),[`prevent`]),[`enter`]),J(I(e=>s(d)(n.path),[`prevent`]),[`space`])]},[x(c,{class:`wb-task-group__caret`},{default:R(()=>[(M(),i(ge(s(u)(n.path)?s(ie):s(ve))))]),_:2},1024),x(c,{class:`wb-task-group__icon`},{default:R(()=>[x(s(K))]),_:1}),o(`span`,{class:`wb-task-group__name`,title:n.path===p.value?t.currentProject.path:n.label},C(n.path===p.value?t.currentProject.name:s(f)(n.label)),9,Bn),o(`span`,Vn,C(n.tasks.length),1)],42,zn)):b(``,!0),s(u)(n.path)?b(``,!0):(M(!0),B(G,{key:1},e(n.tasks,e=>(M(),B(`li`,{key:e.id,class:W([`wb-task-item`,{active:e.id===t.selectedTaskId,"is-other-project":m(e),"is-running":S(e),"is-dragging":ne.value===e.id,"is-drop-before":T.value===e.id&&O.value===`before`,"is-drop-after":T.value===e.id&&O.value===`after`}]),"data-task-id":e.id,"data-group-path":n.path,title:te(e),onClick:t=>a(`select-task`,e),onMousedown:t=>re(t,e,n.path,t.currentTarget)},[o(`div`,Un,[o(`div`,{class:`wb-task-item__title`,title:ee(e)},C(ee(e)),9,Wn)]),S(e)?(M(),B(`span`,{key:0,class:`wb-task-item__running-dot`,title:s(X)(`@WORKBENCH:执行中`),"aria-hidden":`true`},null,8,Gn)):b(``,!0),o(`div`,Kn,[o(`button`,{class:`wb-task-item__copy`,title:s(X)(`@WORKBENCH:复制任务`),"aria-label":s(X)(`@WORKBENCH:复制任务`),onClick:I(t=>a(`copy-task`,e),[`stop`])},[x(c,null,{default:R(()=>[x(s(xe))]),_:1})],8,qn),S(e)?b(``,!0):(M(),B(`button`,{key:0,class:`wb-task-item__del`,onClick:I(t=>a(`delete-task`,e),[`stop`]),title:s(X)(`@WORKBENCH:删除`),"aria-label":s(X)(`@WORKBENCH:删除`)},[x(c,null,{default:R(()=>[x(s(P))]),_:1})],8,Jn))])],42,Hn))),128))],64))),128)),t.tasks.length===0?(M(),B(`li`,Yn,[o(`div`,Xn,[x(c,null,{default:R(()=>[x(s(Se))]),_:1})]),o(`div`,Zn,C(s(X)(`@WORKBENCH:暂无任务`)),1),o(`div`,Qn,C(s(X)(`@WORKBENCH:点击上方按钮新建`)),1),o(`div`,$n,[x(w,{type:`primary`,size:`small`,icon:s(Oe),loading:t.creatingTask,onClick:r[1]||=e=>a(`create-task`)},{default:R(()=>[y(C(s(X)(`@WORKBENCH:新建任务`)),1)]),_:1},8,[`icon`,`loading`])])])):b(``,!0)],2)]),o(`section`,er,[o(`header`,tr,[o(`span`,nr,C(s(X)(`@WORKBENCH:提示`)),1),o(`h3`,rr,C(s(X)(`@WORKBENCH:预置提示词`)),1),o(`span`,ir,C(_.value.length),1),o(`button`,{class:`wb-section__action`,onClick:r[2]||=e=>a(`open-create-prompt`),title:s(X)(`@WORKBENCH:新建提示词`),"aria-label":s(X)(`@WORKBENCH:新建提示词`)},[x(c,null,{default:R(()=>[x(s(Oe))]),_:1})],8,ar)]),o(`ul`,or,[(M(!0),B(G,null,e(_.value,e=>(M(),B(`li`,{key:e.id,class:`wb-prompt-item`},[o(`div`,sr,[x(c,null,{default:R(()=>[x(s(v))]),_:1})]),o(`span`,{class:`wb-prompt-item__name`,onClick:t=>a(`open-edit-prompt`,e),title:e.content},C(e.name),9,cr),e.projectPath?(M(),B(`span`,{key:1,class:`wb-prompt-item__tag wb-prompt-item__tag--project`,title:e.projectPath},C(s(f)(e.projectPath)),9,ur)):(M(),B(`span`,{key:0,class:`wb-prompt-item__tag`,title:s(X)(`@WORKBENCH:全局(所有项目可用)`)},C(s(X)(`@WORKBENCH:全局(所有项目可用)`)),9,lr)),o(`button`,{class:`wb-prompt-item__del`,onClick:t=>a(`delete-prompt`,e),title:s(X)(`@WORKBENCH:删除`),"aria-label":s(X)(`@WORKBENCH:删除`)},[x(c,null,{default:R(()=>[x(s(P))]),_:1})],8,dr)]))),128)),_.value.length===0?(M(),B(`li`,fr,C(s(X)(`@WORKBENCH:暂无提示词`)),1)):b(``,!0)])])])}}}),[[`__scopeId`,`data-v-ef57209b`]]);U();function hr(){let e=L([]),t=L([]),n=L(``),r=L(!1),i=L(!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}}U();function gr(){let e=L(!0),t=L([]),n=L([]),r=L([]),i=L(null),a=L(!1),o=L(!1),s=L(!1),c=L(``),l=L({});async function u(o=!1){try{let s=await fetch(`/api/workbench/orchestrator`,{cache:`no-store`}).then(e=>e.json());return s?.success?(e.value=s.active!==!1,t.value=Array.isArray(s.instructions)?s.instructions:[],n.value=Array.isArray(s.activity)?s.activity:[],r.value=Array.isArray(s.running)?s.running:[],i.value=s.updatedAt||null,c.value=typeof s.defaultPrompt==`string`?s.defaultPrompt:``,l.value=s.projectPrompts&&typeof s.projectPrompts==`object`?s.projectPrompts:{},a.value=!0,!0):(o||N.error(s?.error||X(`@WORKBENCH:读取编排状态失败`)),!1)}catch(e){return o||N.error(X(`@WORKBENCH:网络错误: `)+(e?.message||e)),!1}}async function d(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?(c.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 f(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?(l.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 p(t){if(o.value)return!1;let n=e.value;e.value=t,o.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{o.value=!1}}async function m(e){if(s.value)return null;s.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 u(!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{s.value=!1}}return{active:e,instructions:t,activity:n,running:r,updatedAt:i,loaded:a,togglingSchedule:o,dispatching:s,defaultPrompt:c,projectPrompts:l,loadOrchestrator:u,setSchedulingActive:p,dispatch:m,saveDefaultPrompt:d,saveProjectPrompt:f}}var _r=6e4,vr=60*_r,yr=24*vr;function br(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<_r?X(`@WORKBENCH:刚刚`):r<vr?X(`@WORKBENCH:N 分钟前`,{n:Math.floor(r/_r)}):r<yr?X(`@WORKBENCH:N 小时前`,{n:Math.floor(r/vr)}):r<30*yr?X(`@WORKBENCH:N 天前`,{n:Math.floor(r/yr)}):new Date(n).toLocaleDateString()}function xr(e,t,n=Date.now()){if(!e)return``;let r=new Date(e).getTime();if(Number.isNaN(r))return``;let i=t?new Date(t).getTime():n;if(Number.isNaN(i))return``;let a=Math.max(0,i-r),o=Math.floor(a/1e3),s=Math.floor(o/3600),c=Math.floor(o%3600/60),l=o%60;return s>0?X(`@WORKBENCH:N 小时 M 分`,{n:s,m:c}):c>0?X(`@WORKBENCH:N 分 M 秒`,{n:c,m:l}):X(`@WORKBENCH:N 秒`,{n:l})}function Sr(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function Cr(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(Sr(n,a))return i;if(Sr(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}`}t(),U(),S(),z();var wr={class:`proj`},Tr={class:`proj__head`},Er={class:`proj__title`},Dr={class:`proj__count`},Or={key:0,class:`proj__tools`},kr={class:`proj__search`},Ar=[`placeholder`,`aria-label`],jr={class:`proj__toggles`},Mr=[`aria-pressed`,`title`],Nr=[`aria-pressed`,`title`],Pr={class:`proj__list`},Fr=[`title`],Ir={class:`proj-item__row1`},Lr={class:`proj-item__name`},Rr={key:0,class:`proj-item__running`,"aria-hidden":`true`},zr={class:`proj-item__num`},Br={class:`proj-item__row2`},Vr={key:0,class:`proj-item__running-text`},Hr={key:0,class:`proj-item__row3`},Ur={class:`proj-item__bar`,"aria-hidden":`true`},Wr={class:`proj-item__progress-text`},Gr=[`title`,`onClick`,`onKeydown`],Kr={class:`proj-item__row1`},qr={class:`proj-item__name`},Jr={class:`proj-item__signals`},Yr={key:0,class:`proj-item__running`,"aria-hidden":`true`},Xr={key:1,class:`proj-item__badge`},Zr={class:`proj-item__row2`},Qr={key:0,class:`proj-chip proj-chip--missing`},$r={key:0,class:`proj-item__branch`},ei={class:`proj-item__branch-name`},ti={key:1,class:`proj-chip proj-chip--ahead`},ni={key:2,class:`proj-chip proj-chip--behind`},ri={key:3,class:`proj-chip proj-chip--dirty`},ii={class:`proj-item__time`},ai={key:0,class:`proj-item__row3`},oi={class:`proj-item__bar`,"aria-hidden":`true`},si={class:`proj-item__progress-text`},ci={key:1,class:`proj-item__actions`},li=[`title`,`aria-label`,`onClick`],ui=[`title`,`aria-label`,`aria-expanded`,`onClick`],di=[`aria-label`],fi=[`onClick`,`onKeydown`],pi={class:`proj-menu__icon`},mi={class:`proj-menu__label`},hi=[`onClick`,`onKeydown`],gi={class:`proj-menu__icon`},_i={class:`proj-menu__label`},vi=[`onClick`,`onKeydown`],yi={class:`proj-menu__icon`},bi={class:`proj-menu__label`},xi=[`onClick`,`onKeydown`],Si={class:`proj-menu__icon`},Ci={class:`proj-menu__label`},wi={class:`proj-menu__title`,role:`presentation`},Ti=[`onClick`,`onKeydown`],Ei={class:`proj-menu__icon`},Di={class:`proj-menu__label`},Oi={key:0,class:`proj-menu__hint`},ki=[`onClick`,`onKeydown`],Ai={class:`proj-menu__icon`},ji=[`src`],Mi={class:`proj-menu__label`},Ni={class:`proj-menu__hint`},Pi=[`onClick`,`onKeydown`],Fi={class:`proj-menu__icon`},Ii=[`src`],Li={class:`proj-menu__label`},Ri={key:0,class:`proj-empty`},zi={class:`proj-empty__title`},Bi={class:`proj-empty__hint`},Vi={key:1,class:`proj-empty`},Hi={class:`proj-empty__title`},Ui=Me(f({__name:`WorkbenchProjectPanel`,props:{projects:{},selectedKey:{},loading:{type:Boolean}},emits:[`select`],setup(t,{emit:n}){let r=t,a=n,c=E(()=>[...r.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)})),d=L(``),f=L(!1),p=L(!1),m=E(()=>!!d.value.trim()||f.value||p.value),g=E(()=>{let e=d.value.trim().toLowerCase();return c.value.filter(t=>f.value&&t.stats.total===0||p.value&&t.git&&t.git.isGitRepo===!1?!1:!e||t.name.toLowerCase().includes(e)||t.path.toLowerCase().includes(e))});function ee(){d.value=``,f.value=!1,p.value=!1}let v=E(()=>r.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})),te=E(()=>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 ne(e){return!!(e.git&&e.git.isGitRepo&&(e.git.detached||e.git.branch))}let w=L(null),O=L(null);function k(e,t){if(w.value===e.key){w.value=null;return}O.value=t.currentTarget,w.value=e.key}function re(){w.value=null}function j(e){if(!w.value)return;let t=e.target;if(t&&!O.value?.contains(t)){for(let e of Array.from(document.querySelectorAll(`.proj-open-menu`)))if(e.contains(t))return;w.value=null}}ae(()=>document.addEventListener(`mousedown`,j,!0)),ye(()=>document.removeEventListener(`mousedown`,j,!0));let ie=Fe(),ce=L(!1),P=L(null);function F(e){return ie.lastCheckedAt!==null&&!ie.isToolAvailable(e)}async function le(e){re();let t=await Q(e.path);t.success?N.success(t.message||X(`@WORKBENCH:已在文件管理器中打开文件夹`)):N.error(t.error||X(`@WORKBENCH:打开文件夹失败`))}async function z(e){re();let t=await Ke(e.path);t.success?N.success(t.message||X(`@67CE7:已在终端中打开目录`)):N.error(t.error||X(`@WORKBENCH:打开终端失败`))}async function ue(e){re();let t=await Ve(e.path);t.success?N.success(X(`@WORKBENCH:已在新标签页启动 g ui`)):N.error(t.error||X(`@WORKBENCH:启动 g ui 失败`))}async function de(e){if(re(),e.name)try{await navigator.clipboard.writeText(e.name),N.success(X(`@67CE7:已复制文件夹名称`))}catch{N.error(X(`@67CE7:复制失败`))}}async function fe(e,t,n){if(re(),!await Be()){N.warning(X(`@67CE7:工具检测失败,请稍后重试`));return}if(!ie.isToolAvailable(t)){P.value=t,ce.value=!0;return}let r=await Ue(t,e.path,n);r.success?N.success(r.message||X(`@67CE7:已用 {tool} 打开目录`,{tool:$[t]})):N.error(`${X(`@67CE7:打开失败: `)}${r.error??``}`)}return(n,r)=>{let c=h,E=be;return M(),B(`section`,wr,[o(`header`,Tr,[o(`h3`,Er,C(s(X)(`@WORKBENCH:项目列表`)),1),o(`span`,Dr,[m.value?(M(),B(G,{key:0},[y(C(s(X)(`@WORKBENCH:匹配 {n}/{total} 个项目`,{n:g.value.length,total:t.projects.length})),1)],64)):(M(),B(G,{key:1},[y(C(t.projects.length),1)],64))])]),t.projects.length>0?(M(),B(`div`,Or,[o(`div`,kr,[x(c,{class:`proj__search-icon`,"aria-hidden":`true`},{default:R(()=>[x(s(u))]),_:1}),V(o(`input`,{"onUpdate:modelValue":r[0]||=e=>d.value=e,class:`proj__search-input`,type:`search`,placeholder:s(X)(`@WORKBENCH:搜索项目名称或路径`),"aria-label":s(X)(`@WORKBENCH:搜索项目名称或路径`),onKeydown:r[1]||=J(e=>d.value=``,[`esc`])},null,40,Ar),[[se,d.value]])]),o(`div`,jr,[o(`button`,{type:`button`,class:W([`proj__toggle`,{"is-on":f.value}]),"aria-pressed":f.value,title:s(X)(`@WORKBENCH:只显示有任务的项目`),onClick:r[2]||=e=>f.value=!f.value},[o(`span`,null,C(s(X)(`@WORKBENCH:只看有任务`)),1)],10,Mr),o(`button`,{type:`button`,class:W([`proj__toggle`,{"is-on":p.value}]),"aria-pressed":p.value,title:s(X)(`@WORKBENCH:只显示 Git 仓库`),onClick:r[3]||=e=>p.value=!p.value},[o(`span`,null,C(s(X)(`@WORKBENCH:隐藏非 Git`)),1)],10,Nr)])])):b(``,!0),o(`ul`,Pr,[o(`li`,{class:W([`proj-item proj-item--all`,{"is-active":t.selectedKey===``}]),role:`button`,tabindex:`0`,title:s(X)(`@WORKBENCH:全部项目`),onClick:r[4]||=e=>a(`select`,null),onKeydown:[r[5]||=J(I(e=>a(`select`,null),[`prevent`]),[`enter`]),r[6]||=J(I(e=>a(`select`,null),[`prevent`]),[`space`])]},[o(`div`,Ir,[x(c,{class:`proj-item__icon`},{default:R(()=>[x(s(D))]),_:1}),o(`span`,Lr,C(s(X)(`@WORKBENCH:全部项目`)),1),v.value.running>0?(M(),B(`span`,Rr)):b(``,!0),o(`span`,zr,C(t.projects.length),1)]),o(`div`,Br,[o(`span`,null,C(s(X)(`@WORKBENCH:{n} 个项目`,{n:t.projects.length})),1),v.value.running>0?(M(),B(`span`,Vr,C(s(X)(`@WORKBENCH:{n} 个执行中`,{n:v.value.running})),1)):b(``,!0)]),v.value.total>0?(M(),B(`div`,Hr,[o(`span`,Ur,[o(`i`,{class:`proj-item__bar-fill`,style:oe({width:te.value+`%`})},null,4)]),o(`span`,Wr,C(s(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:v.value.done,total:v.value.total})),1)])):b(``,!0)],42,Fr),(M(!0),B(G,null,e(g.value,n=>(M(),B(`li`,{key:n.key,class:W([`proj-item`,{"is-active":n.key===t.selectedKey,"is-running":n.stats.runningJobs>0,"is-missing":n.exists===!1}]),role:`button`,tabindex:`0`,title:n.path,onClick:e=>a(`select`,n),onKeydown:[J(I(e=>a(`select`,n),[`self`,`prevent`]),[`enter`]),J(I(e=>a(`select`,n),[`self`,`prevent`]),[`space`])]},[o(`div`,Kr,[x(c,{class:`proj-item__icon`},{default:R(()=>[x(s(K))]),_:1}),o(`span`,qr,C(n.name),1),o(`span`,Jr,[n.stats.runningJobs>0?(M(),B(`span`,Yr)):b(``,!0),n.isCurrent?(M(),B(`span`,Xr,C(s(X)(`@WORKBENCH:当前`)),1)):b(``,!0)])]),o(`div`,Zr,[n.exists===!1?(M(),B(`span`,Qr,C(s(X)(`@WORKBENCH:目录不存在`)),1)):(M(),B(G,{key:1},[S(n)?(M(),B(`span`,$r,[ne(n)?(M(),i(Ne,{key:0,"icon-class":`git-branch`,"class-name":`proj-item__branch-icon`})):b(``,!0),o(`span`,ei,C(S(n)),1)])):b(``,!0),n.git&&n.git.ahead>0?(M(),B(`span`,ti,`↑`+C(n.git.ahead),1)):b(``,!0),n.git&&n.git.behind>0?(M(),B(`span`,ni,`↓`+C(n.git.behind),1)):b(``,!0),n.git&&n.git.changed>0?(M(),B(`span`,ri,`●`+C(n.git.changed),1)):b(``,!0)],64)),o(`span`,ii,C(s(br)(n.stats.lastActiveAt)),1)]),n.stats.total>0?(M(),B(`div`,ai,[o(`span`,oi,[o(`i`,{class:`proj-item__bar-fill`,style:oe({width:n.stats.progress+`%`})},null,4)]),o(`span`,si,C(s(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:n.stats.done,total:n.stats.total})),1)])):b(``,!0),n.exists===!1?b(``,!0):(M(),B(`div`,ci,[o(`button`,{type:`button`,class:`proj-item__action`,title:s(X)(`@WORKBENCH:打开文件夹`),"aria-label":`${s(X)(`@WORKBENCH:打开文件夹`)} ${n.name}`,onClick:I(e=>le(n),[`stop`])},[x(c,{"aria-hidden":`true`},{default:R(()=>[x(s(T))]),_:1})],8,li),x(E,{visible:w.value===n.key,trigger:`manual`,placement:`right-start`,width:272,"show-arrow":!1,offset:6,"popper-class":`proj-open-menu`},{reference:R(()=>[o(`button`,{type:`button`,class:W([`proj-item__action`,{"is-open":w.value===n.key}]),title:s(X)(`@WORKBENCH:打开方式`),"aria-label":`${s(X)(`@WORKBENCH:打开方式`)} ${n.name}`,"aria-expanded":w.value===n.key,"aria-haspopup":`menu`,onClick:I(e=>k(n,e),[`stop`])},[x(c,{"aria-hidden":`true`},{default:R(()=>[x(s(_))]),_:1})],10,ui)]),default:R(()=>[w.value===n.key?(M(),B(`ul`,{key:0,class:`proj-menu`,role:`menu`,"aria-label":s(X)(`@WORKBENCH:打开方式`)},[o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>le(n),onKeydown:[J(I(e=>le(n),[`prevent`]),[`enter`]),J(I(e=>le(n),[`prevent`]),[`space`])]},[o(`span`,pi,[x(c,{"aria-hidden":`true`},{default:R(()=>[x(s(T))]),_:1})]),o(`span`,mi,C(s(X)(`@WORKBENCH:在文件管理器中打开`)),1)],40,fi),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>z(n),onKeydown:[J(I(e=>z(n),[`prevent`]),[`enter`]),J(I(e=>z(n),[`prevent`]),[`space`])]},[o(`span`,gi,[x(c,{"aria-hidden":`true`},{default:R(()=>[x(s(l))]),_:1})]),o(`span`,_i,C(s(X)(`@WORKBENCH:在终端中打开`)),1)],40,hi),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>ue(n),onKeydown:[J(I(e=>ue(n),[`prevent`]),[`enter`]),J(I(e=>ue(n),[`prevent`]),[`space`])]},[o(`span`,yi,[x(c,{"aria-hidden":`true`},{default:R(()=>[x(s(A))]),_:1})]),o(`span`,bi,C(s(X)(`@WORKBENCH:在新标签页启动 g ui`)),1)],40,vi),o(`li`,{class:`proj-menu__item`,role:`menuitem`,tabindex:`-1`,onClick:e=>de(n),onKeydown:[J(I(e=>de(n),[`prevent`]),[`enter`]),J(I(e=>de(n),[`prevent`]),[`space`])]},[o(`span`,Si,[x(c,{"aria-hidden":`true`},{default:R(()=>[x(s(xe))]),_:1})]),o(`span`,Ci,C(s(X)(`@67CE7:复制文件夹名称`)),1)],40,xi),r[8]||=o(`li`,{class:`proj-menu__sep`,role:`separator`},null,-1),o(`li`,wi,C(s(X)(`@WORKBENCH:用工具打开`)),1),(M(!0),B(G,null,e(s(Ge),e=>(M(),B(`li`,{key:e.id,class:W([`proj-menu__item`,{"is-missing":F(e.id)}]),role:`menuitem`,tabindex:`-1`,onClick:t=>fe(n,e.id),onKeydown:[J(I(t=>fe(n,e.id),[`prevent`]),[`enter`]),J(I(t=>fe(n,e.id),[`prevent`]),[`space`])]},[o(`span`,Ei,[x(Ne,{"icon-class":e.icon},null,8,[`icon-class`])]),o(`span`,Di,C(s(X)(e.labelKey)),1),F(e.id)?(M(),B(`span`,Oi,C(s(X)(`@67CE7:未安装`)),1)):b(``,!0)],42,Ti))),128)),o(`li`,{class:W([`proj-menu__item`,{"is-missing":F(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>fe(n,`claude`),onKeydown:[J(I(e=>fe(n,`claude`),[`prevent`]),[`enter`]),J(I(e=>fe(n,`claude`),[`prevent`]),[`space`])]},[o(`span`,Ai,[o(`img`,{src:s(He),alt:``,class:`proj-menu__img`},null,8,ji)]),o(`span`,Mi,C(s(X)(`@67CE7:用 Claude Code 打开`)),1),o(`span`,Ni,C(F(`claude`)?s(X)(`@67CE7:未安装`):s(X)(`@67CE7:默认权限`)),1)],42,ki),o(`li`,{class:W([`proj-menu__item proj-menu__item--danger`,{"is-missing":F(`claude`)}]),role:`menuitem`,tabindex:`-1`,onClick:e=>fe(n,`claude`,`bypassPermissions`),onKeydown:[J(I(e=>fe(n,`claude`,`bypassPermissions`),[`prevent`]),[`enter`]),J(I(e=>fe(n,`claude`,`bypassPermissions`),[`prevent`]),[`space`])]},[o(`span`,Fi,[o(`img`,{src:s(He),alt:``,class:`proj-menu__img`},null,8,Ii)]),o(`span`,Li,C(s(X)(`@67CE7:用 Claude Code 打开(完全批准)`)),1)],42,Pi)],8,di)):b(``,!0)]),_:2},1032,[`visible`])]))],42,Gr))),128)),!t.loading&&t.projects.length===0?(M(),B(`li`,Ri,[o(`p`,zi,C(s(X)(`@WORKBENCH:尚无项目`)),1),o(`p`,Bi,C(s(X)(`@WORKBENCH:常用目录与建过任务的目录都会出现在这里`)),1)])):b(``,!0),!t.loading&&t.projects.length>0&&g.value.length===0?(M(),B(`li`,Vi,[o(`p`,Hi,C(s(X)(`@WORKBENCH:没有匹配的项目`)),1),o(`button`,{type:`button`,class:`proj-empty__clear`,onClick:ee},C(s(X)(`@WORKBENCH:清除筛选`)),1)])):b(``,!0)]),x(Le,{modelValue:ce.value,"onUpdate:modelValue":r[7]||=e=>ce.value=e,tool:P.value},null,8,[`modelValue`,`tool`])])}}}),[[`__scopeId`,`data-v-ae54875f`]]);t(),U(),S();var Wi={class:`agents`},Gi={class:`agents__head`},Ki={class:`agents__title`},qi={class:`agents__list`},Ji={class:`agent-item__row1`},Yi=[`title`],Xi={class:`agent-item__status`},Zi=[`title`],Qi={class:`agent-item__row3`},$i={key:0,class:`agent-item__pid`},ea={class:`agent-item__elapsed`},ta={key:0,class:`agents-empty`},na=Me(f({__name:`WorkbenchAgentPanel`,props:{running:{}},setup(t){let n=t,r=L(Date.now()),i=null;function a(){i&&=(clearInterval(i),null)}function c(){if(n.running.length>0){if(i)return;r.value=Date.now(),i=setInterval(()=>{r.value=Date.now()},1e3)}else a()}H(()=>n.running.length,c,{immediate:!0}),ye(a);let l=E(()=>n.running.map(e=>({...e,elapsed:xr(e.startedAt,null,r.value)})));return(n,r)=>(M(),B(`section`,Wi,[o(`header`,Gi,[o(`h3`,Ki,C(s(X)(`@WORKBENCH:执行监控`)),1),o(`span`,{class:W([`agents__count`,{"is-live":t.running.length>0}])},C(s(X)(`@WORKBENCH:{n} 个执行中`,{n:t.running.length})),3)]),o(`ul`,qi,[(M(!0),B(G,null,e(l.value,e=>(M(),B(`li`,{key:e.jobId,class:`agent-item`},[o(`div`,Ji,[o(`span`,{class:W([`agent-item__dot`,{"is-pending":e.status===`pending`}]),"aria-hidden":`true`},null,2),o(`span`,{class:`agent-item__project`,title:e.projectName},C(e.projectName||`—`),9,Yi),o(`span`,Xi,C(e.status===`pending`?s(X)(`@WORKBENCH:排队中`):s(X)(`@WORKBENCH:执行中`)),1)]),o(`p`,{class:`agent-item__task`,title:e.taskTitle},C(e.taskTitle||s(X)(`@WORKBENCH:未命名任务`)),9,Zi),o(`div`,Qi,[e.pid?(M(),B(`span`,$i,`PID `+C(e.pid),1)):b(``,!0),o(`span`,ea,C(e.elapsed),1)])]))),128)),t.running.length===0?(M(),B(`li`,ta,C(s(X)(`@WORKBENCH:暂无执行中的任务`)),1)):b(``,!0)])]))}}),[[`__scopeId`,`data-v-49b8136e`]]);t(),U(),S(),z();var ra={class:`kb`},ia={class:`kb__toolbar`},aa={class:`kb__views`,role:`tablist`},oa=[`aria-selected`],sa=[`aria-selected`],ca={class:`kb__filters`},la=[`title`],ua={class:`kb__search`},da=[`placeholder`],fa={class:`kb-col__head`},pa={class:`kb-col__title`},ma={class:`kb-col__count`},ha={class:`kb-col__list`},ga=[`onClick`],_a={class:`kb-card__row1`},va={key:0,class:`kb-card__running`,"aria-hidden":`true`},ya={class:`kb-card__time`},ba=[`title`],xa={key:0,class:`kb-card__project`},Sa={class:`kb-card__actions`},Ca=[`title`,`onClick`],wa=[`title`,`aria-label`,`onClick`],Ta={key:0,class:`kb-col__empty`},Ea={key:1},Da={key:1,class:`kb__table-wrap`},Oa={class:`kb-table`},ka={class:`kb-table__th`},Aa={class:`kb-table__th kb-table__th--narrow`},ja={class:`kb-table__th kb-table__th--narrow`},Ma=[`onClick`],Na={class:`kb-table__td`},Pa={class:`kb-table__name`},Fa={key:0,class:`kb-table__project`},Ia={class:`kb-table__td`},La={class:`kb-table__td kb-table__td--num`},Ra={key:0},za={class:`kb-table__td kb-table__empty`,colspan:`3`},Ba=`wb.boardView.v1`,Va=Me(f({__name:`WorkbenchKanban`,props:{tasks:{},projectLabels:{},showProjectLabel:{type:Boolean}},emits:[`open-task`,`run-task`,`delete-task`,`create-task`],setup(t,{emit:n}){let r=t,i=n,a=L((()=>{try{return localStorage.getItem(Ba)===`list`?`list`:`kanban`}catch{return`kanban`}})());H(a,e=>{try{localStorage.setItem(Ba,e)}catch{}});let c=L(``),l=L(!1),d=[{key:`todo`,labelKey:`@WORKBENCH:待处理`},{key:`doing`,labelKey:`@WORKBENCH:进行中`},{key:`done`,labelKey:`@WORKBENCH:已完成`}],f=E(()=>{let e=c.value.trim().toLowerCase();return r.tasks.filter(t=>l.value&&t.lastJobStatus!==`error`?!1:!e||(t.title||``).toLowerCase().includes(e)||(t.desc||``).toLowerCase().includes(e))}),p=E(()=>d.map(e=>e.key===`done`?{...e,tasks:f.value.filter(t=>t.column===e.key).sort(g)}:{...e,tasks:f.value.filter(t=>t.column===e.key)}));function m(e){return String(e.lastJobEndedAt||e.updatedAt||e.createdAt||``)}function g(e,t){return m(t).localeCompare(m(e))}function _(e){return e.column===`done`?m(e):e.updatedAt||e.createdAt||``}let ee=E(()=>({gridTemplateColumns:`repeat(${p.value.length}, minmax(0, 1fr))`}));function v(e){return(e.title||``).trim()||(e.desc||``).replace(/\s+/g,` `).trim()}function y(e){return r.projectLabels[e.projectPath]||``}function te(e){return e.lastJobStatus===`error`}return(n,r)=>{let m=h;return M(),B(`div`,ra,[o(`div`,ia,[o(`div`,aa,[o(`button`,{type:`button`,role:`tab`,class:W([`kb__view-btn`,{"is-active":a.value===`kanban`}]),"aria-selected":a.value===`kanban`,onClick:r[0]||=e=>a.value=`kanban`},C(s(X)(`@WORKBENCH:看板视图`)),11,oa),o(`button`,{type:`button`,role:`tab`,class:W([`kb__view-btn`,{"is-active":a.value===`list`}]),"aria-selected":a.value===`list`,onClick:r[1]||=e=>a.value=`list`},C(s(X)(`@WORKBENCH:列表视图`)),11,sa)]),o(`div`,ca,[o(`label`,{class:`kb__check`,title:s(X)(`@WORKBENCH:只显示最近一次执行报错的任务`)},[V(o(`input`,{type:`checkbox`,"onUpdate:modelValue":r[2]||=e=>l.value=e},null,512),[[he,l.value]]),o(`span`,null,C(s(X)(`@WORKBENCH:仅看报错`)),1)],8,la),o(`div`,ua,[x(m,{class:`kb__search-icon`},{default:R(()=>[x(s(u))]),_:1}),V(o(`input`,{class:`kb__search-input`,type:`search`,"onUpdate:modelValue":r[3]||=e=>c.value=e,placeholder:s(X)(`@WORKBENCH:搜索任务标题或描述`)},null,8,da),[[se,c.value]])])])]),a.value===`kanban`?(M(),B(`div`,{key:0,class:`kb__columns`,style:oe(ee.value)},[(M(!0),B(G,null,e(p.value,n=>(M(),B(`section`,{key:n.key,class:W([`kb-col`,`kb-col--`+n.key])},[o(`header`,fa,[r[5]||=o(`span`,{class:`kb-col__dot`,"aria-hidden":`true`},null,-1),o(`h3`,pa,C(s(X)(n.labelKey)),1),o(`span`,ma,C(n.tasks.length),1)]),o(`ul`,ha,[(M(!0),B(G,null,e(n.tasks,e=>(M(),B(`li`,{key:e.id,class:W([`kb-card`,{"is-running":e.runningJobs>0,"has-error":te(e)}]),onClick:t=>i(`open-task`,e)},[o(`div`,_a,[e.runningJobs>0?(M(),B(`span`,va)):b(``,!0),o(`span`,ya,C(s(br)(_(e))),1)]),o(`p`,{class:`kb-card__title`,title:v(e)},C(v(e)||s(X)(`@WORKBENCH:未命名任务`)),9,ba),t.showProjectLabel&&y(e)?(M(),B(`p`,xa,C(y(e)),1)):b(``,!0),o(`div`,Sa,[e.runningJobs===0?(M(),B(`button`,{key:0,type:`button`,class:`kb-card__btn`,title:s(X)(`@WORKBENCH:执行`),onClick:I(t=>i(`run-task`,e),[`stop`])},C(s(X)(`@WORKBENCH:执行`)),9,Ca)):b(``,!0),o(`button`,{type:`button`,class:`kb-card__btn kb-card__btn--danger`,title:s(X)(`@WORKBENCH:删除`),"aria-label":s(X)(`@WORKBENCH:删除`),onClick:I(t=>i(`delete-task`,e),[`stop`])},`×`,8,wa)])],10,ga))),128)),n.tasks.length===0?(M(),B(`li`,Ta,[n.key===`todo`?(M(),B(`button`,{key:0,type:`button`,class:`kb-col__empty-btn`,onClick:r[4]||=e=>i(`create-task`)},C(s(X)(`@WORKBENCH:新建任务`)),1)):(M(),B(`span`,Ea,C(s(X)(`@WORKBENCH:暂无任务`)),1))])):b(``,!0)])],2))),128))],4)):(M(),B(`div`,Da,[o(`table`,Oa,[o(`thead`,null,[o(`tr`,null,[o(`th`,ka,C(s(X)(`@WORKBENCH:任务`)),1),o(`th`,Aa,C(s(X)(`@WORKBENCH:状态`)),1),o(`th`,ja,C(s(X)(`@WORKBENCH:更新时间`)),1)])]),o(`tbody`,null,[(M(!0),B(G,null,e(f.value,e=>(M(),B(`tr`,{key:e.id,class:`kb-table__row`,onClick:t=>i(`open-task`,e)},[o(`td`,Na,[o(`span`,Pa,C(v(e)||s(X)(`@WORKBENCH:未命名任务`)),1),t.showProjectLabel&&y(e)?(M(),B(`span`,Fa,C(y(e)),1)):b(``,!0)]),o(`td`,Ia,[o(`span`,{class:W([`kb-table__status`,`is-`+e.column])},C(s(X)(d.find(t=>t.key===e.column).labelKey)),3)]),o(`td`,La,C(s(br)(e.updatedAt||e.createdAt)),1)],8,Ma))),128)),f.value.length===0?(M(),B(`tr`,Ra,[o(`td`,za,C(s(X)(`@WORKBENCH:暂无任务`)),1)])):b(``,!0)])])]))])}}}),[[`__scopeId`,`data-v-8e2192af`]]);t(),U(),S(),z();var Ha=[`title`,`aria-label`],Ua={class:`oc__rail-text`},Wa={class:`oc__head`},Ga={class:`oc__title`},Ka=[`disabled`,`title`],qa=[`title`,`aria-label`],Ja={class:`oc__state-label`},Ya={class:`oc__state-value`},Xa={class:`oc__state-meta`},Za={class:`oc__feed`},Qa={class:`oc__feed-title`},$a={class:`oc__feed-list`},eo={class:`oc-row__head`},to={class:`oc-row__kind`},no={class:`oc-row__time`},ro={class:`oc-row__text`},io={key:0,class:`oc-row__note`},ao={key:1,class:`oc-row__note`},oo={key:0},so={key:2,class:`oc-row__note`},co=[`title`],lo={key:4,class:`oc-row__note`},uo={key:0,class:`oc-empty`},fo={class:`oc__git`},po={class:`oc__feed-title`},mo={class:`oc__git-name`},ho={class:`oc__git-list`},go={class:`oc__git-label`},_o={class:`oc__git-label`},vo={class:`oc__git-value`},yo={class:`oc__git-label`},bo={class:`oc__git-value`},xo=[`placeholder`],So={class:`oc__compose-foot`},Co=[`disabled`,`title`,`aria-label`],wo=[`title`,`aria-label`],To=[`title`],Eo=[`title`],Do=[`title`,`aria-label`],Oo={class:`oc__executor-item`},ko={class:`oc__executor-item__name`},Ao={key:1,class:`oc__executor-item__missing`},jo=[`disabled`],Mo={class:`oc__hint`},No=`/api/workbench/orchestrator/attachments`,Po=`wb.ocInputHeight.v1`,Fo=76,Io=20,Lo=Me(f({__name:`OrchestratorConsole`,props:{active:{type:Boolean},activity:{},runningCount:{},selectedProject:{},dispatching:{type:Boolean},togglingSchedule:{type:Boolean},todayDone:{},collapsed:{type:Boolean},defaultPrompt:{},projectPrompts:{}},emits:[`toggle-schedule`,`toggle-collapse`,`open-prompt-settings`,`dispatch`],setup(t,{expose:r,emit:a}){let c=t,l=a,u=L(``),d=L(!0),f=L(!0),p=Fe(),g=E(()=>({claude:p.claudeAvailable,opencode:p.opencodeAvailable})),_=L(Je());function ee(){if(g.value[_.value]){ze(_.value);return}let e=Object.keys(g.value).find(e=>g.value[e]);e&&(_.value=e)}function v(e){return qe.find(t=>t.id===e)?.name||e}function te(e){_.value=e,ee()}let S=L([]),T=E(()=>({kind:`draft`,list:S.value,replace:e=>{S.value=e}})),{isUploading:D,isImageAttachment:O,humanSize:k,onAttachmentPaste:re,onAttachmentDrop:j,removeAttachment:ie,pickAttachmentFile:N}=wn(),ce=E(()=>D(`draft`)),P=L(!1);function F(e){e.stopPropagation(),re(e,T.value)}function le(e){P.value=!1,j(e,T.value)}function z(){N(T.value)}function de(e){ie(T.value,e)}function fe(){S.value=[]}r({clearAttachments:fe});let me=E(()=>c.selectedProject?.key||``),ge=E(()=>(c.defaultPrompt||``).trim()),_e=E(()=>{let e=me.value;return e?(c.projectPrompts?.[e]?.prompt||``).trim():``}),H=E(()=>Object.values(c.projectPrompts||{}).some(e=>(e?.prompt||``).trim().length>0)),U=E(()=>!!ge.value||H.value),be=E(()=>{let e=!!ge.value,t=me.value?_e.value?`project`:`none`:H.value?`target`:`none`;return X(e&&t===`project`?`@WORKBENCH:全局 + 本项目`:e&&t===`target`?`@WORKBENCH:全局 + 落点项目`:e?`@WORKBENCH:全局`:t===`project`?`@WORKBENCH:本项目`:t===`target`?`@WORKBENCH:落点项目`:`@WORKBENCH:未设置`)}),xe=E(()=>u.value.trim().length>0&&!c.dispatching&&!ce.value);function Se(){xe.value&&(l(`dispatch`,{text:u.value.trim(),autoRun:d.value,attachments:S.value,projectPath:c.selectedProject?c.selectedProject.path:``,useDefaultPrompt:f.value,executor:_.value}),u.value=``)}function Ce(e){e.isComposing||e.keyCode===229||e.key!==`Enter`||e.shiftKey||(e.preventDefault(),Se())}function Te(){try{let e=localStorage.getItem(Po);if(!e)return null;let t=Number(e);return Number.isFinite(t)&&t>=Fo?Math.round(t):null}catch{return null}}let K=L(null),q=L(Te()),J=E(()=>{let e={};return q.value&&(e.height=`${q.value}px`),e}),Oe=null,ke=!1,Ae=!0;function je(e){let t=K.value;if(!t)return;let n=t.getBoundingClientRect();ke=n.right-e.clientX<=Io&&n.bottom-e.clientY<=Io}function Y(){ke=!1}function Me(e){let t=Math.round(e.offsetHeight);if(!(t<Fo||t===q.value)){q.value=t;try{localStorage.setItem(Po,String(t))}catch{}}}ae(()=>{let e=K.value;e&&(window.addEventListener(`mouseup`,Y),typeof ResizeObserver<`u`&&(Oe=new ResizeObserver(()=>{if(Ae){Ae=!1;return}let t=parseFloat(getComputedStyle(e).maxHeight),n=Number.isFinite(t)&&e.offsetHeight>=t-1;(ke||!n)&&Me(e)}),Oe.observe(e)))}),ye(()=>{window.removeEventListener(`mouseup`,Y),Oe?.disconnect(),Oe=null});function Ne(e){let t=e.taskTitle||X(`@WORKBENCH:未命名任务`),n=e.projectName||`—`;switch(e.kind){case`user`:return e.text||``;case`dispatch`:return X(`@WORKBENCH:派发「{task}」至 {project}`,{task:t,project:n});case`done`:return X(`@WORKBENCH:「{task}」执行完成`,{task:t});case`error`:return X(`@WORKBENCH:「{task}」执行出错`,{task:t});case`cancelled`:return X(`@WORKBENCH:「{task}」已取消`,{task:t});default:return t}}let Pe={user:`@WORKBENCH:用户派发`,dispatch:`@WORKBENCH:派发`,done:`@WORKBENCH:完成`,error:`@WORKBENCH:出错`,cancelled:`@WORKBENCH:取消`};function Ie(e){return e.kind===`user`?e.instructionStatus===`accepted`?X(`@WORKBENCH:已建任务并开始执行`):e.instructionStatus===`rejected`?X(`@WORKBENCH:被拒绝:{reason}`,{reason:e.reason||``}):e.reason||X(`@WORKBENCH:已建任务(未执行)`):``}function Z(e){switch(e.targetSource){case`mention`:return X(`@WORKBENCH:指令里提到了它`);case`agent`:return X(`@WORKBENCH:主 Agent 判断`);case`default`:return X(`@WORKBENCH:没识别出项目,用了默认项目`);default:return``}}function Le(e){switch(e.promptSource){case`global`:return X(`@WORKBENCH:附带全局默认提示词`);case`project`:return X(`@WORKBENCH:附带项目默认提示词`);case`both`:return X(`@WORKBENCH:附带全局 + 项目默认提示词`);default:return``}}let Be=E(()=>{let e=c.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(r,a)=>{let c=h,p=n,ee=De,T=w;return M(),B(`aside`,{class:W([`oc`,{"is-collapsed":t.collapsed}])},[t.collapsed?(M(),B(`button`,{key:0,type:`button`,class:`oc__rail`,title:s(X)(`@WORKBENCH:展开主 Agent 控制台`),"aria-label":s(X)(`@WORKBENCH:展开主 Agent 控制台`),"aria-expanded":!1,onClick:a[0]||=e=>l(`toggle-collapse`)},[x(c,{class:`oc__rail-icon`},{default:R(()=>[x(s(Ee))]),_:1}),o(`span`,{class:W([`oc__rail-live`,{"is-off":!t.active}]),"aria-hidden":`true`},null,2),o(`span`,Ua,C(s(X)(`@WORKBENCH:主 Agent 控制台`)),1)],8,Ha)):b(``,!0),V(o(`header`,Wa,[o(`span`,{class:W([`oc__live`,{"is-off":!t.active}]),"aria-hidden":`true`},null,2),o(`h3`,Ga,C(s(X)(`@WORKBENCH:主 Agent 控制台`)),1),o(`button`,{type:`button`,class:`oc__toggle`,disabled:t.togglingSchedule,title:t.active?s(X)(`@WORKBENCH:暂停后派发只建任务,不会自动执行`):s(X)(`@WORKBENCH:恢复后派发会自动执行`),onClick:a[1]||=e=>l(`toggle-schedule`,!t.active)},C(t.active?s(X)(`@WORKBENCH:暂停调度`):s(X)(`@WORKBENCH:恢复调度`)),9,Ka),o(`button`,{type:`button`,class:`oc__collapse`,title:s(X)(`@WORKBENCH:收起主 Agent 控制台`),"aria-label":s(X)(`@WORKBENCH:收起主 Agent 控制台`),"aria-expanded":!0,onClick:a[2]||=e=>l(`toggle-collapse`)},[x(c,null,{default:R(()=>[x(s(pe))]),_:1})],8,qa)],512),[[we,!t.collapsed]]),V(o(`div`,{class:W([`oc__state`,{"is-paused":!t.active}])},[o(`span`,Ja,C(s(X)(`@WORKBENCH:调度状态`)),1),o(`span`,Ya,C(t.active?s(X)(`@WORKBENCH:调度中`):s(X)(`@WORKBENCH:已暂停`)),1),o(`span`,Xa,C(s(X)(`@WORKBENCH:{n} 个执行中`,{n:t.runningCount})),1)],2),[[we,!t.collapsed]]),V(o(`div`,Za,[o(`p`,Qa,C(s(X)(`@WORKBENCH:活动日志`)),1),o(`ul`,$a,[(M(!0),B(G,null,e(t.activity,e=>(M(),B(`li`,{key:e.id,class:W([`oc-row`,`oc-row--`+e.kind])},[o(`div`,eo,[o(`span`,to,C(s(X)(Pe[e.kind]||`@WORKBENCH:派发`)),1),o(`span`,no,C(s(Cr)(e.at)),1)]),o(`p`,ro,C(Ne(e)),1),Ie(e)?(M(),B(`p`,io,C(Ie(e)),1)):b(``,!0),e.kind===`user`&&e.projectName?(M(),B(`p`,ao,[y(C(s(X)(`@WORKBENCH:落点「{name}」`,{name:e.projectName}))+` `,1),Z(e)?(M(),B(`span`,oo,`· `+C(Z(e)),1)):b(``,!0)])):b(``,!0),e.kind===`user`&&Le(e)?(M(),B(`p`,so,C(Le(e)),1)):b(``,!0),e.kind===`error`&&e.error?(M(),B(`p`,{key:3,class:`oc-row__error`,title:e.error},C(e.error),9,co)):b(``,!0),e.kind===`done`&&e.projectName?(M(),B(`p`,lo,C(e.projectName),1)):b(``,!0)],2))),128)),t.activity.length===0?(M(),B(`li`,uo,C(s(X)(`@WORKBENCH:暂无活动记录`)),1)):b(``,!0)])],512),[[we,!t.collapsed]]),V(o(`div`,fo,[o(`p`,po,[y(C(s(X)(`@WORKBENCH:项目概览`))+` `,1),o(`span`,mo,C(t.selectedProject?t.selectedProject.name:s(X)(`@WORKBENCH:全部项目`)),1)]),o(`dl`,ho,[(M(!0),B(G,null,e(Be.value,e=>(M(),B(G,{key:e.label},[o(`dt`,go,C(e.label),1),o(`dd`,{class:W([`oc__git-value`,{"is-warn":e.tone===`warn`,"is-danger":e.tone===`danger`}])},C(e.value),3)],64))),128)),o(`dt`,_o,C(s(X)(`@WORKBENCH:今日完成`)),1),o(`dd`,vo,C(t.todayDone),1),o(`dt`,yo,C(s(X)(`@WORKBENCH:最后活跃`)),1),o(`dd`,bo,C(t.selectedProject&&s(br)(t.selectedProject.stats.lastActiveAt)||`—`),1)])],512),[[we,!t.collapsed]]),V(o(`div`,{class:`oc__compose`,onPaste:F,onDrop:I(le,[`prevent`]),onDragover:a[10]||=I(e=>P.value=!0,[`prevent`]),onDragleave:a[11]||=e=>P.value=!1},[V(o(`textarea`,{ref_key:`inputRef`,ref:K,class:`oc__input`,"onUpdate:modelValue":a[3]||=e=>u.value=e,style:oe(J.value),rows:`4`,placeholder:s(X)(`@WORKBENCH:给主 Agent 下一条指令,例如:把登录模块的错误处理重构一遍`),onKeydown:Ce,onPaste:F,onMousedown:je},null,44,xo),[[se,u.value]]),S.value.length>0||ce.value?(M(),i(st,{key:0,attachments:S.value,"is-image":s(O),"human-size":s(k),"is-uploading":ce.value,"is-paste-hover":P.value,"max-count":9,"on-pick":z,"on-remove":de,"raw-base":No,onPaste:F,onDrop:le,onDragover:a[4]||=I(e=>P.value=!0,[`prevent`]),onDragenter:a[5]||=I(e=>P.value=!0,[`prevent`]),onDragleave:a[6]||=e=>P.value=!1},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`])):b(``,!0),o(`div`,So,[o(`button`,{type:`button`,class:`oc__attach`,disabled:ce.value||S.value.length>=9,title:s(X)(`@WORKBENCH:添加附件(也可直接粘贴或拖入文件)`),"aria-label":s(X)(`@WORKBENCH:添加附件`),onClick:z},[x(c,null,{default:R(()=>[x(s(ne))]),_:1})],8,Co),o(`button`,{type:`button`,class:W([`oc__attach`,{"is-on":U.value}]),title:s(X)(`@WORKBENCH:设置派发时自动附加的默认提示词(全局 / 各项目)`),"aria-label":s(X)(`@WORKBENCH:默认提示词设置`),onClick:a[7]||=e=>l(`open-prompt-settings`)},[x(c,null,{default:R(()=>[x(s(m))]),_:1})],10,wo),o(`label`,{class:`oc__autorn`,title:s(X)(`@WORKBENCH:取消勾选则只建任务草稿,不自动执行`)},[V(o(`input`,{type:`checkbox`,"onUpdate:modelValue":a[8]||=e=>d.value=e},null,512),[[he,d.value]]),o(`span`,null,C(s(X)(`@WORKBENCH:立即执行`)),1)],8,To),U.value?(M(),B(`label`,{key:0,class:`oc__autorn`,title:s(X)(`@WORKBENCH:取消勾选则本次派发的任务不带默认提示词(设置本身不受影响)`)},[V(o(`input`,{type:`checkbox`,"onUpdate:modelValue":a[9]||=e=>f.value=e},null,512),[[he,f.value]]),o(`span`,null,C(s(X)(`@WORKBENCH:默认提示词({state})`,{state:be.value})),1)],8,Eo)):b(``,!0),x(T,{trigger:`click`,class:`oc__executor`,onCommand:te},{dropdown:R(()=>[x(ee,null,{default:R(()=>[(M(!0),B(G,null,e(s(qe),e=>(M(),i(p,{key:e.id,command:e.id,disabled:!g.value[e.id]},{default:R(()=>[o(`span`,Oo,[x(Re,{executor:e.id,class:`oc__executor-item__icon`},null,8,[`executor`]),o(`span`,ko,C(e.name),1),_.value===e.id?(M(),i(c,{key:0,class:`oc__executor-item__check`},{default:R(()=>[x(s(ue))]),_:1})):g.value[e.id]?b(``,!0):(M(),B(`span`,Ao,C(s(X)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:R(()=>[o(`button`,{type:`button`,class:`oc__executor-btn`,title:s(X)(`@WORKBENCH:本次派发使用的执行器(与执行按钮的临时切换共用)`),"aria-label":s(X)(`@WORKBENCH:任务执行器`)},[x(Re,{executor:_.value,class:`oc__executor-btn__icon`},null,8,[`executor`]),o(`span`,null,C(v(_.value)),1),x(c,{class:`oc__executor-btn__caret`},{default:R(()=>[x(s(ve))]),_:1})],8,Do)]),_:1}),o(`button`,{type:`button`,class:`oc__send`,disabled:!xe.value,onClick:Se},[x(c,{class:`oc__send-icon`},{default:R(()=>[x(s(A))]),_:1}),o(`span`,null,C(t.dispatching?s(X)(`@WORKBENCH:派发中…`):s(X)(`@WORKBENCH:派发`)),1)],8,jo)]),o(`p`,Mo,[t.selectedProject?(M(),B(G,{key:0},[y(C(s(X)(`@WORKBENCH:指令会在「{name}」下新建一个任务;Enter 派发,Shift+Enter 换行`,{name:t.selectedProject.name})),1)],64)):(M(),B(G,{key:1},[y(C(s(X)(`@WORKBENCH:指令落到哪个项目由主 Agent 判断;Enter 派发,Shift+Enter 换行`)),1)],64))])],544),[[we,!t.collapsed]])],2)}}}),[[`__scopeId`,`data-v-df4963bd`]]);t(),U(),S(),z();var Ro={class:`pd`},zo={class:`pd__intro`},Bo={class:`pd__field`},Vo={class:`pd__head`},Ho={class:`pd__label`,for:`pd-global`},Uo={class:`pd__count`},Wo=[`placeholder`],Go={class:`pd__field`},Ko={class:`pd__head`},qo={class:`pd__label`,for:`pd-project`},Jo={key:0,class:`pd__count`},Yo=[`disabled`,`placeholder`],Xo={class:`pd__hint`},Zo={class:`pd__foot`},Qo=[`disabled`],$o=4e3,es=Me(f({__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,a=L(``),c=L(``);H(()=>n.modelValue,e=>{e&&(a.value=n.defaultPrompt||``,c.value=n.projectPrompt||``)});let l=E(()=>!!n.projectPath),u=E(()=>a.value.trim()!==(n.defaultPrompt||``).trim()||l.value&&c.value.trim()!==(n.projectPrompt||``).trim());function d(){n.saving||r(`save`,{globalPrompt:a.value,projectPrompt:c.value})}function f(){r(`update:modelValue`,!1)}return(t,n)=>(M(),i(Ie,{"model-value":e.modelValue,title:s(X)(`@WORKBENCH:默认提示词`),width:`min(640px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":n[2]||=e=>r(`update:modelValue`,e)},{footer:R(()=>[o(`div`,Zo,[o(`button`,{type:`button`,class:`pd__btn`,onClick:f},C(s(X)(`@WORKBENCH:取消`)),1),n[3]||=o(`span`,{class:`pd__foot-spacer`},null,-1),o(`button`,{type:`button`,class:`pd__btn pd__btn--primary`,disabled:e.saving||!u.value,onClick:d},C(e.saving?s(X)(`@WORKBENCH:保存中…`):s(X)(`@WORKBENCH:保存`)),9,Qo)])]),default:R(()=>[o(`div`,Ro,[o(`p`,zo,C(s(X)(`@WORKBENCH:派发指令时自动附加在指令之前,让每个任务都带上这些约束。只影响之后派发的任务,不会改动已经建好的任务。`)),1),o(`div`,Bo,[o(`div`,Vo,[o(`label`,Ho,C(s(X)(`@WORKBENCH:全局默认提示词`)),1),o(`span`,Uo,C(a.value.length)+` / `+C($o),1)]),V(o(`textarea`,{id:`pd-global`,"onUpdate:modelValue":n[0]||=e=>a.value=e,class:`pd__area`,rows:`5`,maxlength:$o,placeholder:s(X)(`@WORKBENCH:对所有项目生效。例如:回答用中文;改完代码必须跑一遍测试;不要动 dist 目录`)},null,8,Wo),[[se,a.value]])]),o(`div`,Go,[o(`div`,Ko,[o(`label`,qo,C(l.value?s(X)(`@WORKBENCH:「{name}」的项目提示词`,{name:e.projectName}):s(X)(`@WORKBENCH:项目提示词`)),1),l.value?(M(),B(`span`,Jo,C(c.value.length)+` / `+C($o),1)):b(``,!0)]),V(o(`textarea`,{id:`pd-project`,"onUpdate:modelValue":n[1]||=e=>c.value=e,class:`pd__area`,rows:`5`,maxlength:$o,disabled:!l.value,placeholder:l.value?s(X)(`@WORKBENCH:只在这个项目派发时附加。例如:包管理器用 pnpm;改动集中在 src/ui 下`):s(X)(`@WORKBENCH:先在左侧选中一个具体项目,才能设置它的提示词`)},null,8,Yo),[[se,c.value]]),o(`p`,Xo,C(l.value?s(X)(`@WORKBENCH:项目提示词追加在全局提示词之后(不覆盖全局),派发到「{name}」时一起带上`,{name:e.projectName}):s(X)(`@WORKBENCH:选中的是「全部项目」,落点由主 Agent 判断 —— 想给某个项目单设提示词,先选中它`)),1)])])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-eddf8c4d`]]);t(),U(),S(),z();var ts={class:`nc`},ns={class:`nc__field`},rs={class:`nc__label`,for:`nc-project`},is={value:``},as=[`value`],os=[`title`],ss={class:`nc__field`},cs={class:`nc__label`,for:`nc-title`},ls=[`placeholder`],us={class:`nc__field`},ds={class:`nc__label`,for:`nc-desc`},fs=[`placeholder`],ps={key:0,class:`nc__error`},ms={class:`nc__foot`},hs=[`disabled`],gs=[`disabled`],_s=Me(f({__name:`WorkbenchTaskCreateDialog`,props:{modelValue:{type:Boolean},projects:{},defaultProjectPath:{}},emits:[`update:modelValue`,`created`],setup(t,{emit:n}){let r=t,a=n,c=L(``),l=L(``),u=L(``),d=L(!1),f=L(``);function p(e){let t=Z(e);if(!t)return``;let n=r.projects.find(e=>Z(e.path)===t);return n?n.path:``}H(()=>r.modelValue,e=>{e&&(c.value=``,l.value=``,u.value=p(r.defaultProjectPath),f.value=``,d.value=!1)});let m=E(()=>r.projects),h=E(()=>!d.value&&(c.value.trim().length>0||l.value.trim().length>0)),g=E(()=>{let e=Z(u.value);if(!e)return``;let t=m.value.find(t=>Z(t.path)===e);return t?t.name:``});async function _(e){if(h.value){d.value=!0,f.value=``;try{let t={title:c.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}a(`update:modelValue`,!1),a(`created`,{task:n.task,openEditor:e})}finally{d.value=!1}}}return(n,r)=>(M(),i(Ie,{"model-value":t.modelValue,title:s(X)(`@WORKBENCH:新建开发任务`),width:`min(600px, 94vw)`,"close-on-click-modal":!1,"onUpdate:modelValue":r[9]||=e=>a(`update:modelValue`,e)},{footer:R(()=>[o(`div`,ms,[o(`button`,{type:`button`,class:`nc__btn`,onClick:r[6]||=e=>a(`update:modelValue`,!1)},C(s(X)(`@WORKBENCH:取消`)),1),r[10]||=o(`span`,{class:`nc__foot-spacer`},null,-1),o(`button`,{type:`button`,class:`nc__btn`,disabled:!h.value,onClick:r[7]||=e=>_(!0)},C(s(X)(`@WORKBENCH:创建并打开编辑器`)),9,hs),o(`button`,{type:`button`,class:`nc__btn nc__btn--primary`,disabled:!h.value,onClick:r[8]||=e=>_(!1)},C(d.value?s(X)(`@WORKBENCH:创建中…`):s(X)(`@WORKBENCH:创建`)),9,gs)])]),default:R(()=>[o(`div`,ts,[o(`div`,ns,[o(`label`,rs,C(s(X)(`@WORKBENCH:项目`)),1),V(o(`select`,{id:`nc-project`,"onUpdate:modelValue":r[0]||=e=>u.value=e,class:`nc__select`},[o(`option`,is,C(s(X)(`@WORKBENCH:跟随当前项目`)),1),(M(!0),B(G,null,e(m.value,e=>(M(),B(`option`,{key:e.key,value:e.path},C(e.name)+C(e.exists===!1?` · ${s(X)(`@WORKBENCH:目录不存在`)}`:``),9,as))),128))],512),[[fe,u.value]]),o(`p`,{class:`nc__hint`,title:u.value},C(g.value?s(X)(`@WORKBENCH:任务会在「{name}」目录下执行`,{name:g.value}):s(X)(`@WORKBENCH:任务会跟随应用当前的工作目录`)),9,os)]),o(`div`,ss,[o(`label`,cs,C(s(X)(`@WORKBENCH:标题`)),1),V(o(`input`,{id:`nc-title`,"onUpdate:modelValue":r[1]||=e=>c.value=e,class:`nc__input`,type:`text`,maxlength:`200`,placeholder:s(X)(`@WORKBENCH:一句话说清要做什么`),onKeydown:r[2]||=J(I(e=>_(!1),[`prevent`]),[`enter`])},null,40,ls),[[se,c.value]])]),o(`div`,us,[o(`label`,ds,C(s(X)(`@WORKBENCH:描述`)),1),V(o(`textarea`,{id:`nc-desc`,"onUpdate:modelValue":r[3]||=e=>l.value=e,class:`nc__input nc__input--area`,rows:`6`,placeholder:s(X)(`@WORKBENCH:把背景、验收标准、相关文件路径写进来,执行时用它当上下文`),onKeydown:[r[4]||=J(I(e=>_(!1),[`ctrl`,`prevent`]),[`enter`]),r[5]||=J(I(e=>_(!1),[`meta`,`prevent`]),[`enter`])]},null,40,fs),[[se,l.value]])]),f.value?(M(),B(`p`,ps,C(f.value),1)):b(``,!0)])]),_:1},8,[`model-value`,`title`]))}}),[[`__scopeId`,`data-v-518ff0be`]]);t(),U(),S(),z();var vs={class:`board__top`},ys=[`title`,`aria-label`,`aria-expanded`],bs={class:`board__brand`},xs={class:`board__brand-text`},Ss={class:`board__title`},Cs={class:`board__subtitle`},ws={class:`board__stats`},Ts={class:`board__stat`},Es={class:`board__stat-label`},Ds={class:`board__stat-value`},Os={class:`board__stat`},ks={class:`board__stat-label`},As={class:`board__stat-value`},js={class:`board__stat`},Ms={class:`board__stat-label`},Ns={class:`board__stat`},Ps={class:`board__stat-label`},Fs={class:`board__stat-value`},Is={class:`board__actions`},Ls=[`title`,`aria-label`],Rs=[`title`],zs=[`title`],Bs={class:`board__main`},Vs={class:`board__main-head`},Hs={class:`board__main-title`},Us={class:`board__project-name`},Ws=[`title`],Gs={key:1,class:`board__project-path`},Ks={key:0,class:`board__project-meta`},qs=[`title`],Js=`wb.boardProject.v1`,Ys=5e3,Xs=`wb.boardLayout.v1`,Zs=180,Qs=420,$s=260,ec=900,tc=.26,nc=.46,rc=120,ic=560,ac=.5,oc=Me(f({__name:`WorkbenchBoard`,emits:[`open-task`],setup(e,{emit:t}){let n=t,{projects:r,boardTasks:a,currentProjectPath:c,loading:l,loadProjects:u}=hr(),{active:f,activity:p,running:m,dispatching:_,togglingSchedule:ee,defaultPrompt:v,projectPrompts:te,loadOrchestrator:S,setSchedulingActive:ne,dispatch:w,saveDefaultPrompt:T,saveProjectPrompt:D}=gr(),O=L((()=>{try{return localStorage.getItem(Js)||``}catch{return``}})());H(O,e=>{try{localStorage.setItem(Js,e)}catch{}});let k=E(()=>O.value&&r.value.find(e=>e.key===O.value)||null);H(r,e=>{O.value&&(e.some(e=>e.key===O.value)||(O.value=``))});let A=E(()=>{let e=new Map(r.value.map(e=>[e.key,e.name])),t={};for(let n of a.value)n.projectPath&&(t[n.projectPath]=e.get(Z(n.projectPath))||``);return t}),re=E(()=>{if(!O.value)return a.value;let e=O.value;return a.value.filter(t=>Z(t.projectPath)===e)}),j=E(()=>{let e=new Date;e.setHours(0,0,0,0);let t=e.getTime();return{projects:r.value.length,tasks:a.value.length,running:m.value.length,todayDone:p.value.filter(e=>e.kind===`done`&&e.at&&new Date(e.at).getTime()>=t).length}});function ie(e){n(`open-task`,{taskId:e.id,projectPath:e.projectPath})}let se=null,ce=!1;async function P(e=!0){if(!ce){ce=!0;try{await Promise.all([u(e),S(e)])}finally{ce=!1}}}function F(){document.hidden||P(!0)}ae(async()=>{window.addEventListener(`resize`,fe),await P(!1),se=setInterval(()=>{document.hidden||P(!0)},Ys),document.addEventListener(`visibilitychange`,F)}),ye(()=>{window.removeEventListener(`resize`,fe),se&&=(clearInterval(se),null),document.removeEventListener(`visibilitychange`,F)});let I=Te({left:null,right:null,agentH:null,leftCollapsed:!1,rightCollapsed:!1});function le(){try{let e=localStorage.getItem(Xs);if(!e)return;let t=JSON.parse(e);typeof t.left==`number`&&Number.isFinite(t.left)&&(I.left=t.left),typeof t.right==`number`&&Number.isFinite(t.right)&&(I.right=t.right),typeof t.agentH==`number`&&Number.isFinite(t.agentH)&&(I.agentH=t.agentH),I.leftCollapsed=t.leftCollapsed===!0,I.rightCollapsed=t.rightCollapsed===!0}catch{}}le();function z(){try{localStorage.setItem(Xs,JSON.stringify(I))}catch{}}let ue=L(typeof window>`u`?1920:window.innerWidth),de=L(typeof window>`u`?1080:window.innerHeight);function fe(){ue.value=window.innerWidth,de.value=window.innerHeight}let V=E(()=>ue.value<=1024),he=E(()=>ue.value<=860);function ge(e,t){let n=e===`left`?Zs:$s,r=Math.min(e===`left`?Qs:ec,ue.value*(e===`left`?tc:nc));return Math.round(Math.min(Math.max(t,n),Math.max(n,r)))}function _e(e){let t=Math.min(ic,de.value*ac);return Math.round(Math.min(Math.max(e,rc),Math.max(rc,t)))}let U=E(()=>{let e={};return I.left!=null&&(e[`--wb-left-w`]=ge(`left`,I.left)+`px`),I.right!=null&&!he.value&&(e[`--wb-right-w`]=ge(`right`,I.right)+`px`),e}),ve=E(()=>{let e={};return I.agentH!=null&&(e[`--wb-agents-h`]=_e(I.agentH)+`px`),e}),be=L(null),xe=L(null),Se=L(null);function Ce(e){return be.value?.querySelector(e===`left`?`.board__left`:`.oc`)}function we(e){window.removeEventListener(`mousemove`,e),document.body.style.userSelect=``,document.body.style.cursor=``,Se.value=null,z()}function De(e,t){if(e===`left`?V.value:he.value)return;let n=Ce(e);if(!n)return;t.preventDefault();let r=t.clientX,i=n.getBoundingClientRect().width;Se.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);I[e]=ge(e,i+n)};window.addEventListener(`mousemove`,a),window.addEventListener(`mouseup`,()=>we(a),{once:!0})}function G(e){I[e]=null,z()}function K(){return xe.value?.querySelector(`.agents`)}function q(e){let t=K();if(!t)return;e.preventDefault();let n=e.clientY,r=t.getBoundingClientRect().height;Se.value=`agents`,document.body.style.userSelect=`none`,document.body.style.cursor=`row-resize`;let i=e=>{I.agentH=_e(r+(n-e.clientY))};window.addEventListener(`mousemove`,i),window.addEventListener(`mouseup`,()=>we(i),{once:!0})}function ke(){I.agentH=null,z()}let Ae=L(!1),je=E(()=>V.value?!Ae.value:I.leftCollapsed);function Y(){if(V.value){Ae.value=!Ae.value;return}I.leftCollapsed=!I.leftCollapsed,z()}function Me(){V.value&&(Ae.value=!1)}let Ne=E(()=>I.rightCollapsed&&!he.value);function Pe(){I.rightCollapsed=!I.rightCollapsed,z()}function Ie(e){O.value=e?e.key:``,Ae.value=!1}let Le=L(!1);function Re(){Le.value=!0}async function ze(e){if(await P(!0),e.openEditor){n(`open-task`,{taskId:e.task.id,projectPath:e.task.projectPath||``});return}N.success(X(`@WORKBENCH:已创建任务`))}async function Be(e){if(e.runningJobs>0)return;let t=Fe(),n={claude:t.claudeAvailable,opencode:t.opencodeAvailable},r=Je();n[r]||(r=r===`claude`?`opencode`:`claude`);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 P(!0)}async function Ve(e){let t=(e.title||``).trim()||X(`@WORKBENCH:未命名任务`);try{await me.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 P(!0)}let He=L(null),Ue=E(()=>k.value?.path||c.value);async function We(e){let t=await w({text:e.text,projectPath:e.projectPath,autoRun:e.autoRun,attachments:e.attachments,useDefaultPrompt:e.useDefaultPrompt,executor:e.executor});t&&(He.value?.clearAttachments(),N.success(t.ran?X(`@WORKBENCH:已派发并开始执行`):X(`@WORKBENCH:已派发(只建任务未执行)`)),await P(!0))}async function Ge(e){await ne(e)}let Ke=L(!1),qe=L(!1),Q=E(()=>{let e=k.value?.key;return e&&te.value?.[e]?.prompt||``});async function $(e){if(qe.value)return;let t=e.globalPrompt.trim(),n=e.projectPrompt.trim(),r=k.value;qe.value=!0;try{let e=!0;t!==(v.value||``).trim()&&(e=await T(t)),e&&r&&n!==Q.value.trim()&&(e=await D(r.path,n)),e&&(Ke.value=!1)}finally{qe.value=!1}}return(e,t)=>{let n=h,a=g;return M(),B(`div`,{class:`board`,style:oe(U.value)},[o(`header`,vs,[o(`button`,{type:`button`,class:W([`board__icon-btn board__fold-btn`,{"is-on":!je.value}]),title:je.value?s(X)(`@WORKBENCH:展开项目列表`):s(X)(`@WORKBENCH:收起项目列表`),"aria-label":je.value?s(X)(`@WORKBENCH:展开项目列表`):s(X)(`@WORKBENCH:收起项目列表`),"aria-expanded":!je.value,onClick:Y},[je.value?(M(),i(n,{key:1},{default:R(()=>[x(s(pe))]),_:1})):(M(),i(n,{key:0},{default:R(()=>[x(s(Ee))]),_:1}))],10,ys),o(`div`,bs,[o(`span`,{class:W([`board__live`,{"is-off":!s(f)}]),"aria-hidden":`true`},null,2),o(`div`,xs,[o(`h1`,Ss,C(s(X)(`@WORKBENCH:多项目编排台`)),1),o(`p`,Cs,C(s(f)?s(X)(`@WORKBENCH:主 Agent 调度中`):s(X)(`@WORKBENCH:主 Agent 已暂停`)),1)])]),o(`div`,ws,[o(`span`,Ts,[o(`span`,Es,C(s(X)(`@WORKBENCH:项目`)),1),o(`strong`,Ds,C(j.value.projects),1)]),o(`span`,Os,[o(`span`,ks,C(s(X)(`@WORKBENCH:任务`)),1),o(`strong`,As,C(j.value.tasks),1)]),o(`span`,js,[o(`span`,Ms,C(s(X)(`@WORKBENCH:活跃执行`)),1),o(`strong`,{class:W([`board__stat-value`,{"is-live":j.value.running>0}])},C(j.value.running),3)]),o(`span`,Ns,[o(`span`,Ps,C(s(X)(`@WORKBENCH:今日完成`)),1),o(`strong`,Fs,C(j.value.todayDone),1)])]),o(`div`,Is,[o(`button`,{type:`button`,class:`board__icon-btn`,title:s(X)(`@WORKBENCH:刷新`),"aria-label":s(X)(`@WORKBENCH:刷新`),onClick:t[0]||=e=>P(!1)},[x(n,null,{default:R(()=>[x(s(d))]),_:1})],8,Ls),x(a,{type:`primary`,size:`small`,icon:s(Oe),onClick:Re},{default:R(()=>[y(C(s(X)(`@WORKBENCH:新建开发任务`)),1)]),_:1},8,[`icon`])])]),o(`div`,{ref_key:`colsRef`,ref:be,class:W([`board__cols`,{"is-resizing":Se.value!==null}])},[o(`div`,{class:W([`board__scrim`,{"is-on":Ae.value}]),"aria-hidden":`true`,onClick:t[1]||=e=>Ae.value=!1},null,2),o(`aside`,{ref_key:`leftRef`,ref:xe,class:W([`board__left`,{"is-collapsed":je.value}]),style:oe(ve.value),onKeydown:J(Me,[`esc`])},[x(Ui,{projects:s(r),"selected-key":O.value,loading:s(l),onSelect:Ie},null,8,[`projects`,`selected-key`,`loading`]),o(`div`,{class:`board__splitter board__splitter--h`,role:`separator`,"aria-orientation":`horizontal`,title:s(X)(`@WORKBENCH:上下拖动调整执行监控高度,双击恢复默认`),onMousedown:q,onDblclick:ke},null,40,Rs),x(na,{running:s(m)},null,8,[`running`])],38),je.value?b(``,!0):(M(),B(`div`,{key:0,class:`board__splitter board__splitter--left`,role:`separator`,"aria-orientation":`vertical`,title:s(X)(`@WORKBENCH:拖动调整项目列表宽度,双击恢复默认`),onMousedown:t[2]||=e=>De(`left`,e),onDblclick:t[3]||=e=>G(`left`)},null,40,zs)),o(`main`,Bs,[o(`div`,Vs,[o(`div`,Hs,[o(`h2`,Us,C(k.value?k.value.name:s(X)(`@WORKBENCH:全部项目`)),1),k.value?(M(),B(`span`,{key:0,class:`board__project-path`,title:k.value.path},C(k.value.path),9,Ws)):(M(),B(`span`,Gs,C(s(X)(`@WORKBENCH:共 {n} 个项目的任务`,{n:s(r).length})),1))]),k.value?(M(),B(`span`,Ks,C(s(X)(`@WORKBENCH:{done}/{total} 任务完成`,{done:k.value.stats.done,total:k.value.stats.total})),1)):b(``,!0)]),x(Va,{tasks:re.value,"project-labels":A.value,"show-project-label":!k.value,onOpenTask:ie,onRunTask:Be,onDeleteTask:Ve,onCreateTask:Re},null,8,[`tasks`,`project-labels`,`show-project-label`])]),!Ne.value&&!he.value?(M(),B(`div`,{key:1,class:`board__splitter board__splitter--right`,role:`separator`,"aria-orientation":`vertical`,title:s(X)(`@WORKBENCH:拖动调整主 Agent 控制台宽度,双击恢复默认`),onMousedown:t[4]||=e=>De(`right`,e),onDblclick:t[5]||=e=>G(`right`)},null,40,qs)):b(``,!0),x(Lo,{ref_key:`consoleRef`,ref:He,active:s(f),activity:s(p),"running-count":s(m).length,"selected-project":k.value,dispatching:s(_),"toggling-schedule":s(ee),"today-done":j.value.todayDone,collapsed:Ne.value,"default-prompt":s(v),"project-prompts":s(te),onToggleCollapse:Pe,onToggleSchedule:Ge,onDispatch:We,onOpenPromptSettings:t[6]||=e=>Ke.value=!0},null,8,[`active`,`activity`,`running-count`,`selected-project`,`dispatching`,`toggling-schedule`,`today-done`,`collapsed`,`default-prompt`,`project-prompts`])],2),x(es,{modelValue:Ke.value,"onUpdate:modelValue":t[7]||=e=>Ke.value=e,"default-prompt":s(v),"project-path":k.value?.path||``,"project-name":k.value?.name||``,"project-prompt":Q.value,saving:qe.value,onSave:$},null,8,[`modelValue`,`default-prompt`,`project-path`,`project-name`,`project-prompt`,`saving`]),x(_s,{modelValue:Le.value,"onUpdate:modelValue":t[8]||=e=>Le.value=e,projects:s(r),"default-project-path":Ue.value,onCreated:ze},null,8,[`modelValue`,`projects`,`default-project-path`])],4)}}}),[[`__scopeId`,`data-v-6b379f54`]]);t(),U(),S(),z();var sc={class:`workbench`},cc={class:`wb-editor`},lc={class:`wb-editor-bar`},uc=[`title`],dc=[`title`],fc=[`title`],pc={class:`wb-editor-bar__hint`},mc={class:`workbench__editor-row`},hc=[`title`],gc={class:`wb-split`},_c={key:0,class:`wb-placeholder`},vc={class:`wb-split__header`},yc={class:`wb-split__title-wrap`},bc=[`placeholder`],xc=[`title`,`aria-label`],Sc=[`title`],Cc={key:0,class:`wb-meta-save__dot`},wc={key:1,class:`wb-meta-save__check`},Tc={key:2,class:`wb-meta-save__bang`},Ec={key:3,class:`wb-meta-save__dot`},Dc={value:null},Oc=[`value`],kc={class:`wb-executor-split__hint`},Ac={class:`wb-executor-item`},jc={class:`wb-executor-item__name`},Mc={key:1,class:`wb-executor-item__missing`},Nc={key:2,class:`wb-no-claude-hint`,role:`status`},Pc={class:`wb-no-claude-hint__text`},Fc={class:`wb-no-claude-hint__link`,href:`https://docs.claude.com/en/docs/claude-code/setup`,target:`_blank`,rel:`noopener noreferrer`},Ic=[`title`,`aria-label`],Lc=[`title`,`aria-label`],Rc=[`open`],zc={class:`wb-task-desc__summary`},Bc={class:`wb-task-desc__label`},Vc=[`title`,`aria-label`],Hc={key:0,class:`wb-task-desc__tag`},Uc={key:0},Wc={key:1,class:`wb-task-desc__tag-attachment`},Gc=[`placeholder`],Kc={class:`wb-execution-body`},qc={class:`wb-exec-detail`},Jc={class:`wb-form-item__label wb-simple__override-summary`},Yc=[`title`],Xc=[`placeholder`],Zc={key:0,class:`wb-simple-chat-wrap`},Qc={key:0,class:`wb-simple-chat__footer`},$c={style:{display:`flex`,gap:`8px`,"align-items":`center`}},el=`wb.lastTaskByProject.v1`,tl=`__no_project__`,nl=`wb.sidebarWidth.v1`,rl=200,il=480,al=268,ol=52,sl=320,cl=500,ll=Me(f({__name:`WorkbenchView`,setup(t){let r=Pe(),l=Fe(),u=L((()=>{try{let e=parseInt(localStorage.getItem(nl)||``,10);return Number.isFinite(e)?Math.min(il,Math.max(rl,e)):al}catch{return al}})());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(il,Math.max(rl,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(nl,String(u.value))}catch{}},{once:!0})}function f(){try{let e=localStorage.getItem(el),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}function m(e){try{localStorage.setItem(el,JSON.stringify(e))}catch{}}function _(e,t){let n=f();n[e||tl]=t,m(n)}let ee=L(!1);function v(){ee.value=!1}async function S(e){await be(),K.value=e.taskId,je(),q.value&&_(Z(A.value.path),e.taskId),ee.value=!0}let{prompts:ne,tasks:T,jobs:D,currentProject:A,syncRunningCount:P,connectSSE:F,disconnectSSE:z,loadPrompts:pe,loadCurrentProject:he,loadJobs:_e,clearJobsByTask:U,loadTasks:be}=kn();function Se(){let e=Z(A.value.path),t=T.value.filter(t=>!t.projectPath||Z(t.projectPath)===e),n=f(),r=e&&n[e]||!e&&n[tl]||``,i=r?T.value.find(e=>e.id===r):null,a=t[0]||T.value[0]||null,o=i&&i.projectPath&&Z(i.projectPath)!==e?null:i?i.id:a?a.id:null;K.value=o,je()}async function Ce(){let e=K.value;if(await be(),e&&T.value.some(t=>t.id===e)){je();return}Se()}async function we(){await be(),Se()}let Ee=L(!1),K=L(null),q=E(()=>T.value.find(e=>e.id===K.value)||null),J=E(()=>{let e=q.value?.projectPath||``;return!e||Z(e)===Z(A.value.path)?null:{name:e.replace(/[\\/]+$/,``).split(/[\\/]/).pop()||e,path:e}}),Oe=L({title:``,desc:``,promptId:null,simpleOverride:``});function je(){q.value?Oe.value={title:q.value.title,desc:q.value.desc,promptId:q.value.promptId,simpleOverride:q.value.simpleOverride||``}:Oe.value={title:``,desc:``,promptId:null,simpleOverride:``}}let Y=L(`idle`),Me=L(0),Ne=null,Le=E(()=>{if(!q.value)return!1;let e=q.value;return Oe.value.title!==e.title||Oe.value.desc!==e.desc||Oe.value.promptId!==e.promptId||Oe.value.simpleOverride!==(e.simpleOverride||``)});function Be(){Ne!==null&&(clearTimeout(Ne),Ne=null)}function Ve(e){return!(!e||(e.title||``).trim()||(e.desc||``).trim()||e.promptId||(e.simpleOverride||``).trim()||Array.isArray(e.attachments)&&e.attachments.length>0)}async function He(e){try{await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`})}catch{}let t=T.value.findIndex(t=>t.id===e.id);t!==-1&&T.value.splice(t,1)}async function Ue(){let e=T.value.filter(e=>e.id!==K.value&&Ve(e));for(let t of e)await He(t)}async function We(){if(!q.value)return!1;if(!Le.value)return!0;if(Y.value=`saving`,await Et(!1))return Me.value=Date.now(),Y.value=`saved`,setTimeout(()=>{Y.value===`saved`&&Date.now()-Me.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}H(()=>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&&(Ne!==null&&clearTimeout(Ne),Ne=window.setTimeout(()=>{We()},1500))},{deep:!0}),H(K,async(e,t)=>{Be(),q.value&&Le.value&&await We()}),H(A,async e=>{if(!e.path)return;let t=Z(e.path),n=q.value;n&&n.projectPath&&Z(n.projectPath)!==t&&await we()});function Ge(e){try{let t=new Blob([JSON.stringify(e)],{type:`application/json`});navigator.sendBeacon?.(`/api/workbench/tasks`,t)}catch{}}function Ke(){q.value&&Le.value&&!Ve(q.value)&&Ge(q.value)}let Q=Te({visible:!1,editing:null,name:``,content:``,aiLoading:!1,projectPath:``}),$=Te({visible:!1,text:``,loading:!1,saving:!1}),Ye=L(!0),Xe=E(()=>{let e=Z(A.value.path);return ne.value.filter(t=>!t.projectPath||Z(t.projectPath)===e)});async function Ze(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 Qe=L(null),$e=L(null);async function et(e){if(e){if(!await Ze((e.title||``).trim()||X(`@WORKBENCH:未命名任务`))){N.error(X(`@WORKBENCH:复制失败`));return}Qe.value=e.id,N.success(X(`@WORKBENCH:已复制任务标题`)),window.setTimeout(()=>{Qe.value===e.id&&(Qe.value=null)},1500)}}async function tt(e){if(!e)return;let t=(e.desc||``).trim();if(!t){N.warning(X(`@WORKBENCH:任务描述为空,无需复制`));return}if(!await Ze(t)){N.error(X(`@WORKBENCH:复制失败`));return}$e.value=e.id,N.success(X(`@WORKBENCH:已复制任务描述`)),window.setTimeout(()=>{$e.value===e.id&&($e.value=null)},1500)}let{simpleConversationMessages:nt,simpleAllJobsFor:rt,simpleJobFor:it,simpleJobState:at}=Dn(D,q);function ot(e){if(!e)return!1;let t=it(e);return!!t&&(t.status===`running`||t.status===`pending`)}function ct(){Q.editing=null,Q.name=``,Q.content=``,Q.aiLoading=!1,Q.projectPath=(A.value.path||``).trim(),Q.visible=!0}function lt(e){Q.editing=e,Q.name=e.name,Q.content=e.content,Q.aiLoading=!1,Q.projectPath=(e.projectPath||``).trim(),Q.visible=!0}async function dt(){if(!Q.aiLoading){Q.aiLoading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-generate`,{method:`POST`}).then(e=>e.json());e.success?(Q.name=e.name||Q.name,Q.content=e.result||``,N.success(X(`@WORKBENCH:已生成,可继续编辑`))):N.error(e.error||X(`@WORKBENCH:生成失败`))}catch(e){N.error(X(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{Q.aiLoading=!1}}}async function ft(){$.visible=!0,$.loading=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`).then(e=>e.json());e.success?$.text=e.instruction||``:N.error(e.error||X(`@WORKBENCH:读取指令失败`))}catch(e){N.error(X(`@WORKBENCH:读取指令失败`)+`: `+(e&&e.message||e))}finally{$.loading=!1}}async function pt(){if(!$.text.trim()){N.warning(X(`@WORKBENCH:指令内容不能为空`));return}$.saving=!0;try{let e=await fetch(`/api/workbench/prompts/ai-instruction`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({instruction:$.text})}).then(e=>e.json());e.success?(N.success(X(`@WORKBENCH:已保存指令`)),$.visible=!1):N.error(e.error||X(`@WORKBENCH:保存失败`))}catch(e){N.error(X(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}finally{$.saving=!1}}async function mt(){if(!Q.name.trim()||!Q.content.trim()){N.warning(X(`@WORKBENCH:名称和内容不能为空`));return}let e={id:Q.editing?.id,name:Q.name.trim(),content:Q.content,projectPath:(Q.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:已保存`)),Q.visible=!1,pe()):N.error(t.error||X(`@WORKBENCH:保存失败`))}async function ht(e){await me.confirm(X(`@WORKBENCH:删除提示词「{name}」?`,{name:e.name}),X(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/prompts/${e.id}`,{method:`DELETE`}),pe();for(let t of T.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 Ce()}let gt=L(!1),_t=L(null),vt=L(null);function yt(e){let t=e?.currentTarget||vt.value;if(!t)return;t.style.height=`auto`;let n=document.activeElement===t?cl:sl,r=Math.min(Math.max(t.scrollHeight,ol),n);t.style.height=`${r}px`,t.style.overflowY=t.scrollHeight>n?`auto`:`hidden`}H(Ye,async e=>{e&&(await j(),yt())}),H(()=>q.value?.id,async()=>{Ye.value&&(await j(),yt())});async function bt(){if(gt.value)return;gt.value=!0;let e={title:``,desc:``,promptId:null,simpleOverride:``};A.value.path&&(e.projectPath=A.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}Be(),q.value&&Ve(q.value)?await He(q.value):q.value&&Le.value&&await We(),await we(),t.task?.id&&(K.value=t.task.id,je(),N.success(X(`@WORKBENCH:已新建任务`)),await j(),_t.value?.focus())}finally{gt.value=!1}}async function xt(e){await me.confirm(X(`@WORKBENCH:删除任务「{title}」?`,{title:e.title}),X(`@WORKBENCH:确认`),{type:`warning`}),await fetch(`/api/workbench/tasks/${e.id}`,{method:`DELETE`}),K.value===e.id&&(K.value=null),we()}async function St(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||``};A.value.path&&(n.projectPath=A.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 we(),e.task?.id&&(K.value=e.task.id,je()),N.success(X(`@WORKBENCH:已复制任务`))}catch(e){N.error(X(`@WORKBENCH:网络错误: `)+(e&&e.message||e))}}async function Ct(e){if(K.value===e.id)return;Be();let t=q.value;t&&Ve(t)?await He(t):t&&Le.value&&await We(),K.value=e.id,je(),_(Z(A.value.path),e.id)}async function wt(e){let{groupPath:t,orderedIds:n}=e;if(!Array.isArray(n)||n.length===0)return;let r=T.value.slice(),i=Tt(T.value,t,n);if(i!==T.value){T.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||(T.value=r,N.error(e?.error||X(`@WORKBENCH:排序保存失败`)))}catch(e){T.value=r,N.error(X(`@WORKBENCH:排序保存失败`)+`: `+(e?.message||e))}}}function Tt(e,t,n){let r=e=>Z(e)||tl,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 Et(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 Ce(),!0):(N.error(t.error||X(`@WORKBENCH:保存失败`)),!1)}ae(async()=>{await Promise.all([pe(),we(),he(),_e()]),await Ue(),F(),window.addEventListener(`beforeunload`,Ke)}),ye(()=>{z(),window.removeEventListener(`beforeunload`,Ke),q.value&&Le.value&&!Ve(q.value)&&Ge(q.value)});let{pasteHoverId:Dt,isUploading:Ot,isImageAttachment:kt,humanSize:At,onAttachmentPaste:jt,onAttachmentDrop:Mt,uploadAttachment:Nt,removeAttachment:Pt,pickAttachmentFile:Ft}=wn(),{runTask:It,onContinueSendFromChat:Lt,cancelJob:Rt,clearExecutionForSelectedTask:zt}=On(D,T,q,{syncRunningCount:P,clearJobsByTask:U,persistTask:Et,uploadAttachment:Nt,getExecutor:()=>Bt.value}),Bt=L(Je()),Vt=E(()=>({claude:l.claudeAvailable,opencode:l.opencodeAvailable})),Ht=E(()=>Vt.value.claude||Vt.value.opencode);H(Vt,e=>{if(e[Bt.value])return;let t=Object.keys(e).find(t=>e[t]);t&&(Bt.value=t)},{immediate:!0});function Ut(e){Vt.value[e]&&(Bt.value=e,ze(e))}function Wt(e){return qe.find(t=>t.id===e)?.name||e}let Gt=E(()=>rt(q.value).slice(-1)[0]),Kt=E(()=>Gt.value?.agent===`opencode`?`OpenCode`:`Claude`),qt=E(()=>ut(Gt.value?.agent));return(t,l)=>{let f=h,m=n,_=De,E=w,D=a,j=k,ae=re,N=te,P=c,F=g,L=O;return M(),B(`div`,sc,[x(oc,{onOpenTask:S}),x(Ie,{modelValue:ee.value,"onUpdate:modelValue":l[21]||=e=>ee.value=e,title:s(X)(`@WORKBENCH:任务执行`),type:`flex`,"height-mode":`fixed`,"height-offset":`88px`,top:`2vh`,width:`min(1520px, 96vw)`},{default:R(()=>[o(`div`,cc,[o(`div`,lc,[o(`button`,{type:`button`,class:`wb-back-btn`,title:s(X)(`@WORKBENCH:返回看板`),onClick:v},[x(f,{class:`wb-back-btn__icon`},{default:R(()=>[x(s(p))]),_:1}),o(`span`,null,C(s(X)(`@WORKBENCH:返回看板`)),1)],8,uc),o(`span`,{class:`wb-editor-bar__project`,title:s(A).path},C(s(A).name),9,dc),J.value?(M(),B(`span`,{key:0,class:`wb-editor-bar__repo`,title:J.value.path},C(s(X)(`@WORKBENCH:执行于 {name}`,{name:J.value.name})),9,fc)):b(``,!0),o(`span`,pc,C(s(X)(`@WORKBENCH:任务执行`)),1)]),o(`div`,mc,[x(mr,{style:oe({width:u.value+`px`}),tasks:s(T),prompts:s(ne),"selected-task-id":K.value,"current-project":s(A),"creating-task":gt.value,"is-task-running":ot,onSelectTask:Ct,onDeleteTask:xt,onCopyTask:St,onCreateTask:bt,onOpenCreatePrompt:ct,onOpenEditPrompt:lt,onDeletePrompt:ht,onReorderTasks:wt},null,8,[`style`,`tasks`,`prompts`,`selected-task-id`,`current-project`,`creating-task`]),o(`div`,{class:`wb-splitter`,role:`separator`,"aria-orientation":`vertical`,title:s(X)(`@WORKBENCH:拖动调整侧边栏宽度`),onMousedown:d},null,40,hc),o(`section`,gc,[q.value?(M(),B(G,{key:1},[o(`div`,vc,[o(`div`,yc,[V(o(`input`,{ref_key:`titleInputRef`,ref:_t,class:`wb-input wb-input--title`,"onUpdate:modelValue":l[0]||=e=>q.value.title=e,placeholder:s(X)(`@WORKBENCH:任务标题`)},null,8,bc),[[se,q.value.title]]),o(`button`,{type:`button`,class:W([`wb-copy-btn`,{"is-flash":Qe.value===q.value.id}]),title:s(X)(`@WORKBENCH:复制任务标题`),"aria-label":s(X)(`@WORKBENCH:复制任务标题`),onClick:l[1]||=e=>et(q.value)},[Qe.value===q.value.id?(M(),i(f,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:R(()=>[...l[31]||=[y(`✓`,-1)]]),_:1})):(M(),i(f,{key:0,class:`wb-copy-btn__icon`},{default:R(()=>[x(s(xe))]),_:1}))],10,xc)]),Y.value!==`idle`||Le.value?(M(),B(`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":Le.value&&Y.value===`idle`}]),title:Y.value===`saving`?s(X)(`@WORKBENCH:保存中…`):Y.value===`error`?s(X)(`@WORKBENCH:保存失败`):Y.value===`saved`?s(X)(`@WORKBENCH:已保存`):``},[Y.value===`saving`?(M(),B(`span`,Cc)):Y.value===`saved`?(M(),B(`span`,wc,`✓`)):Y.value===`error`?(M(),B(`span`,Tc,`!`)):(M(),B(`span`,Ec)),y(` `+C(Y.value===`saving`?s(X)(`@WORKBENCH:保存中…`):Y.value===`saved`?s(X)(`@WORKBENCH:已保存`):Y.value===`error`?s(X)(`@WORKBENCH:保存失败`):s(X)(`@WORKBENCH:有未保存的更改`)),1)],10,Sc)):b(``,!0),V(o(`select`,{class:`wb-select`,"onUpdate:modelValue":l[2]||=e=>q.value.promptId=e},[o(`option`,Dc,C(s(X)(`@WORKBENCH:不绑定预置提示词`)),1),(M(!0),B(G,null,e(Xe.value,e=>(M(),B(`option`,{key:e.id,value:e.id},C(e.name),9,Oc))),128))],512),[[fe,q.value.promptId]]),Ht.value?(M(),i(E,{key:1,"split-button":``,type:`primary`,class:`wb-executor-split`,trigger:`click`,onClick:l[3]||=e=>s(It)(q.value),onCommand:Ut},{dropdown:R(()=>[x(_,null,{default:R(()=>[(M(!0),B(G,null,e(s(qe),e=>(M(),i(m,{key:e.id,command:e.id,disabled:!Vt.value[e.id]},{default:R(()=>[o(`span`,Ac,[x(Re,{executor:e.id,class:`wb-executor-item__icon`},null,8,[`executor`]),o(`span`,jc,C(e.name),1),Bt.value===e.id?(M(),i(f,{key:0,class:`wb-executor-item__check`},{default:R(()=>[x(s(ue))]),_:1})):Vt.value[e.id]?b(``,!0):(M(),B(`span`,Mc,C(s(X)(`@42BB9:未安装`)),1))])]),_:2},1032,[`command`,`disabled`]))),128))]),_:1})]),default:R(()=>[y(C(s(X)(`@WORKBENCH:执行任务`))+` `,1),o(`span`,kc,[x(Re,{executor:Bt.value,class:`wb-executor-split__hint-icon`},null,8,[`executor`]),y(` `+C(Wt(Bt.value)),1)])]),_:1})):(M(),B(`div`,Nc,[x(f,{class:`wb-no-claude-hint__icon`},{default:R(()=>[x(s(ce))]),_:1}),o(`span`,Pc,C(s(X)(`@WORKBENCH:未检测到本地 claude / opencode,无法执行任务`)),1),o(`a`,Fc,C(s(X)(`@WORKBENCH:查看安装指引`)),1)])),o(`button`,{type:`button`,class:`wb-logs-inline-btn wb-logs-inline-btn--danger`,title:s(X)(`@WORKBENCH:清空当前任务的所有执行内容`),"aria-label":s(X)(`@WORKBENCH:清空当前任务的所有执行内容`),onClick:l[4]||=(...e)=>s(zt)&&s(zt)(...e)},[x(f,{class:`wb-logs-inline-btn__icon`},{default:R(()=>[x(s(le))]),_:1}),o(`span`,null,C(s(X)(`@WORKBENCH:清空执行`)),1)],8,Ic),o(`button`,{type:`button`,class:`wb-logs-inline-btn`,title:s(X)(`@WORKBENCH:执行日志`),"aria-label":s(X)(`@WORKBENCH:执行日志`),onClick:l[5]||=e=>Ee.value=!0},[x(f,{class:`wb-logs-inline-btn__icon`},{default:R(()=>[x(s(de))]),_:1}),o(`span`,null,C(s(X)(`@WORKBENCH:执行日志`)),1)],8,Lc)]),o(`details`,{class:`wb-task-desc`,open:Ye.value,onToggle:l[17]||=e=>Ye.value=e.target.open},[o(`summary`,zc,[x(f,{class:`wb-task-desc__caret`},{default:R(()=>[(M(),i(ge(Ye.value?s(ve):s(ie))))]),_:1}),o(`span`,Bc,C(s(X)(`@WORKBENCH:任务描述(可选)`)),1),o(`button`,{type:`button`,class:W([`wb-copy-btn wb-copy-btn--inline`,{"is-flash":$e.value===q.value.id}]),title:q.value.desc&&q.value.desc.trim()?s(X)(`@WORKBENCH:复制任务描述`):s(X)(`@WORKBENCH:任务描述为空,无需复制`),"aria-label":s(X)(`@WORKBENCH:复制任务描述`),onClick:l[6]||=I(e=>tt(q.value),[`stop`,`prevent`])},[$e.value===q.value.id?(M(),i(f,{key:1,class:`wb-copy-btn__icon wb-copy-btn__icon--check`},{default:R(()=>[...l[32]||=[y(`✓`,-1)]]),_:1})):(M(),i(f,{key:0,class:`wb-copy-btn__icon`},{default:R(()=>[x(s(xe))]),_:1}))],10,Vc),q.value.desc&&q.value.desc.length>0||q.value.attachments&&q.value.attachments.length>0?(M(),B(`span`,Hc,[q.value.desc&&q.value.desc.length>0?(M(),B(`span`,Uc,C(s(X)(`@WORKBENCH:已填写`)),1)):b(``,!0),q.value.attachments&&q.value.attachments.length>0?(M(),B(`span`,Wc,C(q.value.attachments.length),1)):b(``,!0)])):b(``,!0)]),V(o(`textarea`,{ref_key:`taskDescTextareaRef`,ref:vt,class:`wb-textarea wb-textarea--autogrow`,"onUpdate:modelValue":l[7]||=e=>q.value.desc=e,placeholder:s(X)(`@WORKBENCH:任务描述(可选)`),onInput:l[8]||=e=>yt(e),onFocus:l[9]||=e=>yt(e),onBlur:l[10]||=e=>yt(e),onPaste:l[11]||=e=>s(jt)(e,{kind:`task`,task:q.value})},null,40,Gc),[[se,q.value.desc]]),x(st,{attachments:q.value.attachments||[],"is-image":s(kt),"human-size":s(At),"is-uploading":s(Ot)(`task-`+q.value.id),"is-paste-hover":s(Dt)===`task-`+q.value.id,"max-count":9,"on-pick":()=>s(Ft)({kind:`task`,task:q.value}),"on-remove":e=>s(Pt)({kind:`task`,task:q.value},e),onPaste:l[12]||=e=>s(jt)(e,{kind:`task`,task:q.value}),onDrop:l[13]||=I(e=>s(Mt)(e,{kind:`task`,task:q.value}),[`prevent`]),onDragover:l[14]||=I(e=>Dt.value=`task-`+q.value.id,[`prevent`]),onDragenter:l[15]||=I(e=>Dt.value=`task-`+q.value.id,[`prevent`]),onDragleave:l[16]||=e=>Dt.value=s(Dt)===`task-`+q.value.id?null:s(Dt)},null,8,[`attachments`,`is-image`,`human-size`,`is-uploading`,`is-paste-hover`,`on-pick`,`on-remove`])],40,Rc),o(`div`,Kc,[o(`div`,qc,[o(`details`,{class:W([`wb-simple__override`,{"has-content":!!(q.value.simpleOverride&&q.value.simpleOverride.trim())}])},[o(`summary`,Jc,[x(f,{class:`wb-simple__override-caret`},{default:R(()=>[x(s(ie))]),_:1}),o(`span`,null,C(s(X)(`@WORKBENCH:覆盖预置提示词(可选)`)),1),q.value.simpleOverride&&q.value.simpleOverride.trim()?(M(),B(`span`,{key:0,class:`wb-simple__override-tag`,title:s(X)(`@WORKBENCH:已填写覆盖内容`)},C(s(X)(`@WORKBENCH:已填写`)),9,Yc)):b(``,!0),s(at)(s(it)(q.value))===`running`&&s(it)(q.value)?(M(),B(`button`,{key:1,class:`wb-simple__stop`,onClick:l[18]||=I(e=>s(Rt)(s(it)(q.value)),[`stop`])},C(s(X)(`@WORKBENCH:停止`)),1)):b(``,!0)]),V(o(`textarea`,{class:`wb-textarea`,"onUpdate:modelValue":l[19]||=e=>q.value.simpleOverride=e,placeholder:s(X)(`@WORKBENCH:留空则使用上方选定的「预置提示词」模板;可用变量:{{task.title}} {{task.desc}} {{repo.path}} {{branch}}`),rows:`6`},null,8,Xc),[[se,q.value.simpleOverride]])],2),s(rt)(q.value).length>0?(M(),B(`div`,Zc,[(M(),i(s(Ae),{key:q.value.id,messages:s(nt),"assistant-name":Kt.value,"assistant-avatar":qt.value,"show-avatar":!0,theme:s(r).theme,"tool-calls-config":{group:!0,collapseThreshold:2},class:`wb-simple-chat`},null,8,[`messages`,`assistant-name`,`assistant-avatar`,`theme`])),s(it)(q.value)&&[`done`,`error`,`cancelled`].includes(s(at)(s(it)(q.value)))?(M(),B(`div`,Qc,[(M(),i(s(ke),{key:`input-`+q.value.id,placeholder:s(X)(`@WORKBENCH:输入后续问题继续对话…(Ctrl+Enter 发送)`),"upload-config":{enabled:!0,accept:s(hn),multiple:!0,maxCount:Math.max(0,9-(q.value.attachments?.length??0)),maxSize:s(gn)},class:`wb-simple-chat__input`,onSend:l[20]||=e=>s(Lt)(q.value,e)},null,8,[`placeholder`,`upload-config`]))])):b(``,!0)])):b(``,!0)])])],64)):(M(),B(`div`,_c,[o(`p`,null,C(s(X)(`@WORKBENCH:左侧选择任务,或新建一个任务开始`)),1)]))])])])]),_:1},8,[`modelValue`,`title`]),x(D,{modelValue:Ee.value,"onUpdate:modelValue":l[22]||=e=>Ee.value=e,title:s(X)(`@WORKBENCH:执行日志`),width:`1080px`,"close-on-click-modal":!1,top:`6vh`,class:`wb-logs-dialog`,"append-to-body":``},{default:R(()=>[x(pn)]),_:1},8,[`modelValue`,`title`]),x(D,{modelValue:Q.visible,"onUpdate:modelValue":l[27]||=e=>Q.visible=e,title:Q.editing?s(X)(`@WORKBENCH:编辑提示词`):s(X)(`@WORKBENCH:新建提示词`),width:`640px`,"append-to-body":``},{footer:R(()=>[x(F,{onClick:l[26]||=e=>Q.visible=!1},{default:R(()=>[y(C(s(X)(`@WORKBENCH:取消`)),1)]),_:1}),x(F,{type:`primary`,onClick:mt},{default:R(()=>[y(C(s(X)(`@WORKBENCH:保存`)),1)]),_:1})]),default:R(()=>[x(L,{"label-position":`top`},{default:R(()=>[x(ae,{label:s(X)(`@WORKBENCH:名称`)},{default:R(()=>[x(j,{modelValue:Q.name,"onUpdate:modelValue":l[23]||=e=>Q.name=e,placeholder:s(X)(`@WORKBENCH:如:代码审查 / 写测试`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`]),x(ae,{label:s(X)(`@WORKBENCH:所属项目`)},{default:R(()=>[x(P,{modelValue:Q.projectPath,"onUpdate:modelValue":l[24]||=e=>Q.projectPath=e,placeholder:s(X)(`@WORKBENCH:所属项目`),style:{width:`100%`},disabled:!s(A).path},{default:R(()=>[x(N,{label:s(X)(`@WORKBENCH:全局(所有项目可用)`),value:``},null,8,[`label`]),s(A).path?(M(),i(N,{key:s(A).path,label:s(A).name||s(A).path,value:s(A).path},null,8,[`label`,`value`])):b(``,!0)]),_:1},8,[`modelValue`,`placeholder`,`disabled`])]),_:1},8,[`label`]),x(ae,null,{default:R(()=>[o(`div`,$c,[x(F,{type:`primary`,plain:``,loading:Q.aiLoading,onClick:dt},{default:R(()=>[y(C(s(X)(`@WORKBENCH:AI 生成项目架构说明`)),1)]),_:1},8,[`loading`]),x(F,{onClick:ft},{default:R(()=>[y(C(s(X)(`@WORKBENCH:编辑指令`)),1)]),_:1})])]),_:1}),x(ae,{label:s(X)(`@WORKBENCH:内容`)},{default:R(()=>[x(j,{modelValue:Q.content,"onUpdate:modelValue":l[25]||=e=>Q.content=e,type:`textarea`,rows:10,placeholder:s(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`]),x(D,{modelValue:$.visible,"onUpdate:modelValue":l[30]||=e=>$.visible=e,title:s(X)(`@WORKBENCH:编辑生成指令`),width:`720px`,"append-to-body":``},{footer:R(()=>[x(F,{onClick:l[29]||=e=>$.visible=!1},{default:R(()=>[y(C(s(X)(`@WORKBENCH:取消`)),1)]),_:1}),x(F,{type:`primary`,loading:$.saving,onClick:pt},{default:R(()=>[y(C(s(X)(`@WORKBENCH:保存`)),1)]),_:1},8,[`loading`])]),default:R(()=>[x(L,{"label-position":`top`},{default:R(()=>[x(ae,{label:s(X)(`@WORKBENCH:指令内容`)},{default:R(()=>[x(j,{modelValue:$.text,"onUpdate:modelValue":l[28]||=e=>$.text=e,type:`textarea`,rows:18,placeholder:s(X)(`@WORKBENCH:指令内容`)},null,8,[`modelValue`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`modelValue`,`title`])])}}}),[[`__scopeId`,`data-v-0d7b3e71`]]);export{ll as default};
|