cc-viewer 1.6.26 → 1.6.27
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/dist/assets/{index-D3V7nrsz.js → index-CX2k5Bow.js} +66 -66
- package/dist/assets/{index-Bp_VsiSj.css → index-DGeFNfQD.css} +1 -1
- package/dist/index.html +2 -2
- package/interceptor.js +63 -11
- package/lib/delta-reconstructor.js +169 -0
- package/lib/interceptor-core.js +27 -1
- package/lib/log-management.js +34 -5
- package/lib/log-watcher.js +7 -1
- package/lib/stats-worker.js +5 -2
- package/package.json +1 -1
- package/server.js +31 -8
|
@@ -29,7 +29,7 @@ body{margin:0;background-color:#0d0d0d}::selection{background-color:#264f78;colo
|
|
|
29
29
|
* The original design remains. The terminal itself
|
|
30
30
|
* has been extended to include xterm CSI codes, among
|
|
31
31
|
* other features.
|
|
32
|
-
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}._terminalPanel_1o3u4_1{height:100%;display:flex;flex-direction:column;background:#0a0a0a}._terminalContainer_1o3u4_8{flex:1;overflow:hidden;padding:4px 8px;touch-action:none;overscroll-behavior:contain}._terminalContainer_1o3u4_8 .xterm-helper-textarea{caret-color:transparent!important}._terminalToolbar_1o3u4_21{height:35px;flex-shrink:0;display:flex;align-items:center;padding:0 8px;gap:4px;border-top:1px solid #1f1f1f;background:#0d0d0d}._toolbarBtn_1o3u4_32{display:flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid #333;border-radius:4px;background:#1a1a1a;color:#aaa;font-size:12px;cursor:pointer;white-space:nowrap}._toolbarBtn_1o3u4_32:hover{background:#2a2a2a;color:#ddd;border-color:#555}._toolbarBtnDisabled_1o3u4_52{opacity:.4;cursor:not-allowed}._toolbarBtnDisabled_1o3u4_52:hover{background:#1a1a1a;color:#aaa;border-color:#333}._toolbarBtn_1o3u4_32 svg{width:14px;height:14px}._virtualKeybar_1o3u4_67{display:flex;gap:6px;padding:8px 10px;background:#111;border-top:1px solid #222;overflow-x:auto;flex-shrink:0;-webkit-overflow-scrolling:touch}._virtualKey_1o3u4_67{flex-shrink:0;padding:12px 20px;border:1px solid #333;border-radius:8px;background:#1a1a1a;color:#ccc;font-size:15px;font-family:Menlo,Monaco,monospace;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:pan-x;min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center}._virtualKeyPressed_1o3u4_98{background:#333;border-color:#555;color:#fff}._helpBtn_ovmho_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_ovmho_1:hover{background:#333}._modalBody_ovmho_24{max-height:60vh;overflow-y:auto;overflow-x:hidden;line-height:1.7;color:#d9d9d9;word-break:break-word}._modalBody_ovmho_24 h1,._modalBody_ovmho_24 h2,._modalBody_ovmho_24 h3{margin-top:.8em;color:#f0f0f0}._modalBody_ovmho_24 p{margin:.5em 0}._modalBody_ovmho_24 code{background:#2a2a2a;padding:1px 4px;border-radius:3px;font-size:.9em;color:#e8ab6a}._modalBody_ovmho_24 pre{background:#1a1a1a;padding:12px;border-radius:6px;overflow-x:auto;color:#d9d9d9;max-width:100%;box-sizing:border-box}._modalBody_ovmho_24 a{color:#5b9bd5}._modalBody_ovmho_24 strong{color:#f0f0f0}._spinWrap_ovmho_70{display:flex;justify-content:center;padding:40px 0}._modalBody_ovmho_24 textarea{width:100%;min-height:200px;background:#1a1a1a;color:#d9d9d9;font-family:monospace;font-size:13px;line-height:1.6;border:1px solid #333;border-radius:6px;padding:10px 14px;resize:vertical;outline:none;box-sizing:border-box}@media(max-width:768px){._modalBody_ovmho_24{font-size:13px;line-height:1.6;max-height:75vh}._modalBody_ovmho_24 h1{font-size:18px}._modalBody_ovmho_24 h2{font-size:16px}._modalBody_ovmho_24 h3{font-size:14px}._modalBody_ovmho_24 pre{font-size:12px;padding:8px}._modalBody_ovmho_24 code,._modalBody_ovmho_24 textarea{font-size:12px}}._headerBar_85daq_2{display:flex;align-items:center;justify-content:space-between;width:100%;height:100%}._logoWrap_85daq_10{display:inline-flex;align-items:center;position:relative;margin-top:14px}._logoWrapActive_85daq_17:after{content:"";position:absolute;top:-10px;bottom:-10px;left:0;right:-200px}._logoImage_85daq_26{height:24px;width:24px;border-radius:3px;vertical-align:middle;opacity:.75;transition:opacity .2s;cursor:pointer}._logoImageActive_85daq_36{opacity:1}._compactBtn_85daq_41{font-size:12px;height:30px;line-height:28px}._compactBtnNoBorder_85daq_47{font-size:12px;height:30px;line-height:28px;border:none}._tokenStatsTag_85daq_55{border-radius:12px;cursor:pointer;background:#2a2a2a;border:1px solid #3a3a3a;color:#ccc}._tokenStatsIcon_85daq_63{margin-right:4px}._liveTag_85daq_68{position:relative;display:inline-flex;align-items:center;border-radius:12px;border:1px solid;padding:0 10px;height:22px;font-size:12px;line-height:22px;overflow:hidden;transition:border-color .3s,color .3s;white-space:nowrap}._liveTagFill_85daq_83{position:absolute;left:0;top:0;bottom:0;opacity:.35;transition:width .5s ease,background-color .3s;pointer-events:none}._liveTagContent_85daq_93{position:relative;z-index:1;display:inline-flex;align-items:center}._liveTagHistory_85daq_100{background:#2a2a2a;border-color:#424242;color:#d1d5db}._liveTagText_85daq_106{margin-left:4px}._countdownStrong_85daq_111{font-variant-numeric:tabular-nums}._qrcodePopover_85daq_116{display:flex;flex-direction:column;align-items:center;padding:8px}._qrcodeSection_85daq_123{display:flex;flex-direction:column;align-items:center;padding:16px;margin-bottom:12px;border:1px solid #333;border-radius:8px;background:#111}._qrcodeTitle_85daq_134{font-size:14px;font-weight:600;color:#e5e5e5;margin-bottom:12px}._qrcodeUrlInput_85daq_141{margin-top:12px;font-size:12px;font-family:Menlo,Monaco,monospace}._qrcodeUrlCopy_85daq_147{cursor:pointer;color:#888;transition:color .2s}._qrcodeUrlCopy_85daq_147:hover{color:#3b82f6}._settingsGroupBox_85daq_158{border:1px solid #333;border-radius:8px;background:#111;padding:4px 16px;margin-bottom:12px}._settingsGroupTitle_85daq_166{font-size:14px;font-weight:600;color:#e5e5e5;padding:12px 0 4px;border-bottom:1px solid #333}._settingsItem_85daq_175{display:flex;justify-content:space-between;align-items:center;padding:12px 0}._settingsLabel_85daq_182{font-size:14px}._tokenStatsEmpty_85daq_187{padding:8px 4px;color:#999;font-size:13px}._tokenStatsContainer_85daq_194{display:flex;gap:12px;align-items:flex-start}._tokenStatsColumn_85daq_200{min-width:240px}._toolStatsColumn_85daq_204{min-width:180px}._modelCard_85daq_209{border:1px solid #333;border-radius:6px;padding:8px 10px;background:#111}._modelCardSpaced_85daq_216{margin-bottom:10px}._modelName_85daq_222{font-size:13px;font-weight:600;color:#e5e5e5;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._statsTable_85daq_232{width:100%;border-collapse:collapse}._th_85daq_237{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#888;font-weight:400;text-align:right}._td_85daq_247{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#e5e5e5;text-align:right}._label_85daq_256{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#aaa;font-weight:400;text-align:left}._rowBorder_85daq_266{border-bottom:1px solid #2a2a2a}._rebuildCard_85daq_270{border:1px solid #333;border-radius:6px;padding:8px 10px;margin-top:10px;background:#111}._rebuildTotalRow_85daq_278{border-top:1px solid #444}._rebuildTotalRow_85daq_278 td{font-weight:600}._promptExportBar_85daq_287{margin-bottom:12px}._promptScrollArea_85daq_291{max-height:500px;overflow:auto}._promptEmpty_85daq_296{color:#999;padding:12px}._promptTimestamp_85daq_302{color:#666;font-size:12px;margin:12px 0 4px;padding-bottom:6px}._textPromptCard_85daq_310{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._preText_85daq_319{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}._systemCollapse_85daq_329{margin:4px 0;background:#1a1a1a;border:1px solid #303030;border-radius:6px}._systemLabel_85daq_336{color:#888;font-size:12px}._preSys_85daq_341{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#999;margin:0}._promptTextarea_85daq_351{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_85daq_367{display:flex;justify-content:center;padding:40px 0}._projectStatsEmpty_85daq_373{color:#999;padding:40px 0;text-align:center;font-size:13px}._projectStatsContent_85daq_380{display:flex;flex-direction:column;gap:16px}._projectStatsUpdated_85daq_386{color:#666;font-size:12px;text-align:right}._projectStatsSummary_85daq_392{display:grid;grid-template-columns:1fr 1fr;gap:10px}._projectStatCard_85daq_398{background:#111;border:1px solid #333;border-radius:8px;padding:14px 12px;text-align:center}._projectStatValue_85daq_406{font-size:22px;font-weight:700;color:#e5e5e5;font-family:monospace;font-variant-numeric:tabular-nums}._projectStatLabel_85daq_414{font-size:12px;color:#888;margin-top:4px}._projectStatsSection_85daq_420{display:flex;flex-direction:column;gap:10px}._projectStatsSectionTitle_85daq_426{font-size:14px;font-weight:600;color:#ccc;padding-bottom:4px;border-bottom:1px solid #333}._projectStatsModelCard_85daq_434{background:#111;border:1px solid #333;border-radius:6px;padding:10px 12px}._projectStatsModelHeader_85daq_441{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._projectStatsModelName_85daq_450{font-size:13px;font-weight:600;color:#e5e5e5}._projectStatsModelCount_85daq_456{font-size:12px;color:#888;font-family:monospace}._pluginDirHint_85daq_463{margin-bottom:12px;font-size:12px;color:#888}._pluginDirPath_85daq_469{font-family:Menlo,Monaco,monospace;color:#aaa;cursor:pointer;padding:1px 4px;border-radius:3px;background:#1a1a1a}._pluginDirPath_85daq_469:hover{color:#3b82f6}._pluginList_85daq_482{display:flex;flex-direction:column;gap:8px}._pluginItem_85daq_488{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border:1px solid #303030;border-radius:6px;background:#141414}._pluginInfo_85daq_498{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}._pluginName_85daq_506{font-size:14px;color:#e5e5e5;font-weight:500}._pluginFile_85daq_512{font-size:12px;color:#666;font-family:Menlo,Monaco,monospace}._pluginHooks_85daq_518{display:flex;gap:4px;flex-wrap:wrap;margin-top:2px}._pluginHookTag_85daq_525{font-size:11px;padding:0 5px;border-radius:3px;background:#1e3a5f;color:#6cb6ff;line-height:18px}._pluginActions_85daq_534{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:12px}._pluginEmpty_85daq_542{text-align:center;padding:32px 0;color:#999}._cachePopover_85daq_549{max-width:800px}._cacheScrollArea_85daq_553{max-height:450px;overflow-y:auto}._cachePopoverTitle_85daq_558{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:#e5e5e5}._cachePopoverHeader_85daq_567{margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid #333}._cacheCopyBtn_85daq_573{font-size:14px;color:#888;cursor:pointer;transition:color .2s;margin-left:8px}._cacheCopyBtn_85daq_573:hover{color:#e5e5e5}._cachePopoverEmpty_85daq_585{padding:8px 4px;color:#999;font-size:13px}._cacheTokenInfo_85daq_591{display:flex;align-items:center;font-size:12px;font-family:monospace;color:#aaa;margin-bottom:8px}._cacheSection_85daq_600{margin-bottom:10px}._cacheSectionTitle_85daq_604{font-size:12px;font-weight:600;color:#aaa;margin-bottom:4px}._cacheCodeBlock_85daq_611{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#ccc;background:#111;border:1px solid #2a2a2a;border-radius:4px;padding:8px;margin:4px 0;font-family:Menlo,Monaco,monospace}._cacheCodeBlockSystem_85daq_625{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#ccc;background:#0d1b2a;border:1px solid #1b3a5c;border-radius:4px;padding:8px;margin:4px 0;font-family:Menlo,Monaco,monospace}._cacheNavBtn_85daq_639{margin-left:auto;font-size:11px;color:#1668dc;cursor:pointer;border:1px solid #1668dc;border-radius:3px;padding:1px 6px;white-space:nowrap}._cacheNavBtn_85daq_639:hover{background:#1668dc26}._cacheNavList_85daq_654{width:600px;max-height:300px;overflow-y:auto}._cacheNavItem_85daq_660{padding:4px 8px;font-size:12px;color:#ccc;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-radius:3px}._cacheNavItem_85daq_660:hover{background:#1668dc33;color:#fff}._cacheBlockHighlight_85daq_676{box-shadow:0 0 10px #1668dc99;transition:box-shadow .2s ease-in}._cacheBlockHighlightFading_85daq_681{box-shadow:0 0 10px #1668dc00;transition:box-shadow 3s ease-out}._cacheBorderSvg_85daq_686{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible}._cacheBorderSvgFading_85daq_695{opacity:0;transition:opacity 3s ease-out}._cacheBorderRect_85daq_700{animation:_cacheDashRotate_85daq_1 4s linear infinite}@keyframes _cacheDashRotate_85daq_1{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}._centerEmpty_oxhcp_1{display:flex;align-items:center;justify-content:center;height:100%}._scrollContainer_oxhcp_8{overflow:auto;height:100%;-webkit-overflow-scrolling:touch;will-change:scroll-position}._listItem_oxhcp_15{cursor:pointer;padding:8px 12px;border-left:3px solid transparent;border-bottom:1px solid #1f1f1f;transition:background .15s}._listItem_oxhcp_15:hover{background:#151515}._listItemActive_oxhcp_27{background:#1a2332;border-left-color:#3b82f6}._listItemActive_oxhcp_27:hover{background:#1a2332}._itemContent_oxhcp_36{width:100%;min-width:0}._itemHeader_oxhcp_41{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px}._tagNoMargin_oxhcp_49{margin:0;font-size:12px}._modelName_oxhcp_54{font-size:12px}._time_oxhcp_58{font-size:12px;color:#6b7280;margin-left:auto}._detailRow_oxhcp_64{display:flex;gap:8px;font-size:12px;align-items:center}._urlText_oxhcp_71{color:#555;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}._duration_oxhcp_80{color:#6b7280;flex-shrink:0}._statusOk_oxhcp_85{color:#52c41a;opacity:.5;flex-shrink:0}._statusErr_oxhcp_91{color:#ef4444;flex-shrink:0}._statusDefault_oxhcp_96{color:#9ca3af;flex-shrink:0}._usageBox_oxhcp_101{background:#111;border-radius:4px;padding:3px 6px;margin-top:4px;font-size:12px;color:#6b7280;line-height:1.6}._cacheDot_oxhcp_111{display:inline-block;width:6px;height:6px;border-radius:50%;margin:0 3px;vertical-align:middle}._cacheDotLoss_oxhcp_120{background-color:#8b1a1a;cursor:help}._cacheDotNormal_oxhcp_125{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}._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)}}._root_1a6ku_1{display:flex;height:100%;min-height:0;gap:0}._sidebar_1a6ku_9{width:220px;flex-shrink:0;border-right:1px solid #2a2a2a;overflow-y:auto;padding:4px 0;-webkit-overflow-scrolling:touch}._section_1a6ku_18{-webkit-user-select:none;user-select:none}._sectionHeader_1a6ku_22{display:flex;align-items:center;gap:6px;width:100%;padding:6px 10px;cursor:pointer;color:#d1d5db;font-size:12px;font-weight:600;transition:background .15s;background:none;border:0;text-align:left;font:inherit}._sectionHeader_1a6ku_22:hover{background:#ffffff0d}._sectionHeader_1a6ku_22:focus-visible{outline:1px solid rgba(99,179,237,.75);outline-offset:-1px}._arrow_1a6ku_48{font-size:10px;color:#888;flex-shrink:0}._sectionTitle_1a6ku_54{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sectionCount_1a6ku_62{font-size:11px;color:#666;background:#1f1f1f;border-radius:10px;padding:0 6px;line-height:18px}._sectionBody_1a6ku_71{padding:2px 0}._historyToggle_1a6ku_76{display:flex;align-items:center;gap:6px;width:100%;padding:4px 10px 4px 14px;cursor:pointer;color:#666;font-size:11px;transition:color .15s,background .15s;background:none;border:0;text-align:left;font:inherit}._historyToggle_1a6ku_76:hover{color:#888;background:#ffffff08}._historyToggle_1a6ku_76:focus-visible{outline:1px solid rgba(99,179,237,.75);outline-offset:-1px}._historyToggleLabel_1a6ku_102{flex:1}._item_1a6ku_107{display:flex;align-items:center;justify-content:space-between;width:100%;padding:5px 10px 5px 24px;font-size:12px;color:#888;cursor:pointer;transition:background .15s,color .15s;background:none;border:0;text-align:left;font:inherit}._item_1a6ku_107:hover{background:#ffffff0a;color:#d1d5db}._item_1a6ku_107:focus-visible{outline:1px solid rgba(99,179,237,.75);outline-offset:-1px}._itemActive_1a6ku_133{background:#63b3ed1f;color:#63b3ed}._itemActive_1a6ku_133:hover{background:#63b3ed29;color:#63b3ed}._itemContent_1a6ku_143{flex:1;min-width:0;overflow:hidden}._itemLabel_1a6ku_149{font-family:monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}._itemSublabel_1a6ku_157{font-size:10px;color:#555;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}._itemTime_1a6ku_166{font-size:9px;color:#555;flex-shrink:0;margin-left:4px;font-family:monospace}._content_1a6ku_175{flex:1;min-width:0;overflow:auto;padding:12px 16px;-webkit-overflow-scrolling:touch}._contentEmpty_1a6ku_183{height:100%;display:flex;align-items:center;justify-content:center}._contentInner_1a6ku_190{padding-bottom:20px}._emptyWrap_1a6ku_194{display:flex;align-items:center;justify-content:center;height:200px}._roleHeader_1a6ku_202{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:nowrap}._roleBadge_1a6ku_210{font-size:10px;font-weight:600;letter-spacing:.04em;padding:2px 7px;border-radius:4px;flex-shrink:0}._role_user_1a6ku_219{background:#3b82f62e;color:#60a5fa;border:1px solid rgba(59,130,246,.3)}._role_assistant_1a6ku_225{background:#8b5cf62e;color:#a78bfa;border:1px solid rgba(139,92,246,.3)}._roleLabel_1a6ku_231{font-size:11px;color:#666;flex:1;min-width:0}._contentTime_1a6ku_238{margin-left:auto;font-size:10px;color:#555;font-family:monospace;flex-shrink:0}._turnDivider_1a6ku_246{border:none;border-top:1px solid #1e1e1e;margin:14px 0}._textBlock_1a6ku_253{margin-bottom:8px;border:1px solid #222;border-radius:6px;overflow:hidden}._textBlockBar_1a6ku_260{display:flex;align-items:center;gap:6px;padding:4px 10px;background:#141414;border-bottom:1px solid #222}._textBlockBody_1a6ku_269{padding:10px 12px;font-size:13px;line-height:1.7;color:#d1d5db;word-break:break-word}._textBlockCompact_1a6ku_277{position:relative;padding:8px 10px;font-size:12px;color:#aaa}._textBlockCompactFloat_1a6ku_284{float:right;margin-left:6px;margin-bottom:2px}._thinkingBlock_1a6ku_291{margin-bottom:8px;border:1px solid #2a2a1e;border-radius:6px;overflow:hidden;background:#111108}._thinkingHeader_1a6ku_299{display:flex;align-items:center;gap:6px;padding:5px 10px;cursor:pointer;font-size:12px;color:#888;transition:background .15s}._thinkingHeader_1a6ku_299:hover{background:#ffffc808}._thinkingPreview_1a6ku_314{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#666;font-size:11px}._thinkingBody_1a6ku_324{padding:8px 12px;border-top:1px solid #2a2a1e}._toolBlock_1a6ku_330{margin-bottom:8px;border:1px solid #222;border-radius:6px;overflow:hidden}._toolBlockResult_1a6ku_337{border-color:#1a2a1a}._toolBlockError_1a6ku_341{border-color:#2a1a1a}._toolBlockHeader_1a6ku_345{display:flex;align-items:center;gap:8px;padding:5px 10px;background:#141414;border-bottom:1px solid #222;font-size:12px;flex-wrap:wrap}._toolBlockBody_1a6ku_356{padding:8px 10px;font-size:12px}._toolName_1a6ku_361{color:#d1d5db;font-weight:500;font-family:monospace}._toolId_1a6ku_367{color:#555;font-size:10px;font-family:monospace;margin-left:auto}._errorLabel_1a6ku_374{font-size:10px;color:#f87171;background:#ef44441f;border:1px solid rgba(239,68,68,.25);border-radius:3px;padding:1px 5px}._blockTag_1a6ku_384{font-size:9px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:1px 5px;border-radius:3px;background:#1a1a1a;color:#666;border:1px solid #2a2a2a;flex-shrink:0}._blockTagText_1a6ku_397{background:#3b82f61a;color:#60a5fa;border-color:#3b82f633}._blockTagThinking_1a6ku_403{background:#eab3081a;color:#ca8a04;border-color:#eab30833}._blockTagResult_1a6ku_409{background:#22c55e1a;color:#4ade80;border-color:#22c55e33}._blockTagError_1a6ku_415{background:#ef44441a;color:#f87171;border-color:#ef444433}._jsonBlock_1a6ku_422{margin-bottom:8px;border:1px solid #222;border-radius:6px;overflow:hidden}._jsonBlockLabel_1a6ku_429{font-size:10px;color:#666;padding:3px 10px;background:#141414;border-bottom:1px solid #222;font-family:monospace}._blockSeparator_1a6ku_439{border:none;border-top:1px solid #2a2a2a;margin:16px 0}._markdownBody_1a6ku_446{font-size:13px;line-height:1.7;color:#d1d5db;word-break:break-word}._container_ty3f8_1{height:100%;overflow:auto;padding:0 16px;-webkit-overflow-scrolling:touch;will-change:scroll-position}._emptyState_ty3f8_9{display:flex;align-items:center;justify-content:center;height:100%}._urlSection_ty3f8_16{padding:12px 0;border-bottom:1px solid #1f1f1f;display:flex;align-items:flex-start}._urlLeft_ty3f8_23{flex:1;min-width:0}._tokenStatsBox_ty3f8_28{flex-shrink:0;padding-left:12px;display:flex;align-items:center}._tokenGrid_ty3f8_35{display:flex;border:1px solid #303030;border-radius:6px;overflow:hidden;min-width:360px;font-size:11px;line-height:1.6}._tokenRows_ty3f8_45{flex:1}._tokenRow_ty3f8_45{display:flex}._tokenRowBorder_ty3f8_53{border-top:1px solid #303030}._tokenLabel_ty3f8_57{color:#888;padding:4px 8px;white-space:nowrap;font-weight:600}._tokenTd_ty3f8_64{flex:1;color:#d1d5db;text-align:right;padding:4px 8px;font-family:monospace;white-space:nowrap}._tokenHitRate_ty3f8_73{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_ty3f8_86{color:#888;font-size:10px;font-family:sans-serif}._tokenRowBorder_ty3f8_53 td{border-top:1px solid #303030}._urlText_ty3f8_96{color:#d1d5db;font-size:13px;margin-bottom:8px;word-break:break-all}._metaText_ty3f8_103,._headersContainer_ty3f8_107{font-size:12px}._headerRow_ty3f8_111{display:flex;padding:4px 0;border-bottom:1px solid #1f1f1f}._headerKey_ty3f8_117{min-width:200px;flex-shrink:0}._headerValue_ty3f8_122{word-break:break-all;margin-left:8px}._streamingBox_ty3f8_127{padding:20px;background:#1a1a1a;border-radius:6px;border:1px solid #2a2a2a}._bodyToolbar_ty3f8_134{display:flex;gap:8px;margin-bottom:8px}._rawTextPre_ty3f8_140{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_ty3f8_153{padding:12px 0}._collapseSpacing_ty3f8_157{margin-bottom:16px}._bodyLabel_ty3f8_161{margin:0}._bodyHeader_ty3f8_165{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}._diffSection_ty3f8_172{margin-bottom:16px}._diffToggle_ty3f8_176{display:inline-block;margin-bottom:8px;cursor:pointer}._diffIcon_ty3f8_182{font-size:12px;margin-left:4px}._viewInChatBtn_ty3f8_187{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_ty3f8_187:hover{border-color:#666;color:#d1d5db;background:#ffffff0f}._reminderSelect_ty3f8_208{min-width:140px;font-size:12px}._reminderSelect_ty3f8_208 .ant-select-selector.ant-select-selector{border-radius:2px;border-color:#424242;background:transparent;min-height:26px;height:auto;padding:0 8px;font-family:monospace}._reminderSelect_ty3f8_208 .ant-select-selection-placeholder{font-size:11px}._avatar_s8m0t_3{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}._avatarImg_s8m0t_13{width:32px;height:32px;border-radius:50%;flex-shrink:0;object-fit:cover}._bubble_s8m0t_21{border-radius:8px;padding:10px 14px;max-width:100%;font-size:14px;line-height:1.6;word-break:break-word}._messageRow_s8m0t_32{display:flex;gap:10px;padding:8px 0}._messageRowEnd_s8m0t_38{display:flex;gap:10px;padding:8px 0;justify-content:flex-end}._contentCol_s8m0t_47{min-width:0;flex:1}._contentColLimited_s8m0t_52{min-width:0;max-width:80%;width:fit-content}._labelRow_s8m0t_60{display:flex;justify-content:space-between;align-items:center;margin-bottom:2px}._labelRowEnd_s8m0t_67{display:flex;justify-content:flex-end;align-items:center;margin-bottom:2px}._labelRight_s8m0t_74{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}._labelText_s8m0t_82{font-size:11px}._timeText_s8m0t_86,._timeTextNoMargin_s8m0t_92{font-size:10px;color:#6b7280;flex-shrink:0}._labelTextRight_s8m0t_98{font-size:11px;margin-left:auto}._bubbleUser_s8m0t_105{background:#1668dc;color:#e5e7eb}._bubbleAssistant_s8m0t_111{background:#141414;color:#e5e7eb;transition:box-shadow 0s;position:relative}._bubbleHighlight_s8m0t_119{box-shadow:0 0 10px #1668dc99}._bubbleHighlightFading_s8m0t_123{box-shadow:0 0 10px #1668dc00;transition:box-shadow 5s ease-out}._borderSvg_s8m0t_128{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible}._borderSvgFading_s8m0t_137{opacity:0;transition:opacity 5s ease-out}._borderRect_s8m0t_142{animation:_dashRotate_s8m0t_1 4s linear infinite}@keyframes _dashRotate_s8m0t_1{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}._bubblePlan_s8m0t_151{background:#141428;border:5px solid #1668dc;font-size:12px;color:#e5e7eb}._bubbleSubAgent_s8m0t_159{background:#1a1a2e;color:#e5e7eb}._bubbleSelection_s8m0t_165{background:#1a3a1a;color:#e5e7eb}._systemTagLabel_s8m0t_173{font-size:12px}._skillLabel_s8m0t_177{font-size:12px;color:#a78bfa}._systemTagPre_s8m0t_182{font-size:12px;color:#9ca3af;white-space:pre-wrap;word-break:break-all;margin:0}._collapseMargin_s8m0t_190{margin:4px 0}._collapseNoMargin_s8m0t_194{margin:0}._thinkingLabel_s8m0t_200{font-size:12px}._bashCollapseLabel_s8m0t_204{font-size:12px;color:#9ca3af}._toolBox_s8m0t_211{background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._toolLabel_s8m0t_220{color:#a78bfa}._codePre_s8m0t_226{font-size:12px;margin:4px 0 0;white-space:pre-wrap;word-break:break-all;background:#0d1117;border-radius:4px;padding:6px 8px}._pathTag_s8m0t_238{color:#7dd3fc;font-size:11px}._pathTagClickable_s8m0t_243{color:#7dd3fc;font-size:11px;cursor:pointer}._pathTagClickable_s8m0t_243:hover{text-decoration:underline;color:#93c5fd}._descSpan_s8m0t_256{color:#6b7280;font-weight:400}._secondarySpan_s8m0t_261{color:#6b7280}._patternSpan_s8m0t_265{color:#fbbf24}._kvContainer_s8m0t_271{margin-top:4px;font-size:11px}._kvItem_s8m0t_276{margin:2px 0}._kvKey_s8m0t_280{color:#7dd3fc}._kvValue_s8m0t_284{color:#9ca3af}._toolResult_s8m0t_290{background:#111827;border:1px solid #1e293b;border-radius:6px;padding:6px 10px;margin:2px 0 6px;font-size:11px}._toolResultLabel_s8m0t_299{font-size:11px}._compactLabel_s8m0t_305{font-size:12px;color:#93c5fd}._compactPre_s8m0t_310{font-size:12px;color:#d1d5db;white-space:pre-wrap;word-break:break-all;margin:0}._viewRequestBtn_s8m0t_320{font-size:10px;color:#555;cursor:pointer;margin-left:6px;flex-shrink:0}._viewRequestBtn_s8m0t_320:hover{color:#93c5fd}._optionList_s8m0t_334{padding-left:8px}._optionDesc_s8m0t_338{color:#555;margin-left:6px;font-weight:400}._questionText_s8m0t_346{font-size:13px;color:#ccc;margin-bottom:4px}._questionSpacing_s8m0t_352{margin-bottom:10px}._option_s8m0t_334{font-size:12px;padding:1px 0}._askQuestionBox_s8m0t_365{background:#0d1f0d;border:1px solid #2ea043;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._askQuestionHeader_s8m0t_374{display:inline-block;background:#1a3a1a;color:#7ee787;font-size:10px;padding:1px 6px;border-radius:4px;margin-bottom:4px;font-weight:600}._askQuestionText_s8m0t_385{color:#e5e7eb;font-size:13px;margin-bottom:4px}._askOptionItem_s8m0t_391{font-size:12px;color:#9ca3af;padding:1px 0;display:flex;align-items:center;gap:4px}._askOptionSelected_s8m0t_400{color:#e5e7eb;font-weight:600}._askCheckSvg_s8m0t_405{flex-shrink:0;vertical-align:middle}._planModeBox_s8m0t_412{background:#0d1528;border:1px solid #1668dc;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._planModeLabel_s8m0t_421{color:#93c5fd;font-weight:600}._planModePermissions_s8m0t_426{margin-top:6px;padding-top:6px;border-top:1px solid #1e3a5f}._planModePermLabel_s8m0t_432{color:#6b7280;font-size:11px;margin-bottom:2px}._planModeHeader_s8m0t_438{display:flex;justify-content:space-between;align-items:center}._planStatusBadge_s8m0t_444{font-size:11px;font-weight:600;padding:1px 8px;border-radius:10px;line-height:1.6}._planStatusApproved_s8m0t_452{border-color:#22c55e}._planStatusApproved_s8m0t_452._planStatusBadge_s8m0t_444{background:#22c55e26;color:#4ade80}._planStatusRejected_s8m0t_461{border-color:#ef4444}._planStatusRejected_s8m0t_461._planStatusBadge_s8m0t_444{background:#ef444426;color:#f87171}._planStatusPending_s8m0t_470{border-color:#1668dc}._planStatusPending_s8m0t_470._planStatusBadge_s8m0t_444{background:#1668dc26;color:#93c5fd}._planFeedback_s8m0t_479{margin-top:6px;padding:6px 8px;background:#ef444414;border-radius:4px;font-size:12px;color:#e5e7eb}._planFeedbackLabel_s8m0t_488{color:#f87171;font-weight:600}._planApprovalActions_s8m0t_493{display:flex;gap:8px;margin-top:8px}._planApproveBtn_s8m0t_499{padding:4px 16px;border-radius:4px;border:1px solid #22c55e;background:#22c55e26;color:#4ade80;font-size:13px;cursor:pointer;transition:background .15s}._planApproveBtn_s8m0t_499:hover{background:#22c55e4d}._planRejectBtn_s8m0t_514{padding:4px 16px;border-radius:4px;border:1px solid #ef4444;background:#ef444426;color:#f87171;font-size:13px;cursor:pointer;transition:background .15s}._planRejectBtn_s8m0t_514:hover{background:#ef44444d}._planOptionBtn_s8m0t_529{padding:4px 16px;border-radius:4px;border:1px solid #6b7280;background:#6b728026;color:#d1d5db;font-size:13px;cursor:pointer;transition:background .15s}._planOptionBtn_s8m0t_529:hover{background:#6b72804d}._planFeedbackInputWrap_s8m0t_544{margin-top:8px}._planFeedbackTextarea_s8m0t_548{width:100%;min-height:60px;max-height:120px;padding:8px 10px;border-radius:4px;border:1px solid #4b5563;background:#1f2937;color:#e5e7eb;font-size:13px;line-height:1.5;resize:vertical;font-family:inherit;outline:none}._planFeedbackTextarea_s8m0t_548:focus{border-color:#3b82f6}._planFeedbackBtnRow_s8m0t_568{display:flex;gap:8px;margin-top:6px;justify-content:flex-end}._planFeedbackSendBtn_s8m0t_575{padding:4px 16px;border-radius:4px;border:1px solid #3b82f6;background:#3b82f633;color:#60a5fa;font-size:13px;cursor:pointer;transition:background .15s}._planFeedbackSendBtn_s8m0t_575:hover{background:#3b82f659}._planFeedbackSendBtn_s8m0t_575:disabled{opacity:.4;cursor:not-allowed}._planFeedbackCancelBtn_s8m0t_595{padding:4px 16px;border-radius:4px;border:1px solid #6b7280;background:#6b728026;color:#d1d5db;font-size:13px;cursor:pointer;transition:background .15s}._planFeedbackCancelBtn_s8m0t_595:hover{background:#6b72804d}._askQuestionInteractive_s8m0t_612{background:#0d1528;border:1px solid #1668dc;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._askRadioGroup_s8m0t_621{display:flex;flex-direction:column;gap:2px;padding-left:4px;margin-top:4px}._askRadioItem_s8m0t_629{color:#d1d5db;font-size:12px;padding:3px 0;cursor:pointer;display:flex;align-items:baseline;gap:6px;-webkit-user-select:none;user-select:none}._askRadioItem_s8m0t_629:hover{color:#fff}._askRadioItemSelected_s8m0t_644{color:#58a6ff}._askRadioDot_s8m0t_648{flex-shrink:0;font-size:13px;line-height:1}._askRadioGroup_s8m0t_621 .ant-radio-wrapper,._askCheckboxGroup_s8m0t_655 .ant-checkbox-wrapper{color:#d1d5db;font-size:12px;padding:3px 0;cursor:pointer;pointer-events:auto}._askRadioGroup_s8m0t_621 .ant-radio-wrapper>span,._askRadioGroup_s8m0t_621 .ant-radio{cursor:pointer;pointer-events:auto}._askRadioGroup_s8m0t_621 .ant-radio-input{cursor:pointer}._askCheckboxGroup_s8m0t_655{display:flex;flex-direction:column;gap:2px;padding-left:4px;margin-top:4px}._askOtherInput_s8m0t_681{margin-top:4px;margin-left:24px;width:calc(100% - 24px)}._askOtherInput_s8m0t_681 .ant-input{background:#1f2937;border-color:#4b5563;color:#e5e7eb;font-size:12px}._askSubmitRow_s8m0t_694{display:flex;justify-content:flex-end;margin-top:8px}._askSubmitBtn_s8m0t_700{padding:4px 20px;border-radius:4px;border:1px solid #1668dc;background:#1668dc33;color:#60a5fa;font-size:13px;cursor:pointer;transition:background .15s}._askSubmitBtn_s8m0t_700:hover{background:#1668dc59}._askSubmitBtn_s8m0t_700:disabled{opacity:.4;cursor:not-allowed}._askMarkdownLayout_s8m0t_720{display:flex;gap:12px;margin-top:4px}._askMarkdownLayout_s8m0t_720>:first-child{flex:1;min-width:0}._askMarkdownPreview_s8m0t_731{flex:1;min-width:0;background:#0d1117;border:1px solid #2a2a3e;border-radius:6px;padding:8px 10px;font-size:12px;color:#d1d5db;max-height:240px;overflow-y:auto}._askMarkdownPreview_s8m0t_731 pre{white-space:pre-wrap;word-break:break-all;margin:0;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.5}._wrapper_cz5ph_1{margin:6px 0;background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;padding:8px 12px}._header_cz5ph_9{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}._headerRight_cz5ph_16{display:flex;align-items:center;gap:12px;flex-shrink:0;white-space:nowrap}._filePath_cz5ph_24{color:#a78bfa;font-size:12px;font-weight:600}._filePathClickable_cz5ph_30{color:#a78bfa;font-size:12px;font-weight:600;cursor:pointer}._filePathClickable_cz5ph_30:hover{text-decoration:underline;color:#c4b5fd}._toggle_cz5ph_42{color:#6b7280;font-size:11px;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;flex-shrink:0}._diffSummary_cz5ph_51{font-size:11px;color:#6b7280}._diffBody_cz5ph_58{display:flex;font-family:SF Mono,Cascadia Code,Fira Code,Menlo,Consolas,monospace;font-size:12px;line-height:1.5}._gutter_cz5ph_66{flex-shrink:0;-webkit-user-select:none;user-select:none}._gutterRow_cz5ph_71{display:flex;height:18px}._lineNumOld_cz5ph_76,._lineNumNew_cz5ph_77{text-align:right;color:#484f58;padding:0 6px 0 2px;box-sizing:border-box}._prefix_cz5ph_84{width:16px;min-width:16px;text-align:center;font-weight:600}._codeWrap_cz5ph_92{flex:1;min-width:0;overflow-x:auto}._codeInner_cz5ph_99{display:inline-block;min-width:100%}._codeLine_cz5ph_104{white-space:pre;padding:0 4px;height:18px}._rowContext_cz5ph_112{background:#1a1a2e;color:#8b949e}._rowDel_cz5ph_117{background:#ef44441f;color:#fca5a5}._rowDel_cz5ph_117._gutterRow_cz5ph_71{background:#341f31}._rowDel_cz5ph_117._gutterRow_cz5ph_71 ._prefix_cz5ph_84{color:#ef4444}._rowAdd_cz5ph_128{background:#22c55e1f;color:#86efac}._rowAdd_cz5ph_128._gutterRow_cz5ph_71{background:#1b2f34}._rowAdd_cz5ph_128._gutterRow_cz5ph_71 ._prefix_cz5ph_84{color:#22c55e}._rowContext_cz5ph_112._gutterRow_cz5ph_71{background:#1a1a2e}._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}._fileExplorer_1g58f_1{width:240px;flex-shrink:0;background:#111;border-right:1px solid #2a2a2a;display:flex;flex-direction:column;overflow:hidden;-webkit-user-select:none;user-select:none}._header_1g58f_12{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_1g58f_21{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._collapseBtn_1g58f_29{width:20px;height:20px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:0}._collapseBtn_1g58f_29:hover{color:#ccc;background:#2a2a2a}._treeContainer_1g58f_48{flex:1;overflow:auto;padding:4px 0}._treeItem_1g58f_54{display:flex;align-items:center;height:26px;padding:0 8px;cursor:pointer;color:#ccc;font-size:13px;white-space:nowrap;transition:background .1s}._treeItem_1g58f_54:hover{background:#1a1a1a}._treeItem_1g58f_54._treeItemSelected_1g58f_70{background:#532f00}._arrow_1g58f_74{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._icon_1g58f_83{width:16px;height:16px;flex-shrink:0;margin-right:6px;display:flex;align-items:center;justify-content:center}._fileName_1g58f_93{overflow:hidden;text-overflow:ellipsis}._fileNameInput_1g58f_98{background:transparent;border:none;border-bottom:1px solid #528bff;color:#ccc;font-size:13px;font-family:inherit;padding:0;margin:0;outline:none;width:100%;min-width:40px;height:20px;line-height:20px}._loading_1g58f_114{color:#555;font-size:12px;padding:4px 8px}._error_1g58f_120{color:#ff6b6b;font-size:12px;padding:4px 8px}._treeItemGitIgnored_1g58f_126{opacity:.4}._fileContentView_1wg5i_1{display:flex;flex-direction:column;height:100%;background:#0d0d0d;animation:_slideInFromRight_1wg5i_1 .25s ease-out}@keyframes _slideInFromRight_1wg5i_1{0%{transform:translate(-40px);opacity:0}to{transform:translate(0);opacity:1}}._editorBanner_1wg5i_20{padding:6px 16px;background:#1a3a2a;color:#4ade80;font-size:12px;text-align:center;flex-shrink:0;border-bottom:1px solid #2a5a3a;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}._editorBanner_1wg5i_20:hover{background:#245a3a}._header_1wg5i_37{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._headerLeft_1wg5i_47{display:flex;align-items:center;gap:8px;flex:1;min-width:0}._headerRight_1wg5i_55{display:flex;align-items:center;gap:10px;flex-shrink:0}._backBtn_1wg5i_62{width:28px;height:28px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;flex-shrink:0;transition:background .15s,color .15s}._backBtn_1wg5i_62:hover{color:#ccc;background:#1a1a1a}._filePath_1wg5i_83{font-size:13px;color:#ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._fileSize_1wg5i_91{font-size:11px;color:#666;flex-shrink:0;margin-left:8px}._closeBtn_1wg5i_98{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid #3a3a3a;background:#1a1a1a;color:#888;border-radius:6px;cursor:pointer;transition:background .15s,color .15s,border-color .15s}._closeBtn_1wg5i_98:hover{background:#2a2a2a;color:#fff;border-color:#4a4a4a}._saveBtn_1wg5i_119{display:flex;align-items:center;gap:5px;padding:4px 12px;border:1px solid #3a3a3a;background:#1a1a1a;color:#ccc;font-size:12px;border-radius:6px;cursor:pointer;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}._saveBtn_1wg5i_119:hover:not(:disabled){background:#2a2a2a;color:#fff;border-color:#4a4a4a}._saveBtn_1wg5i_119:disabled{opacity:.4;cursor:not-allowed}._saveStatus_1wg5i_145{font-size:11px;color:#888;white-space:nowrap}._saveStatusSaved_1wg5i_151{color:#4caf50}._saveStatusFailed_1wg5i_155{color:#ff6b6b}._contentContainer_1wg5i_159{flex:1;overflow:hidden;background:#0d0d0d;display:flex;min-height:0;min-width:0}._editorWrapper_1wg5i_168{flex:1;display:flex;min-height:0;min-width:0;overflow:hidden}._lineNumCol_1wg5i_176{flex-shrink:0;width:56px;overflow:hidden;background:#0d0d0d;border-right:1px solid #2a2a2a;-webkit-user-select:none;user-select:none;padding-top:4px}._lineNumRow_1wg5i_186{padding:0 16px;text-align:right;color:#555;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:13px;line-height:1.5;white-space:nowrap}._editorCol_1wg5i_196{flex:1;min-width:0;min-height:0;display:flex}._editorCol_1wg5i_196 .cm-theme{flex:1;display:flex;min-height:0;min-width:0}._editorCol_1wg5i_196 .cm-editor{flex:1;min-width:0;min-height:0}._loading_1wg5i_216{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#666;font-size:14px}._error_1wg5i_226{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#ff6b6b;font-size:14px}._imageViewer_1vf1x_1{display:flex;flex-direction:column;height:100%;background:#0d0d0d}._header_1vf1x_8{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._headerLeft_1vf1x_18{display:flex;align-items:center;gap:8px;flex:1;min-width:0}._headerRight_1vf1x_26{display:flex;align-items:center;gap:10px;flex-shrink:0}._backBtn_1vf1x_33{width:28px;height:28px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;flex-shrink:0;transition:background .15s,color .15s}._backBtn_1vf1x_33:hover{color:#ccc;background:#1a1a1a}._filePath_1vf1x_54{font-size:13px;color:#ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._fileSize_1vf1x_62{font-size:11px;color:#666;flex-shrink:0}._toolbar_1vf1x_68{display:flex;align-items:center;gap:4px;padding:6px 16px;background:#111;border-bottom:1px solid #2a2a2a;flex-shrink:0}._toolBtn_1vf1x_78{width:28px;height:28px;border:1px solid #3a3a3a;background:#1a1a1a;color:#999;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;transition:background .15s,color .15s,border-color .15s}._toolBtn_1vf1x_78:hover{background:#2a2a2a;color:#fff;border-color:#4a4a4a}._zoomLabel_1vf1x_99{font-size:11px;color:#888;min-width:42px;text-align:center;-webkit-user-select:none;user-select:none}._canvasArea_1vf1x_107{flex:1;overflow:hidden;position:relative;cursor:grab;background-color:#1a1a1a;background-image:linear-gradient(45deg,#222 25%,transparent 25%),linear-gradient(-45deg,#222 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#222 75%),linear-gradient(-45deg,transparent 75%,#222 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0}._canvasArea_1vf1x_107._dragging_1vf1x_122{cursor:grabbing}._imageWrap_1vf1x_126{position:absolute;top:0;left:0;transform-origin:0 0}._imageWrap_1vf1x_126 img{display:block;max-width:none;image-rendering:auto}._statusBar_1vf1x_139{display:flex;align-items:center;gap:16px;padding:4px 16px;background:#111;border-top:1px solid #2a2a2a;flex-shrink:0;font-size:11px;color:#666}._loading_1vf1x_151{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#666;font-size:14px}._error_1vf1x_161{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#ff6b6b;font-size:14px}._gitChanges_nt7bg_1{width:240px;flex-shrink:0;background:#111;border-right:1px solid #2a2a2a;display:flex;flex-direction:column;overflow:hidden;-webkit-user-select:none;user-select:none}._header_nt7bg_12{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_nt7bg_21{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._collapseBtn_nt7bg_29{width:20px;height:20px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:0}._collapseBtn_nt7bg_29:hover{color:#ccc;background:#2a2a2a}._changesContainer_nt7bg_48{flex:1;overflow:auto;padding:4px 0}._changeItem_nt7bg_54{display:flex;align-items:center;height:26px;padding:0 8px;cursor:pointer;color:#ccc;font-size:13px;white-space:nowrap;transition:background .1s;gap:6px}._changeItem_nt7bg_54:hover{background:#1a1a1a}._changeItem_nt7bg_54._changeItemSelected_nt7bg_71{background:#532f00}._dirItem_nt7bg_75{display:flex;align-items:center;height:26px;padding:0 8px;color:#999;font-size:13px;white-space:nowrap;gap:6px}._dirArrow_nt7bg_86{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._dirName_nt7bg_95{overflow:hidden;text-overflow:ellipsis}._status_nt7bg_100{width:16px;flex-shrink:0;font-size:11px;font-weight:600;text-align:center;margin-left:auto}._icon_nt7bg_109{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center}._fileName_nt7bg_118{overflow:hidden;text-overflow:ellipsis;flex:1}._loading_nt7bg_124{color:#555;font-size:12px;padding:8px 12px}._error_nt7bg_130{color:#ff6b6b;font-size:12px;padding:8px 12px}._empty_nt7bg_136{color:#666;font-size:12px;padding:8px 12px;text-align:center}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
|
32
|
+
*/.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}._terminalPanel_1o3u4_1{height:100%;display:flex;flex-direction:column;background:#0a0a0a}._terminalContainer_1o3u4_8{flex:1;overflow:hidden;padding:4px 8px;touch-action:none;overscroll-behavior:contain}._terminalContainer_1o3u4_8 .xterm-helper-textarea{caret-color:transparent!important}._terminalToolbar_1o3u4_21{height:35px;flex-shrink:0;display:flex;align-items:center;padding:0 8px;gap:4px;border-top:1px solid #1f1f1f;background:#0d0d0d}._toolbarBtn_1o3u4_32{display:flex;align-items:center;gap:4px;padding:4px 10px;border:1px solid #333;border-radius:4px;background:#1a1a1a;color:#aaa;font-size:12px;cursor:pointer;white-space:nowrap}._toolbarBtn_1o3u4_32:hover{background:#2a2a2a;color:#ddd;border-color:#555}._toolbarBtnDisabled_1o3u4_52{opacity:.4;cursor:not-allowed}._toolbarBtnDisabled_1o3u4_52:hover{background:#1a1a1a;color:#aaa;border-color:#333}._toolbarBtn_1o3u4_32 svg{width:14px;height:14px}._virtualKeybar_1o3u4_67{display:flex;gap:6px;padding:8px 10px;background:#111;border-top:1px solid #222;overflow-x:auto;flex-shrink:0;-webkit-overflow-scrolling:touch}._virtualKey_1o3u4_67{flex-shrink:0;padding:12px 20px;border:1px solid #333;border-radius:8px;background:#1a1a1a;color:#ccc;font-size:15px;font-family:Menlo,Monaco,monospace;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:pan-x;min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center}._virtualKeyPressed_1o3u4_98{background:#333;border-color:#555;color:#fff}._helpBtn_ovmho_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_ovmho_1:hover{background:#333}._modalBody_ovmho_24{max-height:60vh;overflow-y:auto;overflow-x:hidden;line-height:1.7;color:#d9d9d9;word-break:break-word}._modalBody_ovmho_24 h1,._modalBody_ovmho_24 h2,._modalBody_ovmho_24 h3{margin-top:.8em;color:#f0f0f0}._modalBody_ovmho_24 p{margin:.5em 0}._modalBody_ovmho_24 code{background:#2a2a2a;padding:1px 4px;border-radius:3px;font-size:.9em;color:#e8ab6a}._modalBody_ovmho_24 pre{background:#1a1a1a;padding:12px;border-radius:6px;overflow-x:auto;color:#d9d9d9;max-width:100%;box-sizing:border-box}._modalBody_ovmho_24 a{color:#5b9bd5}._modalBody_ovmho_24 strong{color:#f0f0f0}._spinWrap_ovmho_70{display:flex;justify-content:center;padding:40px 0}._modalBody_ovmho_24 textarea{width:100%;min-height:200px;background:#1a1a1a;color:#d9d9d9;font-family:monospace;font-size:13px;line-height:1.6;border:1px solid #333;border-radius:6px;padding:10px 14px;resize:vertical;outline:none;box-sizing:border-box}@media(max-width:768px){._modalBody_ovmho_24{font-size:13px;line-height:1.6;max-height:75vh}._modalBody_ovmho_24 h1{font-size:18px}._modalBody_ovmho_24 h2{font-size:16px}._modalBody_ovmho_24 h3{font-size:14px}._modalBody_ovmho_24 pre{font-size:12px;padding:8px}._modalBody_ovmho_24 code,._modalBody_ovmho_24 textarea{font-size:12px}}._headerBar_85daq_2{display:flex;align-items:center;justify-content:space-between;width:100%;height:100%}._logoWrap_85daq_10{display:inline-flex;align-items:center;position:relative;margin-top:14px}._logoWrapActive_85daq_17:after{content:"";position:absolute;top:-10px;bottom:-10px;left:0;right:-200px}._logoImage_85daq_26{height:24px;width:24px;border-radius:3px;vertical-align:middle;opacity:.75;transition:opacity .2s;cursor:pointer}._logoImageActive_85daq_36{opacity:1}._compactBtn_85daq_41{font-size:12px;height:30px;line-height:28px}._compactBtnNoBorder_85daq_47{font-size:12px;height:30px;line-height:28px;border:none}._tokenStatsTag_85daq_55{border-radius:12px;cursor:pointer;background:#2a2a2a;border:1px solid #3a3a3a;color:#ccc}._tokenStatsIcon_85daq_63{margin-right:4px}._liveTag_85daq_68{position:relative;display:inline-flex;align-items:center;border-radius:12px;border:1px solid;padding:0 10px;height:22px;font-size:12px;line-height:22px;overflow:hidden;transition:border-color .3s,color .3s;white-space:nowrap}._liveTagFill_85daq_83{position:absolute;left:0;top:0;bottom:0;opacity:.35;transition:width .5s ease,background-color .3s;pointer-events:none}._liveTagContent_85daq_93{position:relative;z-index:1;display:inline-flex;align-items:center}._liveTagHistory_85daq_100{background:#2a2a2a;border-color:#424242;color:#d1d5db}._liveTagText_85daq_106{margin-left:4px}._countdownStrong_85daq_111{font-variant-numeric:tabular-nums}._qrcodePopover_85daq_116{display:flex;flex-direction:column;align-items:center;padding:8px}._qrcodeSection_85daq_123{display:flex;flex-direction:column;align-items:center;padding:16px;margin-bottom:12px;border:1px solid #333;border-radius:8px;background:#111}._qrcodeTitle_85daq_134{font-size:14px;font-weight:600;color:#e5e5e5;margin-bottom:12px}._qrcodeUrlInput_85daq_141{margin-top:12px;font-size:12px;font-family:Menlo,Monaco,monospace}._qrcodeUrlCopy_85daq_147{cursor:pointer;color:#888;transition:color .2s}._qrcodeUrlCopy_85daq_147:hover{color:#3b82f6}._settingsGroupBox_85daq_158{border:1px solid #333;border-radius:8px;background:#111;padding:4px 16px;margin-bottom:12px}._settingsGroupTitle_85daq_166{font-size:14px;font-weight:600;color:#e5e5e5;padding:12px 0 4px;border-bottom:1px solid #333}._settingsItem_85daq_175{display:flex;justify-content:space-between;align-items:center;padding:12px 0}._settingsLabel_85daq_182{font-size:14px}._tokenStatsEmpty_85daq_187{padding:8px 4px;color:#999;font-size:13px}._tokenStatsContainer_85daq_194{display:flex;gap:12px;align-items:flex-start}._tokenStatsColumn_85daq_200{min-width:240px}._toolStatsColumn_85daq_204{min-width:180px}._modelCard_85daq_209{border:1px solid #333;border-radius:6px;padding:8px 10px;background:#111}._modelCardSpaced_85daq_216{margin-bottom:10px}._modelName_85daq_222{font-size:13px;font-weight:600;color:#e5e5e5;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._statsTable_85daq_232{width:100%;border-collapse:collapse}._th_85daq_237{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#888;font-weight:400;text-align:right}._td_85daq_247{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#e5e5e5;text-align:right}._label_85daq_256{padding:2px 12px;font-size:12px;font-family:monospace;white-space:nowrap;color:#aaa;font-weight:400;text-align:left}._rowBorder_85daq_266{border-bottom:1px solid #2a2a2a}._rebuildCard_85daq_270{border:1px solid #333;border-radius:6px;padding:8px 10px;margin-top:10px;background:#111}._rebuildTotalRow_85daq_278{border-top:1px solid #444}._rebuildTotalRow_85daq_278 td{font-weight:600}._promptExportBar_85daq_287{margin-bottom:12px}._promptScrollArea_85daq_291{max-height:500px;overflow:auto}._promptEmpty_85daq_296{color:#999;padding:12px}._promptTimestamp_85daq_302{color:#666;font-size:12px;margin:12px 0 4px;padding-bottom:6px}._textPromptCard_85daq_310{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._preText_85daq_319{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}._systemCollapse_85daq_329{margin:4px 0;background:#1a1a1a;border:1px solid #303030;border-radius:6px}._systemLabel_85daq_336{color:#888;font-size:12px}._preSys_85daq_341{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#999;margin:0}._promptTextarea_85daq_351{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_85daq_367{display:flex;justify-content:center;padding:40px 0}._projectStatsEmpty_85daq_373{color:#999;padding:40px 0;text-align:center;font-size:13px}._projectStatsContent_85daq_380{display:flex;flex-direction:column;gap:16px}._projectStatsUpdated_85daq_386{color:#666;font-size:12px;text-align:right}._projectStatsSummary_85daq_392{display:grid;grid-template-columns:1fr 1fr;gap:10px}._projectStatCard_85daq_398{background:#111;border:1px solid #333;border-radius:8px;padding:14px 12px;text-align:center}._projectStatValue_85daq_406{font-size:22px;font-weight:700;color:#e5e5e5;font-family:monospace;font-variant-numeric:tabular-nums}._projectStatLabel_85daq_414{font-size:12px;color:#888;margin-top:4px}._projectStatsSection_85daq_420{display:flex;flex-direction:column;gap:10px}._projectStatsSectionTitle_85daq_426{font-size:14px;font-weight:600;color:#ccc;padding-bottom:4px;border-bottom:1px solid #333}._projectStatsModelCard_85daq_434{background:#111;border:1px solid #333;border-radius:6px;padding:10px 12px}._projectStatsModelHeader_85daq_441{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;padding-bottom:4px;border-bottom:1px solid #333}._projectStatsModelName_85daq_450{font-size:13px;font-weight:600;color:#e5e5e5}._projectStatsModelCount_85daq_456{font-size:12px;color:#888;font-family:monospace}._pluginDirHint_85daq_463{margin-bottom:12px;font-size:12px;color:#888}._pluginDirPath_85daq_469{font-family:Menlo,Monaco,monospace;color:#aaa;cursor:pointer;padding:1px 4px;border-radius:3px;background:#1a1a1a}._pluginDirPath_85daq_469:hover{color:#3b82f6}._pluginList_85daq_482{display:flex;flex-direction:column;gap:8px}._pluginItem_85daq_488{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border:1px solid #303030;border-radius:6px;background:#141414}._pluginInfo_85daq_498{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}._pluginName_85daq_506{font-size:14px;color:#e5e5e5;font-weight:500}._pluginFile_85daq_512{font-size:12px;color:#666;font-family:Menlo,Monaco,monospace}._pluginHooks_85daq_518{display:flex;gap:4px;flex-wrap:wrap;margin-top:2px}._pluginHookTag_85daq_525{font-size:11px;padding:0 5px;border-radius:3px;background:#1e3a5f;color:#6cb6ff;line-height:18px}._pluginActions_85daq_534{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:12px}._pluginEmpty_85daq_542{text-align:center;padding:32px 0;color:#999}._cachePopover_85daq_549{max-width:800px}._cacheScrollArea_85daq_553{max-height:450px;overflow-y:auto}._cachePopoverTitle_85daq_558{display:flex;align-items:center;gap:6px;font-size:14px;font-weight:600;color:#e5e5e5}._cachePopoverHeader_85daq_567{margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid #333}._cacheCopyBtn_85daq_573{font-size:14px;color:#888;cursor:pointer;transition:color .2s;margin-left:8px}._cacheCopyBtn_85daq_573:hover{color:#e5e5e5}._cachePopoverEmpty_85daq_585{padding:8px 4px;color:#999;font-size:13px}._cacheTokenInfo_85daq_591{display:flex;align-items:center;font-size:12px;font-family:monospace;color:#aaa;margin-bottom:8px}._cacheSection_85daq_600{margin-bottom:10px}._cacheSectionTitle_85daq_604{font-size:12px;font-weight:600;color:#aaa;margin-bottom:4px}._cacheCodeBlock_85daq_611{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#ccc;background:#111;border:1px solid #2a2a2a;border-radius:4px;padding:8px;margin:4px 0;font-family:Menlo,Monaco,monospace}._cacheCodeBlockSystem_85daq_625{white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:1.5;color:#ccc;background:#0d1b2a;border:1px solid #1b3a5c;border-radius:4px;padding:8px;margin:4px 0;font-family:Menlo,Monaco,monospace}._cacheNavBtn_85daq_639{margin-left:auto;font-size:11px;color:#1668dc;cursor:pointer;border:1px solid #1668dc;border-radius:3px;padding:1px 6px;white-space:nowrap}._cacheNavBtn_85daq_639:hover{background:#1668dc26}._cacheNavList_85daq_654{width:600px;max-height:300px;overflow-y:auto}._cacheNavItem_85daq_660{padding:4px 8px;font-size:12px;color:#ccc;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-radius:3px}._cacheNavItem_85daq_660:hover{background:#1668dc33;color:#fff}._cacheBlockHighlight_85daq_676{box-shadow:0 0 10px #1668dc99;transition:box-shadow .2s ease-in}._cacheBlockHighlightFading_85daq_681{box-shadow:0 0 10px #1668dc00;transition:box-shadow 3s ease-out}._cacheBorderSvg_85daq_686{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible}._cacheBorderSvgFading_85daq_695{opacity:0;transition:opacity 3s ease-out}._cacheBorderRect_85daq_700{animation:_cacheDashRotate_85daq_1 4s linear infinite}@keyframes _cacheDashRotate_85daq_1{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}._centerEmpty_oxhcp_1{display:flex;align-items:center;justify-content:center;height:100%}._scrollContainer_oxhcp_8{overflow:auto;height:100%;-webkit-overflow-scrolling:touch;will-change:scroll-position}._listItem_oxhcp_15{cursor:pointer;padding:8px 12px;border-left:3px solid transparent;border-bottom:1px solid #1f1f1f;transition:background .15s}._listItem_oxhcp_15:hover{background:#151515}._listItemActive_oxhcp_27{background:#1a2332;border-left-color:#3b82f6}._listItemActive_oxhcp_27:hover{background:#1a2332}._itemContent_oxhcp_36{width:100%;min-width:0}._itemHeader_oxhcp_41{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px}._tagNoMargin_oxhcp_49{margin:0;font-size:12px}._modelName_oxhcp_54{font-size:12px}._time_oxhcp_58{font-size:12px;color:#6b7280;margin-left:auto}._detailRow_oxhcp_64{display:flex;gap:8px;font-size:12px;align-items:center}._urlText_oxhcp_71{color:#555;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}._duration_oxhcp_80{color:#6b7280;flex-shrink:0}._statusOk_oxhcp_85{color:#52c41a;opacity:.5;flex-shrink:0}._statusErr_oxhcp_91{color:#ef4444;flex-shrink:0}._statusDefault_oxhcp_96{color:#9ca3af;flex-shrink:0}._usageBox_oxhcp_101{background:#111;border-radius:4px;padding:3px 6px;margin-top:4px;font-size:12px;color:#6b7280;line-height:1.6}._cacheDot_oxhcp_111{display:inline-block;width:6px;height:6px;border-radius:50%;margin:0 3px;vertical-align:middle}._cacheDotLoss_oxhcp_120{background-color:#8b1a1a;cursor:help}._cacheDotNormal_oxhcp_125{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}._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)}}._root_1a6ku_1{display:flex;height:100%;min-height:0;gap:0}._sidebar_1a6ku_9{width:220px;flex-shrink:0;border-right:1px solid #2a2a2a;overflow-y:auto;padding:4px 0;-webkit-overflow-scrolling:touch}._section_1a6ku_18{-webkit-user-select:none;user-select:none}._sectionHeader_1a6ku_22{display:flex;align-items:center;gap:6px;width:100%;padding:6px 10px;cursor:pointer;color:#d1d5db;font-size:12px;font-weight:600;transition:background .15s;background:none;border:0;text-align:left;font:inherit}._sectionHeader_1a6ku_22:hover{background:#ffffff0d}._sectionHeader_1a6ku_22:focus-visible{outline:1px solid rgba(99,179,237,.75);outline-offset:-1px}._arrow_1a6ku_48{font-size:10px;color:#888;flex-shrink:0}._sectionTitle_1a6ku_54{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._sectionCount_1a6ku_62{font-size:11px;color:#666;background:#1f1f1f;border-radius:10px;padding:0 6px;line-height:18px}._sectionBody_1a6ku_71{padding:2px 0}._historyToggle_1a6ku_76{display:flex;align-items:center;gap:6px;width:100%;padding:4px 10px 4px 14px;cursor:pointer;color:#666;font-size:11px;transition:color .15s,background .15s;background:none;border:0;text-align:left;font:inherit}._historyToggle_1a6ku_76:hover{color:#888;background:#ffffff08}._historyToggle_1a6ku_76:focus-visible{outline:1px solid rgba(99,179,237,.75);outline-offset:-1px}._historyToggleLabel_1a6ku_102{flex:1}._item_1a6ku_107{display:flex;align-items:center;justify-content:space-between;width:100%;padding:5px 10px 5px 24px;font-size:12px;color:#888;cursor:pointer;transition:background .15s,color .15s;background:none;border:0;text-align:left;font:inherit}._item_1a6ku_107:hover{background:#ffffff0a;color:#d1d5db}._item_1a6ku_107:focus-visible{outline:1px solid rgba(99,179,237,.75);outline-offset:-1px}._itemActive_1a6ku_133{background:#63b3ed1f;color:#63b3ed}._itemActive_1a6ku_133:hover{background:#63b3ed29;color:#63b3ed}._itemContent_1a6ku_143{flex:1;min-width:0;overflow:hidden}._itemLabel_1a6ku_149{font-family:monospace;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}._itemSublabel_1a6ku_157{font-size:10px;color:#555;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}._itemTime_1a6ku_166{font-size:9px;color:#555;flex-shrink:0;margin-left:4px;font-family:monospace}._content_1a6ku_175{flex:1;min-width:0;overflow:auto;padding:12px 16px;-webkit-overflow-scrolling:touch}._contentEmpty_1a6ku_183{height:100%;display:flex;align-items:center;justify-content:center}._contentInner_1a6ku_190{padding-bottom:20px}._emptyWrap_1a6ku_194{display:flex;align-items:center;justify-content:center;height:200px}._roleHeader_1a6ku_202{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:nowrap}._roleBadge_1a6ku_210{font-size:10px;font-weight:600;letter-spacing:.04em;padding:2px 7px;border-radius:4px;flex-shrink:0}._role_user_1a6ku_219{background:#3b82f62e;color:#60a5fa;border:1px solid rgba(59,130,246,.3)}._role_assistant_1a6ku_225{background:#8b5cf62e;color:#a78bfa;border:1px solid rgba(139,92,246,.3)}._roleLabel_1a6ku_231{font-size:11px;color:#666;flex:1;min-width:0}._contentTime_1a6ku_238{margin-left:auto;font-size:10px;color:#555;font-family:monospace;flex-shrink:0}._turnDivider_1a6ku_246{border:none;border-top:1px solid #1e1e1e;margin:14px 0}._textBlock_1a6ku_253{margin-bottom:8px;border:1px solid #222;border-radius:6px;overflow:hidden}._textBlockBar_1a6ku_260{display:flex;align-items:center;gap:6px;padding:4px 10px;background:#141414;border-bottom:1px solid #222}._textBlockBody_1a6ku_269{padding:10px 12px;font-size:13px;line-height:1.7;color:#d1d5db;word-break:break-word}._textBlockCompact_1a6ku_277{position:relative;padding:8px 10px;font-size:12px;color:#aaa}._textBlockCompactFloat_1a6ku_284{float:right;margin-left:6px;margin-bottom:2px}._thinkingBlock_1a6ku_291{margin-bottom:8px;border:1px solid #2a2a1e;border-radius:6px;overflow:hidden;background:#111108}._thinkingHeader_1a6ku_299{display:flex;align-items:center;gap:6px;padding:5px 10px;cursor:pointer;font-size:12px;color:#888;transition:background .15s}._thinkingHeader_1a6ku_299:hover{background:#ffffc808}._thinkingPreview_1a6ku_314{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#666;font-size:11px}._thinkingBody_1a6ku_324{padding:8px 12px;border-top:1px solid #2a2a1e}._toolBlock_1a6ku_330{margin-bottom:8px;border:1px solid #222;border-radius:6px;overflow:hidden}._toolBlockResult_1a6ku_337{border-color:#1a2a1a}._toolBlockError_1a6ku_341{border-color:#2a1a1a}._toolBlockHeader_1a6ku_345{display:flex;align-items:center;gap:8px;padding:5px 10px;background:#141414;border-bottom:1px solid #222;font-size:12px;flex-wrap:wrap}._toolBlockBody_1a6ku_356{padding:8px 10px;font-size:12px}._toolName_1a6ku_361{color:#d1d5db;font-weight:500;font-family:monospace}._toolId_1a6ku_367{color:#555;font-size:10px;font-family:monospace;margin-left:auto}._errorLabel_1a6ku_374{font-size:10px;color:#f87171;background:#ef44441f;border:1px solid rgba(239,68,68,.25);border-radius:3px;padding:1px 5px}._blockTag_1a6ku_384{font-size:9px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:1px 5px;border-radius:3px;background:#1a1a1a;color:#666;border:1px solid #2a2a2a;flex-shrink:0}._blockTagText_1a6ku_397{background:#3b82f61a;color:#60a5fa;border-color:#3b82f633}._blockTagThinking_1a6ku_403{background:#eab3081a;color:#ca8a04;border-color:#eab30833}._blockTagResult_1a6ku_409{background:#22c55e1a;color:#4ade80;border-color:#22c55e33}._blockTagError_1a6ku_415{background:#ef44441a;color:#f87171;border-color:#ef444433}._jsonBlock_1a6ku_422{margin-bottom:8px;border:1px solid #222;border-radius:6px;overflow:hidden}._jsonBlockLabel_1a6ku_429{font-size:10px;color:#666;padding:3px 10px;background:#141414;border-bottom:1px solid #222;font-family:monospace}._blockSeparator_1a6ku_439{border:none;border-top:1px solid #2a2a2a;margin:16px 0}._markdownBody_1a6ku_446{font-size:13px;line-height:1.7;color:#d1d5db;word-break:break-word}._container_ty3f8_1{height:100%;overflow:auto;padding:0 16px;-webkit-overflow-scrolling:touch;will-change:scroll-position}._emptyState_ty3f8_9{display:flex;align-items:center;justify-content:center;height:100%}._urlSection_ty3f8_16{padding:12px 0;border-bottom:1px solid #1f1f1f;display:flex;align-items:flex-start}._urlLeft_ty3f8_23{flex:1;min-width:0}._tokenStatsBox_ty3f8_28{flex-shrink:0;padding-left:12px;display:flex;align-items:center}._tokenGrid_ty3f8_35{display:flex;border:1px solid #303030;border-radius:6px;overflow:hidden;min-width:360px;font-size:11px;line-height:1.6}._tokenRows_ty3f8_45{flex:1}._tokenRow_ty3f8_45{display:flex}._tokenRowBorder_ty3f8_53{border-top:1px solid #303030}._tokenLabel_ty3f8_57{color:#888;padding:4px 8px;white-space:nowrap;font-weight:600}._tokenTd_ty3f8_64{flex:1;color:#d1d5db;text-align:right;padding:4px 8px;font-family:monospace;white-space:nowrap}._tokenHitRate_ty3f8_73{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_ty3f8_86{color:#888;font-size:10px;font-family:sans-serif}._tokenRowBorder_ty3f8_53 td{border-top:1px solid #303030}._urlText_ty3f8_96{color:#d1d5db;font-size:13px;margin-bottom:8px;word-break:break-all}._metaText_ty3f8_103,._headersContainer_ty3f8_107{font-size:12px}._headerRow_ty3f8_111{display:flex;padding:4px 0;border-bottom:1px solid #1f1f1f}._headerKey_ty3f8_117{min-width:200px;flex-shrink:0}._headerValue_ty3f8_122{word-break:break-all;margin-left:8px}._streamingBox_ty3f8_127{padding:20px;background:#1a1a1a;border-radius:6px;border:1px solid #2a2a2a}._bodyToolbar_ty3f8_134{display:flex;gap:8px;margin-bottom:8px}._rawTextPre_ty3f8_140{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_ty3f8_153{padding:12px 0}._collapseSpacing_ty3f8_157{margin-bottom:16px}._bodyLabel_ty3f8_161{margin:0}._bodyHeader_ty3f8_165{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}._diffSection_ty3f8_172{margin-bottom:16px}._diffToggle_ty3f8_176{display:inline-block;margin-bottom:8px;cursor:pointer}._diffIcon_ty3f8_182{font-size:12px;margin-left:4px}._viewInChatBtn_ty3f8_187{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_ty3f8_187:hover{border-color:#666;color:#d1d5db;background:#ffffff0f}._reminderSelect_ty3f8_208{min-width:140px;font-size:12px}._reminderSelect_ty3f8_208 .ant-select-selector.ant-select-selector{border-radius:2px;border-color:#424242;background:transparent;min-height:26px;height:auto;padding:0 8px;font-family:monospace}._reminderSelect_ty3f8_208 .ant-select-selection-placeholder{font-size:11px}._avatar_s8m0t_3{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}._avatarImg_s8m0t_13{width:32px;height:32px;border-radius:50%;flex-shrink:0;object-fit:cover}._bubble_s8m0t_21{border-radius:8px;padding:10px 14px;max-width:100%;font-size:14px;line-height:1.6;word-break:break-word}._messageRow_s8m0t_32{display:flex;gap:10px;padding:8px 0}._messageRowEnd_s8m0t_38{display:flex;gap:10px;padding:8px 0;justify-content:flex-end}._contentCol_s8m0t_47{min-width:0;flex:1}._contentColLimited_s8m0t_52{min-width:0;max-width:80%;width:fit-content}._labelRow_s8m0t_60{display:flex;justify-content:space-between;align-items:center;margin-bottom:2px}._labelRowEnd_s8m0t_67{display:flex;justify-content:flex-end;align-items:center;margin-bottom:2px}._labelRight_s8m0t_74{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}._labelText_s8m0t_82{font-size:11px}._timeText_s8m0t_86,._timeTextNoMargin_s8m0t_92{font-size:10px;color:#6b7280;flex-shrink:0}._labelTextRight_s8m0t_98{font-size:11px;margin-left:auto}._bubbleUser_s8m0t_105{background:#1668dc;color:#e5e7eb}._bubbleAssistant_s8m0t_111{background:#141414;color:#e5e7eb;transition:box-shadow 0s;position:relative}._bubbleHighlight_s8m0t_119{box-shadow:0 0 10px #1668dc99}._bubbleHighlightFading_s8m0t_123{box-shadow:0 0 10px #1668dc00;transition:box-shadow 5s ease-out}._borderSvg_s8m0t_128{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;overflow:visible}._borderSvgFading_s8m0t_137{opacity:0;transition:opacity 5s ease-out}._borderRect_s8m0t_142{animation:_dashRotate_s8m0t_1 4s linear infinite}@keyframes _dashRotate_s8m0t_1{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}._bubblePlan_s8m0t_151{background:#141428;border:5px solid #1668dc;font-size:12px;color:#e5e7eb}._bubbleSubAgent_s8m0t_159{background:#1a1a2e;color:#e5e7eb}._bubbleSelection_s8m0t_165{background:#1a3a1a;color:#e5e7eb}._systemTagLabel_s8m0t_173{font-size:12px}._skillLabel_s8m0t_177{font-size:12px;color:#a78bfa}._systemTagPre_s8m0t_182{font-size:12px;color:#9ca3af;white-space:pre-wrap;word-break:break-all;margin:0}._collapseMargin_s8m0t_190{margin:4px 0}._collapseNoMargin_s8m0t_194{margin:0}._thinkingLabel_s8m0t_200{font-size:12px}._bashCollapseLabel_s8m0t_204{font-size:12px;color:#9ca3af}._toolBox_s8m0t_211{background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._toolLabel_s8m0t_220{color:#a78bfa}._codePre_s8m0t_226{font-size:12px;margin:4px 0 0;white-space:pre-wrap;word-break:break-all;background:#0d1117;border-radius:4px;padding:6px 8px}._pathTag_s8m0t_238{color:#7dd3fc;font-size:11px}._pathTagClickable_s8m0t_243{color:#7dd3fc;font-size:11px;cursor:pointer}._pathTagClickable_s8m0t_243:hover{text-decoration:underline;color:#93c5fd}._descSpan_s8m0t_256{color:#6b7280;font-weight:400}._secondarySpan_s8m0t_261{color:#6b7280}._patternSpan_s8m0t_265{color:#fbbf24}._kvContainer_s8m0t_271{margin-top:4px;font-size:11px}._kvItem_s8m0t_276{margin:2px 0}._kvKey_s8m0t_280{color:#7dd3fc}._kvValue_s8m0t_284{color:#9ca3af}._toolResult_s8m0t_290{background:#111827;border:1px solid #1e293b;border-radius:6px;padding:6px 10px;margin:2px 0 6px;font-size:11px}._toolResultLabel_s8m0t_299{font-size:11px}._compactLabel_s8m0t_305{font-size:12px;color:#93c5fd}._compactPre_s8m0t_310{font-size:12px;color:#d1d5db;white-space:pre-wrap;word-break:break-all;margin:0}._viewRequestBtn_s8m0t_320{font-size:10px;color:#555;cursor:pointer;margin-left:6px;flex-shrink:0}._viewRequestBtn_s8m0t_320:hover{color:#93c5fd}._optionList_s8m0t_334{padding-left:8px}._optionDesc_s8m0t_338{color:#555;margin-left:6px;font-weight:400}._questionText_s8m0t_346{font-size:13px;color:#ccc;margin-bottom:4px}._questionSpacing_s8m0t_352{margin-bottom:10px}._option_s8m0t_334{font-size:12px;padding:1px 0}._askQuestionBox_s8m0t_365{background:#0d1f0d;border:1px solid #2ea043;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._askQuestionHeader_s8m0t_374{display:inline-block;background:#1a3a1a;color:#7ee787;font-size:10px;padding:1px 6px;border-radius:4px;margin-bottom:4px;font-weight:600}._askQuestionText_s8m0t_385{color:#e5e7eb;font-size:13px;margin-bottom:4px}._askOptionItem_s8m0t_391{font-size:12px;color:#9ca3af;padding:1px 0;display:flex;align-items:center;gap:4px}._askOptionSelected_s8m0t_400{color:#e5e7eb;font-weight:600}._askCheckSvg_s8m0t_405{flex-shrink:0;vertical-align:middle}._planModeBox_s8m0t_412{background:#0d1528;border:1px solid #1668dc;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._planModeLabel_s8m0t_421{color:#93c5fd;font-weight:600}._planModePermissions_s8m0t_426{margin-top:6px;padding-top:6px;border-top:1px solid #1e3a5f}._planModePermLabel_s8m0t_432{color:#6b7280;font-size:11px;margin-bottom:2px}._planModeHeader_s8m0t_438{display:flex;justify-content:space-between;align-items:center}._planStatusBadge_s8m0t_444{font-size:11px;font-weight:600;padding:1px 8px;border-radius:10px;line-height:1.6}._planStatusApproved_s8m0t_452{border-color:#22c55e}._planStatusApproved_s8m0t_452._planStatusBadge_s8m0t_444{background:#22c55e26;color:#4ade80}._planStatusRejected_s8m0t_461{border-color:#ef4444}._planStatusRejected_s8m0t_461._planStatusBadge_s8m0t_444{background:#ef444426;color:#f87171}._planStatusPending_s8m0t_470{border-color:#1668dc}._planStatusPending_s8m0t_470._planStatusBadge_s8m0t_444{background:#1668dc26;color:#93c5fd}._planFeedback_s8m0t_479{margin-top:6px;padding:6px 8px;background:#ef444414;border-radius:4px;font-size:12px;color:#e5e7eb}._planFeedbackLabel_s8m0t_488{color:#f87171;font-weight:600}._planApprovalActions_s8m0t_493{display:flex;gap:8px;margin-top:8px}._planApproveBtn_s8m0t_499{padding:4px 16px;border-radius:4px;border:1px solid #22c55e;background:#22c55e26;color:#4ade80;font-size:13px;cursor:pointer;transition:background .15s}._planApproveBtn_s8m0t_499:hover{background:#22c55e4d}._planRejectBtn_s8m0t_514{padding:4px 16px;border-radius:4px;border:1px solid #ef4444;background:#ef444426;color:#f87171;font-size:13px;cursor:pointer;transition:background .15s}._planRejectBtn_s8m0t_514:hover{background:#ef44444d}._planOptionBtn_s8m0t_529{padding:4px 16px;border-radius:4px;border:1px solid #6b7280;background:#6b728026;color:#d1d5db;font-size:13px;cursor:pointer;transition:background .15s}._planOptionBtn_s8m0t_529:hover{background:#6b72804d}._planFeedbackInputWrap_s8m0t_544{margin-top:8px}._planFeedbackTextarea_s8m0t_548{width:100%;min-height:60px;max-height:120px;padding:8px 10px;border-radius:4px;border:1px solid #4b5563;background:#1f2937;color:#e5e7eb;font-size:13px;line-height:1.5;resize:vertical;font-family:inherit;outline:none}._planFeedbackTextarea_s8m0t_548:focus{border-color:#3b82f6}._planFeedbackBtnRow_s8m0t_568{display:flex;gap:8px;margin-top:6px;justify-content:flex-end}._planFeedbackSendBtn_s8m0t_575{padding:4px 16px;border-radius:4px;border:1px solid #3b82f6;background:#3b82f633;color:#60a5fa;font-size:13px;cursor:pointer;transition:background .15s}._planFeedbackSendBtn_s8m0t_575:hover{background:#3b82f659}._planFeedbackSendBtn_s8m0t_575:disabled{opacity:.4;cursor:not-allowed}._planFeedbackCancelBtn_s8m0t_595{padding:4px 16px;border-radius:4px;border:1px solid #6b7280;background:#6b728026;color:#d1d5db;font-size:13px;cursor:pointer;transition:background .15s}._planFeedbackCancelBtn_s8m0t_595:hover{background:#6b72804d}._askQuestionInteractive_s8m0t_612{background:#0d1528;border:1px solid #1668dc;border-radius:8px;padding:8px 12px;margin:6px 0;font-size:12px}._askRadioGroup_s8m0t_621{display:flex;flex-direction:column;gap:2px;padding-left:4px;margin-top:4px}._askRadioItem_s8m0t_629{color:#d1d5db;font-size:12px;padding:3px 0;cursor:pointer;display:flex;align-items:baseline;gap:6px;-webkit-user-select:none;user-select:none}._askRadioItem_s8m0t_629:hover{color:#fff}._askRadioItemSelected_s8m0t_644{color:#58a6ff}._askRadioDot_s8m0t_648{flex-shrink:0;font-size:13px;line-height:1}._askRadioGroup_s8m0t_621 .ant-radio-wrapper,._askCheckboxGroup_s8m0t_655 .ant-checkbox-wrapper{color:#d1d5db;font-size:12px;padding:3px 0;cursor:pointer;pointer-events:auto}._askRadioGroup_s8m0t_621 .ant-radio-wrapper>span,._askRadioGroup_s8m0t_621 .ant-radio{cursor:pointer;pointer-events:auto}._askRadioGroup_s8m0t_621 .ant-radio-input{cursor:pointer}._askCheckboxGroup_s8m0t_655{display:flex;flex-direction:column;gap:2px;padding-left:4px;margin-top:4px}._askOtherInput_s8m0t_681{margin-top:4px;margin-left:24px;width:calc(100% - 24px)}._askOtherInput_s8m0t_681 .ant-input{background:#1f2937;border-color:#4b5563;color:#e5e7eb;font-size:12px}._askSubmitRow_s8m0t_694{display:flex;justify-content:flex-end;margin-top:8px}._askSubmitBtn_s8m0t_700{padding:4px 20px;border-radius:4px;border:1px solid #1668dc;background:#1668dc33;color:#60a5fa;font-size:13px;cursor:pointer;transition:background .15s}._askSubmitBtn_s8m0t_700:hover{background:#1668dc59}._askSubmitBtn_s8m0t_700:disabled{opacity:.4;cursor:not-allowed}._askMarkdownLayout_s8m0t_720{display:flex;gap:12px;margin-top:4px}._askMarkdownLayout_s8m0t_720>:first-child{flex:1;min-width:0}._askMarkdownPreview_s8m0t_731{flex:1;min-width:0;background:#0d1117;border:1px solid #2a2a3e;border-radius:6px;padding:8px 10px;font-size:12px;color:#d1d5db;max-height:240px;overflow-y:auto}._askMarkdownPreview_s8m0t_731 pre{white-space:pre-wrap;word-break:break-all;margin:0;font-family:SF Mono,Menlo,Consolas,monospace;font-size:11px;line-height:1.5}._wrapper_cz5ph_1{margin:6px 0;background:#1a1a2e;border:1px solid #2a2a3e;border-radius:8px;padding:8px 12px}._header_cz5ph_9{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}._headerRight_cz5ph_16{display:flex;align-items:center;gap:12px;flex-shrink:0;white-space:nowrap}._filePath_cz5ph_24{color:#a78bfa;font-size:12px;font-weight:600}._filePathClickable_cz5ph_30{color:#a78bfa;font-size:12px;font-weight:600;cursor:pointer}._filePathClickable_cz5ph_30:hover{text-decoration:underline;color:#c4b5fd}._toggle_cz5ph_42{color:#6b7280;font-size:11px;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;flex-shrink:0}._diffSummary_cz5ph_51{font-size:11px;color:#6b7280}._diffBody_cz5ph_58{display:flex;font-family:SF Mono,Cascadia Code,Fira Code,Menlo,Consolas,monospace;font-size:12px;line-height:1.5}._gutter_cz5ph_66{flex-shrink:0;-webkit-user-select:none;user-select:none}._gutterRow_cz5ph_71{display:flex;height:18px}._lineNumOld_cz5ph_76,._lineNumNew_cz5ph_77{text-align:right;color:#484f58;padding:0 6px 0 2px;box-sizing:border-box}._prefix_cz5ph_84{width:16px;min-width:16px;text-align:center;font-weight:600}._codeWrap_cz5ph_92{flex:1;min-width:0;overflow-x:auto}._codeInner_cz5ph_99{display:inline-block;min-width:100%}._codeLine_cz5ph_104{white-space:pre;padding:0 4px;height:18px}._rowContext_cz5ph_112{background:#1a1a2e;color:#8b949e}._rowDel_cz5ph_117{background:#ef44441f;color:#fca5a5}._rowDel_cz5ph_117._gutterRow_cz5ph_71{background:#341f31}._rowDel_cz5ph_117._gutterRow_cz5ph_71 ._prefix_cz5ph_84{color:#ef4444}._rowAdd_cz5ph_128{background:#22c55e1f;color:#86efac}._rowAdd_cz5ph_128._gutterRow_cz5ph_71{background:#1b2f34}._rowAdd_cz5ph_128._gutterRow_cz5ph_71 ._prefix_cz5ph_84{color:#22c55e}._rowContext_cz5ph_112._gutterRow_cz5ph_71{background:#1a1a2e}._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}._fileExplorer_1g58f_1{width:240px;flex-shrink:0;background:#111;border-right:1px solid #2a2a2a;display:flex;flex-direction:column;overflow:hidden;-webkit-user-select:none;user-select:none}._header_1g58f_12{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_1g58f_21{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._collapseBtn_1g58f_29{width:20px;height:20px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:0}._collapseBtn_1g58f_29:hover{color:#ccc;background:#2a2a2a}._treeContainer_1g58f_48{flex:1;overflow:auto;padding:4px 0}._treeItem_1g58f_54{display:flex;align-items:center;height:26px;padding:0 8px;cursor:pointer;color:#ccc;font-size:13px;white-space:nowrap;transition:background .1s}._treeItem_1g58f_54:hover{background:#1a1a1a}._treeItem_1g58f_54._treeItemSelected_1g58f_70{background:#532f00}._arrow_1g58f_74{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._icon_1g58f_83{width:16px;height:16px;flex-shrink:0;margin-right:6px;display:flex;align-items:center;justify-content:center}._fileName_1g58f_93{overflow:hidden;text-overflow:ellipsis}._fileNameInput_1g58f_98{background:transparent;border:none;border-bottom:1px solid #528bff;color:#ccc;font-size:13px;font-family:inherit;padding:0;margin:0;outline:none;width:100%;min-width:40px;height:20px;line-height:20px}._loading_1g58f_114{color:#555;font-size:12px;padding:4px 8px}._error_1g58f_120{color:#ff6b6b;font-size:12px;padding:4px 8px}._treeItemGitIgnored_1g58f_126{opacity:.4}._fileContentView_7x6gt_1{display:flex;flex-direction:column;height:100%;background:#0d0d0d;animation:_slideInFromRight_7x6gt_1 .25s ease-out}@keyframes _slideInFromRight_7x6gt_1{0%{transform:translate(-40px);opacity:0}to{transform:translate(0);opacity:1}}._closing_7x6gt_20{animation:_slideOutToRight_7x6gt_1 .2s ease-in forwards}@keyframes _slideOutToRight_7x6gt_1{0%{transform:translate(0);opacity:1}to{transform:translate(-40px);opacity:0}}._editorBanner_7x6gt_35{padding:6px 16px;background:#1a3a2a;color:#4ade80;font-size:12px;text-align:center;flex-shrink:0;border-bottom:1px solid #2a5a3a;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}._editorBanner_7x6gt_35:hover{background:#245a3a}._header_7x6gt_52{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._headerLeft_7x6gt_62{display:flex;align-items:center;gap:8px;flex:1;min-width:0}._headerRight_7x6gt_70{display:flex;align-items:center;gap:10px;flex-shrink:0}._backBtn_7x6gt_77{width:28px;height:28px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;flex-shrink:0;transition:background .15s,color .15s}._backBtn_7x6gt_77:hover{color:#ccc;background:#1a1a1a}._filePath_7x6gt_98{font-size:13px;color:#ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._fileSize_7x6gt_106{font-size:11px;color:#666;flex-shrink:0;margin-left:8px}._closeBtn_7x6gt_113{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:1px solid #3a3a3a;background:#1a1a1a;color:#888;border-radius:6px;cursor:pointer;transition:background .15s,color .15s,border-color .15s}._closeBtn_7x6gt_113:hover{background:#2a2a2a;color:#fff;border-color:#4a4a4a}._saveBtn_7x6gt_134{display:flex;align-items:center;gap:5px;padding:4px 12px;border:1px solid #3a3a3a;background:#1a1a1a;color:#ccc;font-size:12px;border-radius:6px;cursor:pointer;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}._saveBtn_7x6gt_134:hover:not(:disabled){background:#2a2a2a;color:#fff;border-color:#4a4a4a}._saveBtn_7x6gt_134:disabled{opacity:.4;cursor:not-allowed}._saveStatus_7x6gt_160{font-size:11px;color:#888;white-space:nowrap}._saveStatusSaved_7x6gt_166{color:#4caf50}._saveStatusFailed_7x6gt_170{color:#ff6b6b}._contentContainer_7x6gt_174{flex:1;overflow:hidden;background:#0d0d0d;display:flex;min-height:0;min-width:0}._editorWrapper_7x6gt_183{flex:1;display:flex;min-height:0;min-width:0;overflow:hidden}._lineNumCol_7x6gt_191{flex-shrink:0;width:56px;overflow:hidden;background:#0d0d0d;border-right:1px solid #2a2a2a;-webkit-user-select:none;user-select:none;padding-top:4px}._lineNumRow_7x6gt_201{padding:0 16px;text-align:right;color:#555;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:13px;line-height:1.5;white-space:nowrap}._editorCol_7x6gt_211{flex:1;min-width:0;min-height:0;display:flex}._editorCol_7x6gt_211 .cm-theme{flex:1;display:flex;min-height:0;min-width:0}._editorCol_7x6gt_211 .cm-editor{flex:1;min-width:0;min-height:0}._loading_7x6gt_231{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#666;font-size:14px}._error_7x6gt_241{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#ff6b6b;font-size:14px}._imageViewer_1vf1x_1{display:flex;flex-direction:column;height:100%;background:#0d0d0d}._header_1vf1x_8{display:flex;align-items:center;justify-content:space-between;padding:6px 16px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._headerLeft_1vf1x_18{display:flex;align-items:center;gap:8px;flex:1;min-width:0}._headerRight_1vf1x_26{display:flex;align-items:center;gap:10px;flex-shrink:0}._backBtn_1vf1x_33{width:28px;height:28px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;flex-shrink:0;transition:background .15s,color .15s}._backBtn_1vf1x_33:hover{color:#ccc;background:#1a1a1a}._filePath_1vf1x_54{font-size:13px;color:#ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._fileSize_1vf1x_62{font-size:11px;color:#666;flex-shrink:0}._toolbar_1vf1x_68{display:flex;align-items:center;gap:4px;padding:6px 16px;background:#111;border-bottom:1px solid #2a2a2a;flex-shrink:0}._toolBtn_1vf1x_78{width:28px;height:28px;border:1px solid #3a3a3a;background:#1a1a1a;color:#999;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;transition:background .15s,color .15s,border-color .15s}._toolBtn_1vf1x_78:hover{background:#2a2a2a;color:#fff;border-color:#4a4a4a}._zoomLabel_1vf1x_99{font-size:11px;color:#888;min-width:42px;text-align:center;-webkit-user-select:none;user-select:none}._canvasArea_1vf1x_107{flex:1;overflow:hidden;position:relative;cursor:grab;background-color:#1a1a1a;background-image:linear-gradient(45deg,#222 25%,transparent 25%),linear-gradient(-45deg,#222 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#222 75%),linear-gradient(-45deg,transparent 75%,#222 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0}._canvasArea_1vf1x_107._dragging_1vf1x_122{cursor:grabbing}._imageWrap_1vf1x_126{position:absolute;top:0;left:0;transform-origin:0 0}._imageWrap_1vf1x_126 img{display:block;max-width:none;image-rendering:auto}._statusBar_1vf1x_139{display:flex;align-items:center;gap:16px;padding:4px 16px;background:#111;border-top:1px solid #2a2a2a;flex-shrink:0;font-size:11px;color:#666}._loading_1vf1x_151{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#666;font-size:14px}._error_1vf1x_161{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#ff6b6b;font-size:14px}._gitChanges_nt7bg_1{width:240px;flex-shrink:0;background:#111;border-right:1px solid #2a2a2a;display:flex;flex-direction:column;overflow:hidden;-webkit-user-select:none;user-select:none}._header_nt7bg_12{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_nt7bg_21{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._collapseBtn_nt7bg_29{width:20px;height:20px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:0}._collapseBtn_nt7bg_29:hover{color:#ccc;background:#2a2a2a}._changesContainer_nt7bg_48{flex:1;overflow:auto;padding:4px 0}._changeItem_nt7bg_54{display:flex;align-items:center;height:26px;padding:0 8px;cursor:pointer;color:#ccc;font-size:13px;white-space:nowrap;transition:background .1s;gap:6px}._changeItem_nt7bg_54:hover{background:#1a1a1a}._changeItem_nt7bg_54._changeItemSelected_nt7bg_71{background:#532f00}._dirItem_nt7bg_75{display:flex;align-items:center;height:26px;padding:0 8px;color:#999;font-size:13px;white-space:nowrap;gap:6px}._dirArrow_nt7bg_86{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._dirName_nt7bg_95{overflow:hidden;text-overflow:ellipsis}._status_nt7bg_100{width:16px;flex-shrink:0;font-size:11px;font-weight:600;text-align:center;margin-left:auto}._icon_nt7bg_109{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center}._fileName_nt7bg_118{overflow:hidden;text-overflow:ellipsis;flex:1}._loading_nt7bg_124{color:#555;font-size:12px;padding:8px 12px}._error_nt7bg_130{color:#ff6b6b;font-size:12px;padding:8px 12px}._empty_nt7bg_136{color:#666;font-size:12px;padding:8px 12px;text-align:center}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
|
33
33
|
Theme: GitHub Dark
|
|
34
34
|
Description: Dark theme as seen on github.com
|
|
35
35
|
Author: github.com
|
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-CX2k5Bow.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DGeFNfQD.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="root"></div>
|
package/interceptor.js
CHANGED
|
@@ -11,7 +11,7 @@ import { homedir } from 'node:os';
|
|
|
11
11
|
import { fileURLToPath } from 'node:url';
|
|
12
12
|
import { dirname, join, basename } from 'node:path';
|
|
13
13
|
import { LOG_DIR } from './findcc.js';
|
|
14
|
-
import { assembleStreamMessage, cleanupTempFiles, findRecentLog, isAnthropicApiPath, isMainAgentRequest,
|
|
14
|
+
import { assembleStreamMessage, cleanupTempFiles, findRecentLog, isAnthropicApiPath, isMainAgentRequest, rotateLogFile } from './lib/interceptor-core.js';
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
@@ -85,6 +85,20 @@ function resolveResumeChoice(choice) {
|
|
|
85
85
|
return result;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
// Delta storage: 增量存储开关和状态(默认开启,设置 CCV_DISABLE_DELTA=1 关闭)
|
|
89
|
+
// 注意:delta 计算依赖 mainAgent 请求串行(Claude CLI 保证),不做并发互斥
|
|
90
|
+
const _deltaStorageEnabled = process.env.CCV_DISABLE_DELTA !== '1';
|
|
91
|
+
let _lastMessagesCount = 0; // 上一次 mainAgent 写入的完整 messages 数量
|
|
92
|
+
let _mainAgentDeltaCount = 0; // mainAgent 请求计数器(用于触发定期 checkpoint)
|
|
93
|
+
const CHECKPOINT_INTERVAL = 10; // 每 N 条 mainAgent 请求写一个 checkpoint
|
|
94
|
+
|
|
95
|
+
/** Delta storage: completed 写入成功后更新状态 */
|
|
96
|
+
function _commitDeltaState(originalLength) {
|
|
97
|
+
if (_deltaStorageEnabled && originalLength > 0) {
|
|
98
|
+
_lastMessagesCount = originalLength;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
88
102
|
// Teammate 子进程检测:--parent-session-id(旧模式)或 --agent-name(原生 team 模式)
|
|
89
103
|
const _isTeammate = process.argv.includes('--parent-session-id') || process.argv.includes('--agent-name');
|
|
90
104
|
// 提取 teammate 元数据(--agent-name worker-1 --team-name fix-ts-errors)
|
|
@@ -184,21 +198,24 @@ export function resetWorkspace() {
|
|
|
184
198
|
LOG_FILE = '';
|
|
185
199
|
}
|
|
186
200
|
|
|
187
|
-
const MAX_LOG_SIZE =
|
|
201
|
+
const MAX_LOG_SIZE = 250 * 1024 * 1024; // 250MB
|
|
188
202
|
|
|
189
203
|
function checkAndRotateLogFile() {
|
|
190
204
|
// Teammate 不做日志轮转,由 leader 负责
|
|
191
205
|
if (_isTeammate) return;
|
|
192
206
|
try {
|
|
193
|
-
if (!existsSync(LOG_FILE)) return;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
207
|
+
if (!existsSync(LOG_FILE) || statSync(LOG_FILE).size < MAX_LOG_SIZE) return;
|
|
208
|
+
} catch { return; }
|
|
209
|
+
const { filePath } = generateNewLogFilePath();
|
|
210
|
+
const result = rotateLogFile(LOG_FILE, filePath, MAX_LOG_SIZE);
|
|
211
|
+
if (result.rotated) {
|
|
212
|
+
LOG_FILE = result.newFile;
|
|
213
|
+
// 重置 delta 状态,强制下一条 mainAgent 请求写完整 checkpoint
|
|
214
|
+
if (_deltaStorageEnabled) {
|
|
215
|
+
_lastMessagesCount = 0;
|
|
216
|
+
_mainAgentDeltaCount = 0;
|
|
200
217
|
}
|
|
201
|
-
}
|
|
218
|
+
}
|
|
202
219
|
}
|
|
203
220
|
|
|
204
221
|
// 从环境变量 ANTHROPIC_BASE_URL 提取域名用于请求匹配
|
|
@@ -356,7 +373,7 @@ export function setupInterceptor() {
|
|
|
356
373
|
}
|
|
357
374
|
} catch { }
|
|
358
375
|
|
|
359
|
-
// 用户新指令边界:检查日志文件大小,超过
|
|
376
|
+
// 用户新指令边界:检查日志文件大小,超过 250MB 则切换新文件
|
|
360
377
|
if (requestEntry?.mainAgent) {
|
|
361
378
|
checkAndRotateLogFile();
|
|
362
379
|
// 仅 mainAgent 请求时缓存模型名,避免 SubAgent 覆盖
|
|
@@ -369,6 +386,36 @@ export function setupInterceptor() {
|
|
|
369
386
|
}
|
|
370
387
|
}
|
|
371
388
|
|
|
389
|
+
// Delta storage:仅 mainAgent 且开关启用时,将 body.messages 转为增量格式
|
|
390
|
+
let _deltaOriginalMessagesLength = 0; // 缓存本次请求的原始 messages 长度,用于 completed 后更新状态
|
|
391
|
+
if (_deltaStorageEnabled && requestEntry?.mainAgent && Array.isArray(requestEntry.body?.messages)) {
|
|
392
|
+
const messages = requestEntry.body.messages;
|
|
393
|
+
_deltaOriginalMessagesLength = messages.length;
|
|
394
|
+
_mainAgentDeltaCount++;
|
|
395
|
+
|
|
396
|
+
// 判断是否需要写 checkpoint
|
|
397
|
+
const needsCheckpoint =
|
|
398
|
+
_lastMessagesCount === 0 || // 进程重启 / 首次请求
|
|
399
|
+
messages.length < _lastMessagesCount || // messages 缩短(/clear、context 压缩)
|
|
400
|
+
(_mainAgentDeltaCount % CHECKPOINT_INTERVAL === 0); // 定期 checkpoint
|
|
401
|
+
|
|
402
|
+
if (needsCheckpoint) {
|
|
403
|
+
// checkpoint:保持完整 messages,标记 _isCheckpoint
|
|
404
|
+
requestEntry._deltaFormat = 1;
|
|
405
|
+
requestEntry._totalMessageCount = messages.length;
|
|
406
|
+
requestEntry._conversationId = 'mainAgent';
|
|
407
|
+
requestEntry._isCheckpoint = true;
|
|
408
|
+
} else {
|
|
409
|
+
// delta:只保留新增的 messages
|
|
410
|
+
const delta = messages.slice(_lastMessagesCount);
|
|
411
|
+
requestEntry._deltaFormat = 1;
|
|
412
|
+
requestEntry._totalMessageCount = messages.length;
|
|
413
|
+
requestEntry._conversationId = 'mainAgent';
|
|
414
|
+
requestEntry._isCheckpoint = false;
|
|
415
|
+
requestEntry.body.messages = delta;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
372
419
|
// 生成唯一请求 ID,用于关联在途请求和完成请求
|
|
373
420
|
const requestId = `${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
|
|
374
421
|
if (requestEntry) {
|
|
@@ -447,6 +494,7 @@ export function setupInterceptor() {
|
|
|
447
494
|
delete requestEntry.inProgress;
|
|
448
495
|
delete requestEntry.requestId;
|
|
449
496
|
appendFileSync(LOG_FILE, JSON.stringify(requestEntry) + '\n---\n');
|
|
497
|
+
_commitDeltaState(_deltaOriginalMessagesLength);
|
|
450
498
|
// Release memory: clear large objects after disk write
|
|
451
499
|
streamedContent = '';
|
|
452
500
|
requestEntry.response = null;
|
|
@@ -455,6 +503,7 @@ export function setupInterceptor() {
|
|
|
455
503
|
delete requestEntry.inProgress;
|
|
456
504
|
delete requestEntry.requestId;
|
|
457
505
|
appendFileSync(LOG_FILE, JSON.stringify(requestEntry) + '\n---\n');
|
|
506
|
+
_commitDeltaState(_deltaOriginalMessagesLength);
|
|
458
507
|
streamedContent = '';
|
|
459
508
|
requestEntry.response = null;
|
|
460
509
|
}
|
|
@@ -487,6 +536,7 @@ export function setupInterceptor() {
|
|
|
487
536
|
delete requestEntry.inProgress;
|
|
488
537
|
delete requestEntry.requestId;
|
|
489
538
|
appendFileSync(LOG_FILE, JSON.stringify(requestEntry) + '\n---\n');
|
|
539
|
+
_commitDeltaState(_deltaOriginalMessagesLength);
|
|
490
540
|
}
|
|
491
541
|
} else {
|
|
492
542
|
// 对于非流式响应,可以安全读取body
|
|
@@ -513,10 +563,12 @@ export function setupInterceptor() {
|
|
|
513
563
|
delete requestEntry.requestId;
|
|
514
564
|
|
|
515
565
|
appendFileSync(LOG_FILE, JSON.stringify(requestEntry) + '\n---\n');
|
|
566
|
+
_commitDeltaState(_deltaOriginalMessagesLength);
|
|
516
567
|
} catch (err) {
|
|
517
568
|
delete requestEntry.inProgress;
|
|
518
569
|
delete requestEntry.requestId;
|
|
519
570
|
appendFileSync(LOG_FILE, JSON.stringify(requestEntry) + '\n---\n');
|
|
571
|
+
_commitDeltaState(_deltaOriginalMessagesLength);
|
|
520
572
|
}
|
|
521
573
|
}
|
|
522
574
|
}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Delta Reconstructor — 增量日志重建模块
|
|
3
|
+
*
|
|
4
|
+
* 将 delta 格式的日志条目重建为完整的 messages 数组。
|
|
5
|
+
* 仅处理 mainAgent 条目,teammate/旧格式条目直接跳过。
|
|
6
|
+
*
|
|
7
|
+
* 提供两种 API:
|
|
8
|
+
* - reconstructEntries(entries): 批量重建,用于 readLogFile() 和 readLocalLog()
|
|
9
|
+
* - createIncrementalReconstructor(): 有状态的增量重建器,用于 watcher 逐条重建
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 判断一个条目是否为 checkpoint(应重置累积状态)。
|
|
14
|
+
* 三种情况视为 checkpoint:
|
|
15
|
+
* 1. 无 _deltaFormat 字段 → 旧格式全量条目
|
|
16
|
+
* 2. _isCheckpoint === true → 显式 checkpoint
|
|
17
|
+
* 3. _totalMessageCount === body.messages.length → 隐式 checkpoint(delta 长度 === 总长度)
|
|
18
|
+
*/
|
|
19
|
+
function isCheckpointEntry(entry) {
|
|
20
|
+
// 无 _deltaFormat:旧格式全量条目
|
|
21
|
+
if (!entry._deltaFormat) return true;
|
|
22
|
+
// 显式 checkpoint
|
|
23
|
+
if (entry._isCheckpoint) return true;
|
|
24
|
+
// 隐式 checkpoint:delta 长度等于总长度
|
|
25
|
+
const msgs = entry.body?.messages;
|
|
26
|
+
if (Array.isArray(msgs) && entry._totalMessageCount === msgs.length) return true;
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* 判断一个条目是否为需要重建的 delta 条目(mainAgent + _deltaFormat)。
|
|
32
|
+
*/
|
|
33
|
+
function isDeltaEntry(entry) {
|
|
34
|
+
return entry._deltaFormat && entry.mainAgent;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* 批量重建 — 用于 readLogFile() 和 readLocalLog()。
|
|
39
|
+
* 输入已去重的条目数组,输出重建后的条目数组(原地修改 body.messages)。
|
|
40
|
+
* 非 mainAgent delta 条目不受影响。
|
|
41
|
+
*
|
|
42
|
+
* @param {Array} entries - 已去重、按时间顺序排列的条目数组
|
|
43
|
+
* @returns {Array} 重建后的条目数组(同一引用,原地修改)
|
|
44
|
+
*/
|
|
45
|
+
export function reconstructEntries(entries) {
|
|
46
|
+
// 第一遍:正向重建
|
|
47
|
+
let accumulated = []; // mainAgent 累积 messages
|
|
48
|
+
const broken = []; // 记录重建失败的条目索引(用于第二遍补偿)
|
|
49
|
+
|
|
50
|
+
for (let i = 0; i < entries.length; i++) {
|
|
51
|
+
const entry = entries[i];
|
|
52
|
+
if (!isDeltaEntry(entry)) {
|
|
53
|
+
// 非 delta 条目(旧格式 / teammate):如果是 mainAgent 旧格式,重置累积状态
|
|
54
|
+
if (entry.mainAgent && Array.isArray(entry.body?.messages)) {
|
|
55
|
+
accumulated = [...entry.body.messages];
|
|
56
|
+
}
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// delta 条目处理
|
|
61
|
+
const msgs = entry.body?.messages;
|
|
62
|
+
if (!Array.isArray(msgs)) continue;
|
|
63
|
+
|
|
64
|
+
if (isCheckpointEntry(entry)) {
|
|
65
|
+
// checkpoint:用当前 messages 重置累积状态
|
|
66
|
+
accumulated = [...msgs];
|
|
67
|
+
} else {
|
|
68
|
+
// delta:拼接到累积数组
|
|
69
|
+
accumulated = [...accumulated, ...msgs];
|
|
70
|
+
// 挂载重建后的完整 messages(checkpoint/旧格式条目保持不变)
|
|
71
|
+
entry.body.messages = accumulated;
|
|
72
|
+
if (entry._totalMessageCount && accumulated.length !== entry._totalMessageCount) {
|
|
73
|
+
broken.push(i);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// 第二遍:补偿修复 — 用后续最近的 checkpoint 回填断裂的条目
|
|
79
|
+
if (broken.length > 0) {
|
|
80
|
+
_compensateBrokenEntries(entries, broken);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return entries;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* 补偿修复:对断裂的 delta 条目,从后续最近的 checkpoint 中提取完整 messages 回填。
|
|
88
|
+
* checkpoint 包含截至该点的完整历史,可以据此反推之前条目的 messages。
|
|
89
|
+
*/
|
|
90
|
+
function _compensateBrokenEntries(entries, brokenIndices) {
|
|
91
|
+
for (const brokenIdx of brokenIndices) {
|
|
92
|
+
const brokenEntry = entries[brokenIdx];
|
|
93
|
+
const expectedCount = brokenEntry._totalMessageCount;
|
|
94
|
+
if (!expectedCount) continue;
|
|
95
|
+
|
|
96
|
+
// 向后查找最近的 checkpoint 或旧格式全量条目
|
|
97
|
+
for (let j = brokenIdx + 1; j < entries.length; j++) {
|
|
98
|
+
const candidate = entries[j];
|
|
99
|
+
if (!candidate.mainAgent || !Array.isArray(candidate.body?.messages)) continue;
|
|
100
|
+
|
|
101
|
+
const candidateMsgs = candidate.body.messages;
|
|
102
|
+
const candidateTotal = candidate._totalMessageCount || candidateMsgs.length;
|
|
103
|
+
|
|
104
|
+
// 候选条目必须是 checkpoint/旧格式且包含足够的 messages
|
|
105
|
+
const isFullEntry = !candidate._deltaFormat || isCheckpointEntry(candidate);
|
|
106
|
+
if (isFullEntry && candidateTotal >= expectedCount) {
|
|
107
|
+
// 从完整 messages 中截取前 expectedCount 条作为补偿
|
|
108
|
+
brokenEntry.body.messages = candidateMsgs.slice(0, expectedCount);
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* 创建有状态的增量重建器 — 用于 watcher 逐条重建。
|
|
117
|
+
* 每次调用 reconstruct(entry) 处理一条新条目。
|
|
118
|
+
*
|
|
119
|
+
* @returns {{ reconstruct: (entry: object) => object }}
|
|
120
|
+
*/
|
|
121
|
+
export function createIncrementalReconstructor() {
|
|
122
|
+
let accumulated = []; // mainAgent 累积 messages
|
|
123
|
+
|
|
124
|
+
return {
|
|
125
|
+
/**
|
|
126
|
+
* 重建单条条目。
|
|
127
|
+
* - 非 delta 条目:如果是 mainAgent 旧格式,更新累积状态,原样返回
|
|
128
|
+
* - checkpoint:重置累积状态,原样返回
|
|
129
|
+
* - delta:拼接重建,修改 body.messages 后返回
|
|
130
|
+
*
|
|
131
|
+
* @param {object} entry - 单条日志条目
|
|
132
|
+
* @returns {object} 重建后的条目(同一引用)
|
|
133
|
+
*/
|
|
134
|
+
reconstruct(entry) {
|
|
135
|
+
// 跳过 inProgress 条目:它会被同一请求的 completed 条目覆盖,
|
|
136
|
+
// 如果两者都处理会导致 accumulated 重复拼接相同的 delta
|
|
137
|
+
if (entry.inProgress) return entry;
|
|
138
|
+
|
|
139
|
+
if (!isDeltaEntry(entry)) {
|
|
140
|
+
// 非 delta 条目:如果是 mainAgent 旧格式,更新累积状态
|
|
141
|
+
if (entry.mainAgent && Array.isArray(entry.body?.messages)) {
|
|
142
|
+
accumulated = [...entry.body.messages];
|
|
143
|
+
}
|
|
144
|
+
return entry;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const msgs = entry.body?.messages;
|
|
148
|
+
if (!Array.isArray(msgs)) return entry;
|
|
149
|
+
|
|
150
|
+
if (isCheckpointEntry(entry)) {
|
|
151
|
+
// checkpoint:重置累积状态
|
|
152
|
+
accumulated = [...msgs];
|
|
153
|
+
} else {
|
|
154
|
+
// delta:拼接
|
|
155
|
+
accumulated = [...accumulated, ...msgs];
|
|
156
|
+
entry.body.messages = accumulated;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
return entry;
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* 重置累积状态(用于 full_reload 等场景)。
|
|
164
|
+
*/
|
|
165
|
+
reset() {
|
|
166
|
+
accumulated = [];
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
package/lib/interceptor-core.js
CHANGED
|
@@ -201,7 +201,9 @@ export function migrateConversationContext(oldFile, newFile) {
|
|
|
201
201
|
const entry = JSON.parse(parts[i]);
|
|
202
202
|
if (entry.mainAgent) {
|
|
203
203
|
const msgs = entry.body?.messages;
|
|
204
|
-
|
|
204
|
+
// Delta storage: 使用 _totalMessageCount(delta 条目)或 msgs.length(旧格式)
|
|
205
|
+
const msgCount = entry._totalMessageCount || (Array.isArray(msgs) ? msgs.length : 0);
|
|
206
|
+
if (msgCount === 1) {
|
|
205
207
|
originIndex = i;
|
|
206
208
|
break;
|
|
207
209
|
}
|
|
@@ -236,3 +238,27 @@ export function migrateConversationContext(oldFile, newFile) {
|
|
|
236
238
|
}
|
|
237
239
|
} catch { }
|
|
238
240
|
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Rotate log file when it exceeds maxSize.
|
|
244
|
+
* Creates an empty new file (no content migration) and appends '\n' to old file
|
|
245
|
+
* to trigger fs.watchFile callback for watcher migration.
|
|
246
|
+
*
|
|
247
|
+
* @param {string} currentFile - current log file path
|
|
248
|
+
* @param {string} newFile - new log file path to rotate to
|
|
249
|
+
* @param {number} maxSize - max file size in bytes
|
|
250
|
+
* @returns {{ rotated: boolean, oldFile?: string, newFile?: string }}
|
|
251
|
+
*/
|
|
252
|
+
export function rotateLogFile(currentFile, newFile, maxSize) {
|
|
253
|
+
try {
|
|
254
|
+
if (!existsSync(currentFile)) return { rotated: false };
|
|
255
|
+
const size = statSync(currentFile).size;
|
|
256
|
+
if (size < maxSize) return { rotated: false };
|
|
257
|
+
// 不迁移旧内容,创建空新文件(立即创建,避免 watcher 时序窗口)
|
|
258
|
+
try { writeFileSync(newFile, ''); } catch { }
|
|
259
|
+
// 触发旧文件 watcher 回调,使其检测到文件变更并切换到新文件
|
|
260
|
+
try { appendFileSync(currentFile, '\n'); } catch { }
|
|
261
|
+
return { rotated: true, oldFile: currentFile, newFile };
|
|
262
|
+
} catch { }
|
|
263
|
+
return { rotated: false };
|
|
264
|
+
}
|