cc-viewer 1.1.0 → 1.2.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.
- package/README.md +4 -1
- package/dist/assets/{index-BHtxCYLG.js → index-BKNofE3-.js} +111 -96
- package/dist/assets/index-IwP1YVNl.css +1 -0
- package/dist/index.html +2 -2
- package/locales/i18n.json +114 -2
- package/package.json +1 -1
- package/server.js +63 -1
- package/dist/assets/index-BBqiuoMW.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_1kqzq_2{display:flex;align-items:center;justify-content:space-between;width:100%;height:100%}._titleText_1kqzq_11{color:#fff;font-size:18px;cursor:pointer}._titleArrow_1kqzq_17{font-size:12px;margin-left:4px}._tokenStatsTag_1kqzq_23{border-radius:12px;cursor:pointer;background:#2a2a2a;border:1px solid #3a3a3a;color:#ccc}._tokenStatsIcon_1kqzq_31{margin-right:4px}._liveTag_1kqzq_36{border-radius:12px}._liveTag_1kqzq_36 .ant-badge-status-processing{animation:_breathe_1kqzq_1 2.5s ease-in-out infinite}@keyframes _breathe_1kqzq_1{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}._liveTagHistory_1kqzq_49{background:#2a2a2a;border-color:#424242;color:#d1d5db}._liveTagText_1kqzq_55{margin-left:4px}._countdownStrong_1kqzq_60{font-variant-numeric:tabular-nums}._langSelector_1kqzq_65,._settingsBtn_1kqzq_76{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_1kqzq_76:hover{color:#bbb;border-color:#777}._settingsItem_1kqzq_92{display:flex;justify-content:space-between;align-items:center;padding:12px 0}._settingsLabel_1kqzq_99{font-size:14px}._tokenStatsEmpty_1kqzq_104{padding:8px 4px;color:#999;font-size:13px}._tokenStatsContainer_1kqzq_111{display:flex;gap:12px;align-items:flex-start}._tokenStatsColumn_1kqzq_117{min-width:240px}._toolStatsColumn_1kqzq_121{min-width:180px}._modelCard_1kqzq_126{border:1px solid #333;border-radius:6px;padding:8px 10px;background:#111}._modelCardSpaced_1kqzq_133{margin-bottom:10px}._modelName_1kqzq_139{font-size:13px;font-weight:600;color:#e5e5e5;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._statsTable_1kqzq_149{width:100%;border-collapse:collapse}._th_1kqzq_154{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#888;font-weight:400;text-align:right}._td_1kqzq_164{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#e5e5e5;text-align:right}._label_1kqzq_173{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#aaa;font-weight:400;text-align:left}._rowBorder_1kqzq_183{border-bottom:1px solid #2a2a2a}._rebuildCard_1kqzq_187{border:1px solid #333;border-radius:6px;padding:8px 10px;margin-top:10px;background:#111}._rebuildTotalRow_1kqzq_195{border-top:1px solid #444}._rebuildTotalRow_1kqzq_195 td{font-weight:600}._promptExportBar_1kqzq_204{margin-bottom:12px}._promptScrollArea_1kqzq_208{max-height:500px;overflow:auto}._promptEmpty_1kqzq_213{color:#999;padding:12px}._promptTimestamp_1kqzq_219{color:#666;font-size:12px;margin:12px 0 4px;padding-bottom:6px}._textPromptCard_1kqzq_227{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._preText_1kqzq_236{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}._systemCollapse_1kqzq_246{margin:4px 0;background:#1a1a1a;border:1px solid #303030;border-radius:6px}._systemLabel_1kqzq_253{color:#888;font-size:12px}._preSys_1kqzq_258{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#999;margin:0}._promptTextarea_1kqzq_268{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_1cxb0_1{display:flex;align-items:center;justify-content:center;height:100%}._scrollContainer_1cxb0_8{overflow:auto;height:100%}._listItem_1cxb0_13{cursor:pointer;padding:8px 12px;border-left:3px solid transparent;border-bottom:1px solid #1f1f1f;transition:background .15s}._listItem_1cxb0_13:hover{background:#151515}._listItemActive_1cxb0_25{background:#1a2332;border-left-color:#3b82f6}._listItemActive_1cxb0_25:hover{background:#1a2332}._itemContent_1cxb0_34{width:100%;min-width:0}._itemHeader_1cxb0_39{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px}._tagNoMargin_1cxb0_47{margin:0;font-size:12px}._modelName_1cxb0_52{font-size:12px}._time_1cxb0_56{font-size:12px;color:#6b7280;margin-left:auto}._detailRow_1cxb0_62{display:flex;gap:8px;font-size:12px;align-items:center}._urlText_1cxb0_69{color:#555;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}._duration_1cxb0_78{color:#6b7280;flex-shrink:0}._statusOk_1cxb0_83{color:#10b981;flex-shrink:0}._statusErr_1cxb0_88{color:#ef4444;flex-shrink:0}._statusDefault_1cxb0_93{color:#9ca3af;flex-shrink:0}._usageBox_1cxb0_98{background:#111;border-radius:4px;padding:3px 6px;margin-top:4px;font-size:12px;color:#6b7280;line-height:1.6}._cacheDot_1cxb0_108{display:inline-block;width:6px;height:6px;border-radius:50%;margin:0 3px;vertical-align:middle}._cacheDotLoss_1cxb0_117{background-color:#8b1a1a;cursor:help}._cacheDotNormal_1cxb0_122{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_12l0f_1{height:100vh;overflow:hidden}._header_12l0f_6{background:#111;border-bottom:1px solid #1f1f1f;padding:0 24px;height:60px;line-height:60px}._content_12l0f_14{flex:1;overflow:hidden}._mainContainer_12l0f_19{display:flex;height:100%}._leftPanel_12l0f_24{flex-shrink:0;border-right:1px solid #1f1f1f;display:flex;flex-direction:column;background:#0a0a0a}._leftPanelHeader_12l0f_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_12l0f_43{font-size:12px;color:#555;font-weight:400}._leftPanelBody_12l0f_49{flex:1;overflow:hidden}._rightPanel_12l0f_54{flex:1;overflow:hidden;background:#0d0d0d}._modalActions_12l0f_60{margin-bottom:12px}._spinCenter_12l0f_64{text-align:center;padding:40px}._emptyCenter_12l0f_69{text-align:center;color:#999;padding:40px}._logCheckbox_12l0f_75{margin-right:8px}._logListItem_12l0f_79{cursor:pointer;padding:8px 12px}._logItemRow_12l0f_84{display:flex;align-items:center;width:100%;justify-content:space-between}._logFileIcon_12l0f_91{margin-right:8px;color:#3b82f6}._folderIcon_12l0f_96{margin-right:8px}._logTag_12l0f_100{margin-left:8px}._loadingOverlay_12l0f_104{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:9999}._loadingText_12l0f_117{color:#fff;font-size:16px;font-weight:700}._footer_12l0f_123{height:18px;background:#000;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;flex-shrink:0}._footerRight_12l0f_133{display:flex;align-items:center;gap:6px;font-size:11px;color:#555}._footerLink_12l0f_141{display:inline-flex;align-items:center;gap:3px;color:#555;text-decoration:none}._footerLink_12l0f_141:hover{color:#888}._footerIcon_12l0f_153{width:12px;height:12px}._footerDivider_12l0f_158{color:#333}._footerText_12l0f_162{color:#555}
|
package/dist/index.html
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Claude Code Viewer</title>
|
|
7
7
|
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-BKNofE3-.js"></script>
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index-IwP1YVNl.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div id="root"></div>
|
package/locales/i18n.json
CHANGED
|
@@ -460,7 +460,7 @@
|
|
|
460
460
|
"uk": "Очікування запитів..."
|
|
461
461
|
},
|
|
462
462
|
"ui.importLocalLogs": {
|
|
463
|
-
"zh": "
|
|
463
|
+
"zh": "打开本地日志",
|
|
464
464
|
"en": "Import local logs",
|
|
465
465
|
"zh-TW": "匯入本地日誌",
|
|
466
466
|
"ko": "로컬 로그 가져오기",
|
|
@@ -540,7 +540,7 @@
|
|
|
540
540
|
"uk": "Завантажити поточний лог"
|
|
541
541
|
},
|
|
542
542
|
"ui.exportPrompts": {
|
|
543
|
-
"zh": "
|
|
543
|
+
"zh": "查看用户 Prompt",
|
|
544
544
|
"en": "Export user prompts",
|
|
545
545
|
"zh-TW": "匯出用戶 Prompt",
|
|
546
546
|
"ko": "사용자 Prompt 내보내기",
|
|
@@ -879,6 +879,18 @@
|
|
|
879
879
|
"tr": "Henüz kullanıcı Prompt'u yok",
|
|
880
880
|
"uk": "Немає Prompt користувача"
|
|
881
881
|
},
|
|
882
|
+
"ui.promptModeOriginal": {
|
|
883
|
+
"zh": "原文模式",
|
|
884
|
+
"en": "Original"
|
|
885
|
+
},
|
|
886
|
+
"ui.promptModeContext": {
|
|
887
|
+
"zh": "上下文模式",
|
|
888
|
+
"en": "Context"
|
|
889
|
+
},
|
|
890
|
+
"ui.promptModeText": {
|
|
891
|
+
"zh": "Text模式",
|
|
892
|
+
"en": "Text"
|
|
893
|
+
},
|
|
882
894
|
"ui.unknownTime": {
|
|
883
895
|
"zh": "未知时间",
|
|
884
896
|
"en": "Unknown time",
|
|
@@ -1959,6 +1971,26 @@
|
|
|
1959
1971
|
"tr": "Bilinmeyen anahtar değişikliği",
|
|
1960
1972
|
"uk": "Невідома зміна ключа"
|
|
1961
1973
|
},
|
|
1974
|
+
"ui.skillUsageStats": {
|
|
1975
|
+
"zh": "Skill 使用统计",
|
|
1976
|
+
"en": "Skill Usage Stats",
|
|
1977
|
+
"zh-TW": "Skill 使用統計",
|
|
1978
|
+
"ko": "Skill 사용 통계",
|
|
1979
|
+
"ja": "Skill 使用統計",
|
|
1980
|
+
"de": "Skill-Nutzungsstatistik",
|
|
1981
|
+
"es": "Estadísticas de uso de Skills",
|
|
1982
|
+
"fr": "Statistiques d'utilisation des Skills",
|
|
1983
|
+
"it": "Statistiche utilizzo Skill",
|
|
1984
|
+
"da": "Skill-brugsstatistik",
|
|
1985
|
+
"pl": "Statystyki użycia Skill",
|
|
1986
|
+
"ru": "Статистика использования Skill",
|
|
1987
|
+
"ar": "إحصائيات استخدام Skill",
|
|
1988
|
+
"no": "Skill-bruksstatistikk",
|
|
1989
|
+
"pt-BR": "Estatísticas de uso de Skills",
|
|
1990
|
+
"th": "สถิติการใช้ Skill",
|
|
1991
|
+
"tr": "Skill Kullanım İstatistikleri",
|
|
1992
|
+
"uk": "Статистика використання Skill"
|
|
1993
|
+
},
|
|
1962
1994
|
"ui.toolUsageStats": {
|
|
1963
1995
|
"zh": "工具使用统计",
|
|
1964
1996
|
"en": "Tool Usage Stats",
|
|
@@ -1978,5 +2010,85 @@
|
|
|
1978
2010
|
"th": "สถิติการใช้เครื่องมือ",
|
|
1979
2011
|
"tr": "Araç Kullanım İstatistikleri",
|
|
1980
2012
|
"uk": "Статистика використання інструментів"
|
|
2013
|
+
},
|
|
2014
|
+
"ui.mergeLogs": {
|
|
2015
|
+
"zh": "合并日志",
|
|
2016
|
+
"en": "Merge Logs",
|
|
2017
|
+
"zh-TW": "合併日誌",
|
|
2018
|
+
"ko": "로그 병합",
|
|
2019
|
+
"ja": "ログを結合",
|
|
2020
|
+
"de": "Logs zusammenführen",
|
|
2021
|
+
"es": "Fusionar logs",
|
|
2022
|
+
"fr": "Fusionner les logs",
|
|
2023
|
+
"it": "Unisci log",
|
|
2024
|
+
"da": "Flet logs",
|
|
2025
|
+
"pl": "Scal logi",
|
|
2026
|
+
"ru": "Объединить логи",
|
|
2027
|
+
"ar": "دمج السجلات",
|
|
2028
|
+
"no": "Slå sammen logger",
|
|
2029
|
+
"pt-BR": "Mesclar logs",
|
|
2030
|
+
"th": "รวมบันทึก",
|
|
2031
|
+
"tr": "Logları birleştir",
|
|
2032
|
+
"uk": "Об'єднати логи"
|
|
2033
|
+
},
|
|
2034
|
+
"ui.mergeNotConsecutive": {
|
|
2035
|
+
"zh": "请选择连续的日志文件",
|
|
2036
|
+
"en": "Please select consecutive log files",
|
|
2037
|
+
"zh-TW": "請選擇連續的日誌檔案",
|
|
2038
|
+
"ko": "연속된 로그 파일을 선택하세요",
|
|
2039
|
+
"ja": "連続したログファイルを選択してください",
|
|
2040
|
+
"de": "Bitte wählen Sie aufeinanderfolgende Log-Dateien",
|
|
2041
|
+
"es": "Seleccione archivos de log consecutivos",
|
|
2042
|
+
"fr": "Veuillez sélectionner des fichiers de log consécutifs",
|
|
2043
|
+
"it": "Seleziona file di log consecutivi",
|
|
2044
|
+
"da": "Vælg venligst sammenhængende logfiler",
|
|
2045
|
+
"pl": "Wybierz kolejne pliki logów",
|
|
2046
|
+
"ru": "Выберите последовательные файлы логов",
|
|
2047
|
+
"ar": "يرجى اختيار ملفات سجلات متتالية",
|
|
2048
|
+
"no": "Velg sammenhengende loggfiler",
|
|
2049
|
+
"pt-BR": "Selecione arquivos de log consecutivos",
|
|
2050
|
+
"th": "กรุณาเลือกไฟล์บันทึกที่ต่อเนื่องกัน",
|
|
2051
|
+
"tr": "Lütfen ardışık log dosyalarını seçin",
|
|
2052
|
+
"uk": "Виберіть послідовні файли логів"
|
|
2053
|
+
},
|
|
2054
|
+
"ui.mergeTooLarge": {
|
|
2055
|
+
"zh": "选中的日志文件总大小超过 500MB",
|
|
2056
|
+
"en": "Selected log files exceed 500MB",
|
|
2057
|
+
"zh-TW": "選中的日誌檔案總大小超過 500MB",
|
|
2058
|
+
"ko": "선택한 로그 파일의 총 크기가 500MB를 초과합니다",
|
|
2059
|
+
"ja": "選択したログファイルの合計サイズが 500MB を超えています",
|
|
2060
|
+
"de": "Ausgewählte Log-Dateien überschreiten 500MB",
|
|
2061
|
+
"es": "Los archivos de log seleccionados superan los 500MB",
|
|
2062
|
+
"fr": "Les fichiers de log sélectionnés dépassent 500 Mo",
|
|
2063
|
+
"it": "I file di log selezionati superano i 500MB",
|
|
2064
|
+
"da": "Valgte logfiler overstiger 500MB",
|
|
2065
|
+
"pl": "Wybrane pliki logów przekraczają 500MB",
|
|
2066
|
+
"ru": "Выбранные файлы логов превышают 500МБ",
|
|
2067
|
+
"ar": "ملفات السجلات المحددة تتجاوز 500 ميجابايت",
|
|
2068
|
+
"no": "Valgte loggfiler overstiger 500MB",
|
|
2069
|
+
"pt-BR": "Arquivos de log selecionados excedem 500MB",
|
|
2070
|
+
"th": "ไฟล์บันทึกที่เลือกมีขนาดรวมเกิน 500MB",
|
|
2071
|
+
"tr": "Seçilen log dosyaları 500MB'ı aşıyor",
|
|
2072
|
+
"uk": "Вибрані файли логів перевищують 500МБ"
|
|
2073
|
+
},
|
|
2074
|
+
"ui.mergeSuccess": {
|
|
2075
|
+
"zh": "日志合并成功",
|
|
2076
|
+
"en": "Logs merged successfully",
|
|
2077
|
+
"zh-TW": "日誌合併成功",
|
|
2078
|
+
"ko": "로그 병합 성공",
|
|
2079
|
+
"ja": "ログの結合に成功しました",
|
|
2080
|
+
"de": "Logs erfolgreich zusammengeführt",
|
|
2081
|
+
"es": "Logs fusionados correctamente",
|
|
2082
|
+
"fr": "Logs fusionnés avec succès",
|
|
2083
|
+
"it": "Log uniti con successo",
|
|
2084
|
+
"da": "Logs flettet",
|
|
2085
|
+
"pl": "Logi scalone pomyślnie",
|
|
2086
|
+
"ru": "Логи успешно объединены",
|
|
2087
|
+
"ar": "تم دمج السجلات بنجاح",
|
|
2088
|
+
"no": "Logger slått sammen",
|
|
2089
|
+
"pt-BR": "Logs mesclados com sucesso",
|
|
2090
|
+
"th": "รวมบันทึกสำเร็จ",
|
|
2091
|
+
"tr": "Loglar başarıyla birleştirildi",
|
|
2092
|
+
"uk": "Логи успішно об'єднано"
|
|
1981
2093
|
}
|
|
1982
2094
|
}
|
package/package.json
CHANGED
package/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
|
-
import { readFileSync, writeFileSync, existsSync, watchFile, unwatchFile, statSync, readdirSync, renameSync } from 'node:fs';
|
|
2
|
+
import { readFileSync, writeFileSync, existsSync, watchFile, unwatchFile, statSync, readdirSync, renameSync, unlinkSync } from 'node:fs';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { dirname, join, extname, basename } from 'node:path';
|
|
5
5
|
import { homedir, userInfo, platform } from 'node:os';
|
|
@@ -455,6 +455,57 @@ function handleRequest(req, res) {
|
|
|
455
455
|
return;
|
|
456
456
|
}
|
|
457
457
|
|
|
458
|
+
// 合并日志文件
|
|
459
|
+
if (url === '/api/merge-logs' && method === 'POST') {
|
|
460
|
+
let body = '';
|
|
461
|
+
req.on('data', chunk => { body += chunk; });
|
|
462
|
+
req.on('end', () => {
|
|
463
|
+
try {
|
|
464
|
+
const { files } = JSON.parse(body);
|
|
465
|
+
if (!Array.isArray(files) || files.length < 2) {
|
|
466
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
467
|
+
res.end(JSON.stringify({ error: 'At least 2 files required' }));
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
// 校验所有文件属于同一 project
|
|
471
|
+
const projects = new Set(files.map(f => f.split('/')[0]));
|
|
472
|
+
if (projects.size !== 1) {
|
|
473
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
474
|
+
res.end(JSON.stringify({ error: 'All files must belong to the same project' }));
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
// 校验文件存在且无路径穿越
|
|
478
|
+
for (const f of files) {
|
|
479
|
+
if (f.includes('..')) {
|
|
480
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
481
|
+
res.end(JSON.stringify({ error: 'Invalid file path' }));
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
if (!existsSync(join(LOG_DIR, f))) {
|
|
485
|
+
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
486
|
+
res.end(JSON.stringify({ error: `File not found: ${f}` }));
|
|
487
|
+
return;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
// files 已按时间正序传入,合并内容写入第一个文件
|
|
491
|
+
const targetFile = files[0];
|
|
492
|
+
const targetPath = join(LOG_DIR, targetFile);
|
|
493
|
+
const contents = files.map(f => readFileSync(join(LOG_DIR, f), 'utf-8').trimEnd());
|
|
494
|
+
writeFileSync(targetPath, contents.join('\n---\n') + '\n');
|
|
495
|
+
// 删除其余文件
|
|
496
|
+
for (let i = 1; i < files.length; i++) {
|
|
497
|
+
unlinkSync(join(LOG_DIR, files[i]));
|
|
498
|
+
}
|
|
499
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
500
|
+
res.end(JSON.stringify({ ok: true, merged: targetFile }));
|
|
501
|
+
} catch (err) {
|
|
502
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
503
|
+
res.end(JSON.stringify({ error: err.message }));
|
|
504
|
+
}
|
|
505
|
+
});
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
|
|
458
509
|
// 下载当前日志文件
|
|
459
510
|
if (url === '/api/download-log' && method === 'GET') {
|
|
460
511
|
try {
|
|
@@ -556,7 +607,18 @@ export async function startViewer() {
|
|
|
556
607
|
currentServer.listen(port, HOST, () => {
|
|
557
608
|
server = currentServer;
|
|
558
609
|
actualPort = port;
|
|
610
|
+
const url = `http://${HOST}:${port}`;
|
|
559
611
|
console.log(t('server.started', { host: HOST, port }));
|
|
612
|
+
// v2.0.69 之前的版本会清空控制台,自动打开浏览器确保用户能看到界面
|
|
613
|
+
try {
|
|
614
|
+
const ccPkgPath = join(__dirname, '..', '@anthropic-ai', 'claude-code', 'package.json');
|
|
615
|
+
const ccVer = JSON.parse(readFileSync(ccPkgPath, 'utf-8')).version;
|
|
616
|
+
const [maj, min, pat] = ccVer.split('.').map(Number);
|
|
617
|
+
if (maj < 2 || (maj === 2 && min === 0 && pat < 69)) {
|
|
618
|
+
const cmd = platform() === 'darwin' ? 'open' : platform() === 'win32' ? 'start' : 'xdg-open';
|
|
619
|
+
execSync(`${cmd} ${url}`, { stdio: 'ignore', timeout: 5000 });
|
|
620
|
+
}
|
|
621
|
+
} catch {}
|
|
560
622
|
startWatching();
|
|
561
623
|
resolve(server);
|
|
562
624
|
});
|
|
@@ -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_kana8_2{display:flex;align-items:center;justify-content:space-between;width:100%;height:100%}._titleText_kana8_11{color:#fff;font-size:18px;cursor:pointer}._titleArrow_kana8_17{font-size:12px;margin-left:4px}._tokenStatsTag_kana8_23{border-radius:12px;cursor:pointer;background:#2a2a2a;border:1px solid #3a3a3a;color:#ccc}._tokenStatsIcon_kana8_31{margin-right:4px}._liveTag_kana8_36{border-radius:12px}._liveTag_kana8_36 .ant-badge-status-processing{animation:_breathe_kana8_1 2.5s ease-in-out infinite}@keyframes _breathe_kana8_1{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.15)}}._liveTagHistory_kana8_49{background:#2a2a2a;border-color:#424242;color:#d1d5db}._liveTagText_kana8_55{margin-left:4px}._countdownStrong_kana8_60{font-variant-numeric:tabular-nums}._langSelector_kana8_65,._settingsBtn_kana8_76{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_kana8_76:hover{color:#bbb;border-color:#777}._settingsItem_kana8_92{display:flex;justify-content:space-between;align-items:center;padding:12px 0}._settingsLabel_kana8_99{font-size:14px}._tokenStatsEmpty_kana8_104{padding:8px 4px;color:#999;font-size:13px}._tokenStatsContainer_kana8_111{display:flex;gap:12px;align-items:flex-start}._tokenStatsColumn_kana8_117{min-width:240px}._toolStatsColumn_kana8_121{min-width:180px}._modelCard_kana8_126{border:1px solid #333;border-radius:6px;padding:8px 10px;background:#111}._modelCardSpaced_kana8_133{margin-bottom:10px}._modelName_kana8_139{font-size:13px;font-weight:600;color:#e5e5e5;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._statsTable_kana8_149{width:100%;border-collapse:collapse}._th_kana8_154{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#888;font-weight:400;text-align:right}._td_kana8_164{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#e5e5e5;text-align:right}._label_kana8_173{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#aaa;font-weight:400;text-align:left}._rowBorder_kana8_183{border-bottom:1px solid #2a2a2a}._rebuildCard_kana8_187{border:1px solid #333;border-radius:6px;padding:8px 10px;margin-top:10px;background:#111}._rebuildTotalRow_kana8_195{border-top:1px solid #444}._rebuildTotalRow_kana8_195 td{font-weight:600}._promptExportBar_kana8_204{margin-bottom:12px}._promptScrollArea_kana8_208{max-height:500px;overflow:auto}._promptEmpty_kana8_213{color:#999;padding:12px}._promptTimestamp_kana8_219{color:#666;font-size:12px;margin:12px 0 4px;padding-bottom:6px}._textPromptCard_kana8_227{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._preText_kana8_236{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}._systemCollapse_kana8_246{margin:4px 0;background:#1a1a1a;border:1px solid #303030;border-radius:6px}._systemLabel_kana8_253{color:#888;font-size:12px}._preSys_kana8_258{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#999;margin:0}._centerEmpty_1cxb0_1{display:flex;align-items:center;justify-content:center;height:100%}._scrollContainer_1cxb0_8{overflow:auto;height:100%}._listItem_1cxb0_13{cursor:pointer;padding:8px 12px;border-left:3px solid transparent;border-bottom:1px solid #1f1f1f;transition:background .15s}._listItem_1cxb0_13:hover{background:#151515}._listItemActive_1cxb0_25{background:#1a2332;border-left-color:#3b82f6}._listItemActive_1cxb0_25:hover{background:#1a2332}._itemContent_1cxb0_34{width:100%;min-width:0}._itemHeader_1cxb0_39{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px}._tagNoMargin_1cxb0_47{margin:0;font-size:12px}._modelName_1cxb0_52{font-size:12px}._time_1cxb0_56{font-size:12px;color:#6b7280;margin-left:auto}._detailRow_1cxb0_62{display:flex;gap:8px;font-size:12px;align-items:center}._urlText_1cxb0_69{color:#555;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}._duration_1cxb0_78{color:#6b7280;flex-shrink:0}._statusOk_1cxb0_83{color:#10b981;flex-shrink:0}._statusErr_1cxb0_88{color:#ef4444;flex-shrink:0}._statusDefault_1cxb0_93{color:#9ca3af;flex-shrink:0}._usageBox_1cxb0_98{background:#111;border-radius:4px;padding:3px 6px;margin-top:4px;font-size:12px;color:#6b7280;line-height:1.6}._cacheDot_1cxb0_108{display:inline-block;width:6px;height:6px;border-radius:50%;margin:0 3px;vertical-align:middle}._cacheDotLoss_1cxb0_117{background-color:#8b1a1a;cursor:help}._cacheDotNormal_1cxb0_122{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_lzqdt_1{height:100vh;overflow:hidden}._header_lzqdt_6{background:#111;border-bottom:1px solid #1f1f1f;padding:0 24px;height:60px;line-height:60px}._content_lzqdt_14{flex:1;overflow:hidden}._mainContainer_lzqdt_19{display:flex;height:100%}._leftPanel_lzqdt_24{flex-shrink:0;border-right:1px solid #1f1f1f;display:flex;flex-direction:column;background:#0a0a0a}._leftPanelHeader_lzqdt_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_lzqdt_43{font-size:12px;color:#555;font-weight:400}._leftPanelBody_lzqdt_49{flex:1;overflow:hidden}._rightPanel_lzqdt_54{flex:1;overflow:hidden;background:#0d0d0d}._modalActions_lzqdt_60{margin-bottom:12px}._spinCenter_lzqdt_64{text-align:center;padding:40px}._emptyCenter_lzqdt_69{text-align:center;color:#999;padding:40px}._logListItem_lzqdt_75{cursor:pointer;padding:8px 12px}._logItemRow_lzqdt_80{display:flex;align-items:center;width:100%;justify-content:space-between}._logFileIcon_lzqdt_87{margin-right:8px;color:#3b82f6}._folderIcon_lzqdt_92{margin-right:8px}._logTag_lzqdt_96{margin-left:8px}._loadingOverlay_lzqdt_100{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:9999}._loadingText_lzqdt_113{color:#fff;font-size:16px;font-weight:700}._footer_lzqdt_119{height:18px;background:#000;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;flex-shrink:0}._footerRight_lzqdt_129{display:flex;align-items:center;gap:6px;font-size:11px;color:#555}._footerLink_lzqdt_137{display:inline-flex;align-items:center;gap:3px;color:#555;text-decoration:none}._footerLink_lzqdt_137:hover{color:#888}._footerIcon_lzqdt_149{width:12px;height:12px}._footerDivider_lzqdt_154{color:#333}._footerText_lzqdt_158{color:#555}
|