cc-viewer 1.2.8 → 1.3.0

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.
@@ -0,0 +1 @@
1
+ body{margin:0;background-color:#0d0d0d}*{scrollbar-width:thin;scrollbar-color:#3a3a3a #0d0d0d}*::-webkit-scrollbar{width:6px;height:6px}*::-webkit-scrollbar-track{background:#0d0d0d}*::-webkit-scrollbar-thumb{background:#3a3a3a;border-radius:3px}*::-webkit-scrollbar-thumb:hover{background:#555}.diff-view{background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;padding:8px 12px}.diff-line-del{background:#ef444426;color:#fca5a5;padding:0 4px}.diff-line-add{background:#22c55e26;color:#86efac;padding:0 4px}.code-highlight{color:#e6edf3}.hl-keyword{color:#ff7b72}.hl-string{color:#a5d6ff}.hl-comment{color:#8b949e;font-style:italic}.hl-number{color:#79c0ff}.hl-linenum{color:#484f58;-webkit-user-select:none;user-select:none}.chat-md pre{background:#0d1117;border:1px solid #2a2a2a;border-radius:6px;padding:12px;overflow-x:auto;font-size:13px;line-height:1.5}.chat-md code{background:#1a1a2e;padding:2px 6px;border-radius:4px;font-size:13px;color:#e5e7eb}.chat-md pre code{background:none;padding:0}.chat-md p{margin:6px 0}.chat-md ul,.chat-md ol{padding-left:20px;margin:6px 0}.chat-md li{margin:2px 0}.chat-md h1,.chat-md h2,.chat-md h3{margin:12px 0 6px;color:#fff}.chat-md h1{font-size:1.3em}.chat-md h2{font-size:1.15em}.chat-md h3{font-size:1.05em}.chat-md blockquote{border-left:3px solid #3b82f6;margin:8px 0;padding:4px 12px;color:#9ca3af}.chat-md table{border-collapse:collapse;margin:8px 0;font-size:13px}.chat-md th,.chat-md td{border:1px solid #2a2a2a;padding:6px 10px}.chat-md th{background:#1a1a1a;color:#fff}.chat-md a{color:#60a5fa}.chat-md hr{border:none;border-top:1px solid #2a2a2a;margin:12px 0}.chat-md strong{color:#f1f5f9}.chat-md em{color:#cbd5e1}._helpBtn_1gxlm_1{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;border:1px solid #444;color:#aaa;font-size:11px;line-height:1;cursor:pointer;margin-left:4px;vertical-align:middle;transition:background .2s;-webkit-user-select:none;user-select:none}._helpBtn_1gxlm_1:hover{background:#333}._modalBody_1gxlm_24{max-height:60vh;overflow-y:auto;line-height:1.7}._modalBody_1gxlm_24 h1,._modalBody_1gxlm_24 h2,._modalBody_1gxlm_24 h3{margin-top:.8em}._modalBody_1gxlm_24 p{margin:.5em 0}._modalBody_1gxlm_24 code{background:#2a2a2a;padding:1px 4px;border-radius:3px;font-size:.9em}._modalBody_1gxlm_24 pre{background:#1a1a1a;padding:12px;border-radius:6px;overflow-x:auto}._spinWrap_1gxlm_54{display:flex;justify-content:center;padding:40px 0}._headerBar_m457c_2{display:flex;align-items:center;justify-content:space-between;width:100%;height:100%}._titleText_m457c_11{color:#fff;font-size:18px;cursor:pointer}._logoImage_m457c_17{height:24px;width:24px;margin-right:6px;border-radius:3px;vertical-align:text-bottom}._titleArrow_m457c_25{font-size:12px;margin-left:4px}._tokenStatsTag_m457c_31{border-radius:12px;cursor:pointer;background:#2a2a2a;border:1px solid #3a3a3a;color:#ccc}._tokenStatsIcon_m457c_39{margin-right:4px}._liveTag_m457c_44{border-radius:12px}._liveTag_m457c_44 .ant-badge-status-processing{animation:_breathe_m457c_1 2.5s ease-in-out infinite}@keyframes _breathe_m457c_1{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}._liveTagHistory_m457c_57{background:#2a2a2a;border-color:#424242;color:#d1d5db}._liveTagText_m457c_63{margin-left:4px}._countdownStrong_m457c_68{font-variant-numeric:tabular-nums}._langSelector_m457c_73,._settingsBtn_m457c_84{color:#888;font-size:12px;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #555;border-radius:4px;padding:2px 8px}._settingsBtn_m457c_84:hover{color:#bbb;border-color:#777}._settingsItem_m457c_100{display:flex;justify-content:space-between;align-items:center;padding:12px 0}._settingsLabel_m457c_107{font-size:14px}._tokenStatsEmpty_m457c_112{padding:8px 4px;color:#999;font-size:13px}._tokenStatsContainer_m457c_119{display:flex;gap:12px;align-items:flex-start}._tokenStatsColumn_m457c_125{min-width:240px}._toolStatsColumn_m457c_129{min-width:180px}._modelCard_m457c_134{border:1px solid #333;border-radius:6px;padding:8px 10px;background:#111}._modelCardSpaced_m457c_141{margin-bottom:10px}._modelName_m457c_147{font-size:13px;font-weight:600;color:#e5e5e5;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._statsTable_m457c_157{width:100%;border-collapse:collapse}._th_m457c_162{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#888;font-weight:400;text-align:right}._td_m457c_172{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#e5e5e5;text-align:right}._label_m457c_181{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#aaa;font-weight:400;text-align:left}._rowBorder_m457c_191{border-bottom:1px solid #2a2a2a}._rebuildCard_m457c_195{border:1px solid #333;border-radius:6px;padding:8px 10px;margin-top:10px;background:#111}._rebuildTotalRow_m457c_203{border-top:1px solid #444}._rebuildTotalRow_m457c_203 td{font-weight:600}._promptExportBar_m457c_212{margin-bottom:12px}._promptScrollArea_m457c_216{max-height:500px;overflow:auto}._promptEmpty_m457c_221{color:#999;padding:12px}._promptTimestamp_m457c_227{color:#666;font-size:12px;margin:12px 0 4px;padding-bottom:6px}._textPromptCard_m457c_235{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._preText_m457c_244{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}._systemCollapse_m457c_254{margin:4px 0;background:#1a1a1a;border:1px solid #303030;border-radius:6px}._systemLabel_m457c_261{color:#888;font-size:12px}._preSys_m457c_266{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#999;margin:0}._promptTextarea_m457c_276{background:#000;width:100%;min-height:400px;color:#d9d9d9;font-family:monospace;font-size:13px;line-height:1.6;border:none;resize:vertical;padding:10px 14px;outline:none}._projectStatsCenter_m457c_291{display:flex;justify-content:center;padding:40px 0}._projectStatsEmpty_m457c_297{color:#999;padding:40px 0;text-align:center;font-size:13px}._projectStatsContent_m457c_304{display:flex;flex-direction:column;gap:16px}._projectStatsUpdated_m457c_310{color:#666;font-size:12px;text-align:right}._projectStatsSummary_m457c_316{display:grid;grid-template-columns:1fr 1fr;gap:10px}._projectStatCard_m457c_322{background:#111;border:1px solid #333;border-radius:8px;padding:14px 12px;text-align:center}._projectStatValue_m457c_330{font-size:22px;font-weight:700;color:#e5e5e5;font-family:monospace;font-variant-numeric:tabular-nums}._projectStatLabel_m457c_338{font-size:12px;color:#888;margin-top:4px}._projectStatsSection_m457c_344{display:flex;flex-direction:column;gap:10px}._projectStatsSectionTitle_m457c_350{font-size:14px;font-weight:600;color:#ccc;padding-bottom:4px;border-bottom:1px solid #333}._projectStatsModelCard_m457c_358{background:#111;border:1px solid #333;border-radius:6px;padding:10px 12px}._projectStatsModelHeader_m457c_365{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._projectStatsModelName_m457c_374{font-size:13px;font-weight:600;color:#e5e5e5}._projectStatsModelCount_m457c_380{font-size:12px;color:#888;font-family:monospace}._centerEmpty_ckz8l_1{display:flex;align-items:center;justify-content:center;height:100%}._scrollContainer_ckz8l_8{overflow:auto;height:100%}._listItem_ckz8l_13{cursor:pointer;padding:8px 12px;border-left:3px solid transparent;border-bottom:1px solid #1f1f1f;transition:background .15s}._listItem_ckz8l_13:hover{background:#151515}._listItemActive_ckz8l_25{background:#1a2332;border-left-color:#3b82f6}._listItemActive_ckz8l_25:hover{background:#1a2332}._itemContent_ckz8l_34{width:100%;min-width:0}._itemHeader_ckz8l_39{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px}._tagNoMargin_ckz8l_47{margin:0;font-size:12px}._modelName_ckz8l_52{font-size:12px}._time_ckz8l_56{font-size:12px;color:#6b7280;margin-left:auto}._detailRow_ckz8l_62{display:flex;gap:8px;font-size:12px;align-items:center}._urlText_ckz8l_69{color:#555;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}._duration_ckz8l_78{color:#6b7280;flex-shrink:0}._statusOk_ckz8l_83{color:#52c41a;opacity:.5;flex-shrink:0}._statusErr_ckz8l_89{color:#ef4444;flex-shrink:0}._statusDefault_ckz8l_94{color:#9ca3af;flex-shrink:0}._usageBox_ckz8l_99{background:#111;border-radius:4px;padding:3px 6px;margin-top:4px;font-size:12px;color:#6b7280;line-height:1.6}._cacheDot_ckz8l_109{display:inline-block;width:6px;height:6px;border-radius:50%;margin:0 3px;vertical-align:middle}._cacheDotLoss_ckz8l_118{background-color:#8b1a1a;cursor:help}._cacheDotNormal_ckz8l_123{background-color:#3a3a3a}._GzYRV{line-height:1.2;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}._3eOF8{margin-right:5px;font-weight:700}._3eOF8+._3eOF8{margin-left:-5px}._1MFti{cursor:pointer}._f10Tu{font-size:1.2em;margin-right:5px;-webkit-user-select:none;-moz-user-select:none;user-select:none}._1UmXx:after{content:"▸"}._1LId0:after{content:"▾"}._1pNG9{margin-right:5px}._1pNG9:after{content:"...";font-size:.8em}._2IvMF{background:#eee}._2bkNM{margin:0;padding:0 10px}._1BXBN{margin:0;padding:0}._1MGIk{font-weight:600;margin-right:5px;color:#000}._3uHL6{color:#000}._2T6PJ,._1Gho6{color:#df113a}._vGjyY{color:#2a3f3c}._1bQdo{color:#0b75f5}._3zQKs{color:#469038}._1xvuR{color:#43413d}._oLqym,._2AXVT,._2KJWg{color:#000}._11RoI{background:#002b36}._17H2C,._3QHg2,._3fDAz{color:#fdf6e3}._2bSDX{font-weight:bolder;margin-right:5px;color:#fdf6e3}._gsbQL{color:#fdf6e3}._LaAZe,._GTKgm{color:#81b5ac}._Chy1W{color:#cb4b16}._2bveF{color:#d33682}._2vRm-{color:#ae81ff}._1prJR{color:#268bd2}._container_1h2lr_1{background:#0d1117;border-radius:6px;border:1px solid #2a2a2a;padding:12px;font-size:13px;font-family:monospace;overflow:auto}._container_y3z3z_1{height:100%;overflow:auto;padding:0 16px}._emptyState_y3z3z_7{display:flex;align-items:center;justify-content:center;height:100%}._urlSection_y3z3z_14{padding:12px 0;border-bottom:1px solid #1f1f1f;display:flex;align-items:flex-start}._urlLeft_y3z3z_21{flex:1;min-width:0}._tokenStatsBox_y3z3z_26{flex-shrink:0;padding-left:12px;display:flex;align-items:center}._tokenGrid_y3z3z_33{display:flex;border:1px solid #303030;border-radius:6px;overflow:hidden;min-width:360px;font-size:11px;line-height:1.6}._tokenRows_y3z3z_43{flex:1}._tokenRow_y3z3z_43{display:flex}._tokenRowBorder_y3z3z_51{border-top:1px solid #303030}._tokenLabel_y3z3z_55{color:#888;padding:4px 8px;white-space:nowrap;font-weight:600}._tokenTd_y3z3z_62{flex:1;color:#d1d5db;text-align:right;padding:4px 8px;font-family:monospace;white-space:nowrap}._tokenHitRate_y3z3z_71{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#d1d5db;padding:4px 8px;font-family:monospace;white-space:nowrap;border-left:1px solid #303030;min-width:100px}._tokenHitRateLabel_y3z3z_84{color:#888;font-size:10px;font-family:sans-serif}._tokenRowBorder_y3z3z_51 td{border-top:1px solid #303030}._urlText_y3z3z_94{color:#d1d5db;font-size:13px;margin-bottom:8px;word-break:break-all}._metaText_y3z3z_101,._headersContainer_y3z3z_105{font-size:12px}._headerRow_y3z3z_109{display:flex;padding:4px 0;border-bottom:1px solid #1f1f1f}._headerKey_y3z3z_115{min-width:200px;flex-shrink:0}._headerValue_y3z3z_120{word-break:break-all;margin-left:8px}._streamingBox_y3z3z_125{padding:20px;background:#1a1a1a;border-radius:6px;border:1px solid #2a2a2a}._bodyToolbar_y3z3z_132{display:flex;gap:8px;margin-bottom:8px}._rawTextPre_y3z3z_138{background:#0d1117;border:1px solid #2a2a2a;border-radius:6px;padding:12px;font-size:12px;color:#e5e7eb;overflow:auto;max-height:600px;white-space:pre-wrap;word-break:break-all}._tabContent_y3z3z_151{padding:12px 0}._collapseSpacing_y3z3z_155{margin-bottom:16px}._bodyLabel_y3z3z_159{margin:0}._bodyHeader_y3z3z_163{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}._diffSection_y3z3z_170{margin-bottom:16px}._diffToggle_y3z3z_174{display:inline-block;margin-bottom:8px;cursor:pointer}._diffIcon_y3z3z_180{font-size:12px;margin-left:4px}._viewInChatBtn_y3z3z_185{display:inline-flex;align-items:center;height:26px;border-radius:13px;border:1px solid #424242;background:transparent;color:#888;cursor:pointer;font-size:12px;transition:all .2s;padding:0 10px;white-space:nowrap}._viewInChatBtn_y3z3z_185:hover{border-color:#666;color:#d1d5db;background:#ffffff0f}._reminderSelect_y3z3z_206{min-width:140px;font-size:12px}._reminderSelect_y3z3z_206 .ant-select-selector{border-radius:2px!important;border-color:#424242!important;background:transparent!important;min-height:26px!important;height:auto!important;padding:0 8px!important;font-family:monospace}._reminderSelect_y3z3z_206 .ant-select-selection-placeholder{font-size:11px}._wrapper_1o255_1{margin:6px 0}._header_1o255_5{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}._filePath_1o255_12{color:#a78bfa;font-size:12px;font-weight:600}._toggle_1o255_18{color:#6b7280;font-size:11px;cursor:pointer;-webkit-user-select:none;user-select:none}._code_1o255_25{margin:0;font-size:12px;line-height:1.5;overflow:auto}._plainResult_1uh60_1{background:#111;border-radius:6px;font-size:12px}._plainTitle_1uh60_7{font-size:11px}._plainPre_1uh60_11{color:#d1d5db;margin:0;white-space:pre-wrap;word-break:break-all;font-size:12px;padding:8px 12px}._codeResult_1uh60_20{background:#0d1117;border-radius:6px;border:1px solid #1e2a3a;overflow:hidden}._codeHeader_1uh60_27{display:flex;justify-content:space-between;align-items:center;padding:4px 10px;background:#161b22;border-bottom:1px solid #1e2a3a}._codeTitle_1uh60_36{font-size:11px;color:#8b949e}._codeToggle_1uh60_41{font-size:11px;color:#484f58;cursor:pointer;-webkit-user-select:none;user-select:none}._codePre_1uh60_48{margin:0;padding:8px 12px;font-size:12px;line-height:1.5;overflow:auto;max-height:500px}._markdownBody_1uh60_57{padding:8px 12px;font-size:13px;line-height:1.6;overflow:auto;max-height:500px}._tag_17wfp_1{display:inline-block;font-size:10px;color:#6b7280;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:3px;padding:0 4px;margin-left:6px;cursor:pointer;line-height:18px;vertical-align:middle;transition:color .2s,border-color .2s;-webkit-user-select:none;user-select:none}._tag_17wfp_1:hover{color:#93c5fd;border-color:#93c5fd4d}._tagActive_17wfp_22{color:#93c5fd;border-color:#93c5fd40}._tagLoading_17wfp_27{cursor:wait;opacity:.7}._spinner_17wfp_32{display:inline-block;width:10px;height:10px;border:1.5px solid rgba(147,197,253,.3);border-top-color:#93c5fd;border-radius:50%;animation:_spin_17wfp_32 .6s linear infinite;margin-right:3px;vertical-align:middle}@keyframes _spin_17wfp_32{to{transform:rotate(360deg)}}._avatar_1od17_3{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}._avatarImg_1od17_13{width:32px;height:32px;border-radius:50%;flex-shrink:0;object-fit:cover}._bubble_1od17_21{border-radius:8px;padding:10px 14px;max-width:100%;font-size:14px;line-height:1.6;word-break:break-word}._messageRow_1od17_32{display:flex;gap:10px;padding:8px 0}._messageRowEnd_1od17_38{display:flex;gap:10px;padding:8px 0;justify-content:flex-end}._contentCol_1od17_47{min-width:0;flex:1}._contentColLimited_1od17_52{min-width:0;max-width:80%;width:fit-content}._labelRow_1od17_60{display:flex;justify-content:space-between;align-items:center;margin-bottom:2px}._labelRight_1od17_67{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}._labelText_1od17_75{font-size:11px}._timeText_1od17_79,._timeTextNoMargin_1od17_85{font-size:10px;color:#6b7280;flex-shrink:0}._labelTextRight_1od17_91{font-size:11px;margin-left:auto}._bubbleUser_1od17_98{background:#1668dc;color:#e5e7eb}._bubbleAssistant_1od17_104{background:#141414;color:#e5e7eb;transition:box-shadow 0s;position:relative}._bubbleHighlight_1od17_112{box-shadow:0 0 10px #1668dc99}._bubbleHighlightFading_1od17_116{box-shadow:0 0 10px #1668dc00;transition:box-shadow 5s ease-out}._borderSvg_1od17_121{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible}._borderSvgFading_1od17_130{opacity:0;transition:opacity 5s ease-out}._borderRect_1od17_135{animation:_dashRotate_1od17_1 4s linear infinite}@keyframes _dashRotate_1od17_1{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}._bubblePlan_1od17_144{background:#141428;border:5px solid #1668dc;font-size:12px;color:#e5e7eb}._bubbleSubAgent_1od17_152{background:#1a1a2e;color:#e5e7eb}._bubbleSelection_1od17_158{background:#1a3a1a;color:#e5e7eb}._systemTagLabel_1od17_166{font-size:12px}._skillLabel_1od17_170{font-size:12px;color:#a78bfa}._systemTagPre_1od17_175{font-size:12px;color:#9ca3af;white-space:pre-wrap;word-break:break-all;margin:0}._collapseMargin_1od17_183{margin:4px 0}._collapseNoMargin_1od17_187{margin:0}._thinkingLabel_1od17_193{font-size:12px}._toolBox_1od17_199{background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._toolLabel_1od17_208{color:#a78bfa}._codePre_1od17_214{font-size:12px;margin:4px 0 0;white-space:pre-wrap;word-break:break-all;background:#0d1117;border-radius:4px;padding:6px 8px}._pathTag_1od17_226{color:#7dd3fc;font-size:11px}._descSpan_1od17_233{color:#6b7280;font-weight:400}._secondarySpan_1od17_238{color:#6b7280}._patternSpan_1od17_242{color:#fbbf24}._kvContainer_1od17_248{margin-top:4px;font-size:11px}._kvItem_1od17_253{margin:2px 0}._kvKey_1od17_257{color:#7dd3fc}._kvValue_1od17_261{color:#9ca3af}._toolResult_1od17_267{background:#111827;border:1px solid #1e293b;border-radius:6px;padding:6px 10px;margin:2px 0 6px;font-size:11px}._toolResultLabel_1od17_276{font-size:11px}._compactLabel_1od17_282{font-size:12px;color:#93c5fd}._compactPre_1od17_287{font-size:12px;color:#d1d5db;white-space:pre-wrap;word-break:break-all;margin:0}._viewRequestBtn_1od17_297{font-size:10px;color:#555;cursor:pointer;margin-left:6px;flex-shrink:0}._viewRequestBtn_1od17_297:hover{color:#93c5fd}._optionList_1od17_311{padding-left:8px}._optionDesc_1od17_315{color:#555;margin-left:6px;font-weight:400}._questionText_1od17_323{font-size:13px;color:#ccc;margin-bottom:4px}._questionSpacing_1od17_329{margin-bottom:10px}._option_1od17_311{font-size:12px;padding:1px 0}._centerEmpty_1j3v3_1{display:flex;align-items:center;justify-content:center;height:100%}._container_1j3v3_8{height:100%;overflow:auto;padding:16px 24px;display:flex;flex-direction:column}._sessionDividerText_1j3v3_16{font-size:11px;color:#555}._lastResponseLabel_1j3v3_21{font-size:11px}._resizer_yamj2_1{width:6px;cursor:col-resize;background:#1f1f1f;flex-shrink:0;transition:background .2s}._resizer_yamj2_1:hover{background:#3b82f6}._layout_11bka_1{height:100vh;overflow:hidden}._header_11bka_6{background:#111;border-bottom:1px solid #1f1f1f;padding:0 24px;height:60px;line-height:60px}._content_11bka_14{flex:1;overflow:hidden}._mainContainer_11bka_19{display:flex;height:100%}._leftPanel_11bka_24{flex-shrink:0;border-right:1px solid #1f1f1f;display:flex;flex-direction:column;background:#0a0a0a}._leftPanelHeader_11bka_32{padding:10px 16px;border-bottom:1px solid #1f1f1f;font-size:13px;color:#9ca3af;font-weight:500;display:flex;justify-content:space-between;align-items:center}._leftPanelCount_11bka_43{font-size:12px;color:#555;font-weight:400}._leftPanelBody_11bka_49{flex:1;overflow:hidden}._rightPanel_11bka_54{flex:1;overflow:hidden;background:#0d0d0d}._modalActions_11bka_60{margin-bottom:12px}._spinCenter_11bka_64{text-align:center;padding:40px}._emptyCenter_11bka_69{text-align:center;color:#999;padding:40px}._logCheckbox_11bka_75{margin-right:8px}._logListItem_11bka_79{cursor:pointer;padding:8px 12px}._logItemRow_11bka_84{display:flex;align-items:center;width:100%;justify-content:space-between;flex-wrap:nowrap;gap:12px}._logItemRow_11bka_84>span:first-child{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden}._logFileName_11bka_101{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._logItemRow_11bka_84>span:last-child{display:flex;align-items:center;flex-shrink:0;gap:8px}._logFileIcon_11bka_114{margin-right:8px;color:#3b82f6;flex-shrink:0}._folderIcon_11bka_120{margin-right:8px}._logTag_11bka_124{margin-left:8px}._loadingOverlay_11bka_128{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:9999}._loadingText_11bka_141{color:#fff;font-size:16px;font-weight:700}._footer_11bka_147{height:18px;background:#000;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;flex-shrink:0}._footerRight_11bka_157{display:flex;align-items:center;gap:6px;font-size:11px;color:#555}._footerLink_11bka_165{display:inline-flex;align-items:center;gap:3px;color:#555;text-decoration:none}._footerLink_11bka_165:hover{color:#888}._footerIcon_11bka_177{width:12px;height:12px}._footerDivider_11bka_182{color:#333}._footerText_11bka_186{color:#555}
package/dist/index.html CHANGED
@@ -6,8 +6,8 @@
6
6
  <title>Claude Code Viewer</title>
7
7
  <link rel="icon" href="/favicon.ico?v=1">
8
8
  <link rel="shortcut icon" href="/favicon.ico?v=1">
9
- <script type="module" crossorigin src="/assets/index-CN78DISW.js"></script>
10
- <link rel="stylesheet" crossorigin href="/assets/index-DhZ8St4J.css">
9
+ <script type="module" crossorigin src="/assets/index-C8W8UYGw.js"></script>
10
+ <link rel="stylesheet" crossorigin href="/assets/index-V2-sKBoM.css">
11
11
  </head>
12
12
  <body>
13
13
  <div id="root"></div>
package/interceptor.js CHANGED
@@ -140,7 +140,7 @@ const _initPromise = (async () => {
140
140
  } catch { }
141
141
  })();
