cc-viewer 1.5.21 → 1.5.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -3
- package/cli.js +6 -4
- package/dist/assets/{index-CRbM_95R.js → index-Drg6iuc9.js} +141 -139
- package/dist/assets/{index-C9cmcYOr.css → index-Dt59iD4-.css} +2 -2
- package/dist/index.html +2 -2
- package/findcc.js +19 -4
- package/interceptor.js +2 -257
- package/lib/interceptor-core.js +230 -0
- package/lib/plugin-loader.js +8 -7
- package/lib/updater.js +8 -3
- package/package.json +2 -2
- package/pty-manager.js +21 -10
- package/workspace-registry.js +98 -30
|
@@ -29,7 +29,7 @@ body{margin:0;background-color:#0d0d0d}*{scrollbar-width:thin;scrollbar-color:#3
|
|
|
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_jipsg_1{height:100%;display:flex;flex-direction:column;background:#0a0a0a}._terminalContainer_jipsg_8{flex:1;overflow:hidden;padding:4px 8px;touch-action:none;overscroll-behavior:contain}._virtualKeybar_jipsg_16{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_jipsg_16{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_jipsg_47{background:#333;border-color:#555;color:#fff}._fileExplorer_dbq1c_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_dbq1c_12{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_dbq1c_21{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._collapseBtn_dbq1c_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_dbq1c_29:hover{color:#ccc;background:#2a2a2a}._treeContainer_dbq1c_48{flex:1;overflow:auto;padding:4px 0}._treeItem_dbq1c_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_dbq1c_54:hover,._treeItemSelected_dbq1c_70{background:#1a1a1a}._arrow_dbq1c_74{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._icon_dbq1c_83{width:16px;height:16px;flex-shrink:0;margin-right:6px;display:flex;align-items:center;justify-content:center}._fileName_dbq1c_93{overflow:hidden;text-overflow:ellipsis}._loading_dbq1c_98{color:#555;font-size:12px;padding:4px 8px}._error_dbq1c_104{color:#ff6b6b;font-size:12px;padding:4px 8px}._treeItemGitIgnored_dbq1c_110{opacity:.4}._fileContentView_ryksq_1{display:flex;flex-direction:column;height:100%;background:#0d0d0d}._editorBanner_ryksq_8{padding:6px 16px;background:#1a3a2a;color:#4ade80;font-size:12px;text-align:center;flex-shrink:0;border-bottom:1px solid #2a5a3a}._header_ryksq_18{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._headerLeft_ryksq_28{display:flex;align-items:center;gap:8px;flex:1;min-width:0}._headerRight_ryksq_36{display:flex;align-items:center;gap:10px;flex-shrink:0}._backBtn_ryksq_43{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_ryksq_43:hover{color:#ccc;background:#1a1a1a}._filePath_ryksq_64{font-size:13px;color:#ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._fileSize_ryksq_72{font-size:11px;color:#666;flex-shrink:0}._saveBtn_ryksq_78{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_ryksq_78:hover:not(:disabled){background:#2a2a2a;color:#fff;border-color:#4a4a4a}._saveBtn_ryksq_78:disabled{opacity:.4;cursor:not-allowed}._saveStatus_ryksq_104{font-size:11px;color:#888;white-space:nowrap}._saveStatusSaved_ryksq_110{color:#4caf50}._saveStatusFailed_ryksq_114{color:#ff6b6b}._contentContainer_ryksq_118{flex:1;overflow:hidden;background:#0d0d0d;display:flex;min-height:0;min-width:0}._editorWrapper_ryksq_127{flex:1;display:flex;min-height:0;min-width:0;overflow:hidden}._lineNumCol_ryksq_135{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_ryksq_145{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_ryksq_155{flex:1;min-width:0;min-height:0;display:flex}._editorCol_ryksq_155 .cm-theme{flex:1;display:flex;min-height:0;min-width:0}._editorCol_ryksq_155 .cm-editor{flex:1;min-width:0;min-height:0}._loading_ryksq_175{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#666;font-size:14px}._error_ryksq_185{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#ff6b6b;font-size:14px}._gitChanges_1in24_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_1in24_12{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_1in24_21{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._collapseBtn_1in24_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_1in24_29:hover{color:#ccc;background:#2a2a2a}._changesContainer_1in24_48{flex:1;overflow:auto;padding:4px 0}._changeItem_1in24_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_1in24_54:hover,._changeItemSelected_1in24_71{background:#1a1a1a}._dirItem_1in24_75{display:flex;align-items:center;height:26px;padding:0 8px;color:#999;font-size:13px;white-space:nowrap;gap:6px}._dirArrow_1in24_86{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._dirName_1in24_95{overflow:hidden;text-overflow:ellipsis}._status_1in24_100{width:16px;flex-shrink:0;font-size:11px;font-weight:600;text-align:center;margin-left:auto}._icon_1in24_109{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center}._fileName_1in24_118{overflow:hidden;text-overflow:ellipsis;flex:1}._loading_1in24_124{color:#555;font-size:12px;padding:8px 12px}._error_1in24_130{color:#ff6b6b;font-size:12px;padding:8px 12px}._empty_1in24_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_jipsg_1{height:100%;display:flex;flex-direction:column;background:#0a0a0a}._terminalContainer_jipsg_8{flex:1;overflow:hidden;padding:4px 8px;touch-action:none;overscroll-behavior:contain}._virtualKeybar_jipsg_16{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_jipsg_16{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_jipsg_47{background:#333;border-color:#555;color:#fff}._fileExplorer_dbq1c_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_dbq1c_12{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_dbq1c_21{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._collapseBtn_dbq1c_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_dbq1c_29:hover{color:#ccc;background:#2a2a2a}._treeContainer_dbq1c_48{flex:1;overflow:auto;padding:4px 0}._treeItem_dbq1c_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_dbq1c_54:hover,._treeItemSelected_dbq1c_70{background:#1a1a1a}._arrow_dbq1c_74{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._icon_dbq1c_83{width:16px;height:16px;flex-shrink:0;margin-right:6px;display:flex;align-items:center;justify-content:center}._fileName_dbq1c_93{overflow:hidden;text-overflow:ellipsis}._loading_dbq1c_98{color:#555;font-size:12px;padding:4px 8px}._error_dbq1c_104{color:#ff6b6b;font-size:12px;padding:4px 8px}._treeItemGitIgnored_dbq1c_110{opacity:.4}._fileContentView_1mwk0_1{display:flex;flex-direction:column;height:100%;background:#0d0d0d}._editorBanner_1mwk0_8{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_1mwk0_8:hover{background:#245a3a}._header_1mwk0_25{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._headerLeft_1mwk0_35{display:flex;align-items:center;gap:8px;flex:1;min-width:0}._headerRight_1mwk0_43{display:flex;align-items:center;gap:10px;flex-shrink:0}._backBtn_1mwk0_50{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_1mwk0_50:hover{color:#ccc;background:#1a1a1a}._filePath_1mwk0_71{font-size:13px;color:#ccc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._fileSize_1mwk0_79{font-size:11px;color:#666;flex-shrink:0}._saveBtn_1mwk0_85{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_1mwk0_85:hover:not(:disabled){background:#2a2a2a;color:#fff;border-color:#4a4a4a}._saveBtn_1mwk0_85:disabled{opacity:.4;cursor:not-allowed}._saveStatus_1mwk0_111{font-size:11px;color:#888;white-space:nowrap}._saveStatusSaved_1mwk0_117{color:#4caf50}._saveStatusFailed_1mwk0_121{color:#ff6b6b}._contentContainer_1mwk0_125{flex:1;overflow:hidden;background:#0d0d0d;display:flex;min-height:0;min-width:0}._editorWrapper_1mwk0_134{flex:1;display:flex;min-height:0;min-width:0;overflow:hidden}._lineNumCol_1mwk0_142{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_1mwk0_152{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_1mwk0_162{flex:1;min-width:0;min-height:0;display:flex}._editorCol_1mwk0_162 .cm-theme{flex:1;display:flex;min-height:0;min-width:0}._editorCol_1mwk0_162 .cm-editor{flex:1;min-width:0;min-height:0}._loading_1mwk0_182{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#666;font-size:14px}._error_1mwk0_192{display:flex;align-items:center;justify-content:center;height:100%;width:100%;color:#ff6b6b;font-size:14px}._gitChanges_1in24_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_1in24_12{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_1in24_21{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._collapseBtn_1in24_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_1in24_29:hover{color:#ccc;background:#2a2a2a}._changesContainer_1in24_48{flex:1;overflow:auto;padding:4px 0}._changeItem_1in24_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_1in24_54:hover,._changeItemSelected_1in24_71{background:#1a1a1a}._dirItem_1in24_75{display:flex;align-items:center;height:26px;padding:0 8px;color:#999;font-size:13px;white-space:nowrap;gap:6px}._dirArrow_1in24_86{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._dirName_1in24_95{overflow:hidden;text-overflow:ellipsis}._status_1in24_100{width:16px;flex-shrink:0;font-size:11px;font-weight:600;text-align:center;margin-left:auto}._icon_1in24_109{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center}._fileName_1in24_118{overflow:hidden;text-overflow:ellipsis;flex:1}._loading_1in24_124{color:#555;font-size:12px;padding:8px 12px}._error_1in24_130{color:#ff6b6b;font-size:12px;padding:8px 12px}._empty_1in24_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
|
|
@@ -38,4 +38,4 @@ body{margin:0;background-color:#0d0d0d}*{scrollbar-width:thin;scrollbar-color:#3
|
|
|
38
38
|
|
|
39
39
|
Outdated base version: https://github.com/primer/github-syntax-dark
|
|
40
40
|
Current colors taken from GitHub's CSS
|
|
41
|
-
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}._fullFileDiffView_g75nb_1{width:100%;height:100%;display:flex;flex-direction:column;background:#0d0d0d;overflow:hidden}._diffSummary_g75nb_10{padding:8px 16px;background:#111;border-bottom:1px solid #2a2a2a;display:flex;gap:8px;align-items:center;flex-shrink:0}._addedBadge_g75nb_20{padding:2px 8px;background:#73c99126;border:1px solid rgba(115,201,145,.3);border-radius:4px;font-size:11px;font-weight:600;color:#73c991;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace}._deletedBadge_g75nb_31{padding:2px 8px;background:#f14c4c26;border:1px solid rgba(241,76,76,.3);border-radius:4px;font-size:11px;font-weight:600;color:#f14c4c;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace}._codeContainer_g75nb_42{flex:1;overflow:hidden;display:flex;min-height:0;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:13px;line-height:1.6}._lineNumberCol_g75nb_52{flex-shrink:0;overflow:hidden;background:#0d0d0d;border-right:1px solid #2a2a2a;-webkit-user-select:none;user-select:none}._lineNumRow_g75nb_60{display:flex;min-height:21px}._oldLineNum_g75nb_65,._newLineNum_g75nb_66{display:inline-block;width:40px;text-align:right;padding:0 6px;font-size:12px;box-sizing:border-box}._lineNumNormal_g75nb_75 ._oldLineNum_g75nb_65,._lineNumNormal_g75nb_75 ._newLineNum_g75nb_66{color:#555}._lineNumAdd_g75nb_80{border-right:3px solid #73c991}._lineNumAdd_g75nb_80 ._oldLineNum_g75nb_65{color:#555}._lineNumAdd_g75nb_80 ._newLineNum_g75nb_66{color:#73c991;font-weight:600}._lineNumDelete_g75nb_93{border-right:3px solid #f14c4c}._lineNumDelete_g75nb_93 ._oldLineNum_g75nb_65{color:#f14c4c;font-weight:600}._lineNumDelete_g75nb_93 ._newLineNum_g75nb_66{color:#555}._codeColWrap_g75nb_106{flex:1;position:relative;min-width:0;overflow:hidden}._codeCol_g75nb_106{width:100%;height:100%;overflow:auto;min-width:0}._codeInner_g75nb_120{width:fit-content;min-width:100%}._codeLine_g75nb_125{position:relative;min-height:21px;display:flex;transition:background .1s}._codeLine_g75nb_125:hover{background:#ffffff08}._linePrefix_g75nb_136{display:inline-block;width:16px;text-align:center;color:#888;flex-shrink:0;-webkit-user-select:none;user-select:none}._lineContent_g75nb_145{padding-right:16px;color:#ccc;white-space:pre}._lineNormal_g75nb_151{background:transparent}._lineAdd_g75nb_155{background:#73c9911a}._lineAdd_g75nb_155 ._linePrefix_g75nb_136{color:#73c991}._lineDelete_g75nb_163{background:#f14c4c1a}._lineDelete_g75nb_163 ._linePrefix_g75nb_136{color:#f14c4c}._lineDelete_g75nb_163 ._lineContent_g75nb_145{text-decoration:line-through;opacity:.8}._miniMap_1ho3j_1{position:absolute;top:0;right:0;width:10px;height:100%;cursor:pointer;z-index:10}._marker_1ho3j_11{position:absolute;left:0;width:100%;border-radius:1px;pointer-events:none}._gitDiffView_14i1p_1{flex:1;display:flex;flex-direction:column;background:#0d0d0d;overflow:hidden}._header_14i1p_9{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._headerLeft_14i1p_19{display:flex;align-items:center;gap:12px;flex:1;min-width:0}._backBtn_14i1p_27{width:28px;height:28px;border:none;background:none;color:#888;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:0;flex-shrink:0;transition:all .15s}._backBtn_14i1p_27:hover{color:#ccc;background:#2a2a2a}._filePath_14i1p_48{font-size:13px;color:#ccc;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._diffBadge_14i1p_57{padding:2px 8px;background:#2a2a2a;border:1px solid #444;border-radius:4px;font-size:10px;font-weight:600;color:#e2c08d;letter-spacing:.5px;flex-shrink:0}._contentContainer_14i1p_69{flex:1;overflow:auto;position:relative}._loading_14i1p_75{display:flex;align-items:center;justify-content:center;height:100%;color:#888;font-size:13px}._error_14i1p_84{display:flex;align-items:center;justify-content:center;height:100%;color:#ff6b6b;font-size:13px;padding:20px;text-align:center}._binaryNotice_14i1p_95{display:flex;align-items:center;justify-content:center;height:100%;color:#888;font-size:13px;font-style:italic;padding:20px;text-align:center}._largeFileWarning_14i1p_107{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#e2c08d;font-size:13px;padding:20px;text-align:center;gap:8px}._fileSize_14i1p_120{color:#888;font-size:12px;margin:0}._centerEmpty_bkvre_1{display:flex;align-items:center;justify-content:center;height:100%}._container_bkvre_8{flex:1;overflow:auto;padding:16px 24px;display:flex;flex-direction:column;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}._sessionDividerText_bkvre_18{font-size:11px;color:#555}._lastResponseLabel_bkvre_23{font-size:11px}._splitContainer_bkvre_27{display:flex;flex-direction:row;height:100%;overflow:hidden}._chatSection_bkvre_34{display:flex;flex-direction:column;min-width:0;overflow:hidden}._vResizer_bkvre_41{width:5px;background:#1a1a1a;cursor:col-resize;flex-shrink:0;border-left:1px solid #2a2a2a;border-right:1px solid #2a2a2a;transition:background .15s}._vResizer_bkvre_41:hover{background:#2a2a2a}._snapLine_bkvre_55{position:absolute;top:0;bottom:0;width:2px;background:transparent;border-left:2px dashed rgba(255,255,255,.1);pointer-events:none;z-index:1000;transition:all .15s}._snapLineActive_bkvre_67{position:absolute;top:0;bottom:0;width:2px;background:transparent;border-left:2px dashed rgba(255,255,255,.5);pointer-events:none;z-index:1001}._snapLineLabel_bkvre_78{position:absolute;top:50%;left:8px;transform:translateY(-50%);background:#ffffffe6;color:#000;padding:4px 8px;border-radius:4px;font-size:11px;font-weight:600;white-space:nowrap;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;box-shadow:0 2px 8px #0000004d}._snapPreview_bkvre_94{position:absolute;top:0;bottom:0;background:#ffffff1a;pointer-events:none;z-index:999}._vResizer_bkvre_41:hover{background:#333}._chatInputBar_bkvre_107{display:flex;align-items:flex-end;gap:8px;padding:10px 16px;background:#111;border-top:1px solid #2a2a2a;flex-shrink:0}._chatInputWrapper_bkvre_117{flex:1;display:flex;flex-direction:column;background:#1a1a1a;border:1px solid #333;border-radius:12px;transition:border-color .2s;overflow:hidden}._chatInputWrapper_bkvre_117:focus-within{border-color:#555}._chatTextareaWrap_bkvre_132{position:relative;flex:1}._chatTextarea_bkvre_132{width:100%;min-height:22px;max-height:120px;padding:10px 14px;background:transparent;color:#e0e0e0;border:none;outline:none;resize:none;font-size:14px;line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}._chatTextarea_bkvre_132::placeholder{color:#555}._chatInputHint_bkvre_156{font-size:11px;color:#444;padding:0 14px 6px;-webkit-user-select:none;user-select:none}._chatSendBtn_bkvre_163{width:36px;height:36px;border-radius:10px;border:none;background:#4a9eff;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,opacity .15s}._chatSendBtn_bkvre_163:hover{background:#3a8eef}._chatSendBtn_bkvre_163:disabled{opacity:.35;cursor:default}._chatSendBtn_bkvre_163 svg{width:18px;height:18px}._messageListWrap_bkvre_192{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}._stickyBottomBtn_bkvre_200{position:absolute;left:0;bottom:0;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 18px;height:60px;justify-content:center;border-radius:0;border:none;background:none;color:#999;font-size:12px;cursor:pointer;transition:color .15s;z-index:10;box-shadow:none}._stickyBottomBtn_bkvre_200 span{background:#00000080;padding:2px 10px;border-radius:10px}._stickyBottomBtn_bkvre_200:hover{color:#fff;background:none}@media(max-width:768px){._stickyBottomBtn_bkvre_200{gap:4px;padding:16px 18px;height:120px;font-size:24px}._stickyBottomBtn_bkvre_200 span{padding:4px 20px;border-radius:20px}._stickyBottomBtn_bkvre_200 svg{width:28px;height:28px}}._ptyPromptBubble_bkvre_250{margin:8px 0;padding:12px 16px;border-radius:12px;border:1px solid #3a3a3a;background:#161616;animation:_ptyPromptFadeIn_bkvre_1 .25s ease-out}._ptyPromptResolved_bkvre_259{opacity:.55}@keyframes _ptyPromptFadeIn_bkvre_1{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}._ptyPromptQuestion_bkvre_268{font-size:13px;color:#ccc;margin-bottom:10px;line-height:1.4}._ptyPromptOptions_bkvre_275{display:flex;flex-wrap:wrap;gap:8px}._ptyPromptOption_bkvre_275{padding:6px 14px;border-radius:18px;border:1px solid #3a3a3a;background:#1a1a1a;color:#bbb;font-size:12px;cursor:pointer;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}._ptyPromptOption_bkvre_275:hover{background:#2a2a2a;color:#eee;border-color:#555}._ptyPromptOptionPrimary_bkvre_299{padding:6px 14px;border-radius:18px;border:1px solid #4a9eff;background:#4a9eff26;color:#4a9eff;font-size:12px;cursor:pointer;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}._ptyPromptOptionPrimary_bkvre_299:hover{background:#4a9eff40;color:#6ab4ff;border-color:#6ab4ff}._ptyPromptOptionChosen_bkvre_317{padding:6px 14px;border-radius:18px;border:1px solid #4a9eff;background:#4a9eff33;color:#4a9eff;font-size:12px;cursor:default;white-space:nowrap}._ptyPromptOptionDimmed_bkvre_328{padding:6px 14px;border-radius:18px;border:1px solid #2a2a2a;background:transparent;color:#444;font-size:12px;cursor:default;white-space:nowrap}._ghostText_bkvre_339{position:absolute;top:0;left:0;right:0;padding:10px 14px;color:#444;font-size:14px;line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;pointer-events:none;white-space:pre-wrap;overflow:hidden;max-height:120px}._suggestionChip_bkvre_355{display:flex;align-items:center;gap:8px;padding:8px 14px;background:#1a1a1a;border-top:1px solid #2a2a2a;cursor:pointer;flex-shrink:0;transition:background .15s}._suggestionChip_bkvre_355:hover{background:#222}._suggestionChipText_bkvre_371{flex:1;color:#555;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._suggestionChipAction_bkvre_380{color:#4a9eff;font-size:14px;flex-shrink:0}._loadMoreWrap_bkvre_386{display:flex;justify-content:center;padding:12px 0 4px}._loadMoreBtn_bkvre_392{padding:6px 18px;border-radius:16px;border:1px solid #3a3a3a;background:#ffffff0f;color:#999;font-size:12px;cursor:pointer;transition:background .15s,color .15s}._loadMoreBtn_bkvre_392:hover{background:#ffffff1f;color:#ccc}._navSidebar_bkvre_408{width:40px;flex-shrink:0;background:#0d0d0d;border-right:1px solid #2a2a2a;display:flex;flex-direction:column;align-items:center;padding-top:8px;gap:4px}._navBtn_bkvre_420{width:32px;height:32px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;transition:background .15s,color .15s}._navBtn_bkvre_420:hover{color:#ccc;background:#1a1a1a}._navBtnActive_bkvre_440{width:32px;height:32px;border:none;background:#4a9eff26;color:#4a9eff;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;transition:background .15s,color .15s}._navBtnActive_bkvre_440:hover{background:#4a9eff40;color:#6ab4ff}._resizer_yamj2_1{width:6px;cursor:col-resize;background:#1f1f1f;flex-shrink:0;transition:background .2s}._resizer_yamj2_1:hover{background:#3b82f6}._container_1um1r_1{display:flex;flex-direction:column;height:100%;background:#0a0a0a;overflow:hidden}._fileListSection_1um1r_10{height:300px;flex-shrink:0;display:flex;flex-direction:column;background:#111;border-bottom:1px solid #2a2a2a}._header_1um1r_19{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_1um1r_28{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._fileCount_1um1r_36{font-size:10px;color:#555;background:#1a1a1a;padding:1px 6px;border-radius:8px}._changesContainer_1um1r_44{flex:1;overflow:auto;padding:4px 0;-webkit-overflow-scrolling:touch}._changeItem_1um1r_51{display:flex;align-items:center;height:28px;padding:0 8px;cursor:pointer;color:#ccc;font-size:13px;white-space:nowrap;transition:background .1s;gap:6px}._changeItem_1um1r_51:hover{background:#1a1a1a}._changeItemActive_1um1r_68{background:#4a9eff1f;color:#fff}._changeItemActive_1um1r_68:hover{background:#4a9eff2e}._dirItem_1um1r_77{display:flex;align-items:center;height:26px;padding:0 8px;color:#999;font-size:13px;white-space:nowrap;gap:6px}._dirArrow_1um1r_88{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._dirName_1um1r_97{overflow:hidden;text-overflow:ellipsis}._status_1um1r_102{width:16px;flex-shrink:0;font-size:11px;font-weight:600;text-align:center;margin-left:auto}._icon_1um1r_111{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center}._fileName_1um1r_120{overflow:hidden;text-overflow:ellipsis;flex:1}._diffSection_1um1r_127{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}._diffHeader_1um1r_135{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._diffFilePath_1um1r_145{font-size:12px;color:#ccc;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}._diffBadge_1um1r_155{padding:2px 8px;background:#2a2a2a;border:1px solid #444;border-radius:4px;font-size:10px;font-weight:600;color:#e2c08d;letter-spacing:.5px;flex-shrink:0}._diffContent_1um1r_167{flex:1;overflow:auto;-webkit-overflow-scrolling:touch}._diffPlaceholder_1um1r_173{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:#333;font-size:13px}._statusText_1um1r_184{color:#555;font-size:12px;padding:16px 12px;text-align:center}._errorText_1um1r_191{color:#ff6b6b;font-size:12px;padding:16px 12px;text-align:center}._emptyText_1um1r_198{color:#666;font-size:12px;padding:16px 12px;text-align:center}._warningText_1um1r_205{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;color:#e2c08d;font-size:13px;text-align:center;gap:8px}._container_rkahp_1{display:flex;flex-direction:column;height:100%;background:#0a0a0a;overflow:hidden}._header_rkahp_9{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_rkahp_18{font-size:13px;font-weight:600;color:#ccc}._closeBtn_rkahp_24{background:none;border:none;color:#888;cursor:pointer;padding:4px;display:flex;align-items:center}._closeBtn_rkahp_24:active{color:#fff}._content_rkahp_38{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px}._empty_rkahp_47{color:#999;font-size:13px;text-align:center;padding:40px 0}._fixedTable_rkahp_54{table-layout:fixed}._ellipsisCell_rkahp_58{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:0}._layout_v8lsg_1{height:100vh;overflow:hidden}._header_v8lsg_6{background:#111;border-bottom:1px solid #1f1f1f;padding:0 24px;height:60px;line-height:60px}._content_v8lsg_14{flex:1;overflow:hidden}._mainContainer_v8lsg_19{display:flex;height:100%}._leftPanel_v8lsg_24{flex-shrink:0;border-right:1px solid #1f1f1f;display:flex;flex-direction:column;background:#0a0a0a}._leftPanelHeader_v8lsg_32{padding:10px 16px;border-bottom:1px solid #1f1f1f;font-size:13px;color:#9ca3af;font-weight:500;display:flex;justify-content:space-between;align-items:center}._leftPanelCount_v8lsg_43{font-size:12px;color:#555;font-weight:400}._leftPanelBody_v8lsg_49{flex:1;overflow:hidden}._rightPanel_v8lsg_54{flex:1;overflow:hidden;background:#0d0d0d}._modalActions_v8lsg_60{margin-bottom:12px}._spinCenter_v8lsg_64{text-align:center;padding:40px}._emptyCenter_v8lsg_69{text-align:center;color:#999;padding:40px}._logCheckbox_v8lsg_75{margin-right:8px}._logListContainer_v8lsg_79{background:#0d0d0d;border-radius:8px;overflow:hidden}._logListItem_v8lsg_85{cursor:pointer;padding:8px 12px;border-bottom:1px solid #222}._logItemRow_v8lsg_91{display:flex;align-items:center;width:100%;justify-content:space-between;flex-wrap:nowrap;gap:12px}._logItemRow_v8lsg_91>span:first-child{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden}._logFileName_v8lsg_108{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._logItemRow_v8lsg_91>span:last-child{display:flex;align-items:center;flex-shrink:0;gap:8px}._logFileIcon_v8lsg_121{margin-right:8px;color:#3b82f6;flex-shrink:0}._loadingOverlay_v8lsg_127{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:9999}._loadingText_v8lsg_140{color:#fff;font-size:16px;font-weight:700}._mobileLoadingOverlay_v8lsg_146{position:absolute;top:0;right:0;bottom:0;left:0;background:#000000d1;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:200;gap:16px}._mobileLoadingSpinner_v8lsg_158{width:36px;height:36px;border:3px solid rgba(255,255,255,.12);border-top-color:#4f8cff;border-radius:50%;animation:_mobileSpin_v8lsg_1 .8s linear infinite}@keyframes _mobileSpin_v8lsg_1{to{transform:rotate(360deg)}}._mobileLoadingLabel_v8lsg_171{color:#888;font-size:13px;font-variant-numeric:tabular-nums}._footer_v8lsg_177{height:18px;background:#000;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;flex-shrink:0}._footerRight_v8lsg_187{display:flex;align-items:center;gap:6px;font-size:11px;color:#555}._footerText_v8lsg_195{color:#444;margin-right:2px}._footerLink_v8lsg_200{display:inline-flex;align-items:center;gap:3px;color:#555;text-decoration:none}._footerLink_v8lsg_200:hover{color:#888}._footerIcon_v8lsg_212{width:12px;height:12px}._footerDivider_v8lsg_217{color:#333}._footerText_v8lsg_195{color:#555}._guideContainer_v8lsg_225{display:flex;align-items:center;justify-content:center;height:100%;background:#0a0a0a}._guideContent_v8lsg_233{max-width:560px;padding:40px}._guideTitle_v8lsg_238{font-size:20px;font-weight:600;color:#e0e0e0;margin:0 0 28px}._guideStep_v8lsg_245{display:flex;gap:14px;margin-bottom:22px}._guideStepNum_v8lsg_251{flex-shrink:0;width:24px;height:24px;border-radius:50%;background:#1a1a2e;color:#7c8aff;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center;margin-top:1px}._guideStepBody_v8lsg_266{flex:1;min-width:0}._guideText_v8lsg_271{color:#aaa;font-size:14px;line-height:1.6;margin:0 0 8px}._guideCode_v8lsg_278{display:block;background:#141414;border:1px solid #252525;border-radius:6px;padding:10px 14px;color:#8b9cf7;font-size:13px;line-height:1.5;word-break:break-all;white-space:pre-wrap}._mobileChatOverlay_v8lsg_291{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileChatOverlayVisible_v8lsg_303{transform:translate(0)}._mobileChatInner_v8lsg_307{flex:1;min-height:0;display:flex;flex-direction:column;zoom:.6}._mobileGitDiffOverlay_v8lsg_315{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileGitDiffOverlayVisible_v8lsg_327{transform:translate(0)}._mobileGitDiffInner_v8lsg_331{flex:1;min-height:0;display:flex;flex-direction:column;zoom:.6}._mobileMenuBtn_v8lsg_339{background:none;border:none;color:#aaa;padding:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;flex-shrink:0}._mobileMenuBtn_v8lsg_339:active{background:#ffffff1a}._mobileMenuOverlay_v8lsg_356{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999}._mobileMenuDropdown_v8lsg_362{position:absolute;top:100%;left:0;margin-top:4px;background:#1a1a1a;border:1px solid #333;border-radius:8px;box-shadow:0 4px 12px #00000080;min-width:160px;z-index:1000;overflow:hidden}._mobileMenuItem_v8lsg_376{display:flex;align-items:center;gap:8px;padding:12px 16px;color:#ddd;font-size:14px;cursor:pointer;border:none;background:none;width:100%;text-align:left}._mobileMenuItem_v8lsg_376:active{background:#ffffff1a}._mobileStatsOverlay_v8lsg_394{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileStatsOverlayVisible_v8lsg_406{transform:translate(0)}._mobileStatsInner_v8lsg_410{flex:1;min-height:0;display:flex;flex-direction:column}._mobileLogMgmtOverlay_v8lsg_417{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileLogMgmtOverlayVisible_v8lsg_429{transform:translate(0)}._mobileLogMgmtHeader_v8lsg_433{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid #222;flex-shrink:0}._mobileLogMgmtTitle_v8lsg_442{font-size:14px;font-weight:600;color:#e0e0e0}._mobileLogMgmtClose_v8lsg_448{background:none;border:none;color:#888;cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center}._mobileLogMgmtClose_v8lsg_448:hover{color:#fff}._mobileLogMgmtActions_v8lsg_463{display:flex;gap:8px;padding:8px 12px;border-bottom:1px solid #222;flex-shrink:0}._mobileLogMgmtBody_v8lsg_471{flex:1;min-height:0;overflow:hidden;padding:0 10px}._mobileSettingsOverlay_v8lsg_478{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileSettingsOverlayVisible_v8lsg_490{transform:translate(0)}._mobilePromptOverlay_v8lsg_494{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobilePromptOverlayVisible_v8lsg_506{transform:translate(0)}._mobilePromptBody_v8lsg_510{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}._mobilePromptList_v8lsg_518{flex:1;overflow-y:auto;padding:0 12px}._mobilePromptItem_v8lsg_524{padding:12px 0;border-bottom:1px solid #1a1a1a}._mobilePromptTimestamp_v8lsg_529{font-size:11px;color:#666;margin-bottom:8px;font-family:ui-monospace,monospace}._mobilePromptCard_v8lsg_536{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._mobilePromptPreText_v8lsg_544{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}
|
|
41
|
+
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}._fullFileDiffView_g75nb_1{width:100%;height:100%;display:flex;flex-direction:column;background:#0d0d0d;overflow:hidden}._diffSummary_g75nb_10{padding:8px 16px;background:#111;border-bottom:1px solid #2a2a2a;display:flex;gap:8px;align-items:center;flex-shrink:0}._addedBadge_g75nb_20{padding:2px 8px;background:#73c99126;border:1px solid rgba(115,201,145,.3);border-radius:4px;font-size:11px;font-weight:600;color:#73c991;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace}._deletedBadge_g75nb_31{padding:2px 8px;background:#f14c4c26;border:1px solid rgba(241,76,76,.3);border-radius:4px;font-size:11px;font-weight:600;color:#f14c4c;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace}._codeContainer_g75nb_42{flex:1;overflow:hidden;display:flex;min-height:0;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;font-size:13px;line-height:1.6}._lineNumberCol_g75nb_52{flex-shrink:0;overflow:hidden;background:#0d0d0d;border-right:1px solid #2a2a2a;-webkit-user-select:none;user-select:none}._lineNumRow_g75nb_60{display:flex;min-height:21px}._oldLineNum_g75nb_65,._newLineNum_g75nb_66{display:inline-block;width:40px;text-align:right;padding:0 6px;font-size:12px;box-sizing:border-box}._lineNumNormal_g75nb_75 ._oldLineNum_g75nb_65,._lineNumNormal_g75nb_75 ._newLineNum_g75nb_66{color:#555}._lineNumAdd_g75nb_80{border-right:3px solid #73c991}._lineNumAdd_g75nb_80 ._oldLineNum_g75nb_65{color:#555}._lineNumAdd_g75nb_80 ._newLineNum_g75nb_66{color:#73c991;font-weight:600}._lineNumDelete_g75nb_93{border-right:3px solid #f14c4c}._lineNumDelete_g75nb_93 ._oldLineNum_g75nb_65{color:#f14c4c;font-weight:600}._lineNumDelete_g75nb_93 ._newLineNum_g75nb_66{color:#555}._codeColWrap_g75nb_106{flex:1;position:relative;min-width:0;overflow:hidden}._codeCol_g75nb_106{width:100%;height:100%;overflow:auto;min-width:0}._codeInner_g75nb_120{width:fit-content;min-width:100%}._codeLine_g75nb_125{position:relative;min-height:21px;display:flex;transition:background .1s}._codeLine_g75nb_125:hover{background:#ffffff08}._linePrefix_g75nb_136{display:inline-block;width:16px;text-align:center;color:#888;flex-shrink:0;-webkit-user-select:none;user-select:none}._lineContent_g75nb_145{padding-right:16px;color:#ccc;white-space:pre}._lineNormal_g75nb_151{background:transparent}._lineAdd_g75nb_155{background:#73c9911a}._lineAdd_g75nb_155 ._linePrefix_g75nb_136{color:#73c991}._lineDelete_g75nb_163{background:#f14c4c1a}._lineDelete_g75nb_163 ._linePrefix_g75nb_136{color:#f14c4c}._lineDelete_g75nb_163 ._lineContent_g75nb_145{text-decoration:line-through;opacity:.8}._miniMap_1ho3j_1{position:absolute;top:0;right:0;width:10px;height:100%;cursor:pointer;z-index:10}._marker_1ho3j_11{position:absolute;left:0;width:100%;border-radius:1px;pointer-events:none}._gitDiffView_1jqjc_1{flex:1;display:flex;flex-direction:column;background:#0d0d0d;overflow:hidden}._header_1jqjc_9{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._headerLeft_1jqjc_19{display:flex;align-items:center;gap:12px;flex:1;min-width:0}._backBtn_1jqjc_27{width:28px;height:28px;border:none;background:none;color:#888;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;padding:0;flex-shrink:0;transition:all .15s}._backBtn_1jqjc_27:hover{color:#ccc;background:#2a2a2a}._filePath_1jqjc_48{font-size:13px;color:#ccc;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;transition:color .15s}._filePath_1jqjc_48:hover{color:#79c0ff;text-decoration:underline}._diffBadge_1jqjc_64{padding:2px 8px;background:#2a2a2a;border:1px solid #444;border-radius:4px;font-size:10px;font-weight:600;color:#e2c08d;letter-spacing:.5px;flex-shrink:0}._contentContainer_1jqjc_76{flex:1;overflow:auto;position:relative}._loading_1jqjc_82{display:flex;align-items:center;justify-content:center;height:100%;color:#888;font-size:13px}._error_1jqjc_91{display:flex;align-items:center;justify-content:center;height:100%;color:#ff6b6b;font-size:13px;padding:20px;text-align:center}._binaryNotice_1jqjc_102{display:flex;align-items:center;justify-content:center;height:100%;color:#888;font-size:13px;font-style:italic;padding:20px;text-align:center}._largeFileWarning_1jqjc_114{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#e2c08d;font-size:13px;padding:20px;text-align:center;gap:8px}._fileSize_1jqjc_127{color:#888;font-size:12px;margin:0}._centerEmpty_bkvre_1{display:flex;align-items:center;justify-content:center;height:100%}._container_bkvre_8{flex:1;overflow:auto;padding:16px 24px;display:flex;flex-direction:column;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}._sessionDividerText_bkvre_18{font-size:11px;color:#555}._lastResponseLabel_bkvre_23{font-size:11px}._splitContainer_bkvre_27{display:flex;flex-direction:row;height:100%;overflow:hidden}._chatSection_bkvre_34{display:flex;flex-direction:column;min-width:0;overflow:hidden}._vResizer_bkvre_41{width:5px;background:#1a1a1a;cursor:col-resize;flex-shrink:0;border-left:1px solid #2a2a2a;border-right:1px solid #2a2a2a;transition:background .15s}._vResizer_bkvre_41:hover{background:#2a2a2a}._snapLine_bkvre_55{position:absolute;top:0;bottom:0;width:2px;background:transparent;border-left:2px dashed rgba(255,255,255,.1);pointer-events:none;z-index:1000;transition:all .15s}._snapLineActive_bkvre_67{position:absolute;top:0;bottom:0;width:2px;background:transparent;border-left:2px dashed rgba(255,255,255,.5);pointer-events:none;z-index:1001}._snapLineLabel_bkvre_78{position:absolute;top:50%;left:8px;transform:translateY(-50%);background:#ffffffe6;color:#000;padding:4px 8px;border-radius:4px;font-size:11px;font-weight:600;white-space:nowrap;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;box-shadow:0 2px 8px #0000004d}._snapPreview_bkvre_94{position:absolute;top:0;bottom:0;background:#ffffff1a;pointer-events:none;z-index:999}._vResizer_bkvre_41:hover{background:#333}._chatInputBar_bkvre_107{display:flex;align-items:flex-end;gap:8px;padding:10px 16px;background:#111;border-top:1px solid #2a2a2a;flex-shrink:0}._chatInputWrapper_bkvre_117{flex:1;display:flex;flex-direction:column;background:#1a1a1a;border:1px solid #333;border-radius:12px;transition:border-color .2s;overflow:hidden}._chatInputWrapper_bkvre_117:focus-within{border-color:#555}._chatTextareaWrap_bkvre_132{position:relative;flex:1}._chatTextarea_bkvre_132{width:100%;min-height:22px;max-height:120px;padding:10px 14px;background:transparent;color:#e0e0e0;border:none;outline:none;resize:none;font-size:14px;line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}._chatTextarea_bkvre_132::placeholder{color:#555}._chatInputHint_bkvre_156{font-size:11px;color:#444;padding:0 14px 6px;-webkit-user-select:none;user-select:none}._chatSendBtn_bkvre_163{width:36px;height:36px;border-radius:10px;border:none;background:#4a9eff;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,opacity .15s}._chatSendBtn_bkvre_163:hover{background:#3a8eef}._chatSendBtn_bkvre_163:disabled{opacity:.35;cursor:default}._chatSendBtn_bkvre_163 svg{width:18px;height:18px}._messageListWrap_bkvre_192{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}._stickyBottomBtn_bkvre_200{position:absolute;left:0;bottom:0;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 18px;height:60px;justify-content:center;border-radius:0;border:none;background:none;color:#999;font-size:12px;cursor:pointer;transition:color .15s;z-index:10;box-shadow:none}._stickyBottomBtn_bkvre_200 span{background:#00000080;padding:2px 10px;border-radius:10px}._stickyBottomBtn_bkvre_200:hover{color:#fff;background:none}@media(max-width:768px){._stickyBottomBtn_bkvre_200{gap:4px;padding:16px 18px;height:120px;font-size:24px}._stickyBottomBtn_bkvre_200 span{padding:4px 20px;border-radius:20px}._stickyBottomBtn_bkvre_200 svg{width:28px;height:28px}}._ptyPromptBubble_bkvre_250{margin:8px 0;padding:12px 16px;border-radius:12px;border:1px solid #3a3a3a;background:#161616;animation:_ptyPromptFadeIn_bkvre_1 .25s ease-out}._ptyPromptResolved_bkvre_259{opacity:.55}@keyframes _ptyPromptFadeIn_bkvre_1{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}._ptyPromptQuestion_bkvre_268{font-size:13px;color:#ccc;margin-bottom:10px;line-height:1.4}._ptyPromptOptions_bkvre_275{display:flex;flex-wrap:wrap;gap:8px}._ptyPromptOption_bkvre_275{padding:6px 14px;border-radius:18px;border:1px solid #3a3a3a;background:#1a1a1a;color:#bbb;font-size:12px;cursor:pointer;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}._ptyPromptOption_bkvre_275:hover{background:#2a2a2a;color:#eee;border-color:#555}._ptyPromptOptionPrimary_bkvre_299{padding:6px 14px;border-radius:18px;border:1px solid #4a9eff;background:#4a9eff26;color:#4a9eff;font-size:12px;cursor:pointer;transition:background .15s,color .15s,border-color .15s;white-space:nowrap}._ptyPromptOptionPrimary_bkvre_299:hover{background:#4a9eff40;color:#6ab4ff;border-color:#6ab4ff}._ptyPromptOptionChosen_bkvre_317{padding:6px 14px;border-radius:18px;border:1px solid #4a9eff;background:#4a9eff33;color:#4a9eff;font-size:12px;cursor:default;white-space:nowrap}._ptyPromptOptionDimmed_bkvre_328{padding:6px 14px;border-radius:18px;border:1px solid #2a2a2a;background:transparent;color:#444;font-size:12px;cursor:default;white-space:nowrap}._ghostText_bkvre_339{position:absolute;top:0;left:0;right:0;padding:10px 14px;color:#444;font-size:14px;line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;pointer-events:none;white-space:pre-wrap;overflow:hidden;max-height:120px}._suggestionChip_bkvre_355{display:flex;align-items:center;gap:8px;padding:8px 14px;background:#1a1a1a;border-top:1px solid #2a2a2a;cursor:pointer;flex-shrink:0;transition:background .15s}._suggestionChip_bkvre_355:hover{background:#222}._suggestionChipText_bkvre_371{flex:1;color:#555;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._suggestionChipAction_bkvre_380{color:#4a9eff;font-size:14px;flex-shrink:0}._loadMoreWrap_bkvre_386{display:flex;justify-content:center;padding:12px 0 4px}._loadMoreBtn_bkvre_392{padding:6px 18px;border-radius:16px;border:1px solid #3a3a3a;background:#ffffff0f;color:#999;font-size:12px;cursor:pointer;transition:background .15s,color .15s}._loadMoreBtn_bkvre_392:hover{background:#ffffff1f;color:#ccc}._navSidebar_bkvre_408{width:40px;flex-shrink:0;background:#0d0d0d;border-right:1px solid #2a2a2a;display:flex;flex-direction:column;align-items:center;padding-top:8px;gap:4px}._navBtn_bkvre_420{width:32px;height:32px;border:none;background:none;color:#666;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;transition:background .15s,color .15s}._navBtn_bkvre_420:hover{color:#ccc;background:#1a1a1a}._navBtnActive_bkvre_440{width:32px;height:32px;border:none;background:#4a9eff26;color:#4a9eff;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:6px;padding:0;transition:background .15s,color .15s}._navBtnActive_bkvre_440:hover{background:#4a9eff40;color:#6ab4ff}._resizer_yamj2_1{width:6px;cursor:col-resize;background:#1f1f1f;flex-shrink:0;transition:background .2s}._resizer_yamj2_1:hover{background:#3b82f6}._container_1um1r_1{display:flex;flex-direction:column;height:100%;background:#0a0a0a;overflow:hidden}._fileListSection_1um1r_10{height:300px;flex-shrink:0;display:flex;flex-direction:column;background:#111;border-bottom:1px solid #2a2a2a}._header_1um1r_19{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_1um1r_28{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.5px}._fileCount_1um1r_36{font-size:10px;color:#555;background:#1a1a1a;padding:1px 6px;border-radius:8px}._changesContainer_1um1r_44{flex:1;overflow:auto;padding:4px 0;-webkit-overflow-scrolling:touch}._changeItem_1um1r_51{display:flex;align-items:center;height:28px;padding:0 8px;cursor:pointer;color:#ccc;font-size:13px;white-space:nowrap;transition:background .1s;gap:6px}._changeItem_1um1r_51:hover{background:#1a1a1a}._changeItemActive_1um1r_68{background:#4a9eff1f;color:#fff}._changeItemActive_1um1r_68:hover{background:#4a9eff2e}._dirItem_1um1r_77{display:flex;align-items:center;height:26px;padding:0 8px;color:#999;font-size:13px;white-space:nowrap;gap:6px}._dirArrow_1um1r_88{width:16px;flex-shrink:0;color:#666;display:flex;align-items:center;justify-content:center}._dirName_1um1r_97{overflow:hidden;text-overflow:ellipsis}._status_1um1r_102{width:16px;flex-shrink:0;font-size:11px;font-weight:600;text-align:center;margin-left:auto}._icon_1um1r_111{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center}._fileName_1um1r_120{overflow:hidden;text-overflow:ellipsis;flex:1}._diffSection_1um1r_127{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}._diffHeader_1um1r_135{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #2a2a2a;background:#111;flex-shrink:0}._diffFilePath_1um1r_145{font-size:12px;color:#ccc;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}._diffBadge_1um1r_155{padding:2px 8px;background:#2a2a2a;border:1px solid #444;border-radius:4px;font-size:10px;font-weight:600;color:#e2c08d;letter-spacing:.5px;flex-shrink:0}._diffContent_1um1r_167{flex:1;overflow:auto;-webkit-overflow-scrolling:touch}._diffPlaceholder_1um1r_173{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;color:#333;font-size:13px}._statusText_1um1r_184{color:#555;font-size:12px;padding:16px 12px;text-align:center}._errorText_1um1r_191{color:#ff6b6b;font-size:12px;padding:16px 12px;text-align:center}._emptyText_1um1r_198{color:#666;font-size:12px;padding:16px 12px;text-align:center}._warningText_1um1r_205{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;color:#e2c08d;font-size:13px;text-align:center;gap:8px}._container_rkahp_1{display:flex;flex-direction:column;height:100%;background:#0a0a0a;overflow:hidden}._header_rkahp_9{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid #2a2a2a;flex-shrink:0}._headerTitle_rkahp_18{font-size:13px;font-weight:600;color:#ccc}._closeBtn_rkahp_24{background:none;border:none;color:#888;cursor:pointer;padding:4px;display:flex;align-items:center}._closeBtn_rkahp_24:active{color:#fff}._content_rkahp_38{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px}._empty_rkahp_47{color:#999;font-size:13px;text-align:center;padding:40px 0}._fixedTable_rkahp_54{table-layout:fixed}._ellipsisCell_rkahp_58{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:0}._layout_v8lsg_1{height:100vh;overflow:hidden}._header_v8lsg_6{background:#111;border-bottom:1px solid #1f1f1f;padding:0 24px;height:60px;line-height:60px}._content_v8lsg_14{flex:1;overflow:hidden}._mainContainer_v8lsg_19{display:flex;height:100%}._leftPanel_v8lsg_24{flex-shrink:0;border-right:1px solid #1f1f1f;display:flex;flex-direction:column;background:#0a0a0a}._leftPanelHeader_v8lsg_32{padding:10px 16px;border-bottom:1px solid #1f1f1f;font-size:13px;color:#9ca3af;font-weight:500;display:flex;justify-content:space-between;align-items:center}._leftPanelCount_v8lsg_43{font-size:12px;color:#555;font-weight:400}._leftPanelBody_v8lsg_49{flex:1;overflow:hidden}._rightPanel_v8lsg_54{flex:1;overflow:hidden;background:#0d0d0d}._modalActions_v8lsg_60{margin-bottom:12px}._spinCenter_v8lsg_64{text-align:center;padding:40px}._emptyCenter_v8lsg_69{text-align:center;color:#999;padding:40px}._logCheckbox_v8lsg_75{margin-right:8px}._logListContainer_v8lsg_79{background:#0d0d0d;border-radius:8px;overflow:hidden}._logListItem_v8lsg_85{cursor:pointer;padding:8px 12px;border-bottom:1px solid #222}._logItemRow_v8lsg_91{display:flex;align-items:center;width:100%;justify-content:space-between;flex-wrap:nowrap;gap:12px}._logItemRow_v8lsg_91>span:first-child{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden}._logFileName_v8lsg_108{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._logItemRow_v8lsg_91>span:last-child{display:flex;align-items:center;flex-shrink:0;gap:8px}._logFileIcon_v8lsg_121{margin-right:8px;color:#3b82f6;flex-shrink:0}._loadingOverlay_v8lsg_127{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000000bf;display:flex;align-items:center;justify-content:center;z-index:9999}._loadingText_v8lsg_140{color:#fff;font-size:16px;font-weight:700}._mobileLoadingOverlay_v8lsg_146{position:absolute;top:0;right:0;bottom:0;left:0;background:#000000d1;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:200;gap:16px}._mobileLoadingSpinner_v8lsg_158{width:36px;height:36px;border:3px solid rgba(255,255,255,.12);border-top-color:#4f8cff;border-radius:50%;animation:_mobileSpin_v8lsg_1 .8s linear infinite}@keyframes _mobileSpin_v8lsg_1{to{transform:rotate(360deg)}}._mobileLoadingLabel_v8lsg_171{color:#888;font-size:13px;font-variant-numeric:tabular-nums}._footer_v8lsg_177{height:18px;background:#000;display:flex;align-items:center;justify-content:flex-end;padding:0 12px;flex-shrink:0}._footerRight_v8lsg_187{display:flex;align-items:center;gap:6px;font-size:11px;color:#555}._footerText_v8lsg_195{color:#444;margin-right:2px}._footerLink_v8lsg_200{display:inline-flex;align-items:center;gap:3px;color:#555;text-decoration:none}._footerLink_v8lsg_200:hover{color:#888}._footerIcon_v8lsg_212{width:12px;height:12px}._footerDivider_v8lsg_217{color:#333}._footerText_v8lsg_195{color:#555}._guideContainer_v8lsg_225{display:flex;align-items:center;justify-content:center;height:100%;background:#0a0a0a}._guideContent_v8lsg_233{max-width:560px;padding:40px}._guideTitle_v8lsg_238{font-size:20px;font-weight:600;color:#e0e0e0;margin:0 0 28px}._guideStep_v8lsg_245{display:flex;gap:14px;margin-bottom:22px}._guideStepNum_v8lsg_251{flex-shrink:0;width:24px;height:24px;border-radius:50%;background:#1a1a2e;color:#7c8aff;font-size:13px;font-weight:600;display:flex;align-items:center;justify-content:center;margin-top:1px}._guideStepBody_v8lsg_266{flex:1;min-width:0}._guideText_v8lsg_271{color:#aaa;font-size:14px;line-height:1.6;margin:0 0 8px}._guideCode_v8lsg_278{display:block;background:#141414;border:1px solid #252525;border-radius:6px;padding:10px 14px;color:#8b9cf7;font-size:13px;line-height:1.5;word-break:break-all;white-space:pre-wrap}._mobileChatOverlay_v8lsg_291{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileChatOverlayVisible_v8lsg_303{transform:translate(0)}._mobileChatInner_v8lsg_307{flex:1;min-height:0;display:flex;flex-direction:column;zoom:.6}._mobileGitDiffOverlay_v8lsg_315{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileGitDiffOverlayVisible_v8lsg_327{transform:translate(0)}._mobileGitDiffInner_v8lsg_331{flex:1;min-height:0;display:flex;flex-direction:column;zoom:.6}._mobileMenuBtn_v8lsg_339{background:none;border:none;color:#aaa;padding:4px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:4px;flex-shrink:0}._mobileMenuBtn_v8lsg_339:active{background:#ffffff1a}._mobileMenuOverlay_v8lsg_356{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999}._mobileMenuDropdown_v8lsg_362{position:absolute;top:100%;left:0;margin-top:4px;background:#1a1a1a;border:1px solid #333;border-radius:8px;box-shadow:0 4px 12px #00000080;min-width:160px;z-index:1000;overflow:hidden}._mobileMenuItem_v8lsg_376{display:flex;align-items:center;gap:8px;padding:12px 16px;color:#ddd;font-size:14px;cursor:pointer;border:none;background:none;width:100%;text-align:left}._mobileMenuItem_v8lsg_376:active{background:#ffffff1a}._mobileStatsOverlay_v8lsg_394{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileStatsOverlayVisible_v8lsg_406{transform:translate(0)}._mobileStatsInner_v8lsg_410{flex:1;min-height:0;display:flex;flex-direction:column}._mobileLogMgmtOverlay_v8lsg_417{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileLogMgmtOverlayVisible_v8lsg_429{transform:translate(0)}._mobileLogMgmtHeader_v8lsg_433{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;border-bottom:1px solid #222;flex-shrink:0}._mobileLogMgmtTitle_v8lsg_442{font-size:14px;font-weight:600;color:#e0e0e0}._mobileLogMgmtClose_v8lsg_448{background:none;border:none;color:#888;cursor:pointer;padding:4px;display:flex;align-items:center;justify-content:center}._mobileLogMgmtClose_v8lsg_448:hover{color:#fff}._mobileLogMgmtActions_v8lsg_463{display:flex;gap:8px;padding:8px 12px;border-bottom:1px solid #222;flex-shrink:0}._mobileLogMgmtBody_v8lsg_471{flex:1;min-height:0;overflow:hidden;padding:0 10px}._mobileSettingsOverlay_v8lsg_478{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobileSettingsOverlayVisible_v8lsg_490{transform:translate(0)}._mobilePromptOverlay_v8lsg_494{position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);transition:transform .3s ease;z-index:100;background:#0a0a0a;display:flex;flex-direction:column;overflow:hidden}._mobilePromptOverlayVisible_v8lsg_506{transform:translate(0)}._mobilePromptBody_v8lsg_510{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column}._mobilePromptList_v8lsg_518{flex:1;overflow-y:auto;padding:0 12px}._mobilePromptItem_v8lsg_524{padding:12px 0;border-bottom:1px solid #1a1a1a}._mobilePromptTimestamp_v8lsg_529{font-size:11px;color:#666;margin-bottom:8px;font-family:ui-monospace,monospace}._mobilePromptCard_v8lsg_536{margin:4px 0;background:#141414;border-radius:6px;border:1px solid #303030;padding:10px 14px}._mobilePromptPreText_v8lsg_544{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6;color:#d9d9d9;margin:4px 0}
|
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-Drg6iuc9.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Dt59iD4-.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="root"></div>
|
package/findcc.js
CHANGED
|
@@ -1,15 +1,30 @@
|
|
|
1
1
|
import { resolve, join } from 'node:path';
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { existsSync, realpathSync } from 'node:fs';
|
|
4
|
-
import { homedir } from 'node:os';
|
|
4
|
+
import { homedir, tmpdir } from 'node:os';
|
|
5
5
|
import { execSync } from 'node:child_process';
|
|
6
|
+
import { threadId } from 'node:worker_threads';
|
|
6
7
|
|
|
7
8
|
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
8
9
|
|
|
9
10
|
// ============ 配置区(第三方适配只需修改此处)============
|
|
10
11
|
|
|
12
|
+
function resolveLogDir() {
|
|
13
|
+
const envDir = process.env.CCV_LOG_DIR;
|
|
14
|
+
if (typeof envDir === 'string' && envDir.trim()) {
|
|
15
|
+
const raw = envDir.trim();
|
|
16
|
+
// 允许通过 'tmp' 或 'temp' 关键字使用系统临时目录(常用于测试)
|
|
17
|
+
if (raw === 'tmp' || raw === 'temp') {
|
|
18
|
+
return join(tmpdir(), 'cc-viewer-test', `${process.pid}-${threadId}`);
|
|
19
|
+
}
|
|
20
|
+
const expanded = raw.startsWith('~/') ? join(homedir(), raw.slice(2)) : raw;
|
|
21
|
+
return resolve(expanded);
|
|
22
|
+
}
|
|
23
|
+
return join(homedir(), '.claude', 'cc-viewer');
|
|
24
|
+
}
|
|
25
|
+
|
|
11
26
|
// 日志存储根目录(所有项目日志、偏好设置均存放于此)
|
|
12
|
-
export const LOG_DIR =
|
|
27
|
+
export const LOG_DIR = resolveLogDir();
|
|
13
28
|
|
|
14
29
|
// npm 包名候选列表(按优先级排列)
|
|
15
30
|
export const PACKAGES = ['@anthropic-ai/claude-code', '@ali/claude-code'];
|
|
@@ -88,7 +103,7 @@ export function resolveNpmClaudePath() {
|
|
|
88
103
|
}
|
|
89
104
|
}
|
|
90
105
|
}
|
|
91
|
-
} catch {}
|
|
106
|
+
} catch { }
|
|
92
107
|
}
|
|
93
108
|
} catch {
|
|
94
109
|
// ignore
|
|
@@ -120,7 +135,7 @@ export function resolveNativePath() {
|
|
|
120
135
|
try {
|
|
121
136
|
const real = realpathSync(result);
|
|
122
137
|
if (real.includes('node_modules')) continue;
|
|
123
|
-
} catch {}
|
|
138
|
+
} catch { }
|
|
124
139
|
return result;
|
|
125
140
|
}
|
|
126
141
|
} catch {
|
package/interceptor.js
CHANGED
|
@@ -6,11 +6,12 @@ const _ccvSkipArgs = ['--version', '-v', '--v', '--help', '-h', 'doctor', 'insta
|
|
|
6
6
|
const _ccvSkip = _ccvSkipArgs.includes(process.argv[2]);
|
|
7
7
|
|
|
8
8
|
import './proxy-env.js';
|
|
9
|
-
import { appendFileSync, mkdirSync,
|
|
9
|
+
import { appendFileSync, mkdirSync, readFileSync, statSync, renameSync, unlinkSync, existsSync } from 'node:fs';
|
|
10
10
|
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, migrateConversationContext } from './lib/interceptor-core.js';
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -42,43 +43,6 @@ function generateNewLogFilePath() {
|
|
|
42
43
|
return { filePath: join(dir, `${projectName}_${ts}.jsonl`), dir, projectName };
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
// 查找同项目最近的日志文件
|
|
46
|
-
function findRecentLog(dir, projectName) {
|
|
47
|
-
try {
|
|
48
|
-
const files = readdirSync(dir)
|
|
49
|
-
.filter(f => f.startsWith(projectName + '_') && f.endsWith('.jsonl'))
|
|
50
|
-
.sort()
|
|
51
|
-
.reverse();
|
|
52
|
-
if (files.length === 0) return null;
|
|
53
|
-
return join(dir, files[0]);
|
|
54
|
-
} catch { }
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// 清理残留的临时文件(rename 为正式文件名,保留数据)
|
|
59
|
-
function cleanupTempFiles(dir, projectName) {
|
|
60
|
-
try {
|
|
61
|
-
const tempFiles = readdirSync(dir)
|
|
62
|
-
.filter(f => f.startsWith(projectName + '_') && f.endsWith('_temp.jsonl'));
|
|
63
|
-
for (const f of tempFiles) {
|
|
64
|
-
try {
|
|
65
|
-
const tempPath = join(dir, f);
|
|
66
|
-
const newPath = tempPath.replace('_temp.jsonl', '.jsonl');
|
|
67
|
-
if (existsSync(newPath)) {
|
|
68
|
-
// 正式文件已存在,追加临时文件内容后删除
|
|
69
|
-
const tempContent = readFileSync(tempPath, 'utf-8');
|
|
70
|
-
if (tempContent.trim()) {
|
|
71
|
-
appendFileSync(newPath, tempContent);
|
|
72
|
-
}
|
|
73
|
-
unlinkSync(tempPath);
|
|
74
|
-
} else {
|
|
75
|
-
renameSync(tempPath, newPath);
|
|
76
|
-
}
|
|
77
|
-
} catch { }
|
|
78
|
-
}
|
|
79
|
-
} catch { }
|
|
80
|
-
}
|
|
81
|
-
|
|
82
46
|
// Resume 状态(供 server.js 使用)
|
|
83
47
|
let _resumeState = null;
|
|
84
48
|
let _resolveChoice = null;
|
|
@@ -209,125 +173,6 @@ export function resetWorkspace() {
|
|
|
209
173
|
|
|
210
174
|
const MAX_LOG_SIZE = 150 * 1024 * 1024; // 150MB
|
|
211
175
|
|
|
212
|
-
const SUBAGENT_SYSTEM_RE = /command execution specialist|file search specialist|planning specialist|general-purpose agent/i;
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* 提取请求体中的 system prompt 文本
|
|
216
|
-
*/
|
|
217
|
-
function getSystemText(body) {
|
|
218
|
-
const system = body?.system;
|
|
219
|
-
if (typeof system === 'string') return system;
|
|
220
|
-
if (Array.isArray(system)) {
|
|
221
|
-
return system.map(s => (s && s.text) || '').join('');
|
|
222
|
-
}
|
|
223
|
-
return '';
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* 判断请求是否为 MainAgent(拦截器侧标记用)
|
|
228
|
-
* 与 contentFilter.js 保持一致的检测逻辑
|
|
229
|
-
*/
|
|
230
|
-
function isMainAgentRequest(body) {
|
|
231
|
-
if (!body?.system || !Array.isArray(body?.tools)) return false;
|
|
232
|
-
|
|
233
|
-
const sysText = getSystemText(body);
|
|
234
|
-
|
|
235
|
-
// 必须包含 MainAgent 身份标识
|
|
236
|
-
if (!sysText.includes('You are Claude Code')) return false;
|
|
237
|
-
|
|
238
|
-
// 排除 SubAgent
|
|
239
|
-
if (SUBAGENT_SYSTEM_RE.test(sysText)) return false;
|
|
240
|
-
|
|
241
|
-
// 新架构检测(v2.1.69+):延迟工具加载机制
|
|
242
|
-
const isSystemArray = Array.isArray(body.system);
|
|
243
|
-
const hasToolSearch = body.tools.some(t => t.name === 'ToolSearch');
|
|
244
|
-
|
|
245
|
-
if (isSystemArray && hasToolSearch) {
|
|
246
|
-
// 检查第一条消息是否包含 <available-deferred-tools>
|
|
247
|
-
const messages = body.messages || [];
|
|
248
|
-
const firstMsgContent = messages.length > 0 ?
|
|
249
|
-
(typeof messages[0].content === 'string' ? messages[0].content :
|
|
250
|
-
Array.isArray(messages[0].content) ? messages[0].content.map(c => c.text || '').join('') : '') : '';
|
|
251
|
-
if (firstMsgContent.includes('<available-deferred-tools>')) {
|
|
252
|
-
return true;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// 旧架构检测:工具数量 > 10 且包含核心工具
|
|
257
|
-
if (body.tools.length > 10) {
|
|
258
|
-
const hasEdit = body.tools.some(t => t.name === 'Edit');
|
|
259
|
-
const hasBash = body.tools.some(t => t.name === 'Bash');
|
|
260
|
-
const hasTaskOrAgent = body.tools.some(t => t.name === 'Task' || t.name === 'Agent');
|
|
261
|
-
if (hasEdit && hasBash && hasTaskOrAgent) {
|
|
262
|
-
return true;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
return false;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
function isPreflightEntry(entry) {
|
|
270
|
-
if (entry.mainAgent || entry.isHeartbeat || entry.isCountTokens) return false;
|
|
271
|
-
const body = entry.body || {};
|
|
272
|
-
if (Array.isArray(body.tools) && body.tools.length > 0) return false;
|
|
273
|
-
const msgs = body.messages || [];
|
|
274
|
-
if (msgs.length !== 1 || msgs[0].role !== 'user') return false;
|
|
275
|
-
const sysText = typeof body.system === 'string' ? body.system :
|
|
276
|
-
Array.isArray(body.system) ? body.system.map(s => s?.text || '').join('') : '';
|
|
277
|
-
return sysText.includes('Claude Code');
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
function migrateConversationContext(oldFile, newFile) {
|
|
281
|
-
try {
|
|
282
|
-
const content = readFileSync(oldFile, 'utf-8');
|
|
283
|
-
if (!content.trim()) return;
|
|
284
|
-
|
|
285
|
-
const parts = content.split('\n---\n').filter(p => p.trim());
|
|
286
|
-
if (parts.length === 0) return;
|
|
287
|
-
|
|
288
|
-
// 从后向前扫描,找到最近一条 messages.length === 1 的 mainAgent 条目
|
|
289
|
-
let originIndex = -1;
|
|
290
|
-
for (let i = parts.length - 1; i >= 0; i--) {
|
|
291
|
-
if (!parts[i].includes('"mainAgent": true')) continue;
|
|
292
|
-
try {
|
|
293
|
-
const entry = JSON.parse(parts[i]);
|
|
294
|
-
if (entry.mainAgent) {
|
|
295
|
-
const msgs = entry.body?.messages;
|
|
296
|
-
if (Array.isArray(msgs) && msgs.length === 1) {
|
|
297
|
-
originIndex = i;
|
|
298
|
-
break;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
} catch { }
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
if (originIndex < 0) return; // 找不到起点,不迁移
|
|
305
|
-
|
|
306
|
-
// 检查前一条是否为 Preflight
|
|
307
|
-
let migrationStart = originIndex;
|
|
308
|
-
if (originIndex > 0) {
|
|
309
|
-
try {
|
|
310
|
-
const prev = JSON.parse(parts[originIndex - 1]);
|
|
311
|
-
if (isPreflightEntry(prev)) {
|
|
312
|
-
migrationStart = originIndex - 1;
|
|
313
|
-
}
|
|
314
|
-
} catch { }
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// 迁移条目写入新文件
|
|
318
|
-
const migratedParts = parts.slice(migrationStart);
|
|
319
|
-
writeFileSync(newFile, migratedParts.join('\n---\n') + '\n---\n');
|
|
320
|
-
|
|
321
|
-
// 旧文件只保留迁移前的条目
|
|
322
|
-
const remainingParts = parts.slice(0, migrationStart);
|
|
323
|
-
if (remainingParts.length > 0) {
|
|
324
|
-
writeFileSync(oldFile, remainingParts.join('\n---\n') + '\n---\n');
|
|
325
|
-
} else {
|
|
326
|
-
writeFileSync(oldFile, '');
|
|
327
|
-
}
|
|
328
|
-
} catch { }
|
|
329
|
-
}
|
|
330
|
-
|
|
331
176
|
function checkAndRotateLogFile() {
|
|
332
177
|
try {
|
|
333
178
|
if (!existsSync(LOG_FILE)) return;
|
|
@@ -353,106 +198,6 @@ function getBaseUrlHost() {
|
|
|
353
198
|
}
|
|
354
199
|
const CUSTOM_API_HOST = getBaseUrlHost();
|
|
355
200
|
|
|
356
|
-
// 通过请求路径识别 Anthropic API 端点(兼容 CCR 等代理场景)
|
|
357
|
-
function isAnthropicApiPath(urlStr) {
|
|
358
|
-
try {
|
|
359
|
-
const pathname = new URL(urlStr).pathname;
|
|
360
|
-
return /^\/v1\/messages(\/count_tokens|\/batches(\/.*)?)?$/.test(pathname)
|
|
361
|
-
|| /^\/api\/eval\/sdk-/.test(pathname);
|
|
362
|
-
} catch {
|
|
363
|
-
return /\/v1\/messages/.test(urlStr);
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// 组装流式消息为完整的 message 对象
|
|
368
|
-
function assembleStreamMessage(events) {
|
|
369
|
-
let message = null;
|
|
370
|
-
const contentBlocks = [];
|
|
371
|
-
let currentBlockIndex = -1;
|
|
372
|
-
|
|
373
|
-
for (const event of events) {
|
|
374
|
-
if (typeof event !== 'object' || !event.type) continue;
|
|
375
|
-
|
|
376
|
-
switch (event.type) {
|
|
377
|
-
case 'message_start':
|
|
378
|
-
// 初始化消息对象
|
|
379
|
-
message = { ...event.message };
|
|
380
|
-
message.content = [];
|
|
381
|
-
break;
|
|
382
|
-
|
|
383
|
-
case 'content_block_start':
|
|
384
|
-
// 开始新的内容块
|
|
385
|
-
currentBlockIndex = event.index;
|
|
386
|
-
contentBlocks[currentBlockIndex] = { ...event.content_block };
|
|
387
|
-
if (contentBlocks[currentBlockIndex].type === 'text') {
|
|
388
|
-
contentBlocks[currentBlockIndex].text = '';
|
|
389
|
-
} else if (contentBlocks[currentBlockIndex].type === 'thinking') {
|
|
390
|
-
contentBlocks[currentBlockIndex].thinking = '';
|
|
391
|
-
}
|
|
392
|
-
break;
|
|
393
|
-
|
|
394
|
-
case 'content_block_delta':
|
|
395
|
-
// 累积内容块的增量数据
|
|
396
|
-
if (event.index >= 0 && contentBlocks[event.index] && event.delta) {
|
|
397
|
-
if (event.delta.type === 'text_delta' && event.delta.text) {
|
|
398
|
-
contentBlocks[event.index].text += event.delta.text;
|
|
399
|
-
} else if (event.delta.type === 'input_json_delta' && event.delta.partial_json) {
|
|
400
|
-
if (typeof contentBlocks[event.index]._inputJson !== 'string') {
|
|
401
|
-
contentBlocks[event.index]._inputJson = '';
|
|
402
|
-
}
|
|
403
|
-
contentBlocks[event.index]._inputJson += event.delta.partial_json;
|
|
404
|
-
} else if (event.delta.type === 'thinking_delta' && event.delta.thinking) {
|
|
405
|
-
contentBlocks[event.index].thinking += event.delta.thinking;
|
|
406
|
-
} else if (event.delta.type === 'signature_delta' && event.delta.signature) {
|
|
407
|
-
contentBlocks[event.index].signature = event.delta.signature;
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
break;
|
|
411
|
-
|
|
412
|
-
case 'content_block_stop':
|
|
413
|
-
// 内容块结束
|
|
414
|
-
if (event.index >= 0 && contentBlocks[event.index]) {
|
|
415
|
-
// 如果是 tool_use 且有累积的 input JSON,尝试解析
|
|
416
|
-
if (contentBlocks[event.index].type === 'tool_use' && typeof contentBlocks[event.index]._inputJson === 'string') {
|
|
417
|
-
try {
|
|
418
|
-
contentBlocks[event.index].input = JSON.parse(contentBlocks[event.index]._inputJson);
|
|
419
|
-
} catch {
|
|
420
|
-
contentBlocks[event.index].input = contentBlocks[event.index]._inputJson;
|
|
421
|
-
}
|
|
422
|
-
delete contentBlocks[event.index]._inputJson;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
break;
|
|
426
|
-
|
|
427
|
-
case 'message_delta':
|
|
428
|
-
// 更新消息的增量数据(如 stop_reason, usage)
|
|
429
|
-
if (message && event.delta) {
|
|
430
|
-
if (event.delta.stop_reason) {
|
|
431
|
-
message.stop_reason = event.delta.stop_reason;
|
|
432
|
-
}
|
|
433
|
-
if (event.delta.stop_sequence !== undefined) {
|
|
434
|
-
message.stop_sequence = event.delta.stop_sequence;
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
if (message && event.usage) {
|
|
438
|
-
message.usage = { ...message.usage, ...event.usage };
|
|
439
|
-
}
|
|
440
|
-
break;
|
|
441
|
-
|
|
442
|
-
case 'message_stop':
|
|
443
|
-
// 消息结束
|
|
444
|
-
break;
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
// 将内容块添加到消息中
|
|
449
|
-
if (message) {
|
|
450
|
-
message.content = contentBlocks.filter(block => block !== undefined);
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
return message;
|
|
454
|
-
}
|
|
455
|
-
|
|
456
201
|
// 保存 viewer 模块引用
|
|
457
202
|
let viewerModule = null;
|
|
458
203
|
|