session-viewer-plugin 0.1.2 → 0.1.4

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-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-6731e9cb]{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-6731e9cb]:hover{box-shadow:0 4px 12px #0000001f;transform:translateY(-1px)}.delete-btn[data-v-6731e9cb]{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-6731e9cb]{opacity:1}.delete-btn[data-v-6731e9cb]:hover{color:#ff4d4f;background:#fff1f0}.delete-btn.deleting[data-v-6731e9cb]{opacity:1;color:#1890ff;cursor:not-allowed}@keyframes spin-6731e9cb{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spin[data-v-6731e9cb]{animation:spin-6731e9cb 1s linear infinite}.delete-icon[data-v-6731e9cb]{width:16px;height:16px}.card-header[data-v-6731e9cb]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px;min-width:0}.card-agent[data-v-6731e9cb]{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}.agent-icon[data-v-6731e9cb]{width:16px;height:16px;color:#7c3aed;flex-shrink:0}.agent-name[data-v-6731e9cb]{font-size:14px;font-weight:500;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-model[data-v-6731e9cb]{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-6731e9cb]{font-family:monospace;font-size:12px;color:#8c8c8c;margin-bottom:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-message[data-v-6731e9cb]{font-size:13px;color:#595959;margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-dir[data-v-6731e9cb]{font-family:monospace;font-size:11px;color:#bfbfbf;margin-bottom:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-stats[data-v-6731e9cb]{display:grid;grid-template-columns:1fr 1fr;gap:10px}.stat-item[data-v-6731e9cb]{display:flex;align-items:center;gap:6px;font-size:13px;color:#595959}.stat-icon[data-v-6731e9cb]{width:14px;height:14px;color:#8c8c8c}.card-token-bar[data-v-6731e9cb]{margin-top:12px;padding-top:12px;border-top:1px solid #f0f0f0}.token-bar-track[data-v-6731e9cb]{display:flex;height:6px;border-radius:3px;overflow:hidden;background:#f0f0f0}.token-bar-segment[data-v-6731e9cb]{height:100%;transition:width .3s}.token-bar-legend[data-v-6731e9cb]{display:flex;align-items:center;gap:12px;margin-top:6px}.legend-item[data-v-6731e9cb]{display:flex;align-items:center;gap:4px;font-size:10px;color:#8c8c8c}.legend-dot[data-v-6731e9cb]{display:inline-block;width:6px;height:6px;border-radius:2px}.legend-date[data-v-6731e9cb]{margin-left:auto;font-size:10px;color:#bfbfbf}.card-footer[data-v-6731e9cb]{margin-top:12px;padding-top:12px;border-top:1px solid #f0f0f0;display:flex;justify-content:space-between}.card-date[data-v-6731e9cb]{font-size:12px;color:#bfbfbf}.home-sidebar[data-v-a8f8318d]{width:100%;flex-shrink:0;border-right:1px solid #f0f0f0;background:#fff;display:flex;flex-direction:column;overflow:hidden}.sidebar-overview[data-v-a8f8318d]{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-a8f8318d]:hover{background:#fafafa}.sidebar-overview.active[data-v-a8f8318d]{background:#1890ff14;color:#1890ff;font-weight:500}.sidebar-overview-icon[data-v-a8f8318d]{width:16px;height:16px;color:#d9d9d9}.sidebar-overview-icon.star-filled[data-v-a8f8318d]{color:#faad14}.sidebar-title[data-v-a8f8318d]{flex-shrink:0;padding:12px 16px;border:none;border-bottom:1px solid #f0f0f0;border-top:1px solid #f0f0f0;background:transparent;width:100%;text-align:left;font-size:14px;font-weight:600;color:#333;cursor:pointer;transition:background .15s}.sidebar-title[data-v-a8f8318d]:hover{background:#fafafa}.sidebar-sessions[data-v-a8f8318d]{flex:1;overflow-y:auto;padding:8px 0}.month-section[data-v-a8f8318d]{margin-bottom:4px}.month-header[data-v-a8f8318d]{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-a8f8318d]:hover{background:#fafafa}.month-label[data-v-a8f8318d]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.month-count[data-v-a8f8318d]{font-size:12px;color:#d9d9d9}.month-sessions[data-v-a8f8318d]{padding:2px 0}.session-item[data-v-a8f8318d]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 16px 5px 40px;cursor:pointer;transition:all .15s}.session-item[data-v-a8f8318d]:hover{background:#fafafa}.session-text[data-v-a8f8318d]{flex:1;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:20px}.star-btn[data-v-a8f8318d]{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-a8f8318d]:hover{background:#f0f0f0;color:#faad14}.star-btn.star-active[data-v-a8f8318d]{color:#faad14}.star-icon[data-v-a8f8318d]{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-b1210915]{display:flex;flex-direction:column;height:100%}.viewer-header[data-v-b1210915]{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-b1210915]{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-b1210915]:hover{background:#f0f0f0;color:#333}.toggle-icon[data-v-b1210915]{width:18px;height:18px}.header-title[data-v-b1210915]{display:flex;align-items:center;gap:12px}.header-icon[data-v-b1210915]{font-size:20px}.header-title h1[data-v-b1210915]{font-size:18px;font-weight:600;color:#333;margin:0}.header-sub[data-v-b1210915]{font-size:13px;color:#8c8c8c;margin:0}.header-spacer[data-v-b1210915]{flex:1}.header-search[data-v-b1210915]{display:flex;align-items:center;flex-shrink:0}.search-input-wrap[data-v-b1210915]{position:relative;display:flex;align-items:center}.header-search-input[data-v-b1210915]{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-b1210915]:focus{border-color:#1890ff}.search-icon-inner[data-v-b1210915]{position:absolute;left:10px;width:15px;height:15px;color:#bfbfbf;pointer-events:none}.search-clear[data-v-b1210915]{position:absolute;right:8px;background:none;border:none;cursor:pointer;padding:2px;display:flex;align-items:center}.clear-icon[data-v-b1210915]{width:13px;height:13px;color:#bfbfbf}.header-action-btn[data-v-b1210915]{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-b1210915]:hover{background:#f0f0f0;color:#333}.action-icon[data-v-b1210915]{width:18px;height:18px}.viewer-body[data-v-b1210915]{flex:1;display:flex;overflow:hidden}.viewer-body.sidebar-collapsed .viewer-content[data-v-b1210915]{margin-left:0}.sidebar-resize-handle[data-v-b1210915]{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-b1210915]:hover,.sidebar-resize-handle[data-v-b1210915]:active{background:#1890ff}.viewer-content[data-v-b1210915]{flex:1;overflow-y:auto;padding:24px}.card-grid[data-v-b1210915]{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}@media(max-width:1024px){.card-grid[data-v-b1210915]{grid-template-columns:repeat(2,1fr)}}@media(max-width:640px){.card-grid[data-v-b1210915]{grid-template-columns:1fr}}.skeleton-card[data-v-b1210915]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.skeleton[data-v-b1210915]{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:shimmer-b1210915 1.5s infinite;border-radius:4px}.skeleton-header[data-v-b1210915]{height:20px;width:60%;margin-bottom:12px}.skeleton-id[data-v-b1210915]{height:14px;width:80%;margin-bottom:12px}.skeleton-stats[data-v-b1210915]{height:16px;width:100%}@keyframes shimmer-b1210915{0%{background-position:200% 0}to{background-position:-200% 0}}.empty-state[data-v-b1210915]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:80px 0;color:#8c8c8c}.empty-icon[data-v-b1210915]{font-size:48px;margin-bottom:16px;opacity:.3}.empty-title[data-v-b1210915]{font-size:16px;font-weight:500;color:#595959;margin:0}.empty-sub[data-v-b1210915]{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-a439527c]{display:flex;flex-direction:column;height:100vh}.detail-header[data-v-a439527c]{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-a439527c]{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-a439527c]:hover{background:#f0f0f0;color:#333}.toggle-icon[data-v-a439527c]{width:18px;height:18px}.back-btn[data-v-a439527c]{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-a439527c]:hover{background:#f0f0f0;color:#333}.back-icon[data-v-a439527c]{width:20px;height:20px}.header-info[data-v-a439527c]{display:flex;align-items:center;gap:12px}.header-spacer[data-v-a439527c]{flex:1}.header-action-btn[data-v-a439527c]{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-a439527c]:hover{background:#f0f0f0;color:#333}.action-icon[data-v-a439527c]{width:18px;height:18px}.header-icon[data-v-a439527c]{width:20px;height:20px;color:#7c3aed}.header-info h1[data-v-a439527c]{font-size:18px;font-weight:600;color:#333;margin:0}.header-id[data-v-a439527c]{font-family:monospace;font-size:12px;color:#8c8c8c;margin:0}.detail-loading[data-v-a439527c]{flex:1;padding:24px;display:flex;flex-direction:column;gap:16px}.skeleton[data-v-a439527c]{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8,#f0f0f0 75%);background-size:200% 100%;animation:shimmer-a439527c 1.5s infinite;border-radius:8px}@keyframes shimmer-a439527c{0%{background-position:200% 0}to{background-position:-200% 0}}.detail-error[data-v-a439527c]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#8c8c8c}.error-icon[data-v-a439527c]{width:48px;height:48px;color:#ff7875;margin-bottom:16px}.detail-body[data-v-a439527c]{flex:1;display:flex;overflow:hidden}.detail-body.sidebar-collapsed .detail-content[data-v-a439527c]{margin-left:0}.sidebar-resize-handle[data-v-a439527c]{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-a439527c]:hover,.sidebar-resize-handle[data-v-a439527c]:active{background:#1890ff}.detail-sidebar[data-v-a439527c]{width:100%;flex-shrink:0;border-right:1px solid #f0f0f0;background:#fff;display:flex;flex-direction:column;overflow:hidden}.sidebar-overview[data-v-a439527c]{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-a439527c]:hover{background:#fafafa}.sidebar-overview.active[data-v-a439527c]{background:#1890ff14;color:#1890ff;font-weight:500}.sidebar-title[data-v-a439527c]{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-a439527c]{flex:1;overflow-y:auto;padding:8px 0}.agent-section[data-v-a439527c]{margin-bottom:4px}.agent-header[data-v-a439527c]{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-a439527c]:hover{background:#fafafa}.agent-icon-sm[data-v-a439527c]{width:14px;height:14px;color:#1890ff}.agent-label[data-v-a439527c]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-tokens[data-v-a439527c]{font-family:monospace;font-size:11px;color:#bfbfbf}.agent-count[data-v-a439527c]{font-size:12px;color:#d9d9d9}.step-item[data-v-a439527c]{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-a439527c]:hover{background:#fafafa}.step-item.active[data-v-a439527c]{background:#e6f7ff;color:#1890ff;font-weight:500}.step-num[data-v-a439527c]{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-a439527c]{background:#bae7ff;color:#0050b3}.step-text[data-v-a439527c]{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:20px}.step-dur[data-v-a439527c]{font-family:monospace;font-size:11px;color:#bfbfbf;flex-shrink:0;line-height:20px}.detail-content[data-v-a439527c]{flex:1;overflow-y:auto;padding:24px;display:flex;flex-direction:column;gap:24px}.compact-overview[data-v-a439527c]{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-a439527c]{font-weight:500;color:#333}.compact-sep[data-v-a439527c]{color:#d9d9d9}.compact-model[data-v-a439527c],.compact-dur[data-v-a439527c],.compact-tokens[data-v-a439527c],.compact-tools[data-v-a439527c]{color:#8c8c8c;font-size:12px}.compact-expand[data-v-a439527c]{margin-left:auto;font-size:12px;color:#1890ff;background:none;border:none;cursor:pointer}.compact-expand[data-v-a439527c]:hover{text-decoration:underline}.compact-icon[data-v-a439527c]{width:14px;height:14px;vertical-align:-2px;margin-right:2px}.card-title-icon[data-v-a439527c]{width:18px;height:18px;vertical-align:-3px;margin-right:4px}.build-icon[data-v-a439527c]{width:16px;height:16px;vertical-align:-3px;margin-right:4px}.section-title-icon[data-v-a439527c]{width:14px;height:14px;vertical-align:-2px;margin-right:4px}.cycle-status-icon[data-v-a439527c]{width:14px;height:14px;vertical-align:-2px;flex-shrink:0}.cycle-status-icon.success[data-v-a439527c]{color:#52c41a}.cycle-status-icon.fail[data-v-a439527c]{color:#ff4d4f}.meta-icon[data-v-a439527c]{width:12px;height:12px;vertical-align:-2px;margin-right:2px}.sidebar-overview-icon[data-v-a439527c]{width:16px;height:16px;vertical-align:-3px;margin-right:4px;color:#1890ff}.scope-bar[data-v-a439527c]{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}.scope-pill[data-v-a439527c]{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-a439527c]{border-color:transparent}.scope-dot[data-v-a439527c]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.card[data-v-a439527c]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.card h2[data-v-a439527c]{font-size:18px;font-weight:600;color:#333;margin:0 0 16px}.overview-grid[data-v-a439527c]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.overview-item[data-v-a439527c]{display:flex;align-items:center;gap:8px}.oi-label[data-v-a439527c]{font-size:12px;color:#8c8c8c}.oi-value[data-v-a439527c]{font-size:14px;font-weight:500;color:#333}.oi-ratio[data-v-a439527c]{font-size:12px;font-weight:400;color:#8c8c8c}.overview-dir[data-v-a439527c]{margin-top:12px;background:#fafafa;padding:8px 12px;border-radius:4px;font-family:monospace;font-size:12px;color:#8c8c8c}.overview-date[data-v-a439527c]{margin-top:8px;font-size:12px;color:#bfbfbf}.usage-row[data-v-a439527c]{display:flex;align-items:center;gap:32px;margin-bottom:16px}.donut-wrap[data-v-a439527c]{position:relative;flex-shrink:0}.donut-svg[data-v-a439527c]{transform:rotate(-90deg)}.donut-center[data-v-a439527c]{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-a439527c]{font-size:12px;font-weight:700;color:#333}.donut-label[data-v-a439527c]{font-size:9px;color:#8c8c8c}.usage-legend[data-v-a439527c]{display:grid;grid-template-columns:1fr 1fr;gap:6px 24px;font-size:12px}.legend-row[data-v-a439527c]{display:flex;align-items:center;gap:6px}.legend-color[data-v-a439527c]{width:10px;height:10px;border-radius:2px;flex-shrink:0}.legend-name[data-v-a439527c]{color:#595959}.legend-val[data-v-a439527c]{margin-left:auto;font-weight:500;color:#333}.usage-stats[data-v-a439527c]{display:grid;grid-template-columns:repeat(6,1fr);gap:16px;text-align:center}.stat-val[data-v-a439527c]{font-size:18px;font-weight:700;color:#333;display:block}.text-blue[data-v-a439527c]{color:#1890ff}.text-purple[data-v-a439527c]{color:#722ed1}.text-rose[data-v-a439527c]{color:#eb2f96}.stat-lbl[data-v-a439527c]{font-size:12px;color:#8c8c8c}.cache-rate[data-v-a439527c]{display:flex;align-items:center;gap:8px;margin-top:12px}.cache-label[data-v-a439527c]{font-size:12px;color:#8c8c8c}.cache-bar[data-v-a439527c]{width:128px;height:8px;border-radius:4px;background:#e8e8e8}.cache-fill[data-v-a439527c]{height:100%;border-radius:4px;background:#fa8c16;transition:width .5s}.cache-pct[data-v-a439527c]{font-size:12px;font-weight:500;color:#fa8c16}.by-agent[data-v-a439527c]{margin-top:20px;padding-top:16px;border-top:1px solid #f0f0f0}.by-agent h3[data-v-a439527c]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.agent-bar-track[data-v-a439527c]{display:flex;height:12px;border-radius:6px;overflow:hidden;background:#f0f0f0;margin-bottom:8px}.agent-bar-seg[data-v-a439527c]{height:100%;transition:width .5s}.agent-rows[data-v-a439527c]{display:flex;flex-direction:column;gap:6px}.agent-row[data-v-a439527c]{display:flex;align-items:center;gap:8px;font-size:12px}.agent-dot[data-v-a439527c]{width:10px;height:10px;border-radius:2px;flex-shrink:0}.agent-name[data-v-a439527c]{flex:1;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.agent-val[data-v-a439527c]{font-weight:500;color:#333}.agent-pct[data-v-a439527c]{width:48px;text-align:right;color:#bfbfbf}.rounds-list[data-v-a439527c]{display:flex;flex-direction:column;gap:12px}.round-item[data-v-a439527c]{display:flex;gap:12px;background:#fafafa;border-radius:8px;padding:16px}.round-num[data-v-a439527c]{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-a439527c]{flex:1;min-width:0}.round-msg[data-v-a439527c]{font-size:14px;color:#333;margin:0;white-space:pre-wrap}.round-msg-empty[data-v-a439527c]{color:#bfbfbf;font-style:italic}.round-msg-list[data-v-a439527c]{display:flex;flex-direction:column;gap:6px}.round-meta[data-v-a439527c]{display:flex;flex-wrap:wrap;gap:16px;margin-top:8px;font-size:12px;color:#8c8c8c}.build-banner[data-v-a439527c]{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-a439527c]{background:#f6ffed;color:#52c41a}.build-fail[data-v-a439527c]{background:#fff1f0;color:#ff4d4f}.build-stat[data-v-a439527c]{font-size:12px;color:#595959;margin-left:auto}.build-errors[data-v-a439527c]{font-size:12px;color:#ff4d4f;font-weight:600}.code-lines[data-v-a439527c]{border:1px solid #f0f0f0;border-radius:8px;padding:4px 16px;margin-bottom:16px}.cl-row[data-v-a439527c]{display:flex;justify-content:space-between;align-items:center;padding:7px 0;border-bottom:1px dashed #f0f0f0;font-size:12px}.cl-row[data-v-a439527c]:last-child{border-bottom:none}.cl-label[data-v-a439527c]{color:#8c8c8c}.cl-val[data-v-a439527c]{color:#333;font-weight:600;font-variant-numeric:tabular-nums}.cl-total[data-v-a439527c]{border-bottom:1px solid #e8e8e8}.cl-total .cl-label[data-v-a439527c]{color:#333;font-weight:600}.cl-total .cl-val[data-v-a439527c]{color:#1677ff;font-size:13px}.error-codes h3[data-v-a439527c],.fix-cycles h3[data-v-a439527c],.warnings h3[data-v-a439527c]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 12px}.error-row[data-v-a439527c]{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;transition:background .15s}.error-row[data-v-a439527c]:hover{background:#fff1f0}.err-code[data-v-a439527c]{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-a439527c]{flex:1;font-size:12px;color:#595959;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.err-bar[data-v-a439527c]{width:96px;height:12px;border-radius:3px;background:#f0f0f0;overflow:hidden;flex-shrink:0}.err-fill[data-v-a439527c]{height:100%;border-radius:3px;background:#ff7875;display:flex;align-items:center;justify-content:flex-end;padding-right:4px}.err-fill span[data-v-a439527c]{font-size:9px;font-weight:500;color:#fff}.fix-cycles[data-v-a439527c]{margin-top:16px}.cycle-stats[data-v-a439527c]{display:flex;gap:24px;margin-bottom:12px}.cycle-val[data-v-a439527c]{font-size:18px;font-weight:700;display:block}.text-green[data-v-a439527c]{color:#52c41a}.text-amber[data-v-a439527c]{color:#fa8c16}.cycle-lbl[data-v-a439527c]{font-size:10px;color:#8c8c8c}.cycle-row[data-v-a439527c]{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-a439527c]{margin-left:auto;font-family:monospace;color:#bfbfbf}.warnings[data-v-a439527c]{margin-top:16px}.warn-type-row[data-v-a439527c]{display:flex;align-items:center;gap:8px;margin-bottom:4px}.warn-type[data-v-a439527c]{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-a439527c]{flex:1;height:12px;border-radius:3px;background:#f0f0f0;overflow:hidden}.warn-fill[data-v-a439527c]{height:100%;border-radius:3px;background:#ffc53d}.warn-count[data-v-a439527c]{font-size:10px;color:#8c8c8c;width:16px;text-align:right}.warn-entry[data-v-a439527c]{background:#fffbe6;padding:6px 8px;border-radius:4px;margin-bottom:4px}.warn-file[data-v-a439527c]{font-family:monospace;font-size:10px;color:#8c8c8c;display:block}.warn-msg[data-v-a439527c]{font-size:12px;color:#595959}.waterfall[data-v-a439527c]{display:flex;flex-direction:column;gap:16px}.mobile-steps[data-v-a439527c]{display:none}@media(max-width:1024px){.detail-sidebar[data-v-a439527c]{display:none}.mobile-steps[data-v-a439527c]{display:block}.mobile-steps h2[data-v-a439527c]{font-size:18px;font-weight:600;color:#333;margin:0 0 12px}.mobile-step[data-v-a439527c]{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-a439527c]:hover{background:#fafafa}.mobile-step-num[data-v-a439527c]{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-a439527c]{flex:1;min-width:0}.mobile-step-text[data-v-a439527c]{font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-step-meta[data-v-a439527c]{display:flex;gap:12px;margin-top:4px;font-size:12px;color:#8c8c8c}}.overview-skills[data-v-a439527c]{margin-top:16px;padding-top:16px;border-top:1px solid #f0f0f0}.skills-title[data-v-a439527c]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.skills-list[data-v-a439527c]{display:flex;flex-direction:column;gap:4px}.skill-row[data-v-a439527c]{display:flex;align-items:center;gap:8px;padding:6px 8px;background:#fafafa;border-radius:4px;font-size:13px}.skill-icon[data-v-a439527c]{width:14px;height:14px;flex-shrink:0}.skill-icon.completed[data-v-a439527c]{color:#52c41a}.skill-icon.running[data-v-a439527c]{color:#1890ff}.skill-icon.failed[data-v-a439527c]{color:#ff4d4f}.skill-name[data-v-a439527c]{flex:1;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.skill-status[data-v-a439527c]{font-size:12px;flex-shrink:0}.skill-status.completed[data-v-a439527c]{color:#52c41a}.skill-status.running[data-v-a439527c]{color:#1890ff}.skill-status.failed[data-v-a439527c]{color:#ff4d4f}.overview-system-prompts[data-v-a439527c]{margin-top:16px;padding-top:16px;border-top:1px solid #f0f0f0}.sp-title[data-v-a439527c]{font-size:12px;font-weight:600;text-transform:uppercase;color:#8c8c8c;margin:0 0 8px}.sp-list[data-v-a439527c]{display:flex;flex-direction:column;gap:4px}.sp-model[data-v-a439527c]{border-radius:4px;overflow:hidden}.sp-model-header[data-v-a439527c]{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-a439527c]:hover{background:#f0f0f0}.sp-model-name[data-v-a439527c]{flex:1;font-weight:500;color:#333}.sp-model-count[data-v-a439527c]{font-size:11px;color:#bfbfbf}.sp-contents[data-v-a439527c]{display:flex;flex-direction:column;gap:4px;padding:4px 0}.sp-content[data-v-a439527c]{background:#fafafa;border-radius:4px;padding:8px 12px}.sp-text[data-v-a439527c]{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-a439527c]{flex:1;overflow-y:auto;padding:24px;display:flex;flex-direction:column;gap:24px}.planning-summary[data-v-a439527c]{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.summary-card[data-v-a439527c]{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-a439527c]{font-size:18px;font-weight:700;color:#333}.summary-lbl[data-v-a439527c]{font-size:12px;color:#8c8c8c}.summary-card-priority[data-v-a439527c]{padding:12px 16px;gap:6px}.priority-counts[data-v-a439527c]{display:flex;flex-direction:column;gap:4px}.priority-item[data-v-a439527c]{display:flex;align-items:center;gap:6px;font-size:13px;color:#333;font-weight:500}.legend-dot-sm[data-v-a439527c]{display:inline-block;width:8px;height:8px;border-radius:2px}.rounds-section[data-v-a439527c]{background:#fff;border-radius:12px;padding:20px;box-shadow:0 1px 3px #00000014}.rounds-header[data-v-a439527c]{display:flex;align-items:center;gap:8px;width:100%;border:none;background:transparent;cursor:pointer;padding:0;text-align:left}.rounds-title[data-v-a439527c]{font-size:18px;font-weight:600;color:#333}.rounds-body[data-v-a439527c]{margin-top:16px;display:flex;flex-direction:column;gap:12px}.round-block[data-v-a439527c]{background:#fafafa;border-radius:8px;padding:12px 16px}.round-header[data-v-a439527c]{display:flex;align-items:baseline;gap:16px;margin-bottom:8px}.round-num[data-v-a439527c]{font-size:13px;font-weight:600;color:#333;flex-shrink:0;min-width:56px}.round-time[data-v-a439527c]{font-family:monospace;font-size:12px;color:#8c8c8c;flex-shrink:0}.round-dur[data-v-a439527c]{font-family:monospace;font-size:11px;color:#bfbfbf;margin-left:auto}.round-progress-mini[data-v-a439527c]{display:flex;height:4px;border-radius:2px;overflow:hidden;background:#e8e8e8;margin-bottom:8px}.round-progress-seg[data-v-a439527c]{height:100%;transition:width .3s}.round-progress-seg.completed[data-v-a439527c]{background:#52c41a}.round-progress-seg.in-progress[data-v-a439527c]{background:#3b82f6}.round-todos[data-v-a439527c]{display:flex;flex-direction:column;gap:2px}.todo-row[data-v-a439527c]{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;font-size:13px}.todo-row[data-v-a439527c]:hover{background:#f0f0f0}.todo-icon[data-v-a439527c]{width:14px;height:14px;flex-shrink:0}.todo-icon.completed[data-v-a439527c]{color:#52c41a}.todo-icon.in-progress[data-v-a439527c]{color:#1890ff;fill:#1890ff}.todo-icon.pending[data-v-a439527c]{color:#d9d9d9}.todo-content[data-v-a439527c]{flex:1;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.todo-meta[data-v-a439527c]{font-size:11px;color:#8c8c8c;flex-shrink:0}.filter-empty[data-v-a439527c]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 24px;color:#8c8c8c}.filter-empty p[data-v-a439527c]{font-size:14px;margin:0 0 12px}.filter-empty-reset[data-v-a439527c]{font-size:13px;color:#1890ff;background:none;border:none;cursor:pointer}.filter-empty-reset[data-v-a439527c]:hover{text-decoration:underline}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "session-viewer-plugin",
3
- "version": "0.1.2",
4
- "description": "会话指标查看插件:可嵌入 Vue3 + Element Plus 宿主的视图组件库,搭配独立伴生服务提供本地会话快照浏览与 AGC 云端文件管理。",
3
+ "version": "0.1.4",
4
+ "description": "会话指标查看插件:可嵌入 Vue3 + Element Plus 宿主的视图组件库,提供本地会话快照浏览。云端文件管理已迁至宿主 tnnotix。",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "bin": {
@@ -14,7 +14,6 @@
14
14
  },
15
15
  "files": [
16
16
  "server/dist",
17
- "!server/dist/assets",
18
17
  "frontend/dist-ui",
19
18
  "README.md"
20
19
  ],
@@ -24,7 +23,7 @@
24
23
  "dev:server": "cd server && npm run dev",
25
24
  "dev:frontend": "cd frontend && npm run dev",
26
25
  "build": "npm run build:server && npm run build:ui",
27
- "build:server": "cd server && npx tsc && node -e \"require('fs').cpSync('src/assets','dist/assets',{recursive:true})\"",
26
+ "build:server": "cd server && npx tsc",
28
27
  "build:ui": "cd frontend && npx vite build --config vite.lib.config.js",
29
28
  "prepublishOnly": "npm run build"
30
29
  },
