session-viewer-plugin 0.1.1 → 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.
@@ -1 +1 @@
1
- .dir-manager[data-v-1a66345f]{background:#fff;border-radius:12px;box-shadow:0 1px 3px #00000014;margin-bottom:24px}.dir-header[data-v-1a66345f]{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-1a66345f]:hover{background:#fafafa}.dir-icon[data-v-1a66345f]{width:18px;height:18px;color:#fa8c16}.dir-title[data-v-1a66345f]{font-weight:500;color:#333}.dir-toggle[data-v-1a66345f]{margin-left:auto;color:#999;width:16px;height:16px}.dir-body[data-v-1a66345f]{padding:0 16px 16px}.dir-item[data-v-1a66345f]{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:13px}.dir-item-icon[data-v-1a66345f]{width:14px;height:14px;flex-shrink:0;color:#8c8c8c}.dir-item-path[data-v-1a66345f]{font-family:monospace;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dir-badge[data-v-1a66345f]{flex-shrink:0;background:#f0f0f0;padding:1px 6px;border-radius:3px;font-size:11px;color:#8c8c8c}.dir-remove[data-v-1a66345f]{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-1a66345f]:hover{color:#ff4d4f}.dir-remove-icon[data-v-1a66345f]{width:14px;height:14px}.dir-add[data-v-1a66345f]{display:flex;align-items:center;gap:8px;padding-top:12px}.dir-input[data-v-1a66345f]{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-1a66345f]:focus{border-color:#1890ff}.dir-add-btn[data-v-1a66345f]{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-1a66345f]:hover:not(:disabled){background:#40a9ff}.dir-add-btn[data-v-1a66345f]: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-fd683301]{display:flex;flex-direction:column;height:100vh}.viewer-header[data-v-fd683301]{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-fd683301]{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-fd683301]:hover{background:#f0f0f0;color:#333}.toggle-icon[data-v-fd683301]{width:18px;height:18px}.header-title[data-v-fd683301]{display:flex;align-items:center;gap:12px}.header-icon[data-v-fd683301]{font-size:20px}.header-title h1[data-v-fd683301]{font-size:18px;font-weight:600;color:#333;margin:0}.header-sub[data-v-fd683301]{font-size:13px;color:#8c8c8c;margin:0}.header-spacer[data-v-fd683301]{flex:1}.header-search[data-v-fd683301]{display:flex;align-items:center;flex-shrink:0}.search-input-wrap[data-v-fd683301]{position:relative;display:flex;align-items:center}.header-search-input[data-v-fd683301]{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-fd683301]:focus{border-color:#1890ff}.search-icon-inner[data-v-fd683301]{position:absolute;left:10px;width:15px;height:15px;color:#bfbfbf;pointer-events:none}.search-clear[data-v-fd683301]{position:absolute;right:8px;background:none;border:none;cursor:pointer;padding:2px;display:flex;align-items:center}.clear-icon[data-v-fd683301]{width:13px;height:13px;color:#bfbfbf}.header-action-btn[data-v-fd683301]{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-fd683301]:hover{background:#f0f0f0;color:#333}.action-icon[data-v-fd683301]{width:18px;height:18px}.viewer-body[data-v-fd683301]{flex:1;display:flex;overflow:hidden}.viewer-body.sidebar-collapsed .viewer-content[data-v-fd683301]{margin-left:0}.sidebar-resize-handle[data-v-fd683301]{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-fd683301]:hover,.sidebar-resize-handle[data-v-fd683301]:active{background:#1890ff}.viewer-content[data-v-fd683301]{flex:1;overflow-y:auto;padding:24px}.card-grid[data-v-fd683301]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}@media(max-width:1024px){.card-grid[data-v-fd683301]{grid-template-columns:repeat(2,1fr)}}@media(max-width:640px){.card-grid[data-v-fd683301]{grid-template-columns:1fr}}.skeleton-card[data-v-fd683301]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.skeleton[data-v-fd683301]{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:shimmer-fd683301 1.5s infinite;border-radius:4px}.skeleton-header[data-v-fd683301]{height:20px;width:60%;margin-bottom:12px}.skeleton-id[data-v-fd683301]{height:14px;width:80%;margin-bottom:12px}.skeleton-stats[data-v-fd683301]{height:16px;width:100%}@keyframes shimmer-fd683301{0%{background-position:200% 0}to{background-position:-200% 0}}.empty-state[data-v-fd683301]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 0;color:#8c8c8c}.empty-icon[data-v-fd683301]{font-size:48px;margin-bottom:16px;opacity:.3}.empty-title[data-v-fd683301]{font-size:16px;font-weight:500;color:#595959;margin:0}.empty-sub[data-v-fd683301]{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,6 +1,6 @@
1
1
  {
2
2
  "name": "session-viewer-plugin",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "会话指标查看插件:可嵌入 Vue3 + Element Plus 宿主的视图组件库,搭配独立伴生服务提供本地会话快照浏览与 AGC 云端文件管理。",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -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) {
@@ -5,12 +5,16 @@ import fs from 'fs/promises';
5
5
  import { getSessions, getSessionDetail, invalidateCache } from '../services/assembler.js';
6
6
  const paths = envPaths("hm-plugin");
7
7
  const ompPaths = envPaths("opencode-metrics-plugin", { suffix: "" });
8
+ /** 外部/分析样本目录(与 metrics 同级;插件孤儿补传只扫 metrics 目录本身,此处的快照不会被上传) */
9
+ export const SAMPLES_DIR = path.join(ompPaths.log, 'samples');
8
10
  export const DEFAULT_DIRS = process.env.LOG_DIR
9
11
  ? [process.env.LOG_DIR]
10
12
  : [
11
13
  path.join(paths.log, 'metrics'),
12
14
  // opencode-metrics-plugin 0.2.0 默认输出目录(env-paths 无 suffix,与插件端 defaultDirs 一致)
13
15
  path.join(ompPaths.log, 'metrics'),
16
+ // 外部/分析样本:放入他人机器的会话快照供查看,不进插件 metrics 目录、不会触发上传
17
+ SAMPLES_DIR,
14
18
  ];
15
19
  function resolveDirs(req) {
16
20
  const customDirs = req.query.dirs;
@@ -23,7 +27,7 @@ function resolveDirs(req) {
23
27
  }
24
28
  export const sessionApi = express.Router();
25
29
  sessionApi.get('/directories', (_req, res) => {
26
- res.json({ defaults: DEFAULT_DIRS });
30
+ res.json({ defaults: DEFAULT_DIRS, samplesDir: SAMPLES_DIR });
27
31
  });
28
32
  sessionApi.get('/sessions', async (req, res) => {
29
33
  try {
@@ -2,12 +2,18 @@
2
2
  // 服务启动入口:读取环境变量并启动 HTTP 服务,可由 node/tsx 直接执行(npm bin 脚本)。
3
3
  // 环境变量:PORT 监听端口(默认 3001);HOST 绑定地址(默认 127.0.0.1,容器部署需设为 0.0.0.0);
4
4
  // LOG_DIR 覆盖默认扫描目录;AGC_CREDENTIALS_FILE/AGC_CREDENTIALS_JSON 覆盖云端凭证。
5
+ import fs from 'fs';
5
6
  import { createApp } from './app.js';
6
- import { DEFAULT_DIRS } from './api/sessionApi.js';
7
+ import { DEFAULT_DIRS, SAMPLES_DIR } from './api/sessionApi.js';
7
8
  import { ensureDataDir } from './services/config.js';
8
9
  const PORT = Number(process.env.PORT) || 3001;
9
10
  const HOST = process.env.HOST || '127.0.0.1';
10
11
  await ensureDataDir();
12
+ // 样本目录确保存在(失败仅影响发现性,不影响服务)
13
+ try {
14
+ fs.mkdirSync(SAMPLES_DIR, { recursive: true });
15
+ }
16
+ catch { }
11
17
  const app = createApp();
12
18
  app.listen(PORT, HOST, () => {
13
19
  console.log(`Server running on http://${HOST}:${PORT}`);
@@ -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();