cc-viewer 1.3.3 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/assets/{index-YZa65fAJ.js → index-Chsw1Bnp.js} +107 -107
- package/dist/assets/index-DdxzMzrS.css +1 -0
- package/dist/index.html +2 -2
- package/i18n.js +80 -0
- package/package.json +2 -1
- package/server.js +32 -25
- package/updater.js +118 -0
- package/dist/assets/index-Dsn6K9v-.css +0 -1
|
@@ -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_19oju_2{display:flex;align-items:center;justify-content:space-between;width:100%;height:100%}._titleText_19oju_11{color:#fff;font-size:18px;cursor:pointer}._logoImage_19oju_17{height:24px;width:24px;margin-right:6px;border-radius:3px;vertical-align:text-bottom}._titleArrow_19oju_25{font-size:12px;margin-left:4px}._tokenStatsTag_19oju_31{border-radius:12px;cursor:pointer;background:#2a2a2a;border:1px solid #3a3a3a;color:#ccc}._tokenStatsIcon_19oju_39{margin-right:4px}._liveTag_19oju_44{border-radius:12px}._liveTag_19oju_44 .ant-badge-status-processing{animation:_breathe_19oju_1 2.5s ease-in-out infinite}@keyframes _breathe_19oju_1{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}._liveTagHistory_19oju_57{background:#2a2a2a;border-color:#424242;color:#d1d5db}._liveTagText_19oju_63{margin-left:4px}._countdownStrong_19oju_68{font-variant-numeric:tabular-nums}._langSelector_19oju_73,._settingsBtn_19oju_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_19oju_84:hover{color:#bbb;border-color:#777}._settingsItem_19oju_100{display:flex;justify-content:space-between;align-items:center;padding:12px 0}._settingsLabel_19oju_107{font-size:14px}._tokenStatsEmpty_19oju_112{padding:8px 4px;color:#999;font-size:13px}._tokenStatsContainer_19oju_119{display:flex;gap:12px;align-items:flex-start}._tokenStatsColumn_19oju_125{min-width:240px}._toolStatsColumn_19oju_129{min-width:180px}._modelCard_19oju_134{border:1px solid #333;border-radius:6px;padding:8px 10px;background:#111}._modelCardSpaced_19oju_141{margin-bottom:10px}._modelName_19oju_147{font-size:13px;font-weight:600;color:#e5e5e5;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._statsTable_19oju_157{width:100%;border-collapse:collapse}._th_19oju_162{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#888;font-weight:400;text-align:right}._td_19oju_172{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#e5e5e5;text-align:right}._label_19oju_181{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#aaa;font-weight:400;text-align:left}._rowBorder_19oju_191{border-bottom:1px solid #2a2a2a}._rebuildCard_19oju_195{border:1px solid #333;border-radius:6px;padding:8px 10px;margin-top:10px;background:#111}._rebuildTotalRow_19oju_203{border-top:1px solid #444}._rebuildTotalRow_19oju_203 td{font-weight:600}._promptExportBar_19oju_212{margin-bottom:12px}._promptScrollArea_19oju_216{max-height:500px;overflow:auto}._promptEmpty_19oju_221{color:#999;padding:12px}._promptTimestamp_19oju_227{color:#666;font-size:12px;margin:12px 0 4px;padding-bottom:6px}._textPromptCard_19oju_235{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._preText_19oju_244{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}._systemCollapse_19oju_254{margin:4px 0;background:#1a1a1a;border:1px solid #303030;border-radius:6px}._systemLabel_19oju_261{color:#888;font-size:12px}._preSys_19oju_266{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#999;margin:0}._promptTextarea_19oju_276{box-sizing:border-box;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_19oju_292{display:flex;justify-content:center;padding:40px 0}._projectStatsEmpty_19oju_298{color:#999;padding:40px 0;text-align:center;font-size:13px}._projectStatsContent_19oju_305{display:flex;flex-direction:column;gap:16px}._projectStatsUpdated_19oju_311{color:#666;font-size:12px;text-align:right}._projectStatsSummary_19oju_317{display:grid;grid-template-columns:1fr 1fr;gap:10px}._projectStatCard_19oju_323{background:#111;border:1px solid #333;border-radius:8px;padding:14px 12px;text-align:center}._projectStatValue_19oju_331{font-size:22px;font-weight:700;color:#e5e5e5;font-family:monospace;font-variant-numeric:tabular-nums}._projectStatLabel_19oju_339{font-size:12px;color:#888;margin-top:4px}._projectStatsSection_19oju_345{display:flex;flex-direction:column;gap:10px}._projectStatsSectionTitle_19oju_351{font-size:14px;font-weight:600;color:#ccc;padding-bottom:4px;border-bottom:1px solid #333}._projectStatsModelCard_19oju_359{background:#111;border:1px solid #333;border-radius:6px;padding:10px 12px}._projectStatsModelHeader_19oju_366{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._projectStatsModelName_19oju_375{font-size:13px;font-weight:600;color:#e5e5e5}._projectStatsModelCount_19oju_381{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_16uf8_1{height:100vh;overflow:hidden}._header_16uf8_6{background:#111;border-bottom:1px solid #1f1f1f;padding:0 24px;height:60px;line-height:60px}._content_16uf8_14{flex:1;overflow:hidden}._mainContainer_16uf8_19{display:flex;height:100%}._leftPanel_16uf8_24{flex-shrink:0;border-right:1px solid #1f1f1f;display:flex;flex-direction:column;background:#0a0a0a}._leftPanelHeader_16uf8_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_16uf8_43{font-size:12px;color:#555;font-weight:400}._leftPanelBody_16uf8_49{flex:1;overflow:hidden}._rightPanel_16uf8_54{flex:1;overflow:hidden;background:#0d0d0d}._modalActions_16uf8_60{margin-bottom:12px}._spinCenter_16uf8_64{text-align:center;padding:40px}._emptyCenter_16uf8_69{text-align:center;color:#999;padding:40px}._logCheckbox_16uf8_75{margin-right:8px}._logListContainer_16uf8_79{background:#0d0d0d;border-radius:8px;overflow:hidden}._logListItem_16uf8_85{cursor:pointer;padding:8px 12px;border-bottom:1px solid #222}._logItemRow_16uf8_91{display:flex;align-items:center;width:100%;justify-content:space-between;flex-wrap:nowrap;gap:12px}._logItemRow_16uf8_91>span:first-child{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden}._logFileName_16uf8_108{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._logItemRow_16uf8_91>span:last-child{display:flex;align-items:center;flex-shrink:0;gap:8px}._logFileIcon_16uf8_121{margin-right:8px;color:#3b82f6;flex-shrink:0}._loadingOverlay_16uf8_127{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:9999}._loadingText_16uf8_140{color:#fff;font-size:16px;font-weight:700}._footer_16uf8_146{height:18px;background:#000;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;flex-shrink:0}._footerRight_16uf8_156{display:flex;align-items:center;gap:6px;font-size:11px;color:#555}._footerLink_16uf8_164{display:inline-flex;align-items:center;gap:3px;color:#555;text-decoration:none}._footerLink_16uf8_164:hover{color:#888}._footerIcon_16uf8_176{width:12px;height:12px}._footerDivider_16uf8_181{color:#333}._footerText_16uf8_185{color:#555}._guideContainer_16uf8_189{display:flex;align-items:center;justify-content:center;height:100%;background:#0a0a0a}._guideContent_16uf8_197{max-width:560px;padding:40px}._guideIcon_16uf8_202{margin-bottom:20px;opacity:.6}._guideTitle_16uf8_207{font-size:20px;font-weight:600;color:#e0e0e0;margin:0 0 28px}._guideStep_16uf8_214{display:flex;gap:14px;margin-bottom:22px}._guideStepNum_16uf8_220{flex-shrink:0;width:24px;height:24px;border-radius:50%;background:#1a1a2e;color:#7c8aff;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center;margin-top:1px}._guideStepBody_16uf8_235{flex:1;min-width:0}._guideText_16uf8_240{color:#aaa;font-size:14px;line-height:1.6;margin:0 0 8px}._guideCode_16uf8_247{display:block;background:#141414;border:1px solid #252525;border-radius:6px;padding:10px 14px;color:#8b9cf7;font-size:13px;line-height:1.5;word-break:break-all;white-space:pre-wrap}
|
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-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
9
|
+
<script type="module" crossorigin src="/assets/index-Chsw1Bnp.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DdxzMzrS.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="root"></div>
|
package/i18n.js
CHANGED
|
@@ -386,6 +386,86 @@ const i18nData = {
|
|
|
386
386
|
"tr": "\nCC Viewer zaten çalışıyor: http://{host}:{port}\n",
|
|
387
387
|
"uk": "\nCC Viewer вже працює: http://{host}:{port}\n"
|
|
388
388
|
},
|
|
389
|
+
"update.updating": {
|
|
390
|
+
"zh": "正在更新到 v{version}...",
|
|
391
|
+
"en": "Updating to v{version}...",
|
|
392
|
+
"zh-TW": "正在更新到 v{version}...",
|
|
393
|
+
"ko": "v{version}으로 업데이트 중...",
|
|
394
|
+
"ja": "v{version} に更新中...",
|
|
395
|
+
"de": "Aktualisierung auf v{version}...",
|
|
396
|
+
"es": "Actualizando a v{version}...",
|
|
397
|
+
"fr": "Mise à jour vers v{version}...",
|
|
398
|
+
"it": "Aggiornamento a v{version}...",
|
|
399
|
+
"da": "Opdaterer til v{version}...",
|
|
400
|
+
"pl": "Aktualizacja do v{version}...",
|
|
401
|
+
"ru": "Обновление до v{version}...",
|
|
402
|
+
"ar": "جارٍ التحديث إلى v{version}...",
|
|
403
|
+
"no": "Oppdaterer til v{version}...",
|
|
404
|
+
"pt-BR": "Atualizando para v{version}...",
|
|
405
|
+
"th": "กำลังอัปเดตเป็น v{version}...",
|
|
406
|
+
"tr": "v{version} sürümüne güncelleniyor...",
|
|
407
|
+
"uk": "Оновлення до v{version}..."
|
|
408
|
+
},
|
|
409
|
+
"update.completed": {
|
|
410
|
+
"zh": "已更新到 v{version},下次启动生效",
|
|
411
|
+
"en": "Updated to v{version}, effective on next restart",
|
|
412
|
+
"zh-TW": "已更新到 v{version},下次啟動生效",
|
|
413
|
+
"ko": "v{version}으로 업데이트됨, 다음 시작 시 적용",
|
|
414
|
+
"ja": "v{version} に更新済み、次回起動時に有効",
|
|
415
|
+
"de": "Auf v{version} aktualisiert, wirksam beim nächsten Neustart",
|
|
416
|
+
"es": "Actualizado a v{version}, efectivo en el próximo reinicio",
|
|
417
|
+
"fr": "Mis à jour vers v{version}, effectif au prochain redémarrage",
|
|
418
|
+
"it": "Aggiornato a v{version}, effettivo al prossimo riavvio",
|
|
419
|
+
"da": "Opdateret til v{version}, træder i kraft ved næste genstart",
|
|
420
|
+
"pl": "Zaktualizowano do v{version}, obowiązuje po ponownym uruchomieniu",
|
|
421
|
+
"ru": "Обновлено до v{version}, вступит в силу при следующем запуске",
|
|
422
|
+
"ar": "تم التحديث إلى v{version}، سيسري عند إعادة التشغيل التالية",
|
|
423
|
+
"no": "Oppdatert til v{version}, trer i kraft ved neste omstart",
|
|
424
|
+
"pt-BR": "Atualizado para v{version}, efetivo na próxima reinicialização",
|
|
425
|
+
"th": "อัปเดตเป็น v{version} แล้ว มีผลเมื่อเริ่มใหม่",
|
|
426
|
+
"tr": "v{version} sürümüne güncellendi, bir sonraki başlatmada geçerli",
|
|
427
|
+
"uk": "Оновлено до v{version}, набуде чинності при наступному запуску"
|
|
428
|
+
},
|
|
429
|
+
"update.majorAvailable": {
|
|
430
|
+
"zh": "新大版本 v{version} 可用,请手动更新: npm i -g cc-viewer@latest",
|
|
431
|
+
"en": "Major version v{version} available, please update manually: npm i -g cc-viewer@latest",
|
|
432
|
+
"zh-TW": "新大版本 v{version} 可用,請手動更新: npm i -g cc-viewer@latest",
|
|
433
|
+
"ko": "새 메이저 버전 v{version} 사용 가능, 수동 업데이트 필요: npm i -g cc-viewer@latest",
|
|
434
|
+
"ja": "メジャーバージョン v{version} が利用可能、手動更新してください: npm i -g cc-viewer@latest",
|
|
435
|
+
"de": "Hauptversion v{version} verfügbar, bitte manuell aktualisieren: npm i -g cc-viewer@latest",
|
|
436
|
+
"es": "Versión principal v{version} disponible, actualice manualmente: npm i -g cc-viewer@latest",
|
|
437
|
+
"fr": "Version majeure v{version} disponible, veuillez mettre à jour manuellement : npm i -g cc-viewer@latest",
|
|
438
|
+
"it": "Versione principale v{version} disponibile, aggiornare manualmente: npm i -g cc-viewer@latest",
|
|
439
|
+
"da": "Hovedversion v{version} tilgængelig, opdater manuelt: npm i -g cc-viewer@latest",
|
|
440
|
+
"pl": "Główna wersja v{version} dostępna, zaktualizuj ręcznie: npm i -g cc-viewer@latest",
|
|
441
|
+
"ru": "Доступна основная версия v{version}, обновите вручную: npm i -g cc-viewer@latest",
|
|
442
|
+
"ar": "الإصدار الرئيسي v{version} متاح، يرجى التحديث يدويًا: npm i -g cc-viewer@latest",
|
|
443
|
+
"no": "Hovedversjon v{version} tilgjengelig, oppdater manuelt: npm i -g cc-viewer@latest",
|
|
444
|
+
"pt-BR": "Versão principal v{version} disponível, atualize manualmente: npm i -g cc-viewer@latest",
|
|
445
|
+
"th": "เวอร์ชันหลัก v{version} พร้อมใช้งาน กรุณาอัปเดตด้วยตนเอง: npm i -g cc-viewer@latest",
|
|
446
|
+
"tr": "Ana sürüm v{version} mevcut, lütfen manuel güncelleyin: npm i -g cc-viewer@latest",
|
|
447
|
+
"uk": "Доступна основна версія v{version}, оновіть вручну: npm i -g cc-viewer@latest"
|
|
448
|
+
},
|
|
449
|
+
"update.failed": {
|
|
450
|
+
"zh": "自动更新失败: {error}",
|
|
451
|
+
"en": "Auto-update failed: {error}",
|
|
452
|
+
"zh-TW": "自動更新失敗: {error}",
|
|
453
|
+
"ko": "자동 업데이트 실패: {error}",
|
|
454
|
+
"ja": "自動更新に失敗: {error}",
|
|
455
|
+
"de": "Automatische Aktualisierung fehlgeschlagen: {error}",
|
|
456
|
+
"es": "Actualización automática fallida: {error}",
|
|
457
|
+
"fr": "Mise à jour automatique échouée : {error}",
|
|
458
|
+
"it": "Aggiornamento automatico fallito: {error}",
|
|
459
|
+
"da": "Automatisk opdatering mislykkedes: {error}",
|
|
460
|
+
"pl": "Automatyczna aktualizacja nie powiodła się: {error}",
|
|
461
|
+
"ru": "Автообновление не удалось: {error}",
|
|
462
|
+
"ar": "فشل التحديث التلقائي: {error}",
|
|
463
|
+
"no": "Automatisk oppdatering mislyktes: {error}",
|
|
464
|
+
"pt-BR": "Atualização automática falhou: {error}",
|
|
465
|
+
"th": "อัปเดตอัตโนมัติล้มเหลว: {error}",
|
|
466
|
+
"tr": "Otomatik güncelleme başarısız: {error}",
|
|
467
|
+
"uk": "Автооновлення не вдалося: {error}"
|
|
468
|
+
},
|
|
389
469
|
"server.portsBusy": {
|
|
390
470
|
"zh": "⚠️ 端口 {start}-{end} 均被占用,请求监控服务未启动",
|
|
391
471
|
"en": "⚠️ Ports {start}-{end} are all in use, monitoring service not started",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cc-viewer",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.5",
|
|
4
4
|
"description": "Claude Code Logger visualization management tool",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "server.js",
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"i18n.js",
|
|
50
50
|
"findcc.js",
|
|
51
51
|
"stats-worker.js",
|
|
52
|
+
"updater.js",
|
|
52
53
|
"locales/",
|
|
53
54
|
"concepts/"
|
|
54
55
|
],
|
package/server.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
2
|
import { readFileSync, writeFileSync, existsSync, watchFile, unwatchFile, statSync, readdirSync, renameSync, unlinkSync, openSync, readSync, closeSync } from 'node:fs';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { dirname, join, extname
|
|
4
|
+
import { dirname, join, extname } from 'node:path';
|
|
5
5
|
import { homedir, userInfo, platform } from 'node:os';
|
|
6
6
|
import { execSync } from 'node:child_process';
|
|
7
7
|
import { Worker } from 'node:worker_threads';
|
|
8
8
|
import { LOG_FILE, _initPromise, _resumeState, resolveResumeChoice, _projectName, _logDir, _cachedApiKey, _cachedAuthHeader, _cachedHaikuModel } from './interceptor.js';
|
|
9
9
|
import { LOG_DIR } from './findcc.js';
|
|
10
10
|
import { t, detectLanguage } from './i18n.js';
|
|
11
|
+
import { checkAndUpdate } from './updater.js';
|
|
11
12
|
|
|
12
13
|
const PREFS_FILE = join(LOG_DIR, 'preferences.json');
|
|
13
14
|
|
|
@@ -418,6 +419,19 @@ function handleRequest(req, res) {
|
|
|
418
419
|
return;
|
|
419
420
|
}
|
|
420
421
|
|
|
422
|
+
// 当前版本号
|
|
423
|
+
if (url === '/api/version-info' && method === 'GET') {
|
|
424
|
+
try {
|
|
425
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf-8'));
|
|
426
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
427
|
+
res.end(JSON.stringify({ version: pkg.version }));
|
|
428
|
+
} catch {
|
|
429
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
430
|
+
res.end(JSON.stringify({ error: 'Failed to read version' }));
|
|
431
|
+
}
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
|
|
421
435
|
// 项目统计数据
|
|
422
436
|
if (url === '/api/project-stats' && method === 'GET') {
|
|
423
437
|
try {
|
|
@@ -590,29 +604,6 @@ function handleRequest(req, res) {
|
|
|
590
604
|
return;
|
|
591
605
|
}
|
|
592
606
|
|
|
593
|
-
// 下载当前日志文件
|
|
594
|
-
if (url === '/api/download-log' && method === 'GET') {
|
|
595
|
-
try {
|
|
596
|
-
if (!existsSync(LOG_FILE)) {
|
|
597
|
-
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
598
|
-
res.end(JSON.stringify({ error: 'Log file not found' }));
|
|
599
|
-
return;
|
|
600
|
-
}
|
|
601
|
-
const content = readFileSync(LOG_FILE);
|
|
602
|
-
const fileName = basename(LOG_FILE);
|
|
603
|
-
res.writeHead(200, {
|
|
604
|
-
'Content-Type': 'application/octet-stream',
|
|
605
|
-
'Content-Disposition': `attachment; filename="${fileName}"`,
|
|
606
|
-
'Content-Length': content.length,
|
|
607
|
-
});
|
|
608
|
-
res.end(content);
|
|
609
|
-
} catch (err) {
|
|
610
|
-
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
611
|
-
res.end(JSON.stringify({ error: err.message }));
|
|
612
|
-
}
|
|
613
|
-
return;
|
|
614
|
-
}
|
|
615
|
-
|
|
616
607
|
// GET /api/concept?lang=zh&doc=Tool-Bash
|
|
617
608
|
if (method === 'GET' && url.startsWith('/api/concept')) {
|
|
618
609
|
const conceptParams = new URL(url, 'http://localhost').searchParams;
|
|
@@ -749,7 +740,23 @@ export function stopViewer() {
|
|
|
749
740
|
|
|
750
741
|
// Auto-start the viewer after log file init completes
|
|
751
742
|
_initPromise.then(() => {
|
|
752
|
-
startViewer().
|
|
743
|
+
startViewer().then((srv) => {
|
|
744
|
+
if (!srv) return;
|
|
745
|
+
// 延迟 3 秒异步检查更新
|
|
746
|
+
setTimeout(() => {
|
|
747
|
+
checkAndUpdate().then(result => {
|
|
748
|
+
if (result.status === 'updated') {
|
|
749
|
+
clients.forEach(client => {
|
|
750
|
+
try { client.write(`event: update_completed\ndata: ${JSON.stringify({ version: result.remoteVersion })}\n\n`); } catch { }
|
|
751
|
+
});
|
|
752
|
+
} else if (result.status === 'major_available') {
|
|
753
|
+
clients.forEach(client => {
|
|
754
|
+
try { client.write(`event: update_major_available\ndata: ${JSON.stringify({ version: result.remoteVersion })}\n\n`); } catch { }
|
|
755
|
+
});
|
|
756
|
+
}
|
|
757
|
+
}).catch(() => { });
|
|
758
|
+
}, 3000);
|
|
759
|
+
}).catch(err => {
|
|
753
760
|
console.error('Failed to start CC Viewer:', err);
|
|
754
761
|
});
|
|
755
762
|
});
|
package/updater.js
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
2
|
+
import { execSync } from 'node:child_process';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { dirname } from 'node:path';
|
|
7
|
+
import { t } from './i18n.js';
|
|
8
|
+
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
|
|
12
|
+
const CHECK_INTERVAL = 4 * 60 * 60 * 1000; // 4 hours
|
|
13
|
+
const CACHE_DIR = join(homedir(), '.claude', 'cc-viewer');
|
|
14
|
+
const CACHE_FILE = join(CACHE_DIR, 'update-check.json');
|
|
15
|
+
const CC_SETTINGS_FILE = join(homedir(), '.claude', 'settings.json');
|
|
16
|
+
|
|
17
|
+
function getCurrentVersion() {
|
|
18
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf-8'));
|
|
19
|
+
return pkg.version;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function parseVersion(ver) {
|
|
23
|
+
const [major, minor, patch] = ver.split('.').map(Number);
|
|
24
|
+
return { major, minor, patch };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function isNewer(remote, current) {
|
|
28
|
+
const r = parseVersion(remote);
|
|
29
|
+
const c = parseVersion(current);
|
|
30
|
+
if (r.major !== c.major) return r.major > c.major;
|
|
31
|
+
if (r.minor !== c.minor) return r.minor > c.minor;
|
|
32
|
+
return r.patch > c.patch;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 读取 Claude Code 全局配置,判断是否允许自更新
|
|
36
|
+
function isAutoUpdateEnabled() {
|
|
37
|
+
// 环境变量禁用
|
|
38
|
+
if (process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC) return false;
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
if (!existsSync(CC_SETTINGS_FILE)) return true; // 默认启用
|
|
42
|
+
const settings = JSON.parse(readFileSync(CC_SETTINGS_FILE, 'utf-8'));
|
|
43
|
+
// Claude Code 用 autoUpdates: false 显式禁用
|
|
44
|
+
if (settings.autoUpdates === false) return false;
|
|
45
|
+
} catch { }
|
|
46
|
+
|
|
47
|
+
return true; // 默认启用
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function shouldCheck() {
|
|
51
|
+
try {
|
|
52
|
+
if (!existsSync(CACHE_FILE)) return true;
|
|
53
|
+
const data = JSON.parse(readFileSync(CACHE_FILE, 'utf-8'));
|
|
54
|
+
return Date.now() - data.lastCheck > CHECK_INTERVAL;
|
|
55
|
+
} catch {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function saveCheckTime() {
|
|
61
|
+
try {
|
|
62
|
+
if (!existsSync(CACHE_DIR)) mkdirSync(CACHE_DIR, { recursive: true });
|
|
63
|
+
writeFileSync(CACHE_FILE, JSON.stringify({ lastCheck: Date.now() }));
|
|
64
|
+
} catch { }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export async function checkAndUpdate() {
|
|
68
|
+
const currentVersion = getCurrentVersion();
|
|
69
|
+
|
|
70
|
+
// 跟随 Claude Code 全局配置
|
|
71
|
+
if (!isAutoUpdateEnabled()) {
|
|
72
|
+
return { status: 'disabled', currentVersion, remoteVersion: null };
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!shouldCheck()) {
|
|
76
|
+
return { status: 'skipped', currentVersion, remoteVersion: null };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
const res = await fetch('https://registry.npmjs.org/cc-viewer');
|
|
81
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
82
|
+
const data = await res.json();
|
|
83
|
+
const remoteVersion = data['dist-tags']?.latest;
|
|
84
|
+
|
|
85
|
+
saveCheckTime();
|
|
86
|
+
|
|
87
|
+
if (!remoteVersion) {
|
|
88
|
+
return { status: 'error', currentVersion, remoteVersion: null, error: 'No version found' };
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (!isNewer(remoteVersion, currentVersion)) {
|
|
92
|
+
return { status: 'latest', currentVersion, remoteVersion };
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const remote = parseVersion(remoteVersion);
|
|
96
|
+
const current = parseVersion(currentVersion);
|
|
97
|
+
|
|
98
|
+
// 跨大版本:仅提示
|
|
99
|
+
if (remote.major !== current.major) {
|
|
100
|
+
console.error(`[CC Viewer] ${t('update.majorAvailable', { version: remoteVersion })}`);
|
|
101
|
+
return { status: 'major_available', currentVersion, remoteVersion };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// 同大版本:自动更新
|
|
105
|
+
console.error(`[CC Viewer] ${t('update.updating', { version: remoteVersion })}`);
|
|
106
|
+
try {
|
|
107
|
+
execSync(`npm install -g cc-viewer@${remoteVersion}`, { stdio: 'pipe', timeout: 60000 });
|
|
108
|
+
console.error(`[CC Viewer] ${t('update.completed', { version: remoteVersion })}`);
|
|
109
|
+
return { status: 'updated', currentVersion, remoteVersion };
|
|
110
|
+
} catch (err) {
|
|
111
|
+
console.error(`[CC Viewer] ${t('update.failed', { error: err.message })}`);
|
|
112
|
+
return { status: 'error', currentVersion, remoteVersion, error: err.message };
|
|
113
|
+
}
|
|
114
|
+
} catch (err) {
|
|
115
|
+
saveCheckTime();
|
|
116
|
+
return { status: 'error', currentVersion, remoteVersion: null, error: err.message };
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -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_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_1drw4_1{height:100vh;overflow:hidden}._header_1drw4_6{background:#111;border-bottom:1px solid #1f1f1f;padding:0 24px;height:60px;line-height:60px}._content_1drw4_14{flex:1;overflow:hidden}._mainContainer_1drw4_19{display:flex;height:100%}._leftPanel_1drw4_24{flex-shrink:0;border-right:1px solid #1f1f1f;display:flex;flex-direction:column;background:#0a0a0a}._leftPanelHeader_1drw4_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_1drw4_43{font-size:12px;color:#555;font-weight:400}._leftPanelBody_1drw4_49{flex:1;overflow:hidden}._rightPanel_1drw4_54{flex:1;overflow:hidden;background:#0d0d0d}._modalActions_1drw4_60{margin-bottom:12px}._spinCenter_1drw4_64{text-align:center;padding:40px}._emptyCenter_1drw4_69{text-align:center;color:#999;padding:40px}._logCheckbox_1drw4_75{margin-right:8px}._logListItem_1drw4_79{cursor:pointer;padding:8px 12px}._logItemRow_1drw4_84{display:flex;align-items:center;width:100%;justify-content:space-between;flex-wrap:nowrap;gap:12px}._logItemRow_1drw4_84>span:first-child{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden}._logFileName_1drw4_101{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._logItemRow_1drw4_84>span:last-child{display:flex;align-items:center;flex-shrink:0;gap:8px}._logFileIcon_1drw4_114{margin-right:8px;color:#3b82f6;flex-shrink:0}._folderIcon_1drw4_120{margin-right:8px}._logTag_1drw4_124{margin-left:8px}._loadingOverlay_1drw4_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_1drw4_141{color:#fff;font-size:16px;font-weight:700}._footer_1drw4_147{height:18px;background:#000;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;flex-shrink:0}._footerRight_1drw4_157{display:flex;align-items:center;gap:6px;font-size:11px;color:#555}._footerLink_1drw4_165{display:inline-flex;align-items:center;gap:3px;color:#555;text-decoration:none}._footerLink_1drw4_165:hover{color:#888}._footerIcon_1drw4_177{width:12px;height:12px}._footerDivider_1drw4_182{color:#333}._footerText_1drw4_186{color:#555}._guideContainer_1drw4_190{display:flex;align-items:center;justify-content:center;height:100%;background:#0a0a0a}._guideContent_1drw4_198{max-width:560px;padding:40px}._guideIcon_1drw4_203{margin-bottom:20px;opacity:.6}._guideTitle_1drw4_208{font-size:20px;font-weight:600;color:#e0e0e0;margin:0 0 28px}._guideStep_1drw4_215{display:flex;gap:14px;margin-bottom:22px}._guideStepNum_1drw4_221{flex-shrink:0;width:24px;height:24px;border-radius:50%;background:#1a1a2e;color:#7c8aff;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center;margin-top:1px}._guideStepBody_1drw4_236{flex:1;min-width:0}._guideText_1drw4_241{color:#aaa;font-size:14px;line-height:1.6;margin:0 0 8px}._guideCode_1drw4_248{display:block;background:#141414;border:1px solid #252525;border-radius:6px;padding:10px 14px;color:#8b9cf7;font-size:13px;line-height:1.5;word-break:break-all;white-space:pre-wrap}
|