@@ -1,9 +1,9 @@
1
1
  // 应用工厂:组装 Express 实例(中间件与全部 API 路由),供开发入口与 bin 启动入口复用。
2
+ // 仅保留会话查看(sessions/directories/config);云端文件能力已迁至宿主 tnnotix。
2
3
  import express from 'express';
3
4
  import cors from 'cors';
4
5
  import { sessionApi } from './api/sessionApi.js';
5
6
  import { configApi } from './api/configApi.js';
6
- import { cloudApi } from './api/cloudApi.js';
7
7
  /**
8
8
  * 创建组装完成的 Express 应用(未监听端口)。
9
9
  * @returns 可直接调用 listen 的 Express 实例
@@ -14,6 +14,5 @@ export function createApp() {
14
14
  app.use(express.json());
15
15
  app.use('/api', sessionApi);
16
16
  app.use('/api', configApi);
17
- app.use('/api', cloudApi);
18
17
  return app;
19
18
  }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- // 服务启动入口:读取环境变量并启动 HTTP 服务,可由 node/tsx 直接执行(npm bin 脚本)。
3
- // 环境变量:PORT 监听端口(默认 3001);HOST 绑定地址(默认 127.0.0.1,容器部署需设为 0.0.0.0);
4
- // LOG_DIR 覆盖默认扫描目录;AGC_CREDENTIALS_FILE/AGC_CREDENTIALS_JSON 覆盖云端凭证。
2
+ // 独立服务启动入口:读取环境变量并启动 HTTP 服务(仅会话查看)。
3
+ // 环境变量:PORT 监听端口(默认 3001);HOST 绑定地址(默认 127.0.0.1,容器部署需 0.0.0.0);
4
+ // LOG_DIR 覆盖默认扫描目录。
5
5
  import fs from 'fs';
6
6
  import { createApp } from './app.js';
7
7
  import { DEFAULT_DIRS, SAMPLES_DIR } from './api/sessionApi.js';
@@ -1,2 +1,2 @@
1
- // 开发模式启动入口:复用 bin 的启动逻辑(npm run dev / tsx src/index.ts)。
1
+ // 开发模式启动入口:复用 bin 的启动逻辑(tsx src/index.ts)。
2
2
  import './bin.js';
@@ -9,6 +9,14 @@ const EMPTY_TOKENS = {
9
9
  cacheWrite: 0,
10
10
  total: 0,
11
11
  };
12
+ /** 工具统计默认值(非会话 json 缺失 tools 字段时兜底)。 */
13
+ const EMPTY_TOOLS = {
14
+ totalCalls: 0,
15
+ invalidCalls: 0,
16
+ successRate: 0,
17
+ distribution: {},
18
+ slowestCall: { tool: '', duration: 0 },
19
+ };
12
20
  /** Element-wise sum of token usages. Derived fields (cacheHitRate/avg) are not summed. */