142
142
 
143
- export { LOG_FILE, _initPromise, _resumeState, _choicePromise, resolveResumeChoice, _projectName };
143
+ export { LOG_FILE, _initPromise, _resumeState, _choicePromise, resolveResumeChoice, _projectName, _logDir };
144
144
 
145
145
  const MAX_LOG_SIZE = 500 * 1024 * 1024; // 500MB
146
146
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-viewer",
3
- "version": "1.2.8",
3
+ "version": "1.3.0",
4
4
  "description": "Claude Code Logger visualization management tool",
5
5
  "license": "MIT",
6
6
  "main": "server.js",
package/proxy.js CHANGED
@@ -35,7 +35,6 @@ export function startProxy() {
35
35
  return new Promise((resolve, reject) => {
36
36
  const server = createServer(async (req, res) => {
37
37
  const originalBaseUrl = getOriginalBaseUrl();
38
- const targetUrl = new URL(req.url, originalBaseUrl);
39
38
 
40
39
  // Use the patched fetch (which logs to cc-viewer)
41
40
  try {
package/server.js CHANGED
@@ -4,7 +4,8 @@ import { fileURLToPath } from 'node:url';
4
4
  import { dirname, join, extname, basename } from 'node:path';
5
5
  import { homedir, userInfo, platform } from 'node:os';
6
6
  import { execSync } from 'node:child_process';
7
- import { LOG_FILE, _initPromise, _resumeState, resolveResumeChoice, _projectName, _cachedApiKey, _cachedAuthHeader, _cachedHaikuModel } from './interceptor.js';
7
+ import { Worker } from 'node:worker_threads';
8
+ import { LOG_FILE, _initPromise, _resumeState, resolveResumeChoice, _projectName, _logDir, _cachedApiKey, _cachedAuthHeader, _cachedHaikuModel } from './interceptor.js';
8
9
  import { LOG_DIR } from './findcc.js';
9
10
  import { t, detectLanguage } from './i18n.js';
10
11
 
@@ -50,6 +51,36 @@ let server;
50
51
  let actualPort = START_PORT;
51
52
  // 跟踪所有被 watch 的日志文件
52
53
  const watchedFiles = new Map();
54
+ // Stats Worker 实例
55
+ let statsWorker = null;
56
+
57
+ function startStatsWorker() {
58
+ try {
59
+ statsWorker = new Worker(new URL('./stats-worker.js', import.meta.url));
60
+ statsWorker.on('error', (err) => {
61
+ console.error('[CC Viewer] Stats worker error:', err.message);
62
+ statsWorker = null;
63
+ });
64
+ statsWorker.on('exit', (code) => {
65
+ if (code !== 0) {
66
+ console.error('[CC Viewer] Stats worker exited with code', code);
67
+ }
68
+ statsWorker = null;
69
+ });
70
+ // 初始化:全量扫描当前项目
71
+ if (_projectName && _logDir) {
72
+ statsWorker.postMessage({ type: 'init', logDir: LOG_DIR, projectName: _projectName });
73
+ }
74
+ } catch (err) {
75
+ console.error('[CC Viewer] Failed to start stats worker:', err.message);
76
+ }
77
+ }
78
+
79
+ function notifyStatsWorker(logFile) {
80
+ if (statsWorker && _projectName) {
81
+ statsWorker.postMessage({ type: 'update', logDir: LOG_DIR, projectName: _projectName, logFile });
82
+ }
83
+ }
53
84
 
54
85
  const MIME_TYPES = {
55
86
  '.html': 'text/html; charset=utf-8',
@@ -114,6 +145,8 @@ function watchLogFile(logFile) {
114
145
  // Skip invalid entries
115
146
  }
116
147
  });
148
+ // 通知 stats worker 更新统计
149
+ notifyStatsWorker(logFile);
117
150
  }
118
151
 
119
152
  // 检测日志文件是否已轮转到新文件
@@ -385,6 +418,56 @@ function handleRequest(req, res) {
385
418
  return;
386
419
  }
387
420
 
421
+ // 项目统计数据
422
+ if (url === '/api/project-stats' && method === 'GET') {
423
+ try {
424
+ if (!_projectName) {
425
+ res.writeHead(404, { 'Content-Type': 'application/json' });
426
+ res.end(JSON.stringify({ error: 'No project name' }));
427
+ return;
428
+ }
429
+ const statsFile = join(LOG_DIR, _projectName, `${_projectName}.json`);
430
+ if (!existsSync(statsFile)) {
431
+ res.writeHead(404, { 'Content-Type': 'application/json' });
432
+ res.end(JSON.stringify({ error: 'Stats file not found' }));
433
+ return;
434
+ }
435
+ const stats = readFileSync(statsFile, 'utf-8');
436
+ res.writeHead(200, { 'Content-Type': 'application/json' });
437
+ res.end(stats);
438
+ } catch (err) {
439
+ res.writeHead(500, { 'Content-Type': 'application/json' });
440
+ res.end(JSON.stringify({ error: err.message }));
441
+ }
442
+ return;
443
+ }
444
+
445
+ // 所有项目统计数据
446
+ if (url === '/api/all-project-stats' && method === 'GET') {
447
+ try {
448
+ const allStats = {};
449
+ if (existsSync(LOG_DIR)) {
450
+ const entries = readdirSync(LOG_DIR, { withFileTypes: true });
451
+ for (const entry of entries) {
452
+ if (!entry.isDirectory()) continue;
453
+ const project = entry.name;
454
+ const statsFile = join(LOG_DIR, project, `${project}.json`);
455
+ if (existsSync(statsFile)) {
456
+ try {
457
+ allStats[project] = JSON.parse(readFileSync(statsFile, 'utf-8'));
458
+ } catch { }
459
+ }
460
+ }
461
+ }
462
+ res.writeHead(200, { 'Content-Type': 'application/json' });
463
+ res.end(JSON.stringify(allStats));
464
+ } catch (err) {
465
+ res.writeHead(500, { 'Content-Type': 'application/json' });
466
+ res.end(JSON.stringify({ error: err.message }));
467
+ }
468
+ return;
469
+ }
470
+
388
471
  // macOS 用户头像和显示名
389
472
  if (url === '/api/user-profile' && method === 'GET') {
390
473
  const profile = getUserProfile();
@@ -621,6 +704,7 @@ export async function startViewer() {
621
704
  }
622
705
  } catch { }
623
706
  startWatching();
707
+ startStatsWorker();
624
708
  resolve(server);
625
709
  });
626
710
 
@@ -657,6 +741,10 @@ export function stopViewer() {
657
741
  if (server) {
658
742
  server.close();
659
743
  }
744
+ if (statsWorker) {
745
+ statsWorker.terminate();
746
+ statsWorker = null;
747
+ }
660
748
  }
661
749
 
662
750
  // Auto-start the viewer after log file init completes
@@ -1 +0,0 @@
1
- body{margin:0;background-color:#0d0d0d}*{scrollbar-width:thin;scrollbar-color:#3a3a3a #0d0d0d}*::-webkit-scrollbar{width:6px;height:6px}*::-webkit-scrollbar-track{background:#0d0d0d}*::-webkit-scrollbar-thumb{background:#3a3a3a;border-radius:3px}*::-webkit-scrollbar-thumb:hover{background:#555}.diff-view{background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;padding:8px 12px}.diff-line-del{background:#ef444426;color:#fca5a5;padding:0 4px}.diff-line-add{background:#22c55e26;color:#86efac;padding:0 4px}.code-highlight{color:#e6edf3}.hl-keyword{color:#ff7b72}.hl-string{color:#a5d6ff}.hl-comment{color:#8b949e;font-style:italic}.hl-number{color:#79c0ff}.hl-linenum{color:#484f58;-webkit-user-select:none;user-select:none}.chat-md pre{background:#0d1117;border:1px solid #2a2a2a;border-radius:6px;padding:12px;overflow-x:auto;font-size:13px;line-height:1.5}.chat-md code{background:#1a1a2e;padding:2px 6px;border-radius:4px;font-size:13px;color:#e5e7eb}.chat-md pre code{background:none;padding:0}.chat-md p{margin:6px 0}.chat-md ul,.chat-md ol{padding-left:20px;margin:6px 0}.chat-md li{margin:2px 0}.chat-md h1,.chat-md h2,.chat-md h3{margin:12px 0 6px;color:#fff}.chat-md h1{font-size:1.3em}.chat-md h2{font-size:1.15em}.chat-md h3{font-size:1.05em}.chat-md blockquote{border-left:3px solid #3b82f6;margin:8px 0;padding:4px 12px;color:#9ca3af}.chat-md table{border-collapse:collapse;margin:8px 0;font-size:13px}.chat-md th,.chat-md td{border:1px solid #2a2a2a;padding:6px 10px}.chat-md th{background:#1a1a1a;color:#fff}.chat-md a{color:#60a5fa}.chat-md hr{border:none;border-top:1px solid #2a2a2a;margin:12px 0}.chat-md strong{color:#f1f5f9}.chat-md em{color:#cbd5e1}._helpBtn_1gxlm_1{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:#1a1a1a;border:1px solid #444;color:#aaa;font-size:11px;line-height:1;cursor:pointer;margin-left:4px;vertical-align:middle;transition:background .2s;-webkit-user-select:none;user-select:none}._helpBtn_1gxlm_1:hover{background:#333}._modalBody_1gxlm_24{max-height:60vh;overflow-y:auto;line-height:1.7}._modalBody_1gxlm_24 h1,._modalBody_1gxlm_24 h2,._modalBody_1gxlm_24 h3{margin-top:.8em}._modalBody_1gxlm_24 p{margin:.5em 0}._modalBody_1gxlm_24 code{background:#2a2a2a;padding:1px 4px;border-radius:3px;font-size:.9em}._modalBody_1gxlm_24 pre{background:#1a1a1a;padding:12px;border-radius:6px;overflow-x:auto}._spinWrap_1gxlm_54{display:flex;justify-content:center;padding:40px 0}._headerBar_2bgmo_2{display:flex;align-items:center;justify-content:space-between;width:100%;height:100%}._titleText_2bgmo_11{color:#fff;font-size:18px;cursor:pointer}._logoImage_2bgmo_17{height:24px;width:24px;margin-right:6px;border-radius:3px;vertical-align:text-bottom}._titleArrow_2bgmo_25{font-size:12px;margin-left:4px}._tokenStatsTag_2bgmo_31{border-radius:12px;cursor:pointer;background:#2a2a2a;border:1px solid #3a3a3a;color:#ccc}._tokenStatsIcon_2bgmo_39{margin-right:4px}._liveTag_2bgmo_44{border-radius:12px}._liveTag_2bgmo_44 .ant-badge-status-processing{animation:_breathe_2bgmo_1 2.5s ease-in-out infinite}@keyframes _breathe_2bgmo_1{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}._liveTagHistory_2bgmo_57{background:#2a2a2a;border-color:#424242;color:#d1d5db}._liveTagText_2bgmo_63{margin-left:4px}._countdownStrong_2bgmo_68{font-variant-numeric:tabular-nums}._langSelector_2bgmo_73,._settingsBtn_2bgmo_84{color:#888;font-size:12px;cursor:pointer;-webkit-user-select:none;user-select:none;border:1px solid #555;border-radius:4px;padding:2px 8px}._settingsBtn_2bgmo_84:hover{color:#bbb;border-color:#777}._settingsItem_2bgmo_100{display:flex;justify-content:space-between;align-items:center;padding:12px 0}._settingsLabel_2bgmo_107{font-size:14px}._tokenStatsEmpty_2bgmo_112{padding:8px 4px;color:#999;font-size:13px}._tokenStatsContainer_2bgmo_119{display:flex;gap:12px;align-items:flex-start}._tokenStatsColumn_2bgmo_125{min-width:240px}._toolStatsColumn_2bgmo_129{min-width:180px}._modelCard_2bgmo_134{border:1px solid #333;border-radius:6px;padding:8px 10px;background:#111}._modelCardSpaced_2bgmo_141{margin-bottom:10px}._modelName_2bgmo_147{font-size:13px;font-weight:600;color:#e5e5e5;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._statsTable_2bgmo_157{width:100%;border-collapse:collapse}._th_2bgmo_162{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#888;font-weight:400;text-align:right}._td_2bgmo_172{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#e5e5e5;text-align:right}._label_2bgmo_181{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#aaa;font-weight:400;text-align:left}._rowBorder_2bgmo_191{border-bottom:1px solid #2a2a2a}._rebuildCard_2bgmo_195{border:1px solid #333;border-radius:6px;padding:8px 10px;margin-top:10px;background:#111}._rebuildTotalRow_2bgmo_203{border-top:1px solid #444}._rebuildTotalRow_2bgmo_203 td{font-weight:600}._promptExportBar_2bgmo_212{margin-bottom:12px}._promptScrollArea_2bgmo_216{max-height:500px;overflow:auto}._promptEmpty_2bgmo_221{color:#999;padding:12px}._promptTimestamp_2bgmo_227{color:#666;font-size:12px;margin:12px 0 4px;padding-bottom:6px}._textPromptCard_2bgmo_235{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._preText_2bgmo_244{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}._systemCollapse_2bgmo_254{margin:4px 0;background:#1a1a1a;border:1px solid #303030;border-radius:6px}._systemLabel_2bgmo_261{color:#888;font-size:12px}._preSys_2bgmo_266{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#999;margin:0}._promptTextarea_2bgmo_276{background:#000;width:100%;min-height:400px;color:#d9d9d9;font-family:monospace;font-size:13px;line-height:1.6;border:none;resize:vertical;padding:10px 14px;outline:none}._centerEmpty_ckz8l_1{display:flex;align-items:center;justify-content:center;height:100%}._scrollContainer_ckz8l_8{overflow:auto;height:100%}._listItem_ckz8l_13{cursor:pointer;padding:8px 12px;border-left:3px solid transparent;border-bottom:1px solid #1f1f1f;transition:background .15s}._listItem_ckz8l_13:hover{background:#151515}._listItemActive_ckz8l_25{background:#1a2332;border-left-color:#3b82f6}._listItemActive_ckz8l_25:hover{background:#1a2332}._itemContent_ckz8l_34{width:100%;min-width:0}._itemHeader_ckz8l_39{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px}._tagNoMargin_ckz8l_47{margin:0;font-size:12px}._modelName_ckz8l_52{font-size:12px}._time_ckz8l_56{font-size:12px;color:#6b7280;margin-left:auto}._detailRow_ckz8l_62{display:flex;gap:8px;font-size:12px;align-items:center}._urlText_ckz8l_69{color:#555;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}._duration_ckz8l_78{color:#6b7280;flex-shrink:0}._statusOk_ckz8l_83{color:#52c41a;opacity:.5;flex-shrink:0}._statusErr_ckz8l_89{color:#ef4444;flex-shrink:0}._statusDefault_ckz8l_94{color:#9ca3af;flex-shrink:0}._usageBox_ckz8l_99{background:#111;border-radius:4px;padding:3px 6px;margin-top:4px;font-size:12px;color:#6b7280;line-height:1.6}._cacheDot_ckz8l_109{display:inline-block;width:6px;height:6px;border-radius:50%;margin:0 3px;vertical-align:middle}._cacheDotLoss_ckz8l_118{background-color:#8b1a1a;cursor:help}._cacheDotNormal_ckz8l_123{background-color:#3a3a3a}._GzYRV{line-height:1.2;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}._3eOF8{margin-right:5px;font-weight:700}._3eOF8+._3eOF8{margin-left:-5px}._1MFti{cursor:pointer}._f10Tu{font-size:1.2em;margin-right:5px;-webkit-user-select:none;-moz-user-select:none;user-select:none}._1UmXx:after{content:"▸"}._1LId0:after{content:"▾"}._1pNG9{margin-right:5px}._1pNG9:after{content:"...";font-size:.8em}._2IvMF{background:#eee}._2bkNM{margin:0;padding:0 10px}._1BXBN{margin:0;padding:0}._1MGIk{font-weight:600;margin-right:5px;color:#000}._3uHL6{color:#000}._2T6PJ,._1Gho6{color:#df113a}._vGjyY{color:#2a3f3c}._1bQdo{color:#0b75f5}._3zQKs{color:#469038}._1xvuR{color:#43413d}._oLqym,._2AXVT,._2KJWg{color:#000}._11RoI{background:#002b36}._17H2C,._3QHg2,._3fDAz{color:#fdf6e3}._2bSDX{font-weight:bolder;margin-right:5px;color:#fdf6e3}._gsbQL{color:#fdf6e3}._LaAZe,._GTKgm{color:#81b5ac}._Chy1W{color:#cb4b16}._2bveF{color:#d33682}._2vRm-{color:#ae81ff}._1prJR{color:#268bd2}._container_1h2lr_1{background:#0d1117;border-radius:6px;border:1px solid #2a2a2a;padding:12px;font-size:13px;font-family:monospace;overflow:auto}._container_y3z3z_1{height:100%;overflow:auto;padding:0 16px}._emptyState_y3z3z_7{display:flex;align-items:center;justify-content:center;height:100%}._urlSection_y3z3z_14{padding:12px 0;border-bottom:1px solid #1f1f1f;display:flex;align-items:flex-start}._urlLeft_y3z3z_21{flex:1;min-width:0}._tokenStatsBox_y3z3z_26{flex-shrink:0;padding-left:12px;display:flex;align-items:center}._tokenGrid_y3z3z_33{display:flex;border:1px solid #303030;border-radius:6px;overflow:hidden;min-width:360px;font-size:11px;line-height:1.6}._tokenRows_y3z3z_43{flex:1}._tokenRow_y3z3z_43{display:flex}._tokenRowBorder_y3z3z_51{border-top:1px solid #303030}._tokenLabel_y3z3z_55{color:#888;padding:4px 8px;white-space:nowrap;font-weight:600}._tokenTd_y3z3z_62{flex:1;color:#d1d5db;text-align:right;padding:4px 8px;font-family:monospace;white-space:nowrap}._tokenHitRate_y3z3z_71{display:flex;flex-direction:column;align-items:center;justify-content:center;color:#d1d5db;padding:4px 8px;font-family:monospace;white-space:nowrap;border-left:1px solid #303030;min-width:100px}._tokenHitRateLabel_y3z3z_84{color:#888;font-size:10px;font-family:sans-serif}._tokenRowBorder_y3z3z_51 td{border-top:1px solid #303030}._urlText_y3z3z_94{color:#d1d5db;font-size:13px;margin-bottom:8px;word-break:break-all}._metaText_y3z3z_101,._headersContainer_y3z3z_105{font-size:12px}._headerRow_y3z3z_109{display:flex;padding:4px 0;border-bottom:1px solid #1f1f1f}._headerKey_y3z3z_115{min-width:200px;flex-shrink:0}._headerValue_y3z3z_120{word-break:break-all;margin-left:8px}._streamingBox_y3z3z_125{padding:20px;background:#1a1a1a;border-radius:6px;border:1px solid #2a2a2a}._bodyToolbar_y3z3z_132{display:flex;gap:8px;margin-bottom:8px}._rawTextPre_y3z3z_138{background:#0d1117;border:1px solid #2a2a2a;border-radius:6px;padding:12px;font-size:12px;color:#e5e7eb;overflow:auto;max-height:600px;white-space:pre-wrap;word-break:break-all}._tabContent_y3z3z_151{padding:12px 0}._collapseSpacing_y3z3z_155{margin-bottom:16px}._bodyLabel_y3z3z_159{margin:0}._bodyHeader_y3z3z_163{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}._diffSection_y3z3z_170{margin-bottom:16px}._diffToggle_y3z3z_174{display:inline-block;margin-bottom:8px;cursor:pointer}._diffIcon_y3z3z_180{font-size:12px;margin-left:4px}._viewInChatBtn_y3z3z_185{display:inline-flex;align-items:center;height:26px;border-radius:13px;border:1px solid #424242;background:transparent;color:#888;cursor:pointer;font-size:12px;transition:all .2s;padding:0 10px;white-space:nowrap}._viewInChatBtn_y3z3z_185:hover{border-color:#666;color:#d1d5db;background:#ffffff0f}._reminderSelect_y3z3z_206{min-width:140px;font-size:12px}._reminderSelect_y3z3z_206 .ant-select-selector{border-radius:2px!important;border-color:#424242!important;background:transparent!important;min-height:26px!important;height:auto!important;padding:0 8px!important;font-family:monospace}._reminderSelect_y3z3z_206 .ant-select-selection-placeholder{font-size:11px}._wrapper_1o255_1{margin:6px 0}._header_1o255_5{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}._filePath_1o255_12{color:#a78bfa;font-size:12px;font-weight:600}._toggle_1o255_18{color:#6b7280;font-size:11px;cursor:pointer;-webkit-user-select:none;user-select:none}._code_1o255_25{margin:0;font-size:12px;line-height:1.5;overflow:auto}._plainResult_1uh60_1{background:#111;border-radius:6px;font-size:12px}._plainTitle_1uh60_7{font-size:11px}._plainPre_1uh60_11{color:#d1d5db;margin:0;white-space:pre-wrap;word-break:break-all;font-size:12px;padding:8px 12px}._codeResult_1uh60_20{background:#0d1117;border-radius:6px;border:1px solid #1e2a3a;overflow:hidden}._codeHeader_1uh60_27{display:flex;justify-content:space-between;align-items:center;padding:4px 10px;background:#161b22;border-bottom:1px solid #1e2a3a}._codeTitle_1uh60_36{font-size:11px;color:#8b949e}._codeToggle_1uh60_41{font-size:11px;color:#484f58;cursor:pointer;-webkit-user-select:none;user-select:none}._codePre_1uh60_48{margin:0;padding:8px 12px;font-size:12px;line-height:1.5;overflow:auto;max-height:500px}._markdownBody_1uh60_57{padding:8px 12px;font-size:13px;line-height:1.6;overflow:auto;max-height:500px}._tag_17wfp_1{display:inline-block;font-size:10px;color:#6b7280;background:#ffffff0f;border:1px solid rgba(255,255,255,.1);border-radius:3px;padding:0 4px;margin-left:6px;cursor:pointer;line-height:18px;vertical-align:middle;transition:color .2s,border-color .2s;-webkit-user-select:none;user-select:none}._tag_17wfp_1:hover{color:#93c5fd;border-color:#93c5fd4d}._tagActive_17wfp_22{color:#93c5fd;border-color:#93c5fd40}._tagLoading_17wfp_27{cursor:wait;opacity:.7}._spinner_17wfp_32{display:inline-block;width:10px;height:10px;border:1.5px solid rgba(147,197,253,.3);border-top-color:#93c5fd;border-radius:50%;animation:_spin_17wfp_32 .6s linear infinite;margin-right:3px;vertical-align:middle}@keyframes _spin_17wfp_32{to{transform:rotate(360deg)}}._avatar_1od17_3{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}._avatarImg_1od17_13{width:32px;height:32px;border-radius:50%;flex-shrink:0;object-fit:cover}._bubble_1od17_21{border-radius:8px;padding:10px 14px;max-width:100%;font-size:14px;line-height:1.6;word-break:break-word}._messageRow_1od17_32{display:flex;gap:10px;padding:8px 0}._messageRowEnd_1od17_38{display:flex;gap:10px;padding:8px 0;justify-content:flex-end}._contentCol_1od17_47{min-width:0;flex:1}._contentColLimited_1od17_52{min-width:0;max-width:80%;width:fit-content}._labelRow_1od17_60{display:flex;justify-content:space-between;align-items:center;margin-bottom:2px}._labelRight_1od17_67{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}._labelText_1od17_75{font-size:11px}._timeText_1od17_79,._timeTextNoMargin_1od17_85{font-size:10px;color:#6b7280;flex-shrink:0}._labelTextRight_1od17_91{font-size:11px;margin-left:auto}._bubbleUser_1od17_98{background:#1668dc;color:#e5e7eb}._bubbleAssistant_1od17_104{background:#141414;color:#e5e7eb;transition:box-shadow 0s;position:relative}._bubbleHighlight_1od17_112{box-shadow:0 0 10px #1668dc99}._bubbleHighlightFading_1od17_116{box-shadow:0 0 10px #1668dc00;transition:box-shadow 5s ease-out}._borderSvg_1od17_121{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible}._borderSvgFading_1od17_130{opacity:0;transition:opacity 5s ease-out}._borderRect_1od17_135{animation:_dashRotate_1od17_1 4s linear infinite}@keyframes _dashRotate_1od17_1{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}._bubblePlan_1od17_144{background:#141428;border:5px solid #1668dc;font-size:12px;color:#e5e7eb}._bubbleSubAgent_1od17_152{background:#1a1a2e;color:#e5e7eb}._bubbleSelection_1od17_158{background:#1a3a1a;color:#e5e7eb}._systemTagLabel_1od17_166{font-size:12px}._skillLabel_1od17_170{font-size:12px;color:#a78bfa}._systemTagPre_1od17_175{font-size:12px;color:#9ca3af;white-space:pre-wrap;word-break:break-all;margin:0}._collapseMargin_1od17_183{margin:4px 0}._collapseNoMargin_1od17_187{margin:0}._thinkingLabel_1od17_193{font-size:12px}._toolBox_1od17_199{background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._toolLabel_1od17_208{color:#a78bfa}._codePre_1od17_214{font-size:12px;margin:4px 0 0;white-space:pre-wrap;word-break:break-all;background:#0d1117;border-radius:4px;padding:6px 8px}._pathTag_1od17_226{color:#7dd3fc;font-size:11px}._descSpan_1od17_233{color:#6b7280;font-weight:400}._secondarySpan_1od17_238{color:#6b7280}._patternSpan_1od17_242{color:#fbbf24}._kvContainer_1od17_248{margin-top:4px;font-size:11px}._kvItem_1od17_253{margin:2px 0}._kvKey_1od17_257{color:#7dd3fc}._kvValue_1od17_261{color:#9ca3af}._toolResult_1od17_267{background:#111827;border:1px solid #1e293b;border-radius:6px;padding:6px 10px;margin:2px 0 6px;font-size:11px}._toolResultLabel_1od17_276{font-size:11px}._compactLabel_1od17_282{font-size:12px;color:#93c5fd}._compactPre_1od17_287{font-size:12px;color:#d1d5db;white-space:pre-wrap;word-break:break-all;margin:0}._viewRequestBtn_1od17_297{font-size:10px;color:#555;cursor:pointer;margin-left:6px;flex-shrink:0}._viewRequestBtn_1od17_297:hover{color:#93c5fd}._optionList_1od17_311{padding-left:8px}._optionDesc_1od17_315{color:#555;margin-left:6px;font-weight:400}._questionText_1od17_323{font-size:13px;color:#ccc;margin-bottom:4px}._questionSpacing_1od17_329{margin-bottom:10px}._option_1od17_311{font-size:12px;padding:1px 0}._centerEmpty_1j3v3_1{display:flex;align-items:center;justify-content:center;height:100%}._container_1j3v3_8{height:100%;overflow:auto;padding:16px 24px;display:flex;flex-direction:column}._sessionDividerText_1j3v3_16{font-size:11px;color:#555}._lastResponseLabel_1j3v3_21{font-size:11px}._resizer_yamj2_1{width:6px;cursor:col-resize;background:#1f1f1f;flex-shrink:0;transition:background .2s}._resizer_yamj2_1:hover{background:#3b82f6}._layout_11bka_1{height:100vh;overflow:hidden}._header_11bka_6{background:#111;border-bottom:1px solid #1f1f1f;padding:0 24px;height:60px;line-height:60px}._content_11bka_14{flex:1;overflow:hidden}._mainContainer_11bka_19{display:flex;height:100%}._leftPanel_11bka_24{flex-shrink:0;border-right:1px solid #1f1f1f;display:flex;flex-direction:column;background:#0a0a0a}._leftPanelHeader_11bka_32{padding:10px 16px;border-bottom:1px solid #1f1f1f;font-size:13px;color:#9ca3af;font-weight:500;display:flex;justify-content:space-between;align-items:center}._leftPanelCount_11bka_43{font-size:12px;color:#555;font-weight:400}._leftPanelBody_11bka_49{flex:1;overflow:hidden}._rightPanel_11bka_54{flex:1;overflow:hidden;background:#0d0d0d}._modalActions_11bka_60{margin-bottom:12px}._spinCenter_11bka_64{text-align:center;padding:40px}._emptyCenter_11bka_69{text-align:center;color:#999;padding:40px}._logCheckbox_11bka_75{margin-right:8px}._logListItem_11bka_79{cursor:pointer;padding:8px 12px}._logItemRow_11bka_84{display:flex;align-items:center;width:100%;justify-content:space-between;flex-wrap:nowrap;gap:12px}._logItemRow_11bka_84>span:first-child{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden}._logFileName_11bka_101{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._logItemRow_11bka_84>span:last-child{display:flex;align-items:center;flex-shrink:0;gap:8px}._logFileIcon_11bka_114{margin-right:8px;color:#3b82f6;flex-shrink:0}._folderIcon_11bka_120{margin-right:8px}._logTag_11bka_124{margin-left:8px}._loadingOverlay_11bka_128{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:9999}._loadingText_11bka_141{color:#fff;font-size:16px;font-weight:700}._footer_11bka_147{height:18px;background:#000;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;flex-shrink:0}._footerRight_11bka_157{display:flex;align-items:center;gap:6px;font-size:11px;color:#555}._footerLink_11bka_165{display:inline-flex;align-items:center;gap:3px;color:#555;text-decoration:none}._footerLink_11bka_165:hover{color:#888}._footerIcon_11bka_177{width:12px;height:12px}._footerDivider_11bka_182{color:#333}._footerText_11bka_186{color:#555}