session-viewer-plugin 0.1.2 → 0.1.3
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/frontend/dist-ui/index.mjs +3053 -2784
- package/frontend/dist-ui/style.css +1 -1
- package/package.json +1 -1
- package/server/dist/api/cloudApi.js +17 -1
- package/server/dist/services/cloudStorage.js +49 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
.dir-manager[data-v-0c7275fe]{background:#fff;border-radius:12px;box-shadow:0 1px 3px #00000014;margin-bottom:24px}.dir-header[data-v-0c7275fe]{display:flex;align-items:center;gap:12px;width:100%;padding:16px;border:none;background:transparent;cursor:pointer;font-size:14px;text-align:left;transition:background .15s}.dir-header[data-v-0c7275fe]:hover{background:#fafafa}.dir-icon[data-v-0c7275fe]{width:18px;height:18px;color:#fa8c16}.dir-title[data-v-0c7275fe]{font-weight:500;color:#333}.dir-toggle[data-v-0c7275fe]{margin-left:auto;color:#999;width:16px;height:16px}.dir-body[data-v-0c7275fe]{padding:0 16px 16px}.dir-item[data-v-0c7275fe]{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:13px}.dir-item-icon[data-v-0c7275fe]{width:14px;height:14px;flex-shrink:0;color:#8c8c8c}.dir-item-path[data-v-0c7275fe]{font-family:monospace;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dir-badge[data-v-0c7275fe]{flex-shrink:0;background:#f0f0f0;padding:1px 6px;border-radius:3px;font-size:11px;color:#8c8c8c}.dir-badge-samples[data-v-0c7275fe]{background:#e6f4ff;color:#1677ff}.dir-hint[data-v-0c7275fe]{font-size:12px;color:#ff4d4f;line-height:1.4;align-self:center;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dir-remove[data-v-0c7275fe]{flex-shrink:0;background:none;border:none;color:#bfbfbf;cursor:pointer;padding:2px;transition:color .15s;display:flex;align-items:center}.dir-remove[data-v-0c7275fe]:hover{color:#ff4d4f}.dir-remove-icon[data-v-0c7275fe]{width:14px;height:14px}.dir-add[data-v-0c7275fe]{display:flex;align-items:center;gap:8px;padding-top:12px}.dir-input[data-v-0c7275fe]{flex:1;padding:6px 12px;border:1px solid #d9d9d9;border-radius:6px;font-family:monospace;font-size:13px;outline:none;transition:border-color .15s}.dir-input[data-v-0c7275fe]:focus{border-color:#1890ff}.dir-add-btn[data-v-0c7275fe]{padding:6px 16px;border:none;border-radius:6px;background:#1890ff;color:#fff;font-size:13px;cursor:pointer;white-space:nowrap;transition:background .15s}.dir-add-btn[data-v-0c7275fe]:hover:not(:disabled){background:#40a9ff}.dir-add-btn[data-v-0c7275fe]:disabled{opacity:.4;cursor:not-allowed}.session-card[data-v-c4930a9a]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014;cursor:pointer;transition:all .2s;position:relative;min-width:0}.session-card[data-v-c4930a9a]:hover{box-shadow:0 4px 12px #0000001f;transform:translateY(-1px)}.delete-btn[data-v-c4930a9a]{position:absolute;top:5px;right:5px;background:none;border:none;cursor:pointer;padding:4px;border-radius:4px;color:#bfbfbf;opacity:0;transition:all .15s}.session-card:hover .delete-btn[data-v-c4930a9a]{opacity:1}.delete-btn[data-v-c4930a9a]:hover{color:#ff4d4f;background:#fff1f0}.delete-btn.deleting[data-v-c4930a9a]{opacity:1;color:#1890ff;cursor:not-allowed}@keyframes spin-c4930a9a{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin[data-v-c4930a9a]{animation:spin-c4930a9a 1s linear infinite}.delete-icon[data-v-c4930a9a]{width:16px;height:16px}.card-header[data-v-c4930a9a]{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:12px}.card-agent[data-v-c4930a9a]{display:flex;align-items:center;gap:8px}.agent-icon[data-v-c4930a9a]{width:16px;height:16px;color:#7c3aed}.agent-name[data-v-c4930a9a]{font-size:14px;font-weight:500;color:#333}.card-model[data-v-c4930a9a]{background:#f0f0f0;padding:2px 8px;border-radius:4px;font-size:12px;color:#595959;margin-right:12px}.card-id[data-v-c4930a9a]{font-family:monospace;font-size:12px;color:#8c8c8c;margin-bottom:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-message[data-v-c4930a9a]{font-size:13px;color:#595959;margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-dir[data-v-c4930a9a]{font-family:monospace;font-size:11px;color:#bfbfbf;margin-bottom:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-stats[data-v-c4930a9a]{display:grid;grid-template-columns:1fr 1fr;gap:10px}.stat-item[data-v-c4930a9a]{display:flex;align-items:center;gap:6px;font-size:13px;color:#595959}.stat-icon[data-v-c4930a9a]{width:14px;height:14px;color:#8c8c8c}.card-token-bar[data-v-c4930a9a]{margin-top:12px;padding-top:12px;border-top:1px solid #f0f0f0}.token-bar-track[data-v-c4930a9a]{display:flex;height:6px;border-radius:3px;overflow:hidden;background:#f0f0f0}.token-bar-segment[data-v-c4930a9a]{height:100%;transition:width .3s}.token-bar-legend[data-v-c4930a9a]{display:flex;align-items:center;gap:12px;margin-top:6px}.legend-item[data-v-c4930a9a]{display:flex;align-items:center;gap:4px;font-size:10px;color:#8c8c8c}.legend-dot[data-v-c4930a9a]{display:inline-block;width:6px;height:6px;border-radius:2px}.legend-date[data-v-c4930a9a]{margin-left:auto;font-size:10px;color:#bfbfbf}.card-footer[data-v-c4930a9a]{margin-top:12px;padding-top:12px;border-top:1px solid #f0f0f0;display:flex;justify-content:space-between}.card-date[data-v-c4930a9a]{font-size:12px;color:#bfbfbf}.home-sidebar[data-v-e341549f]{width:100%;flex-shrink:0;border-right:1px solid #f0f0f0;background:#fff;display:flex;flex-direction:column;overflow:hidden}.sidebar-overview[data-v-e341549f]{flex-shrink:0;padding:12px 16px;border:none;background:transparent;text-align:left;font-size:14px;cursor:pointer;color:#595959;transition:all .15s;display:flex;align-items:center;gap:8px}.sidebar-overview[data-v-e341549f]:hover{background:#fafafa}.sidebar-overview.active[data-v-e341549f]{background:#1890ff14;color:#1890ff;font-weight:500}.sidebar-overview-icon[data-v-e341549f]{width:16px;height:16px;color:#d9d9d9}.sidebar-overview-icon.star-filled[data-v-e341549f]{color:#faad14}.sidebar-title[data-v-e341549f]{flex-shrink:0;padding:12px 16px;border-bottom:1px solid #f0f0f0;border-top:1px solid #f0f0f0;font-size:14px;font-weight:600;color:#333}.sidebar-sessions[data-v-e341549f]{flex:1;overflow-y:auto;padding:8px 0}.month-section[data-v-e341549f]{margin-bottom:4px}.month-header[data-v-e341549f]{display:flex;align-items:center;gap:8px;width:100%;padding:8px 16px;border:none;background:transparent;font-size:13px;font-weight:500;color:#333;cursor:pointer;text-align:left;transition:background .15s}.month-header[data-v-e341549f]:hover{background:#fafafa}.month-label[data-v-e341549f]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.month-count[data-v-e341549f]{font-size:12px;color:#d9d9d9}.month-sessions[data-v-e341549f]{padding:2px 0}.session-item[data-v-e341549f]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 16px 5px 40px;cursor:pointer;transition:all .15s}.session-item[data-v-e341549f]:hover{background:#fafafa}.session-text[data-v-e341549f]{flex:1;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:20px}.star-btn[data-v-e341549f]{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;cursor:pointer;border-radius:4px;color:#d9d9d9;transition:all .15s}.star-btn[data-v-e341549f]:hover{background:#f0f0f0;color:#faad14}.star-btn.star-active[data-v-e341549f]{color:#faad14}.star-icon[data-v-e341549f]{width:14px;height:14px}.connection-banner[data-v-c38554e6]{display:flex;align-items:center;gap:12px;padding:10px 14px;border:1px solid #f3d19e;border-radius:6px;background:#fdf6ec;color:#b88230;flex-shrink:0}.banner-icon[data-v-c38554e6]{font-size:18px;line-height:1;flex-shrink:0}.banner-body[data-v-c38554e6]{flex:1;min-width:0}.banner-title[data-v-c38554e6]{font-size:14px;font-weight:600;margin:0}.banner-detail[data-v-c38554e6]{font-size:12px;margin:4px 0 0;color:#a4752a;word-break:break-all}.banner-retry[data-v-c38554e6]{flex-shrink:0;border:1px solid #d9b374;background:transparent;color:#b88230;border-radius:4px;padding:5px 14px;font-size:13px;cursor:pointer}.banner-retry[data-v-c38554e6]:hover{background:#f7e6c6}.session-viewer[data-v-c782a6e2]{display:flex;flex-direction:column;height:100vh}.viewer-header[data-v-c782a6e2]{flex-shrink:0;background:#fff;border-bottom:1px solid #f0f0f0;padding:12px 24px;display:flex;align-items:center;gap:16px;position:sticky;top:0;z-index:10}.sidebar-toggle[data-v-c782a6e2]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.sidebar-toggle[data-v-c782a6e2]:hover{background:#f0f0f0;color:#333}.toggle-icon[data-v-c782a6e2]{width:18px;height:18px}.header-title[data-v-c782a6e2]{display:flex;align-items:center;gap:12px}.header-icon[data-v-c782a6e2]{font-size:20px}.header-title h1[data-v-c782a6e2]{font-size:18px;font-weight:600;color:#333;margin:0}.header-sub[data-v-c782a6e2]{font-size:13px;color:#8c8c8c;margin:0}.header-spacer[data-v-c782a6e2]{flex:1}.header-search[data-v-c782a6e2]{display:flex;align-items:center;flex-shrink:0}.search-input-wrap[data-v-c782a6e2]{position:relative;display:flex;align-items:center}.header-search-input[data-v-c782a6e2]{width:260px;padding:7px 30px 7px 32px;border:1px solid #e8e8e8;border-radius:8px;font-size:13px;outline:none;transition:border-color .15s}.header-search-input[data-v-c782a6e2]:focus{border-color:#1890ff}.search-icon-inner[data-v-c782a6e2]{position:absolute;left:10px;width:15px;height:15px;color:#bfbfbf;pointer-events:none}.search-clear[data-v-c782a6e2]{position:absolute;right:8px;background:none;border:none;cursor:pointer;padding:2px;display:flex;align-items:center}.clear-icon[data-v-c782a6e2]{width:13px;height:13px;color:#bfbfbf}.header-action-btn[data-v-c782a6e2]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.header-action-btn[data-v-c782a6e2]:hover{background:#f0f0f0;color:#333}.action-icon[data-v-c782a6e2]{width:18px;height:18px}.viewer-body[data-v-c782a6e2]{flex:1;display:flex;overflow:hidden}.viewer-body.sidebar-collapsed .viewer-content[data-v-c782a6e2]{margin-left:0}.sidebar-resize-handle[data-v-c782a6e2]{width:4px;flex-shrink:0;cursor:col-resize;background:transparent;transition:background .15s;margin-left:-2px;margin-right:-2px;position:relative;z-index:5}.sidebar-resize-handle[data-v-c782a6e2]:hover,.sidebar-resize-handle[data-v-c782a6e2]:active{background:#1890ff}.viewer-content[data-v-c782a6e2]{flex:1;overflow-y:auto;padding:24px}.card-grid[data-v-c782a6e2]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}@media(max-width:1024px){.card-grid[data-v-c782a6e2]{grid-template-columns:repeat(2,1fr)}}@media(max-width:640px){.card-grid[data-v-c782a6e2]{grid-template-columns:1fr}}.skeleton-card[data-v-c782a6e2]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.skeleton[data-v-c782a6e2]{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:shimmer-c782a6e2 1.5s infinite;border-radius:4px}.skeleton-header[data-v-c782a6e2]{height:20px;width:60%;margin-bottom:12px}.skeleton-id[data-v-c782a6e2]{height:14px;width:80%;margin-bottom:12px}.skeleton-stats[data-v-c782a6e2]{height:16px;width:100%}@keyframes shimmer-c782a6e2{0%{background-position:200% 0}to{background-position:-200% 0}}.empty-state[data-v-c782a6e2]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 0;color:#8c8c8c}.empty-icon[data-v-c782a6e2]{font-size:48px;margin-bottom:16px;opacity:.3}.empty-title[data-v-c782a6e2]{font-size:16px;font-weight:500;color:#595959;margin:0}.empty-sub[data-v-c782a6e2]{font-size:13px;color:#bfbfbf;margin:4px 0 0}.status-badge[data-v-4097ac6f]{display:inline-flex;align-items:center;border-radius:9999px;padding:2px 8px;font-size:12px;font-weight:500}.status-green[data-v-4097ac6f]{background:#f6ffed;color:#52c41a}.status-red[data-v-4097ac6f]{background:#fff1f0;color:#ff4d4f}.status-yellow[data-v-4097ac6f]{background:#fff7e6;color:#fa8c16}.status-blue[data-v-4097ac6f]{background:#e6f7ff;color:#1890ff}.status-gray[data-v-4097ac6f]{background:#f5f5f5;color:#8c8c8c}.step-card[data-v-aef727b1]{background:#fff;border-radius:12px;box-shadow:0 1px 3px #00000014;overflow:hidden;border-left:3px solid transparent;transition:border-color .2s,box-shadow .2s}.step-card.focused[data-v-aef727b1]{border-left-color:#1890ff;box-shadow:0 2px 8px #1890ff26}.step-detail-header[data-v-aef727b1]{display:flex;align-items:center;gap:12px;background:#fafafa;padding:12px 16px;flex-wrap:wrap}.step-detail-num[data-v-aef727b1]{width:24px;height:24px;border-radius:50%;background:#e6f7ff;color:#1890ff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.step-detail-title[data-v-aef727b1]{font-size:14px;font-weight:500;color:#333}.step-detail-dur[data-v-aef727b1],.step-detail-tokens[data-v-aef727b1],.step-detail-tools[data-v-aef727b1]{font-size:12px;color:#bfbfbf;font-family:monospace}.step-detail-time[data-v-aef727b1]{margin-left:auto;font-size:12px;color:#8c8c8c}.meta-icon[data-v-aef727b1]{width:12px;height:12px;vertical-align:-2px;margin-right:2px}.step-detail-body[data-v-aef727b1]{padding:16px}.section-label[data-v-aef727b1]{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px;cursor:pointer;-webkit-user-select:none;user-select:none}.section-label[data-v-aef727b1]:hover{color:#595959}.reasoning-label[data-v-aef727b1]{color:#722ed1}.reasoning-label[data-v-aef727b1]:hover{color:#531dab}.label-toggle[data-v-aef727b1]{font-size:10px;width:12px}.label-meta[data-v-aef727b1]{font-weight:400;font-size:11px;color:#bfbfbf;text-transform:none}.step-text[data-v-aef727b1],.step-reasoning[data-v-aef727b1]{background:#fafafa;border-radius:8px;padding:12px;font-family:SF Mono,Menlo,Monaco,Courier New,monospace;font-size:13px;line-height:1.6;color:#333;white-space:pre-wrap;word-break:break-word;max-height:384px;overflow-y:auto;margin:0 0 16px}.step-reasoning[data-v-aef727b1]{background:#f9f0ff;color:#531dab}.tool-call-card[data-v-aef727b1]{background:#fafafa;border-radius:8px;padding:12px;margin-bottom:8px}.tool-call-header[data-v-aef727b1]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.tool-call-name[data-v-aef727b1]{font-size:14px;font-weight:500;color:#333}.tool-call-dur[data-v-aef727b1]{font-size:12px;color:#8c8c8c}.tool-toggle[data-v-aef727b1]{margin-left:auto;font-size:12px;color:#1890ff;background:none;border:none;cursor:pointer}.tool-toggle[data-v-aef727b1]:hover{text-decoration:underline}.tool-call-input[data-v-aef727b1],.tool-call-output[data-v-aef727b1]{margin-top:8px}.tool-call-input pre[data-v-aef727b1],.tool-call-output pre[data-v-aef727b1]{background:#fff;border:1px solid #e8e8e8;border-radius:6px;padding:12px;font-family:SF Mono,Menlo,Monaco,Courier New,monospace;font-size:12px;line-height:1.5;color:#333;white-space:pre-wrap;word-break:break-word;max-height:300px;overflow-y:auto;margin:0}.step-detail-footer[data-v-aef727b1]{display:flex;gap:24px;padding-top:12px;margin-top:4px;border-top:1px solid #f0f0f0;font-size:12px;color:#8c8c8c}.filter-bar[data-v-adac3c66]{background:#fff;border-radius:10px;padding:10px 14px;box-shadow:0 1px 3px #00000014}.filter-top-row[data-v-adac3c66]{display:flex;align-items:center;gap:10px}.search-input-wrap[data-v-adac3c66]{width:240px;flex-shrink:0;position:relative;display:flex;align-items:center}.search-icon[data-v-adac3c66]{position:absolute;left:10px;width:15px;height:15px;color:#bfbfbf;pointer-events:none}.search-input[data-v-adac3c66]{width:100%;padding:7px 30px 7px 32px;border:1px solid #e8e8e8;border-radius:8px;font-size:13px;outline:none;transition:border-color .15s}.search-input[data-v-adac3c66]:focus{border-color:#1890ff}.search-clear[data-v-adac3c66]{position:absolute;right:8px;background:none;border:none;cursor:pointer;padding:2px;display:flex;align-items:center}.clear-icon[data-v-adac3c66]{width:13px;height:13px;color:#bfbfbf}.tool-chips-inline[data-v-adac3c66]{display:flex;align-items:center;gap:6px;flex:1;min-width:0;flex-wrap:wrap}.tool-chip[data-v-adac3c66]{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;background:#f0f5ff;border:1px solid #d6e4ff;border-radius:6px;font-size:12px;color:#1890ff;white-space:nowrap}.chip-remove[data-v-adac3c66]{background:none;border:none;cursor:pointer;padding:0;display:flex;align-items:center}.chip-x[data-v-adac3c66]{width:11px;height:11px;color:#1890ff}.tool-dropdown-wrap[data-v-adac3c66]{position:relative}.add-tool-btn[data-v-adac3c66]{padding:4px 10px;border:1px dashed #d9d9d9;border-radius:6px;background:#fff;font-size:12px;color:#8c8c8c;cursor:pointer;transition:all .15s;white-space:nowrap}.add-tool-btn[data-v-adac3c66]:hover{border-color:#1890ff;color:#1890ff}.tool-dropdown[data-v-adac3c66]{position:absolute;top:100%;left:0;margin-top:4px;background:#fff;border:1px solid #e8e8e8;border-radius:8px;box-shadow:0 4px 12px #0000001a;z-index:10;min-width:140px;max-height:200px;overflow-y:auto}.tool-dropdown-item[data-v-adac3c66]{display:block;width:100%;padding:6px 12px;border:none;background:transparent;font-size:12px;color:#333;cursor:pointer;text-align:left;transition:background .15s}.tool-dropdown-item[data-v-adac3c66]:hover{background:#f0f5ff}.tool-dropdown-empty[data-v-adac3c66]{padding:6px 12px;font-size:12px;color:#bfbfbf}.filter-actions[data-v-adac3c66]{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:auto}.filter-toggle[data-v-adac3c66]{display:flex;align-items:center;gap:5px;padding:5px 10px;border:1px solid #e8e8e8;border-radius:8px;background:#fff;font-size:12px;color:#595959;cursor:pointer;transition:all .15s}.filter-toggle[data-v-adac3c66]:hover{border-color:#1890ff;color:#1890ff}.filter-toggle.active[data-v-adac3c66]{background:#f0f5ff;border-color:#1890ff;color:#1890ff}.toggle-icon[data-v-adac3c66]{width:13px;height:13px}.filter-badge[data-v-adac3c66]{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1890ff;color:#fff;font-size:9px;font-weight:600}.reset-btn[data-v-adac3c66]{padding:5px 10px;border:1px solid #ff4d4f;border-radius:8px;background:#fff;font-size:12px;color:#ff4d4f;cursor:pointer;transition:all .15s}.reset-btn[data-v-adac3c66]:hover{background:#fff1f0}.filter-count[data-v-adac3c66]{font-size:12px;color:#bfbfbf;white-space:nowrap}.filter-options[data-v-adac3c66]{margin-top:10px;padding-top:10px;border-top:1px solid #f0f0f0;display:flex;gap:20px;flex-wrap:wrap}.filter-row[data-v-adac3c66]{display:flex;align-items:center;gap:6px}.filter-label[data-v-adac3c66]{font-size:12px;font-weight:500;color:#595959;white-space:nowrap}.range-input[data-v-adac3c66]{width:80px;padding:4px 8px;border:1px solid #e8e8e8;border-radius:6px;font-size:12px;outline:none;transition:border-color .15s}.range-input[data-v-adac3c66]:focus{border-color:#1890ff}.range-sep[data-v-adac3c66]{color:#d9d9d9;font-size:12px}.range-unit[data-v-adac3c66]{font-size:12px;color:#8c8c8c}.has-tools-group[data-v-adac3c66]{display:flex;gap:0;border:1px solid #e8e8e8;border-radius:6px;overflow:hidden}.has-tools-btn[data-v-adac3c66]{padding:4px 12px;border:none;background:#fff;font-size:12px;color:#595959;cursor:pointer;transition:all .15s}.has-tools-btn[data-v-adac3c66]:not(:last-child){border-right:1px solid #e8e8e8}.has-tools-btn.active[data-v-adac3c66]{background:#1890ff;color:#fff}.has-tools-btn[data-v-adac3c66]:hover:not(.active){background:#fafafa}.chart-section[data-v-2979710d]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.section-title[data-v-2979710d]{font-size:18px;font-weight:600;color:#333;margin:0 0 16px}.chart-container[data-v-2979710d]{position:relative}.gantt-legend[data-v-2979710d]{display:flex;align-items:center;gap:16px;margin-top:12px;padding-top:12px;border-top:1px solid #f0f0f0}.legend-item[data-v-2979710d]{display:flex;align-items:center;gap:6px;font-size:12px;color:#8c8c8c}.legend-dot[data-v-2979710d]{display:inline-block;width:10px;height:10px;border-radius:2px}.chart-section[data-v-7a01cfe3]{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:20px;margin-bottom:16px}.section-title[data-v-7a01cfe3]{font-size:16px;font-weight:600;color:#333;margin-bottom:16px}.chart-container[data-v-7a01cfe3]{position:relative}.chart-section[data-v-dc55b693]{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:20px;margin-bottom:16px}.section-title[data-v-dc55b693]{font-size:16px;font-weight:600;color:#333;margin-bottom:16px}.chart-container[data-v-dc55b693]{height:300px;position:relative}.chart-section[data-v-3aa0ed4e]{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:20px;margin-bottom:16px}.section-title[data-v-3aa0ed4e]{font-size:16px;font-weight:600;color:#333;margin-bottom:16px}.chart-container[data-v-3aa0ed4e]{position:relative}.session-detail[data-v-6235eb94]{display:flex;flex-direction:column;height:100vh}.detail-header[data-v-6235eb94]{flex-shrink:0;background:#fff;border-bottom:1px solid #f0f0f0;padding:12px 24px;display:flex;align-items:center;gap:16px;position:sticky;top:0;z-index:10}.sidebar-toggle[data-v-6235eb94]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.sidebar-toggle[data-v-6235eb94]:hover{background:#f0f0f0;color:#333}.toggle-icon[data-v-6235eb94]{width:18px;height:18px}.back-btn[data-v-6235eb94]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.back-btn[data-v-6235eb94]:hover{background:#f0f0f0;color:#333}.back-icon[data-v-6235eb94]{width:20px;height:20px}.header-info[data-v-6235eb94]{display:flex;align-items:center;gap:12px}.header-spacer[data-v-6235eb94]{flex:1}.header-action-btn[data-v-6235eb94]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.header-action-btn[data-v-6235eb94]:hover{background:#f0f0f0;color:#333}.action-icon[data-v-6235eb94]{width:18px;height:18px}.header-icon[data-v-6235eb94]{width:20px;height:20px;color:#7c3aed}.header-info h1[data-v-6235eb94]{font-size:18px;font-weight:600;color:#333;margin:0}.header-id[data-v-6235eb94]{font-family:monospace;font-size:12px;color:#8c8c8c;margin:0}.detail-loading[data-v-6235eb94]{flex:1;padding:24px;display:flex;flex-direction:column;gap:16px}.skeleton[data-v-6235eb94]{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:shimmer-6235eb94 1.5s infinite;border-radius:8px}@keyframes shimmer-6235eb94{0%{background-position:200% 0}to{background-position:-200% 0}}.detail-error[data-v-6235eb94]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8c8c8c}.error-icon[data-v-6235eb94]{width:48px;height:48px;color:#ff7875;margin-bottom:16px}.detail-body[data-v-6235eb94]{flex:1;display:flex;overflow:hidden}.detail-body.sidebar-collapsed .detail-content[data-v-6235eb94]{margin-left:0}.sidebar-resize-handle[data-v-6235eb94]{width:4px;flex-shrink:0;cursor:col-resize;background:transparent;transition:background .15s;margin-left:-2px;margin-right:-2px;position:relative;z-index:5}.sidebar-resize-handle[data-v-6235eb94]:hover,.sidebar-resize-handle[data-v-6235eb94]:active{background:#1890ff}.detail-sidebar[data-v-6235eb94]{width:100%;flex-shrink:0;border-right:1px solid #f0f0f0;background:#fff;display:flex;flex-direction:column;overflow:hidden}.sidebar-overview[data-v-6235eb94]{flex-shrink:0;padding:12px 16px;border:none;background:transparent;text-align:left;font-size:14px;cursor:pointer;color:#595959;transition:all .15s}.sidebar-overview[data-v-6235eb94]:hover{background:#fafafa}.sidebar-overview.active[data-v-6235eb94]{background:#1890ff14;color:#1890ff;font-weight:500}.sidebar-title[data-v-6235eb94]{flex-shrink:0;padding:12px 16px;border-bottom:1px solid #f0f0f0;border-top:1px solid #f0f0f0;font-size:14px;font-weight:600;color:#333}.sidebar-steps[data-v-6235eb94]{flex:1;overflow-y:auto;padding:8px 0}.agent-section[data-v-6235eb94]{margin-bottom:4px}.agent-header[data-v-6235eb94]{display:flex;align-items:center;gap:8px;width:100%;padding:8px 16px;border:none;background:transparent;font-size:13px;font-weight:500;color:#333;cursor:pointer;text-align:left;transition:background .15s}.agent-header[data-v-6235eb94]:hover{background:#fafafa}.agent-icon-sm[data-v-6235eb94]{width:14px;height:14px;color:#1890ff}.agent-label[data-v-6235eb94]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-tokens[data-v-6235eb94]{font-family:monospace;font-size:11px;color:#bfbfbf}.agent-count[data-v-6235eb94]{font-size:12px;color:#d9d9d9}.step-item[data-v-6235eb94]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 16px 5px 40px;border:none;background:transparent;font-size:12px;line-height:20px;color:#595959;cursor:pointer;text-align:left;transition:all .15s}.step-item[data-v-6235eb94]:hover{background:#fafafa}.step-item.active[data-v-6235eb94]{background:#e6f7ff;color:#1890ff;font-weight:500}.step-num[data-v-6235eb94]{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#f0f0f0;font-size:10px;font-weight:700;color:#8c8c8c;flex-shrink:0;line-height:1}.step-item.active .step-num[data-v-6235eb94]{background:#bae7ff;color:#0050b3}.step-text[data-v-6235eb94]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:20px}.step-dur[data-v-6235eb94]{font-family:monospace;font-size:11px;color:#bfbfbf;flex-shrink:0;line-height:20px}.detail-content[data-v-6235eb94]{flex:1;overflow-y:auto;padding:24px;display:flex;flex-direction:column;gap:24px}.compact-overview[data-v-6235eb94]{display:flex;align-items:center;gap:12px;background:#fff;border-radius:8px;padding:10px 16px;box-shadow:0 1px 3px #00000014;font-size:13px;flex-wrap:wrap}.compact-agent[data-v-6235eb94]{font-weight:500;color:#333}.compact-sep[data-v-6235eb94]{color:#d9d9d9}.compact-model[data-v-6235eb94],.compact-dur[data-v-6235eb94],.compact-tokens[data-v-6235eb94],.compact-tools[data-v-6235eb94]{color:#8c8c8c;font-size:12px}.compact-expand[data-v-6235eb94]{margin-left:auto;font-size:12px;color:#1890ff;background:none;border:none;cursor:pointer}.compact-expand[data-v-6235eb94]:hover{text-decoration:underline}.compact-icon[data-v-6235eb94]{width:14px;height:14px;vertical-align:-2px;margin-right:2px}.card-title-icon[data-v-6235eb94]{width:18px;height:18px;vertical-align:-3px;margin-right:4px}.build-icon[data-v-6235eb94]{width:16px;height:16px;vertical-align:-3px;margin-right:4px}.section-title-icon[data-v-6235eb94]{width:14px;height:14px;vertical-align:-2px;margin-right:4px}.cycle-status-icon[data-v-6235eb94]{width:14px;height:14px;vertical-align:-2px;flex-shrink:0}.cycle-status-icon.success[data-v-6235eb94]{color:#52c41a}.cycle-status-icon.fail[data-v-6235eb94]{color:#ff4d4f}.meta-icon[data-v-6235eb94]{width:12px;height:12px;vertical-align:-2px;margin-right:2px}.sidebar-overview-icon[data-v-6235eb94]{width:16px;height:16px;vertical-align:-3px;margin-right:4px;color:#1890ff}.scope-bar[data-v-6235eb94]{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.scope-pill[data-v-6235eb94]{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;border:1px solid #e8e8e8;background:#fff;font-size:12px;font-weight:500;color:#595959;cursor:pointer;transition:all .15s}.scope-pill.active[data-v-6235eb94]{border-color:transparent}.scope-dot[data-v-6235eb94]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.card[data-v-6235eb94]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.card h2[data-v-6235eb94]{font-size:18px;font-weight:600;color:#333;margin:0 0 16px}.overview-grid[data-v-6235eb94]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.overview-item[data-v-6235eb94]{display:flex;align-items:center;gap:8px}.oi-label[data-v-6235eb94]{font-size:12px;color:#8c8c8c}.oi-value[data-v-6235eb94]{font-size:14px;font-weight:500;color:#333}.overview-dir[data-v-6235eb94]{margin-top:12px;background:#fafafa;padding:8px 12px;border-radius:4px;font-family:monospace;font-size:12px;color:#8c8c8c}.overview-date[data-v-6235eb94]{margin-top:8px;font-size:12px;color:#bfbfbf}.usage-row[data-v-6235eb94]{display:flex;align-items:center;gap:32px;margin-bottom:16px}.donut-wrap[data-v-6235eb94]{position:relative;flex-shrink:0}.donut-svg[data-v-6235eb94]{transform:rotate(-90deg)}.donut-center[data-v-6235eb94]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center}.donut-total[data-v-6235eb94]{font-size:12px;font-weight:700;color:#333}.donut-label[data-v-6235eb94]{font-size:9px;color:#8c8c8c}.usage-legend[data-v-6235eb94]{display:grid;grid-template-columns:1fr 1fr;gap:6px 24px;font-size:12px}.legend-row[data-v-6235eb94]{display:flex;align-items:center;gap:6px}.legend-color[data-v-6235eb94]{width:10px;height:10px;border-radius:2px;flex-shrink:0}.legend-name[data-v-6235eb94]{color:#595959}.legend-val[data-v-6235eb94]{margin-left:auto;font-weight:500;color:#333}.usage-stats[data-v-6235eb94]{display:grid;grid-template-columns:repeat(6,1fr);gap:16px;text-align:center}.stat-val[data-v-6235eb94]{font-size:18px;font-weight:700;color:#333;display:block}.text-blue[data-v-6235eb94]{color:#1890ff}.text-purple[data-v-6235eb94]{color:#722ed1}.text-rose[data-v-6235eb94]{color:#eb2f96}.stat-lbl[data-v-6235eb94]{font-size:12px;color:#8c8c8c}.cache-rate[data-v-6235eb94]{display:flex;align-items:center;gap:8px;margin-top:12px}.cache-label[data-v-6235eb94]{font-size:12px;color:#8c8c8c}.cache-bar[data-v-6235eb94]{width:128px;height:8px;border-radius:4px;background:#e8e8e8}.cache-fill[data-v-6235eb94]{height:100%;border-radius:4px;background:#fa8c16;transition:width .5s}.cache-pct[data-v-6235eb94]{font-size:12px;font-weight:500;color:#fa8c16}.by-agent[data-v-6235eb94]{margin-top:20px;padding-top:16px;border-top:1px solid #f0f0f0}.by-agent h3[data-v-6235eb94]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.agent-bar-track[data-v-6235eb94]{display:flex;height:12px;border-radius:6px;overflow:hidden;background:#f0f0f0;margin-bottom:8px}.agent-bar-seg[data-v-6235eb94]{height:100%;transition:width .5s}.agent-rows[data-v-6235eb94]{display:flex;flex-direction:column;gap:6px}.agent-row[data-v-6235eb94]{display:flex;align-items:center;gap:8px;font-size:12px}.agent-dot[data-v-6235eb94]{width:10px;height:10px;border-radius:2px;flex-shrink:0}.agent-name[data-v-6235eb94]{flex:1;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-val[data-v-6235eb94]{font-weight:500;color:#333}.agent-pct[data-v-6235eb94]{width:48px;text-align:right;color:#bfbfbf}.rounds-list[data-v-6235eb94]{display:flex;flex-direction:column;gap:12px}.round-item[data-v-6235eb94]{display:flex;gap:12px;background:#fafafa;border-radius:8px;padding:16px}.round-num[data-v-6235eb94]{width:28px;height:28px;border-radius:50%;background:#f0f5ff;color:#2f54eb;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0}.round-body[data-v-6235eb94]{flex:1;min-width:0}.round-msg[data-v-6235eb94]{font-size:14px;color:#333;margin:0;white-space:pre-wrap}.round-msg-empty[data-v-6235eb94]{color:#bfbfbf;font-style:italic}.round-msg-list[data-v-6235eb94]{display:flex;flex-direction:column;gap:6px}.round-meta[data-v-6235eb94]{display:flex;flex-wrap:wrap;gap:16px;margin-top:8px;font-size:12px;color:#8c8c8c}.build-banner[data-v-6235eb94]{display:flex;align-items:center;gap:12px;border-radius:8px;padding:12px 16px;margin-bottom:16px;font-size:14px;font-weight:500}.build-success[data-v-6235eb94]{background:#f6ffed;color:#52c41a}.build-fail[data-v-6235eb94]{background:#fff1f0;color:#ff4d4f}.build-stat[data-v-6235eb94]{font-size:12px;color:#595959;margin-left:auto}.build-errors[data-v-6235eb94]{font-size:12px;color:#ff4d4f;font-weight:600}.error-codes h3[data-v-6235eb94],.fix-cycles h3[data-v-6235eb94],.warnings h3[data-v-6235eb94]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 12px}.error-row[data-v-6235eb94]{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;transition:background .15s}.error-row[data-v-6235eb94]:hover{background:#fff1f0}.err-code[data-v-6235eb94]{width:120px;flex-shrink:0;font-family:monospace;font-size:12px;color:#ff4d4f;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.err-msg[data-v-6235eb94]{flex:1;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.err-bar[data-v-6235eb94]{width:96px;height:12px;border-radius:3px;background:#f0f0f0;overflow:hidden;flex-shrink:0}.err-fill[data-v-6235eb94]{height:100%;border-radius:3px;background:#ff7875;display:flex;align-items:center;justify-content:flex-end;padding-right:4px}.err-fill span[data-v-6235eb94]{font-size:9px;font-weight:500;color:#fff}.fix-cycles[data-v-6235eb94]{margin-top:16px}.cycle-stats[data-v-6235eb94]{display:flex;gap:24px;margin-bottom:12px}.cycle-val[data-v-6235eb94]{font-size:18px;font-weight:700;display:block}.text-green[data-v-6235eb94]{color:#52c41a}.text-amber[data-v-6235eb94]{color:#fa8c16}.cycle-lbl[data-v-6235eb94]{font-size:10px;color:#8c8c8c}.cycle-row[data-v-6235eb94]{display:flex;align-items:center;gap:8px;background:#fafafa;padding:6px 8px;border-radius:4px;font-size:12px;color:#595959;margin-bottom:4px}.cycle-dur[data-v-6235eb94]{margin-left:auto;font-family:monospace;color:#bfbfbf}.warnings[data-v-6235eb94]{margin-top:16px}.warn-type-row[data-v-6235eb94]{display:flex;align-items:center;gap:8px;margin-bottom:4px}.warn-type[data-v-6235eb94]{font-size:12px;color:#595959;text-transform:capitalize;width:120px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.warn-bar[data-v-6235eb94]{flex:1;height:12px;border-radius:3px;background:#f0f0f0;overflow:hidden}.warn-fill[data-v-6235eb94]{height:100%;border-radius:3px;background:#ffc53d}.warn-count[data-v-6235eb94]{font-size:10px;color:#8c8c8c;width:16px;text-align:right}.warn-entry[data-v-6235eb94]{background:#fffbe6;padding:6px 8px;border-radius:4px;margin-bottom:4px}.warn-file[data-v-6235eb94]{font-family:monospace;font-size:10px;color:#8c8c8c;display:block}.warn-msg[data-v-6235eb94]{font-size:12px;color:#595959}.waterfall[data-v-6235eb94]{display:flex;flex-direction:column;gap:16px}.mobile-steps[data-v-6235eb94]{display:none}@media(max-width:1024px){.detail-sidebar[data-v-6235eb94]{display:none}.mobile-steps[data-v-6235eb94]{display:block}.mobile-steps h2[data-v-6235eb94]{font-size:18px;font-weight:600;color:#333;margin:0 0 12px}.mobile-step[data-v-6235eb94]{display:flex;align-items:center;gap:12px;width:100%;background:#fff;border-radius:8px;padding:12px;box-shadow:0 1px 3px #00000014;margin-bottom:8px;border:none;cursor:pointer;text-align:left;transition:background .15s}.mobile-step[data-v-6235eb94]:hover{background:#fafafa}.mobile-step-num[data-v-6235eb94]{width:28px;height:28px;border-radius:50%;background:#e6f7ff;color:#1890ff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0}.mobile-step-body[data-v-6235eb94]{flex:1;min-width:0}.mobile-step-text[data-v-6235eb94]{font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-step-meta[data-v-6235eb94]{display:flex;gap:12px;margin-top:4px;font-size:12px;color:#8c8c8c}}.overview-skills[data-v-6235eb94]{margin-top:16px;padding-top:16px;border-top:1px solid #f0f0f0}.skills-title[data-v-6235eb94]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.skills-list[data-v-6235eb94]{display:flex;flex-direction:column;gap:4px}.skill-row[data-v-6235eb94]{display:flex;align-items:center;gap:8px;padding:6px 8px;background:#fafafa;border-radius:4px;font-size:13px}.skill-icon[data-v-6235eb94]{width:14px;height:14px;flex-shrink:0}.skill-icon.completed[data-v-6235eb94]{color:#52c41a}.skill-icon.running[data-v-6235eb94]{color:#1890ff}.skill-icon.failed[data-v-6235eb94]{color:#ff4d4f}.skill-name[data-v-6235eb94]{flex:1;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-status[data-v-6235eb94]{font-size:12px;flex-shrink:0}.skill-status.completed[data-v-6235eb94]{color:#52c41a}.skill-status.running[data-v-6235eb94]{color:#1890ff}.skill-status.failed[data-v-6235eb94]{color:#ff4d4f}.overview-system-prompts[data-v-6235eb94]{margin-top:16px;padding-top:16px;border-top:1px solid #f0f0f0}.sp-title[data-v-6235eb94]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.sp-list[data-v-6235eb94]{display:flex;flex-direction:column;gap:4px}.sp-model[data-v-6235eb94]{border-radius:4px;overflow:hidden}.sp-model-header[data-v-6235eb94]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:none;background:#fafafa;font-size:13px;cursor:pointer;text-align:left;transition:background .15s}.sp-model-header[data-v-6235eb94]:hover{background:#f0f0f0}.sp-model-name[data-v-6235eb94]{flex:1;font-weight:500;color:#333}.sp-model-count[data-v-6235eb94]{font-size:11px;color:#bfbfbf}.sp-contents[data-v-6235eb94]{display:flex;flex-direction:column;gap:4px;padding:4px 0}.sp-content[data-v-6235eb94]{background:#fafafa;border-radius:4px;padding:8px 12px}.sp-text[data-v-6235eb94]{margin:0;font-family:monospace;font-size:12px;color:#595959;white-space:pre-wrap;word-break:break-all;line-height:1.6}.planning-content[data-v-6235eb94]{flex:1;overflow-y:auto;padding:24px;display:flex;flex-direction:column;gap:24px}.planning-summary[data-v-6235eb94]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.summary-card[data-v-6235eb94]{background:#fff;border-radius:12px;padding:16px;box-shadow:0 1px 3px #00000014;display:flex;flex-direction:column;align-items:center;gap:4px}.summary-val[data-v-6235eb94]{font-size:18px;font-weight:700;color:#333}.summary-lbl[data-v-6235eb94]{font-size:12px;color:#8c8c8c}.summary-card-priority[data-v-6235eb94]{padding:12px 16px;gap:6px}.priority-counts[data-v-6235eb94]{display:flex;flex-direction:column;gap:4px}.priority-item[data-v-6235eb94]{display:flex;align-items:center;gap:6px;font-size:13px;color:#333;font-weight:500}.legend-dot-sm[data-v-6235eb94]{display:inline-block;width:8px;height:8px;border-radius:2px}.rounds-section[data-v-6235eb94]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.rounds-header[data-v-6235eb94]{display:flex;align-items:center;gap:8px;width:100%;border:none;background:transparent;cursor:pointer;padding:0;text-align:left}.rounds-title[data-v-6235eb94]{font-size:18px;font-weight:600;color:#333}.rounds-body[data-v-6235eb94]{margin-top:16px;display:flex;flex-direction:column;gap:12px}.round-block[data-v-6235eb94]{background:#fafafa;border-radius:8px;padding:12px 16px}.round-header[data-v-6235eb94]{display:flex;align-items:baseline;gap:16px;margin-bottom:8px}.round-num[data-v-6235eb94]{font-size:13px;font-weight:600;color:#333;flex-shrink:0;min-width:56px}.round-time[data-v-6235eb94]{font-family:monospace;font-size:12px;color:#8c8c8c;flex-shrink:0}.round-dur[data-v-6235eb94]{font-family:monospace;font-size:11px;color:#bfbfbf;margin-left:auto}.round-progress-mini[data-v-6235eb94]{display:flex;height:4px;border-radius:2px;overflow:hidden;background:#e8e8e8;margin-bottom:8px}.round-progress-seg[data-v-6235eb94]{height:100%;transition:width .3s}.round-progress-seg.completed[data-v-6235eb94]{background:#52c41a}.round-progress-seg.in-progress[data-v-6235eb94]{background:#3b82f6}.round-todos[data-v-6235eb94]{display:flex;flex-direction:column;gap:2px}.todo-row[data-v-6235eb94]{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;font-size:13px}.todo-row[data-v-6235eb94]:hover{background:#f0f0f0}.todo-icon[data-v-6235eb94]{width:14px;height:14px;flex-shrink:0}.todo-icon.completed[data-v-6235eb94]{color:#52c41a}.todo-icon.in-progress[data-v-6235eb94]{color:#1890ff;fill:#1890ff}.todo-icon.pending[data-v-6235eb94]{color:#d9d9d9}.todo-content[data-v-6235eb94]{flex:1;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.todo-meta[data-v-6235eb94]{font-size:11px;color:#8c8c8c;flex-shrink:0}.filter-empty[data-v-6235eb94]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;color:#8c8c8c}.filter-empty p[data-v-6235eb94]{font-size:14px;margin:0 0 12px}.filter-empty-reset[data-v-6235eb94]{font-size:13px;color:#1890ff;background:none;border:none;cursor:pointer}.filter-empty-reset[data-v-6235eb94]:hover{text-decoration:underline}.cloud-file-list[data-v-fcef4675]{padding:20px;height:100%;display:flex;flex-direction:column;gap:16px}.list-header[data-v-fcef4675]{display:flex;align-items:center;justify-content:space-between;gap:16px}.header-title h2[data-v-fcef4675]{font-size:18px;color:#303133}.header-sub[data-v-fcef4675]{font-size:13px;color:#909399;margin-top:2px}.header-actions[data-v-fcef4675]{display:flex;align-items:center;gap:8px}.prefix-tag[data-v-fcef4675]{flex-shrink:0}.prefix-input[data-v-fcef4675]{width:280px}.file-table[data-v-fcef4675]{flex:1;min-height:300px}.row-name[data-v-fcef4675]{display:inline-flex;align-items:center;gap:8px;min-width:0;font-size:14.5px}.folder-name[data-v-fcef4675]{font-weight:500}.row-icon[data-v-fcef4675]{font-size:18px;color:#909399;flex-shrink:0}.folder-name .row-icon[data-v-fcef4675]{color:#e6a23c}[data-v-fcef4675] .folder-row{cursor:pointer}.action-btn[data-v-fcef4675]{font-size:17px}.list-footer[data-v-fcef4675]{display:flex;justify-content:flex-end}.page-indicator[data-v-fcef4675]{font-size:13px;color:#606266;padding:0 12px}.meta-file-name[data-v-fcef4675]{font-size:13px;color:#606266;word-break:break-all}
|
|
1
|
+
.dir-manager[data-v-0c7275fe]{background:#fff;border-radius:12px;box-shadow:0 1px 3px #00000014;margin-bottom:24px}.dir-header[data-v-0c7275fe]{display:flex;align-items:center;gap:12px;width:100%;padding:16px;border:none;background:transparent;cursor:pointer;font-size:14px;text-align:left;transition:background .15s}.dir-header[data-v-0c7275fe]:hover{background:#fafafa}.dir-icon[data-v-0c7275fe]{width:18px;height:18px;color:#fa8c16}.dir-title[data-v-0c7275fe]{font-weight:500;color:#333}.dir-toggle[data-v-0c7275fe]{margin-left:auto;color:#999;width:16px;height:16px}.dir-body[data-v-0c7275fe]{padding:0 16px 16px}.dir-item[data-v-0c7275fe]{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:13px}.dir-item-icon[data-v-0c7275fe]{width:14px;height:14px;flex-shrink:0;color:#8c8c8c}.dir-item-path[data-v-0c7275fe]{font-family:monospace;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dir-badge[data-v-0c7275fe]{flex-shrink:0;background:#f0f0f0;padding:1px 6px;border-radius:3px;font-size:11px;color:#8c8c8c}.dir-badge-samples[data-v-0c7275fe]{background:#e6f4ff;color:#1677ff}.dir-hint[data-v-0c7275fe]{font-size:12px;color:#ff4d4f;line-height:1.4;align-self:center;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dir-remove[data-v-0c7275fe]{flex-shrink:0;background:none;border:none;color:#bfbfbf;cursor:pointer;padding:2px;transition:color .15s;display:flex;align-items:center}.dir-remove[data-v-0c7275fe]:hover{color:#ff4d4f}.dir-remove-icon[data-v-0c7275fe]{width:14px;height:14px}.dir-add[data-v-0c7275fe]{display:flex;align-items:center;gap:8px;padding-top:12px}.dir-input[data-v-0c7275fe]{flex:1;padding:6px 12px;border:1px solid #d9d9d9;border-radius:6px;font-family:monospace;font-size:13px;outline:none;transition:border-color .15s}.dir-input[data-v-0c7275fe]:focus{border-color:#1890ff}.dir-add-btn[data-v-0c7275fe]{padding:6px 16px;border:none;border-radius:6px;background:#1890ff;color:#fff;font-size:13px;cursor:pointer;white-space:nowrap;transition:background .15s}.dir-add-btn[data-v-0c7275fe]:hover:not(:disabled){background:#40a9ff}.dir-add-btn[data-v-0c7275fe]:disabled{opacity:.4;cursor:not-allowed}.session-card[data-v-3bba5e7b]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014;cursor:pointer;transition:all .2s;position:relative;min-width:0}.session-card[data-v-3bba5e7b]:hover{box-shadow:0 4px 12px #0000001f;transform:translateY(-1px)}.delete-btn[data-v-3bba5e7b]{position:absolute;top:5px;right:5px;background:none;border:none;cursor:pointer;padding:4px;border-radius:4px;color:#bfbfbf;opacity:0;transition:all .15s}.session-card:hover .delete-btn[data-v-3bba5e7b]{opacity:1}.delete-btn[data-v-3bba5e7b]:hover{color:#ff4d4f;background:#fff1f0}.delete-btn.deleting[data-v-3bba5e7b]{opacity:1;color:#1890ff;cursor:not-allowed}@keyframes spin-3bba5e7b{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin[data-v-3bba5e7b]{animation:spin-3bba5e7b 1s linear infinite}.delete-icon[data-v-3bba5e7b]{width:16px;height:16px}.card-header[data-v-3bba5e7b]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px;min-width:0}.card-agent[data-v-3bba5e7b]{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}.agent-icon[data-v-3bba5e7b]{width:16px;height:16px;color:#7c3aed;flex-shrink:0}.agent-name[data-v-3bba5e7b]{font-size:14px;font-weight:500;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-model[data-v-3bba5e7b]{background:#f0f0f0;padding:2px;border-radius:4px;font-size:12px;color:#595959;margin-right:20px;min-width:50px;text-align:center;max-width:75%;flex-shrink:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-id[data-v-3bba5e7b]{font-family:monospace;font-size:12px;color:#8c8c8c;margin-bottom:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-message[data-v-3bba5e7b]{font-size:13px;color:#595959;margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-dir[data-v-3bba5e7b]{font-family:monospace;font-size:11px;color:#bfbfbf;margin-bottom:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-stats[data-v-3bba5e7b]{display:grid;grid-template-columns:1fr 1fr;gap:10px}.stat-item[data-v-3bba5e7b]{display:flex;align-items:center;gap:6px;font-size:13px;color:#595959}.stat-icon[data-v-3bba5e7b]{width:14px;height:14px;color:#8c8c8c}.card-token-bar[data-v-3bba5e7b]{margin-top:12px;padding-top:12px;border-top:1px solid #f0f0f0}.token-bar-track[data-v-3bba5e7b]{display:flex;height:6px;border-radius:3px;overflow:hidden;background:#f0f0f0}.token-bar-segment[data-v-3bba5e7b]{height:100%;transition:width .3s}.token-bar-legend[data-v-3bba5e7b]{display:flex;align-items:center;gap:12px;margin-top:6px}.legend-item[data-v-3bba5e7b]{display:flex;align-items:center;gap:4px;font-size:10px;color:#8c8c8c}.legend-dot[data-v-3bba5e7b]{display:inline-block;width:6px;height:6px;border-radius:2px}.legend-date[data-v-3bba5e7b]{margin-left:auto;font-size:10px;color:#bfbfbf}.card-footer[data-v-3bba5e7b]{margin-top:12px;padding-top:12px;border-top:1px solid #f0f0f0;display:flex;justify-content:space-between}.card-date[data-v-3bba5e7b]{font-size:12px;color:#bfbfbf}.home-sidebar[data-v-e341549f]{width:100%;flex-shrink:0;border-right:1px solid #f0f0f0;background:#fff;display:flex;flex-direction:column;overflow:hidden}.sidebar-overview[data-v-e341549f]{flex-shrink:0;padding:12px 16px;border:none;background:transparent;text-align:left;font-size:14px;cursor:pointer;color:#595959;transition:all .15s;display:flex;align-items:center;gap:8px}.sidebar-overview[data-v-e341549f]:hover{background:#fafafa}.sidebar-overview.active[data-v-e341549f]{background:#1890ff14;color:#1890ff;font-weight:500}.sidebar-overview-icon[data-v-e341549f]{width:16px;height:16px;color:#d9d9d9}.sidebar-overview-icon.star-filled[data-v-e341549f]{color:#faad14}.sidebar-title[data-v-e341549f]{flex-shrink:0;padding:12px 16px;border-bottom:1px solid #f0f0f0;border-top:1px solid #f0f0f0;font-size:14px;font-weight:600;color:#333}.sidebar-sessions[data-v-e341549f]{flex:1;overflow-y:auto;padding:8px 0}.month-section[data-v-e341549f]{margin-bottom:4px}.month-header[data-v-e341549f]{display:flex;align-items:center;gap:8px;width:100%;padding:8px 16px;border:none;background:transparent;font-size:13px;font-weight:500;color:#333;cursor:pointer;text-align:left;transition:background .15s}.month-header[data-v-e341549f]:hover{background:#fafafa}.month-label[data-v-e341549f]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.month-count[data-v-e341549f]{font-size:12px;color:#d9d9d9}.month-sessions[data-v-e341549f]{padding:2px 0}.session-item[data-v-e341549f]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 16px 5px 40px;cursor:pointer;transition:all .15s}.session-item[data-v-e341549f]:hover{background:#fafafa}.session-text[data-v-e341549f]{flex:1;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:20px}.star-btn[data-v-e341549f]{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border:none;background:transparent;cursor:pointer;border-radius:4px;color:#d9d9d9;transition:all .15s}.star-btn[data-v-e341549f]:hover{background:#f0f0f0;color:#faad14}.star-btn.star-active[data-v-e341549f]{color:#faad14}.star-icon[data-v-e341549f]{width:14px;height:14px}.connection-banner[data-v-c38554e6]{display:flex;align-items:center;gap:12px;padding:10px 14px;border:1px solid #f3d19e;border-radius:6px;background:#fdf6ec;color:#b88230;flex-shrink:0}.banner-icon[data-v-c38554e6]{font-size:18px;line-height:1;flex-shrink:0}.banner-body[data-v-c38554e6]{flex:1;min-width:0}.banner-title[data-v-c38554e6]{font-size:14px;font-weight:600;margin:0}.banner-detail[data-v-c38554e6]{font-size:12px;margin:4px 0 0;color:#a4752a;word-break:break-all}.banner-retry[data-v-c38554e6]{flex-shrink:0;border:1px solid #d9b374;background:transparent;color:#b88230;border-radius:4px;padding:5px 14px;font-size:13px;cursor:pointer}.banner-retry[data-v-c38554e6]:hover{background:#f7e6c6}.session-viewer[data-v-c782a6e2]{display:flex;flex-direction:column;height:100vh}.viewer-header[data-v-c782a6e2]{flex-shrink:0;background:#fff;border-bottom:1px solid #f0f0f0;padding:12px 24px;display:flex;align-items:center;gap:16px;position:sticky;top:0;z-index:10}.sidebar-toggle[data-v-c782a6e2]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.sidebar-toggle[data-v-c782a6e2]:hover{background:#f0f0f0;color:#333}.toggle-icon[data-v-c782a6e2]{width:18px;height:18px}.header-title[data-v-c782a6e2]{display:flex;align-items:center;gap:12px}.header-icon[data-v-c782a6e2]{font-size:20px}.header-title h1[data-v-c782a6e2]{font-size:18px;font-weight:600;color:#333;margin:0}.header-sub[data-v-c782a6e2]{font-size:13px;color:#8c8c8c;margin:0}.header-spacer[data-v-c782a6e2]{flex:1}.header-search[data-v-c782a6e2]{display:flex;align-items:center;flex-shrink:0}.search-input-wrap[data-v-c782a6e2]{position:relative;display:flex;align-items:center}.header-search-input[data-v-c782a6e2]{width:260px;padding:7px 30px 7px 32px;border:1px solid #e8e8e8;border-radius:8px;font-size:13px;outline:none;transition:border-color .15s}.header-search-input[data-v-c782a6e2]:focus{border-color:#1890ff}.search-icon-inner[data-v-c782a6e2]{position:absolute;left:10px;width:15px;height:15px;color:#bfbfbf;pointer-events:none}.search-clear[data-v-c782a6e2]{position:absolute;right:8px;background:none;border:none;cursor:pointer;padding:2px;display:flex;align-items:center}.clear-icon[data-v-c782a6e2]{width:13px;height:13px;color:#bfbfbf}.header-action-btn[data-v-c782a6e2]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.header-action-btn[data-v-c782a6e2]:hover{background:#f0f0f0;color:#333}.action-icon[data-v-c782a6e2]{width:18px;height:18px}.viewer-body[data-v-c782a6e2]{flex:1;display:flex;overflow:hidden}.viewer-body.sidebar-collapsed .viewer-content[data-v-c782a6e2]{margin-left:0}.sidebar-resize-handle[data-v-c782a6e2]{width:4px;flex-shrink:0;cursor:col-resize;background:transparent;transition:background .15s;margin-left:-2px;margin-right:-2px;position:relative;z-index:5}.sidebar-resize-handle[data-v-c782a6e2]:hover,.sidebar-resize-handle[data-v-c782a6e2]:active{background:#1890ff}.viewer-content[data-v-c782a6e2]{flex:1;overflow-y:auto;padding:24px}.card-grid[data-v-c782a6e2]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}@media(max-width:1024px){.card-grid[data-v-c782a6e2]{grid-template-columns:repeat(2,1fr)}}@media(max-width:640px){.card-grid[data-v-c782a6e2]{grid-template-columns:1fr}}.skeleton-card[data-v-c782a6e2]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.skeleton[data-v-c782a6e2]{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:shimmer-c782a6e2 1.5s infinite;border-radius:4px}.skeleton-header[data-v-c782a6e2]{height:20px;width:60%;margin-bottom:12px}.skeleton-id[data-v-c782a6e2]{height:14px;width:80%;margin-bottom:12px}.skeleton-stats[data-v-c782a6e2]{height:16px;width:100%}@keyframes shimmer-c782a6e2{0%{background-position:200% 0}to{background-position:-200% 0}}.empty-state[data-v-c782a6e2]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 0;color:#8c8c8c}.empty-icon[data-v-c782a6e2]{font-size:48px;margin-bottom:16px;opacity:.3}.empty-title[data-v-c782a6e2]{font-size:16px;font-weight:500;color:#595959;margin:0}.empty-sub[data-v-c782a6e2]{font-size:13px;color:#bfbfbf;margin:4px 0 0}.status-badge[data-v-4097ac6f]{display:inline-flex;align-items:center;border-radius:9999px;padding:2px 8px;font-size:12px;font-weight:500}.status-green[data-v-4097ac6f]{background:#f6ffed;color:#52c41a}.status-red[data-v-4097ac6f]{background:#fff1f0;color:#ff4d4f}.status-yellow[data-v-4097ac6f]{background:#fff7e6;color:#fa8c16}.status-blue[data-v-4097ac6f]{background:#e6f7ff;color:#1890ff}.status-gray[data-v-4097ac6f]{background:#f5f5f5;color:#8c8c8c}.step-card[data-v-aef727b1]{background:#fff;border-radius:12px;box-shadow:0 1px 3px #00000014;overflow:hidden;border-left:3px solid transparent;transition:border-color .2s,box-shadow .2s}.step-card.focused[data-v-aef727b1]{border-left-color:#1890ff;box-shadow:0 2px 8px #1890ff26}.step-detail-header[data-v-aef727b1]{display:flex;align-items:center;gap:12px;background:#fafafa;padding:12px 16px;flex-wrap:wrap}.step-detail-num[data-v-aef727b1]{width:24px;height:24px;border-radius:50%;background:#e6f7ff;color:#1890ff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}.step-detail-title[data-v-aef727b1]{font-size:14px;font-weight:500;color:#333}.step-detail-dur[data-v-aef727b1],.step-detail-tokens[data-v-aef727b1],.step-detail-tools[data-v-aef727b1]{font-size:12px;color:#bfbfbf;font-family:monospace}.step-detail-time[data-v-aef727b1]{margin-left:auto;font-size:12px;color:#8c8c8c}.meta-icon[data-v-aef727b1]{width:12px;height:12px;vertical-align:-2px;margin-right:2px}.step-detail-body[data-v-aef727b1]{padding:16px}.section-label[data-v-aef727b1]{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px;cursor:pointer;-webkit-user-select:none;user-select:none}.section-label[data-v-aef727b1]:hover{color:#595959}.reasoning-label[data-v-aef727b1]{color:#722ed1}.reasoning-label[data-v-aef727b1]:hover{color:#531dab}.label-toggle[data-v-aef727b1]{font-size:10px;width:12px}.label-meta[data-v-aef727b1]{font-weight:400;font-size:11px;color:#bfbfbf;text-transform:none}.step-text[data-v-aef727b1],.step-reasoning[data-v-aef727b1]{background:#fafafa;border-radius:8px;padding:12px;font-family:SF Mono,Menlo,Monaco,Courier New,monospace;font-size:13px;line-height:1.6;color:#333;white-space:pre-wrap;word-break:break-word;max-height:384px;overflow-y:auto;margin:0 0 16px}.step-reasoning[data-v-aef727b1]{background:#f9f0ff;color:#531dab}.tool-call-card[data-v-aef727b1]{background:#fafafa;border-radius:8px;padding:12px;margin-bottom:8px}.tool-call-header[data-v-aef727b1]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.tool-call-name[data-v-aef727b1]{font-size:14px;font-weight:500;color:#333}.tool-call-dur[data-v-aef727b1]{font-size:12px;color:#8c8c8c}.tool-toggle[data-v-aef727b1]{margin-left:auto;font-size:12px;color:#1890ff;background:none;border:none;cursor:pointer}.tool-toggle[data-v-aef727b1]:hover{text-decoration:underline}.tool-call-input[data-v-aef727b1],.tool-call-output[data-v-aef727b1]{margin-top:8px}.tool-call-input pre[data-v-aef727b1],.tool-call-output pre[data-v-aef727b1]{background:#fff;border:1px solid #e8e8e8;border-radius:6px;padding:12px;font-family:SF Mono,Menlo,Monaco,Courier New,monospace;font-size:12px;line-height:1.5;color:#333;white-space:pre-wrap;word-break:break-word;max-height:300px;overflow-y:auto;margin:0}.step-detail-footer[data-v-aef727b1]{display:flex;gap:24px;padding-top:12px;margin-top:4px;border-top:1px solid #f0f0f0;font-size:12px;color:#8c8c8c}.filter-bar[data-v-94d632cd]{background:#fff;border-radius:10px;padding:10px 14px;box-shadow:0 1px 3px #00000014}.filter-top-row[data-v-94d632cd]{display:flex;align-items:center;gap:10px}.search-input-wrap[data-v-94d632cd]{width:240px;flex-shrink:0;position:relative;display:flex;align-items:center}.search-icon[data-v-94d632cd]{position:absolute;left:10px;width:15px;height:15px;color:#bfbfbf;pointer-events:none}.search-input[data-v-94d632cd]{width:100%;padding:7px 30px 7px 32px;border:1px solid #e8e8e8;border-radius:8px;font-size:13px;outline:none;transition:border-color .15s}.search-input[data-v-94d632cd]:focus{border-color:#1890ff}.search-clear[data-v-94d632cd]{position:absolute;right:8px;background:none;border:none;cursor:pointer;padding:2px;display:flex;align-items:center}.clear-icon[data-v-94d632cd]{width:13px;height:13px;color:#bfbfbf}.chips-area[data-v-94d632cd]{display:flex;align-items:center;gap:6px;flex:1;min-width:0;flex-wrap:wrap}.filter-chip[data-v-94d632cd]{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:999px;font-size:12px;white-space:nowrap;line-height:18px}.tool-chip[data-v-94d632cd]{background:#f0f5ff;border:1px solid #d6e4ff;color:#1890ff}.cli-chip[data-v-94d632cd]{font-family:Consolas,Monaco,monospace;background:#f6ffed;border:1px solid #b7eb8f;color:#389e0d}.chip-remove[data-v-94d632cd]{background:none;border:none;cursor:pointer;padding:0;display:flex;align-items:center;border-radius:50%}.chip-remove[data-v-94d632cd]:hover{background:#0000000f}.chip-x[data-v-94d632cd]{width:11px;height:11px;color:inherit}.chip-dropdown-wrap[data-v-94d632cd]{position:relative;display:inline-flex}.add-chip-btn[data-v-94d632cd]{padding:3px 10px;border:1px dashed #d9d9d9;border-radius:999px;background:#fff;font-size:12px;line-height:18px;color:#8c8c8c;cursor:pointer;transition:all .15s;white-space:nowrap}.add-chip-btn[data-v-94d632cd]:hover{border-color:#1890ff;color:#1890ff}.cli-add-btn[data-v-94d632cd]:hover{border-color:#52c41a;color:#52c41a}.chip-dropdown[data-v-94d632cd]{position:absolute;top:100%;left:0;margin-top:4px;background:#fff;border:1px solid #e8e8e8;border-radius:8px;box-shadow:0 4px 12px #0000001a;z-index:10;min-width:140px;max-height:200px;overflow-y:auto}.cli-dropdown[data-v-94d632cd]{min-width:240px;max-height:280px;padding-top:4px}.cli-search[data-v-94d632cd]{display:block;width:calc(100% - 16px);margin:0 8px 4px;padding:5px 8px;border:1px solid #e8e8e8;border-radius:6px;font-size:12px;outline:none}.cli-search[data-v-94d632cd]:focus{border-color:#1890ff}.chip-dropdown-item[data-v-94d632cd]{display:block;width:100%;padding:6px 12px;border:none;background:transparent;font-size:12px;color:#333;cursor:pointer;text-align:left;transition:background .15s}.chip-dropdown-item[data-v-94d632cd]:hover{background:#f0f5ff}.chip-dropdown-empty[data-v-94d632cd]{padding:6px 12px;font-size:12px;color:#bfbfbf}.filter-actions[data-v-94d632cd]{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:auto}.filter-toggle[data-v-94d632cd]{display:flex;align-items:center;gap:5px;padding:5px 10px;border:1px solid #e8e8e8;border-radius:8px;background:#fff;font-size:12px;color:#595959;cursor:pointer;transition:all .15s}.filter-toggle[data-v-94d632cd]:hover{border-color:#1890ff;color:#1890ff}.filter-toggle.active[data-v-94d632cd]{background:#f0f5ff;border-color:#1890ff;color:#1890ff}.toggle-icon[data-v-94d632cd]{width:13px;height:13px}.filter-badge[data-v-94d632cd]{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1890ff;color:#fff;font-size:9px;font-weight:600}.reset-btn[data-v-94d632cd]{padding:5px 10px;border:1px solid #ff4d4f;border-radius:8px;background:#fff;font-size:12px;color:#ff4d4f;cursor:pointer;transition:all .15s}.reset-btn[data-v-94d632cd]:hover{background:#fff1f0}.filter-count[data-v-94d632cd]{font-size:12px;color:#bfbfbf;white-space:nowrap}.filter-options[data-v-94d632cd]{margin-top:10px;padding-top:10px;border-top:1px solid #f0f0f0;display:flex;gap:20px;flex-wrap:wrap}.filter-row[data-v-94d632cd]{display:flex;align-items:center;gap:6px}.filter-label[data-v-94d632cd]{font-size:12px;font-weight:500;color:#595959;white-space:nowrap}.range-input[data-v-94d632cd]{width:80px;padding:4px 8px;border:1px solid #e8e8e8;border-radius:6px;font-size:12px;outline:none;transition:border-color .15s}.range-input[data-v-94d632cd]:focus{border-color:#1890ff}.range-sep[data-v-94d632cd]{color:#d9d9d9;font-size:12px}.range-unit[data-v-94d632cd]{font-size:12px;color:#8c8c8c}.has-tools-group[data-v-94d632cd]{display:flex;gap:0;border:1px solid #e8e8e8;border-radius:6px;overflow:hidden}.has-tools-btn[data-v-94d632cd]{padding:4px 12px;border:none;background:#fff;font-size:12px;color:#595959;cursor:pointer;transition:all .15s}.has-tools-btn[data-v-94d632cd]:not(:last-child){border-right:1px solid #e8e8e8}.has-tools-btn.active[data-v-94d632cd]{background:#1890ff;color:#fff}.has-tools-btn[data-v-94d632cd]:hover:not(.active){background:#fafafa}.chart-section[data-v-731d61b1]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.section-title[data-v-731d61b1]{font-size:18px;font-weight:600;color:#333;margin:0 0 16px}.chart-container[data-v-731d61b1]{position:relative}.gantt-legend[data-v-731d61b1]{display:flex;align-items:center;gap:16px;margin-top:12px;padding-top:12px;border-top:1px solid #f0f0f0}.legend-item[data-v-731d61b1]{display:flex;align-items:center;gap:6px;font-size:12px;color:#8c8c8c}.legend-dot[data-v-731d61b1]{display:inline-block;width:10px;height:10px;border-radius:2px}.label-tip[data-v-731d61b1]{position:fixed;z-index:1000;max-width:420px;background:#212529f2;color:#fff;padding:6px 10px;border-radius:6px;font-size:12px;line-height:1.5;word-break:break-all;pointer-events:none;box-shadow:0 4px 12px #00000026}.chart-section[data-v-7a01cfe3]{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:20px;margin-bottom:16px}.section-title[data-v-7a01cfe3]{font-size:16px;font-weight:600;color:#333;margin-bottom:16px}.chart-container[data-v-7a01cfe3]{position:relative}.chart-section[data-v-dc55b693]{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:20px;margin-bottom:16px}.section-title[data-v-dc55b693]{font-size:16px;font-weight:600;color:#333;margin-bottom:16px}.chart-container[data-v-dc55b693]{height:300px;position:relative}.chart-section[data-v-3aa0ed4e]{background:#fff;border:1px solid #e8e8e8;border-radius:8px;padding:20px;margin-bottom:16px}.section-title[data-v-3aa0ed4e]{font-size:16px;font-weight:600;color:#333;margin-bottom:16px}.chart-container[data-v-3aa0ed4e]{position:relative}.session-detail[data-v-5a8bc83d]{display:flex;flex-direction:column;height:100vh}.detail-header[data-v-5a8bc83d]{flex-shrink:0;background:#fff;border-bottom:1px solid #f0f0f0;padding:12px 24px;display:flex;align-items:center;gap:16px;position:sticky;top:0;z-index:10}.sidebar-toggle[data-v-5a8bc83d]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.sidebar-toggle[data-v-5a8bc83d]:hover{background:#f0f0f0;color:#333}.toggle-icon[data-v-5a8bc83d]{width:18px;height:18px}.back-btn[data-v-5a8bc83d]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.back-btn[data-v-5a8bc83d]:hover{background:#f0f0f0;color:#333}.back-icon[data-v-5a8bc83d]{width:20px;height:20px}.header-info[data-v-5a8bc83d]{display:flex;align-items:center;gap:12px}.header-spacer[data-v-5a8bc83d]{flex:1}.header-action-btn[data-v-5a8bc83d]{display:flex;align-items:center;padding:4px;border:none;border-radius:6px;background:transparent;cursor:pointer;color:#8c8c8c;transition:all .15s}.header-action-btn[data-v-5a8bc83d]:hover{background:#f0f0f0;color:#333}.action-icon[data-v-5a8bc83d]{width:18px;height:18px}.header-icon[data-v-5a8bc83d]{width:20px;height:20px;color:#7c3aed}.header-info h1[data-v-5a8bc83d]{font-size:18px;font-weight:600;color:#333;margin:0}.header-id[data-v-5a8bc83d]{font-family:monospace;font-size:12px;color:#8c8c8c;margin:0}.detail-loading[data-v-5a8bc83d]{flex:1;padding:24px;display:flex;flex-direction:column;gap:16px}.skeleton[data-v-5a8bc83d]{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:shimmer-5a8bc83d 1.5s infinite;border-radius:8px}@keyframes shimmer-5a8bc83d{0%{background-position:200% 0}to{background-position:-200% 0}}.detail-error[data-v-5a8bc83d]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8c8c8c}.error-icon[data-v-5a8bc83d]{width:48px;height:48px;color:#ff7875;margin-bottom:16px}.detail-body[data-v-5a8bc83d]{flex:1;display:flex;overflow:hidden}.detail-body.sidebar-collapsed .detail-content[data-v-5a8bc83d]{margin-left:0}.sidebar-resize-handle[data-v-5a8bc83d]{width:4px;flex-shrink:0;cursor:col-resize;background:transparent;transition:background .15s;margin-left:-2px;margin-right:-2px;position:relative;z-index:5}.sidebar-resize-handle[data-v-5a8bc83d]:hover,.sidebar-resize-handle[data-v-5a8bc83d]:active{background:#1890ff}.detail-sidebar[data-v-5a8bc83d]{width:100%;flex-shrink:0;border-right:1px solid #f0f0f0;background:#fff;display:flex;flex-direction:column;overflow:hidden}.sidebar-overview[data-v-5a8bc83d]{flex-shrink:0;padding:12px 16px;border:none;background:transparent;text-align:left;font-size:14px;cursor:pointer;color:#595959;transition:all .15s}.sidebar-overview[data-v-5a8bc83d]:hover{background:#fafafa}.sidebar-overview.active[data-v-5a8bc83d]{background:#1890ff14;color:#1890ff;font-weight:500}.sidebar-title[data-v-5a8bc83d]{flex-shrink:0;padding:12px 16px;border-bottom:1px solid #f0f0f0;border-top:1px solid #f0f0f0;font-size:14px;font-weight:600;color:#333}.sidebar-steps[data-v-5a8bc83d]{flex:1;overflow-y:auto;padding:8px 0}.agent-section[data-v-5a8bc83d]{margin-bottom:4px}.agent-header[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;width:100%;padding:8px 16px;border:none;background:transparent;font-size:13px;font-weight:500;color:#333;cursor:pointer;text-align:left;transition:background .15s}.agent-header[data-v-5a8bc83d]:hover{background:#fafafa}.agent-icon-sm[data-v-5a8bc83d]{width:14px;height:14px;color:#1890ff}.agent-label[data-v-5a8bc83d]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-tokens[data-v-5a8bc83d]{font-family:monospace;font-size:11px;color:#bfbfbf}.agent-count[data-v-5a8bc83d]{font-size:12px;color:#d9d9d9}.step-item[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 16px 5px 40px;border:none;background:transparent;font-size:12px;line-height:20px;color:#595959;cursor:pointer;text-align:left;transition:all .15s}.step-item[data-v-5a8bc83d]:hover{background:#fafafa}.step-item.active[data-v-5a8bc83d]{background:#e6f7ff;color:#1890ff;font-weight:500}.step-num[data-v-5a8bc83d]{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#f0f0f0;font-size:10px;font-weight:700;color:#8c8c8c;flex-shrink:0;line-height:1}.step-item.active .step-num[data-v-5a8bc83d]{background:#bae7ff;color:#0050b3}.step-text[data-v-5a8bc83d]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:20px}.step-dur[data-v-5a8bc83d]{font-family:monospace;font-size:11px;color:#bfbfbf;flex-shrink:0;line-height:20px}.detail-content[data-v-5a8bc83d]{flex:1;overflow-y:auto;padding:24px;display:flex;flex-direction:column;gap:24px}.compact-overview[data-v-5a8bc83d]{display:flex;align-items:center;gap:12px;background:#fff;border-radius:8px;padding:10px 16px;box-shadow:0 1px 3px #00000014;font-size:13px;flex-wrap:wrap}.compact-agent[data-v-5a8bc83d]{font-weight:500;color:#333}.compact-sep[data-v-5a8bc83d]{color:#d9d9d9}.compact-model[data-v-5a8bc83d],.compact-dur[data-v-5a8bc83d],.compact-tokens[data-v-5a8bc83d],.compact-tools[data-v-5a8bc83d]{color:#8c8c8c;font-size:12px}.compact-expand[data-v-5a8bc83d]{margin-left:auto;font-size:12px;color:#1890ff;background:none;border:none;cursor:pointer}.compact-expand[data-v-5a8bc83d]:hover{text-decoration:underline}.compact-icon[data-v-5a8bc83d]{width:14px;height:14px;vertical-align:-2px;margin-right:2px}.card-title-icon[data-v-5a8bc83d]{width:18px;height:18px;vertical-align:-3px;margin-right:4px}.build-icon[data-v-5a8bc83d]{width:16px;height:16px;vertical-align:-3px;margin-right:4px}.section-title-icon[data-v-5a8bc83d]{width:14px;height:14px;vertical-align:-2px;margin-right:4px}.cycle-status-icon[data-v-5a8bc83d]{width:14px;height:14px;vertical-align:-2px;flex-shrink:0}.cycle-status-icon.success[data-v-5a8bc83d]{color:#52c41a}.cycle-status-icon.fail[data-v-5a8bc83d]{color:#ff4d4f}.meta-icon[data-v-5a8bc83d]{width:12px;height:12px;vertical-align:-2px;margin-right:2px}.sidebar-overview-icon[data-v-5a8bc83d]{width:16px;height:16px;vertical-align:-3px;margin-right:4px;color:#1890ff}.scope-bar[data-v-5a8bc83d]{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.scope-pill[data-v-5a8bc83d]{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;border:1px solid #e8e8e8;background:#fff;font-size:12px;font-weight:500;color:#595959;cursor:pointer;transition:all .15s}.scope-pill.active[data-v-5a8bc83d]{border-color:transparent}.scope-dot[data-v-5a8bc83d]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.card[data-v-5a8bc83d]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.card h2[data-v-5a8bc83d]{font-size:18px;font-weight:600;color:#333;margin:0 0 16px}.overview-grid[data-v-5a8bc83d]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.overview-item[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px}.oi-label[data-v-5a8bc83d]{font-size:12px;color:#8c8c8c}.oi-value[data-v-5a8bc83d]{font-size:14px;font-weight:500;color:#333}.overview-dir[data-v-5a8bc83d]{margin-top:12px;background:#fafafa;padding:8px 12px;border-radius:4px;font-family:monospace;font-size:12px;color:#8c8c8c}.overview-date[data-v-5a8bc83d]{margin-top:8px;font-size:12px;color:#bfbfbf}.usage-row[data-v-5a8bc83d]{display:flex;align-items:center;gap:32px;margin-bottom:16px}.donut-wrap[data-v-5a8bc83d]{position:relative;flex-shrink:0}.donut-svg[data-v-5a8bc83d]{transform:rotate(-90deg)}.donut-center[data-v-5a8bc83d]{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center}.donut-total[data-v-5a8bc83d]{font-size:12px;font-weight:700;color:#333}.donut-label[data-v-5a8bc83d]{font-size:9px;color:#8c8c8c}.usage-legend[data-v-5a8bc83d]{display:grid;grid-template-columns:1fr 1fr;gap:6px 24px;font-size:12px}.legend-row[data-v-5a8bc83d]{display:flex;align-items:center;gap:6px}.legend-color[data-v-5a8bc83d]{width:10px;height:10px;border-radius:2px;flex-shrink:0}.legend-name[data-v-5a8bc83d]{color:#595959}.legend-val[data-v-5a8bc83d]{margin-left:auto;font-weight:500;color:#333}.usage-stats[data-v-5a8bc83d]{display:grid;grid-template-columns:repeat(6,1fr);gap:16px;text-align:center}.stat-val[data-v-5a8bc83d]{font-size:18px;font-weight:700;color:#333;display:block}.text-blue[data-v-5a8bc83d]{color:#1890ff}.text-purple[data-v-5a8bc83d]{color:#722ed1}.text-rose[data-v-5a8bc83d]{color:#eb2f96}.stat-lbl[data-v-5a8bc83d]{font-size:12px;color:#8c8c8c}.cache-rate[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;margin-top:12px}.cache-label[data-v-5a8bc83d]{font-size:12px;color:#8c8c8c}.cache-bar[data-v-5a8bc83d]{width:128px;height:8px;border-radius:4px;background:#e8e8e8}.cache-fill[data-v-5a8bc83d]{height:100%;border-radius:4px;background:#fa8c16;transition:width .5s}.cache-pct[data-v-5a8bc83d]{font-size:12px;font-weight:500;color:#fa8c16}.by-agent[data-v-5a8bc83d]{margin-top:20px;padding-top:16px;border-top:1px solid #f0f0f0}.by-agent h3[data-v-5a8bc83d]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.agent-bar-track[data-v-5a8bc83d]{display:flex;height:12px;border-radius:6px;overflow:hidden;background:#f0f0f0;margin-bottom:8px}.agent-bar-seg[data-v-5a8bc83d]{height:100%;transition:width .5s}.agent-rows[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:6px}.agent-row[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;font-size:12px}.agent-dot[data-v-5a8bc83d]{width:10px;height:10px;border-radius:2px;flex-shrink:0}.agent-name[data-v-5a8bc83d]{flex:1;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-val[data-v-5a8bc83d]{font-weight:500;color:#333}.agent-pct[data-v-5a8bc83d]{width:48px;text-align:right;color:#bfbfbf}.rounds-list[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:12px}.round-item[data-v-5a8bc83d]{display:flex;gap:12px;background:#fafafa;border-radius:8px;padding:16px}.round-num[data-v-5a8bc83d]{width:28px;height:28px;border-radius:50%;background:#f0f5ff;color:#2f54eb;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0}.round-body[data-v-5a8bc83d]{flex:1;min-width:0}.round-msg[data-v-5a8bc83d]{font-size:14px;color:#333;margin:0;white-space:pre-wrap}.round-msg-empty[data-v-5a8bc83d]{color:#bfbfbf;font-style:italic}.round-msg-list[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:6px}.round-meta[data-v-5a8bc83d]{display:flex;flex-wrap:wrap;gap:16px;margin-top:8px;font-size:12px;color:#8c8c8c}.build-banner[data-v-5a8bc83d]{display:flex;align-items:center;gap:12px;border-radius:8px;padding:12px 16px;margin-bottom:16px;font-size:14px;font-weight:500}.build-success[data-v-5a8bc83d]{background:#f6ffed;color:#52c41a}.build-fail[data-v-5a8bc83d]{background:#fff1f0;color:#ff4d4f}.build-stat[data-v-5a8bc83d]{font-size:12px;color:#595959;margin-left:auto}.build-errors[data-v-5a8bc83d]{font-size:12px;color:#ff4d4f;font-weight:600}.error-codes h3[data-v-5a8bc83d],.fix-cycles h3[data-v-5a8bc83d],.warnings h3[data-v-5a8bc83d]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 12px}.error-row[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;transition:background .15s}.error-row[data-v-5a8bc83d]:hover{background:#fff1f0}.err-code[data-v-5a8bc83d]{width:120px;flex-shrink:0;font-family:monospace;font-size:12px;color:#ff4d4f;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.err-msg[data-v-5a8bc83d]{flex:1;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.err-bar[data-v-5a8bc83d]{width:96px;height:12px;border-radius:3px;background:#f0f0f0;overflow:hidden;flex-shrink:0}.err-fill[data-v-5a8bc83d]{height:100%;border-radius:3px;background:#ff7875;display:flex;align-items:center;justify-content:flex-end;padding-right:4px}.err-fill span[data-v-5a8bc83d]{font-size:9px;font-weight:500;color:#fff}.fix-cycles[data-v-5a8bc83d]{margin-top:16px}.cycle-stats[data-v-5a8bc83d]{display:flex;gap:24px;margin-bottom:12px}.cycle-val[data-v-5a8bc83d]{font-size:18px;font-weight:700;display:block}.text-green[data-v-5a8bc83d]{color:#52c41a}.text-amber[data-v-5a8bc83d]{color:#fa8c16}.cycle-lbl[data-v-5a8bc83d]{font-size:10px;color:#8c8c8c}.cycle-row[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;background:#fafafa;padding:6px 8px;border-radius:4px;font-size:12px;color:#595959;margin-bottom:4px}.cycle-dur[data-v-5a8bc83d]{margin-left:auto;font-family:monospace;color:#bfbfbf}.warnings[data-v-5a8bc83d]{margin-top:16px}.warn-type-row[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;margin-bottom:4px}.warn-type[data-v-5a8bc83d]{font-size:12px;color:#595959;text-transform:capitalize;width:120px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.warn-bar[data-v-5a8bc83d]{flex:1;height:12px;border-radius:3px;background:#f0f0f0;overflow:hidden}.warn-fill[data-v-5a8bc83d]{height:100%;border-radius:3px;background:#ffc53d}.warn-count[data-v-5a8bc83d]{font-size:10px;color:#8c8c8c;width:16px;text-align:right}.warn-entry[data-v-5a8bc83d]{background:#fffbe6;padding:6px 8px;border-radius:4px;margin-bottom:4px}.warn-file[data-v-5a8bc83d]{font-family:monospace;font-size:10px;color:#8c8c8c;display:block}.warn-msg[data-v-5a8bc83d]{font-size:12px;color:#595959}.waterfall[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:16px}.mobile-steps[data-v-5a8bc83d]{display:none}@media(max-width:1024px){.detail-sidebar[data-v-5a8bc83d]{display:none}.mobile-steps[data-v-5a8bc83d]{display:block}.mobile-steps h2[data-v-5a8bc83d]{font-size:18px;font-weight:600;color:#333;margin:0 0 12px}.mobile-step[data-v-5a8bc83d]{display:flex;align-items:center;gap:12px;width:100%;background:#fff;border-radius:8px;padding:12px;box-shadow:0 1px 3px #00000014;margin-bottom:8px;border:none;cursor:pointer;text-align:left;transition:background .15s}.mobile-step[data-v-5a8bc83d]:hover{background:#fafafa}.mobile-step-num[data-v-5a8bc83d]{width:28px;height:28px;border-radius:50%;background:#e6f7ff;color:#1890ff;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0}.mobile-step-body[data-v-5a8bc83d]{flex:1;min-width:0}.mobile-step-text[data-v-5a8bc83d]{font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-step-meta[data-v-5a8bc83d]{display:flex;gap:12px;margin-top:4px;font-size:12px;color:#8c8c8c}}.overview-skills[data-v-5a8bc83d]{margin-top:16px;padding-top:16px;border-top:1px solid #f0f0f0}.skills-title[data-v-5a8bc83d]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.skills-list[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:4px}.skill-row[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;padding:6px 8px;background:#fafafa;border-radius:4px;font-size:13px}.skill-icon[data-v-5a8bc83d]{width:14px;height:14px;flex-shrink:0}.skill-icon.completed[data-v-5a8bc83d]{color:#52c41a}.skill-icon.running[data-v-5a8bc83d]{color:#1890ff}.skill-icon.failed[data-v-5a8bc83d]{color:#ff4d4f}.skill-name[data-v-5a8bc83d]{flex:1;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-status[data-v-5a8bc83d]{font-size:12px;flex-shrink:0}.skill-status.completed[data-v-5a8bc83d]{color:#52c41a}.skill-status.running[data-v-5a8bc83d]{color:#1890ff}.skill-status.failed[data-v-5a8bc83d]{color:#ff4d4f}.overview-system-prompts[data-v-5a8bc83d]{margin-top:16px;padding-top:16px;border-top:1px solid #f0f0f0}.sp-title[data-v-5a8bc83d]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.sp-list[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:4px}.sp-model[data-v-5a8bc83d]{border-radius:4px;overflow:hidden}.sp-model-header[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:none;background:#fafafa;font-size:13px;cursor:pointer;text-align:left;transition:background .15s}.sp-model-header[data-v-5a8bc83d]:hover{background:#f0f0f0}.sp-model-name[data-v-5a8bc83d]{flex:1;font-weight:500;color:#333}.sp-model-count[data-v-5a8bc83d]{font-size:11px;color:#bfbfbf}.sp-contents[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:4px;padding:4px 0}.sp-content[data-v-5a8bc83d]{background:#fafafa;border-radius:4px;padding:8px 12px}.sp-text[data-v-5a8bc83d]{margin:0;font-family:monospace;font-size:12px;color:#595959;white-space:pre-wrap;word-break:break-all;line-height:1.6}.planning-content[data-v-5a8bc83d]{flex:1;overflow-y:auto;padding:24px;display:flex;flex-direction:column;gap:24px}.planning-summary[data-v-5a8bc83d]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.summary-card[data-v-5a8bc83d]{background:#fff;border-radius:12px;padding:16px;box-shadow:0 1px 3px #00000014;display:flex;flex-direction:column;align-items:center;gap:4px}.summary-val[data-v-5a8bc83d]{font-size:18px;font-weight:700;color:#333}.summary-lbl[data-v-5a8bc83d]{font-size:12px;color:#8c8c8c}.summary-card-priority[data-v-5a8bc83d]{padding:12px 16px;gap:6px}.priority-counts[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:4px}.priority-item[data-v-5a8bc83d]{display:flex;align-items:center;gap:6px;font-size:13px;color:#333;font-weight:500}.legend-dot-sm[data-v-5a8bc83d]{display:inline-block;width:8px;height:8px;border-radius:2px}.rounds-section[data-v-5a8bc83d]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.rounds-header[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;width:100%;border:none;background:transparent;cursor:pointer;padding:0;text-align:left}.rounds-title[data-v-5a8bc83d]{font-size:18px;font-weight:600;color:#333}.rounds-body[data-v-5a8bc83d]{margin-top:16px;display:flex;flex-direction:column;gap:12px}.round-block[data-v-5a8bc83d]{background:#fafafa;border-radius:8px;padding:12px 16px}.round-header[data-v-5a8bc83d]{display:flex;align-items:baseline;gap:16px;margin-bottom:8px}.round-num[data-v-5a8bc83d]{font-size:13px;font-weight:600;color:#333;flex-shrink:0;min-width:56px}.round-time[data-v-5a8bc83d]{font-family:monospace;font-size:12px;color:#8c8c8c;flex-shrink:0}.round-dur[data-v-5a8bc83d]{font-family:monospace;font-size:11px;color:#bfbfbf;margin-left:auto}.round-progress-mini[data-v-5a8bc83d]{display:flex;height:4px;border-radius:2px;overflow:hidden;background:#e8e8e8;margin-bottom:8px}.round-progress-seg[data-v-5a8bc83d]{height:100%;transition:width .3s}.round-progress-seg.completed[data-v-5a8bc83d]{background:#52c41a}.round-progress-seg.in-progress[data-v-5a8bc83d]{background:#3b82f6}.round-todos[data-v-5a8bc83d]{display:flex;flex-direction:column;gap:2px}.todo-row[data-v-5a8bc83d]{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;font-size:13px}.todo-row[data-v-5a8bc83d]:hover{background:#f0f0f0}.todo-icon[data-v-5a8bc83d]{width:14px;height:14px;flex-shrink:0}.todo-icon.completed[data-v-5a8bc83d]{color:#52c41a}.todo-icon.in-progress[data-v-5a8bc83d]{color:#1890ff;fill:#1890ff}.todo-icon.pending[data-v-5a8bc83d]{color:#d9d9d9}.todo-content[data-v-5a8bc83d]{flex:1;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.todo-meta[data-v-5a8bc83d]{font-size:11px;color:#8c8c8c;flex-shrink:0}.filter-empty[data-v-5a8bc83d]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;color:#8c8c8c}.filter-empty p[data-v-5a8bc83d]{font-size:14px;margin:0 0 12px}.filter-empty-reset[data-v-5a8bc83d]{font-size:13px;color:#1890ff;background:none;border:none;cursor:pointer}.filter-empty-reset[data-v-5a8bc83d]:hover{text-decoration:underline}.cloud-file-list[data-v-c1104ef0]{padding:20px;height:100%;display:flex;flex-direction:column;gap:16px}.list-header[data-v-c1104ef0]{display:flex;align-items:center;justify-content:space-between;gap:16px}.header-title h2[data-v-c1104ef0]{font-size:18px;color:#303133}.header-sub[data-v-c1104ef0]{font-size:13px;color:#909399;margin-top:2px}.header-actions[data-v-c1104ef0]{display:flex;align-items:center;gap:8px}.prefix-tag[data-v-c1104ef0]{flex-shrink:0}.prefix-input[data-v-c1104ef0]{width:280px}.file-table[data-v-c1104ef0]{flex:1;min-height:300px}[data-v-c1104ef0] .name-col .cell{display:flex;align-items:center}.row-name[data-v-c1104ef0]{flex:1;display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden;font-size:14.5px}.row-name-text[data-v-c1104ef0]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.folder-name[data-v-c1104ef0]{font-weight:500}.row-icon[data-v-c1104ef0]{font-size:18px;color:#909399;flex-shrink:0}.folder-name .row-icon[data-v-c1104ef0]{color:#e6a23c}[data-v-c1104ef0] .folder-row{cursor:pointer}.action-btn[data-v-c1104ef0]{font-size:17px}.list-footer[data-v-c1104ef0]{display:flex;justify-content:flex-end}.page-indicator[data-v-c1104ef0]{font-size:13px;color:#606266;padding:0 12px}.meta-file-name[data-v-c1104ef0]{font-size:13px;color:#606266;word-break:break-all}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import { Readable } from 'node:stream';
|
|
3
3
|
import { CloudStorageError } from '../services/cloudError.js';
|
|
4
|
-
import { listCloudFiles, listAllCloudFiles, downloadCloudFile, getCloudFileDownloadToken, deleteCloudFile, getCloudFileMetadata, updateCloudFileMetadata, cloudFileExists, renameCloudFile, } from '../services/cloudStorage.js';
|
|
4
|
+
import { listCloudFiles, listAllCloudFiles, downloadCloudFile, getCloudFileDownloadToken, deleteCloudFile, getCloudFileMetadata, updateCloudFileMetadata, cloudFileExists, renameCloudFile, getCloudFolderStats, } from '../services/cloudStorage.js';
|
|
5
5
|
// 模糊查询返回上限与文件夹单次删除上限(桶内对象量级 1 万以内)
|
|
6
6
|
const SEARCH_RESULT_LIMIT = 500;
|
|
7
7
|
const FOLDER_DELETE_LIMIT = 5000;
|
|
@@ -135,6 +135,22 @@ cloudApi.get('/cloud/folder/count', async (req, res) => {
|
|
|
135
135
|
sendCloudError(res, err, 'Failed to count cloud folder');
|
|
136
136
|
}
|
|
137
137
|
});
|
|
138
|
+
// ─── 文件夹(前缀)统计:一次递归列举聚合每个直接子文件夹的大小/对象数/最后修改时间 ──
|
|
139
|
+
cloudApi.get('/cloud/folder/stats', async (req, res) => {
|
|
140
|
+
const parent = typeof req.query.parent === 'string' ? req.query.parent : '';
|
|
141
|
+
if (parent.includes('..') || (parent && !parent.endsWith('/'))) {
|
|
142
|
+
res.status(400).json({ error: 'parent 必须为空(根目录)或以 / 结尾的前缀' });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
const stats = await getCloudFolderStats(parent);
|
|
147
|
+
console.log(`GET /api/cloud/folder/stats, parent: '${parent}', folders: ${Object.keys(stats).length}`);
|
|
148
|
+
res.json({ parent, stats });
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
sendCloudError(res, err, 'Failed to get cloud folder stats');
|
|
152
|
+
}
|
|
153
|
+
});
|
|
138
154
|
cloudApi.delete('/cloud/folder', async (req, res) => {
|
|
139
155
|
const prefix = requireFolderPrefix(req);
|
|
140
156
|
if (!prefix) {
|
|
@@ -173,6 +173,53 @@ export async function listAllCloudFiles(prefix = '', maxPages = 50) {
|
|
|
173
173
|
}
|
|
174
174
|
throw new CloudStorageError(`对象数超过翻页上限(${maxPages * 1000}),请缩小前缀范围`, 400);
|
|
175
175
|
}
|
|
176
|
+
// ─── 文件夹统计(递归聚合直接子文件夹的大小/对象数/最后修改时间) ──
|
|
177
|
+
const FOLDER_STATS_TTL_MS = 5 * 60 * 1000;
|
|
178
|
+
const folderStatsCache = new Map();
|
|
179
|
+
export function clearCloudFolderStatsCache() {
|
|
180
|
+
folderStatsCache.clear();
|
|
181
|
+
}
|
|
182
|
+
function compareModified(a, b) {
|
|
183
|
+
if (a === b)
|
|
184
|
+
return 0;
|
|
185
|
+
if (!a)
|
|
186
|
+
return -1;
|
|
187
|
+
if (!b)
|
|
188
|
+
return 1;
|
|
189
|
+
const ta = Date.parse(a);
|
|
190
|
+
const tb = Date.parse(b);
|
|
191
|
+
if (Number.isNaN(ta) || Number.isNaN(tb))
|
|
192
|
+
return a > b ? 1 : -1;
|
|
193
|
+
return ta - tb;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* 统计 parent 下每个直接子文件夹的递归聚合信息(一次全量列举,按第一段路径分组)。
|
|
197
|
+
* 结果带 5 分钟 TTL 缓存;删除/上传/重命名会清空缓存。
|
|
198
|
+
* @param parent 父前缀(空串表示根目录,非空必须以 / 结尾)
|
|
199
|
+
* @returns { [子文件夹前缀]: { count, size, lastModified } }
|
|
200
|
+
*/
|
|
201
|
+
export async function getCloudFolderStats(parent) {
|
|
202
|
+
const cached = folderStatsCache.get(parent);
|
|
203
|
+
if (cached && Date.now() < cached.expiresAt)
|
|
204
|
+
return cached.stats;
|
|
205
|
+
const files = await listAllCloudFiles(parent);
|
|
206
|
+
const stats = {};
|
|
207
|
+
for (const file of files) {
|
|
208
|
+
const rest = file.name.slice(parent.length);
|
|
209
|
+
const slashIdx = rest.indexOf('/');
|
|
210
|
+
if (slashIdx <= 0)
|
|
211
|
+
continue; // parent 下的直接文件,不属于任何子文件夹
|
|
212
|
+
const key = `${parent}${rest.slice(0, slashIdx)}/`;
|
|
213
|
+
const entry = (stats[key] ??= { count: 0, size: 0, lastModified: '' });
|
|
214
|
+
entry.count++;
|
|
215
|
+
entry.size += file.size;
|
|
216
|
+
if (compareModified(file.lastModified, entry.lastModified) > 0) {
|
|
217
|
+
entry.lastModified = file.lastModified;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
folderStatsCache.set(parent, { expiresAt: Date.now() + FOLDER_STATS_TTL_MS, stats });
|
|
221
|
+
return stats;
|
|
222
|
+
}
|
|
176
223
|
export async function downloadCloudFile(key) {
|
|
177
224
|
const { cred, storageHost, headers } = await resolveContext();
|
|
178
225
|
const url = buildObjectUrl(storageHost, cred.bucket_name, key);
|
|
@@ -207,6 +254,7 @@ export async function deleteCloudFile(key) {
|
|
|
207
254
|
const { cred, storageHost, headers } = await resolveContext();
|
|
208
255
|
const url = buildObjectUrl(storageHost, cred.bucket_name, key);
|
|
209
256
|
await agcFetch(url, { method: 'DELETE', headers }, 'deleteFile');
|
|
257
|
+
clearCloudFolderStatsCache();
|
|
210
258
|
}
|
|
211
259
|
// ─── 上传 / 重命名 ───────────────────────────────────────────
|
|
212
260
|
export async function cloudFileExists(key) {
|
|
@@ -231,6 +279,7 @@ export async function uploadCloudFile(key, content, contentType) {
|
|
|
231
279
|
},
|
|
232
280
|
body: new Uint8Array(content),
|
|
233
281
|
}, 'uploadFile');
|
|
282
|
+
clearCloudFolderStatsCache();
|
|
234
283
|
}
|
|
235
284
|
export async function renameCloudFile(oldKey, newKey) {
|
|
236
285
|
const { cred, storageHost, headers } = await resolveContext();
|