13
21
  function sumTokens(items) {
14
22
  return items.reduce((acc, t) => ({
@@ -61,30 +69,106 @@ function subtractTokens(a, b) {
61
69
  total: (a.total ?? 0) - (b.total ?? 0),
62
70
  };
63
71
  }
72
+ // ─── AI active duration derivation ───────────────────────────
73
+ /**
74
+ * 取会话的 AI 实际执行时长:优先采用新版插件落盘的快照字段(口径以插件为准,
75
+ * 含精确的等待归因),旧版快照缺失时回退为本地推导。
76
+ *
77
+ * 推导口径(区间并集,与插件原生口径对齐):
78
+ * - 收集父会话 + 全部子代理的 step 窗口 [startTime, endTime](assistant 消息
79
+ * time.created→completed),排序合并重叠区间取并集时长。实测消息窗口已包含
80
+ * 其工具执行时段(工具窗口落在所属消息窗口内),因此不再叠加工具 durationMs——
81
+ * 串行相加会把窗口内的工具重复计一遍;
82
+ * - 并行子代理天然去重:父会话 task 工具等待子代理的壳窗口与子代理自身 steps
83
+ * 是同一时段,并集只计一次,不会像串行求和那样把并行时长翻倍(124 个并行
84
+ * 子代理曾累加出 225%);
85
+ * - question 工具等待用户回答的时长(可长达数小时)落在消息窗口内,从并集中
86
+ * 整体扣除(clamp ≥0),对齐原生口径"墙钟减已知等待";
87
+ * - 权限审批等待 / 限流挂起发生在窗口间隙,并集天然不含。
88
+ *
89
+ * 兜底:并集减等待后 clamp 到 [0, duration];ratio clamp 到 ≤1;duration ≤ 0 时
90
+ * ratio 为 0(退化快照防除零爆表)。
91
+ */
92
+ export function deriveExecutionStats(m) {
93
+ // ① 新版插件快照已落字段 → 直接采用(非法值 NaN/负数自动落入推导分支)
94
+ if (typeof m.aiActiveDuration === 'number' && m.aiActiveDuration >= 0) {
95
+ const aiActiveRatio = typeof m.aiActiveRatio === 'number' && m.aiActiveRatio >= 0
96
+ ? m.aiActiveRatio
97
+ : m.duration > 0 ? m.aiActiveDuration / m.duration : 0;
98
+ return { aiActiveDuration: m.aiActiveDuration, aiActiveRatio, aiActiveSource: 'snapshot' };
99
+ }
100
+ // ② 旧版快照 → 本地推导(区间并集)
101
+ const intervals = [];
102
+ let questionMs = 0;
103
+ const collect = (steps) => {
104
+ for (const s of steps ?? []) {
105
+ const start = s.startTime ?? 0;
106
+ const end = s.endTime ?? 0;
107
+ if (start > 0 && end > start)
108
+ intervals.push([start, end]);
109
+ for (const t of s.tools ?? []) {
110
+ if (t.tool === 'question')
111
+ questionMs += t.durationMs ?? 0;
112
+ }
113
+ }
114
+ };
115
+ collect(m.steps ?? []);
116
+ for (const sa of m.subagents ?? [])
117
+ collect(sa.steps);
118
+ // 排序合并重叠区间 → 并集时长
119
+ intervals.sort((a, b) => a[0] - b[0]);
120
+ let unionMs = 0;
121
+ let curStart = 0;
122
+ let curEnd = 0;
123
+ let hasCursor = false;
124
+ for (const [start, end] of intervals) {
125
+ if (!hasCursor || start > curEnd) {
126
+ if (hasCursor)
127
+ unionMs += curEnd - curStart;
128
+ curStart = start;
129
+ curEnd = end;
130
+ hasCursor = true;
131
+ }
132
+ else if (end > curEnd) {
133
+ curEnd = end;
134
+ }
135
+ }
136
+ if (hasCursor)
137
+ unionMs += curEnd - curStart;
138
+ const duration = m.duration ?? 0;
139
+ const activeRaw = Math.max(0, unionMs - questionMs);
140
+ const aiActiveDuration = duration > 0 ? Math.min(activeRaw, duration) : activeRaw;
141
+ const aiActiveRatio = duration > 0 ? Math.min(1, aiActiveDuration / duration) : 0;
142
+ return { aiActiveDuration, aiActiveRatio, aiActiveSource: 'derived' };
143
+ }
64
144
  function sessionToSummary(m, id, filePath) {
65
145
  const subagents = m.subagents ?? [];
66
- const subagentTokens = subagents.length > 0 ? sumTokens(subagents.map((s) => s.tokens)) : undefined;
67
- const mainTokens = subagentTokens ? subtractTokens(m.tokens, subagentTokens) : undefined;
146
+ const subagentTokens = subagents.length > 0 ? sumTokens(subagents.map((s) => s.tokens ?? EMPTY_TOKENS)) : undefined;
147
+ const mainTokens = subagentTokens ? subtractTokens(m.tokens ?? EMPTY_TOKENS, subagentTokens) : undefined;
68
148
  const rawFirst = m.rounds?.find((r) => r.userMessage)?.userMessage;
69
149
  const firstUserMessage = Array.isArray(rawFirst) ? rawFirst[0] : rawFirst;
150
+ const { aiActiveDuration, aiActiveRatio, aiActiveSource } = deriveExecutionStats(m);
70
151
  return {
71
152
  id,
72
- sessionId: m.sessionId,
73
- directory: m.header.workingDirectory,
74
- model: m.header.model,
75
- agent: m.header.agent,
76
- stepCount: m.steps.length,
77
- totalTokens: m.tokens,
153
+ sessionId: m.sessionId ?? '',
154
+ directory: m.header?.workingDirectory ?? '',
155
+ model: m.header?.model ?? '',
156
+ agent: m.header?.agent ?? '',
157
+ stepCount: m.steps?.length ?? 0,
158
+ totalTokens: m.tokens ?? EMPTY_TOKENS,
78
159
  mainTokens,
79
160
  subagentTokens,
80
161
  subagentCount: subagents.length > 0 ? subagents.length : undefined,
81
162
  totalCost: 0,
82
- duration: m.duration,
83
- createdAt: m.header.startTime,
84
- startTime: m.startTime,
85
- endTime: m.endTime,
86
- toolCalls: m.tools.totalCalls,
87
- successRate: m.tools.successRate,
163
+ duration: m.duration ?? 0,
164
+ aiActiveDuration,
165
+ aiActiveRatio,
166
+ aiActiveSource,
167
+ createdAt: m.header?.startTime ?? '',
168
+ startTime: m.startTime ?? 0,
169
+ endTime: m.endTime ?? 0,
170
+ toolCalls: m.tools?.totalCalls ?? 0,
171
+ successRate: m.tools?.successRate ?? 0,
88
172
  firstUserMessage,
89
173
  filePath,
90
174
  };
@@ -93,11 +177,12 @@ function sessionToDetail(m, id) {
93
177
  const summary = sessionToSummary(m, id);
94
178
  return {
95
179
  ...summary,
96
- steps: m.steps,
97
- tools: m.tools,
180
+ steps: m.steps ?? [],
181
+ tools: m.tools ?? EMPTY_TOOLS,
98
182
  codeStats: m.codeStats,
99
- rounds: m.rounds,
100
- subagents: m.subagents,
183
+ rounds: m.rounds ?? [],
184
+ waitBreakdown: m.waitBreakdown,
185
+ subagents: m.subagents ?? [],
101
186
  skills: m.skills,
102
187
  planning: m.planning,
103
188
  systemPrompts: m.systemPrompts,
@@ -134,7 +219,8 @@ export async function getSessions(dirs) {
134
219
  if (fileResult.status === 'rejected')
135
220
  continue;
136
221
  const { session, filePath, id } = fileResult.value;
137
- if (id && session?.sessionId && session.header && !seen.has(id)) {
222
+ // 只要能解析出对象即纳入列表(非会话 json 字段缺失时由 sessionToSummary 兜底)
223
+ if (id && session && typeof session === 'object' && !seen.has(id)) {
138
224
  seen.set(id, sessionToSummary(session, id, filePath));
139
225
  }
140
226
  }
@@ -161,7 +247,7 @@ export async function getSessionDetail(dirs, id) {
161
247
  if (result.status === 'rejected')
162
248
  continue;
163
249
  const session = result.value;
164
- if (session?.sessionId && session.header) {
250
+ if (session && typeof session === 'object') {
165
251
  const detail = sessionToDetail(session, id);
166
252
  setCache(detailCache, cacheKeyStr, detail);
167
253
  return detail;
@@ -33,6 +33,7 @@ export async function saveConfig(config) {
33
33
  await fs.writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), 'utf-8');
34
34
  cachedConfig = config;
35
35
  }
36
+ /** 切换某会话的收藏状态,返回最新收藏 id 列表。 */
36
37
  export async function toggleFavorite(sessionId) {
37
38
  const config = await getConfig();
38
39
  const index = config.favorites.indexOf(sessionId);
@@ -1,2 +1 @@
1
1
  export * from './session.js';
2
- export * from './cloud.js';