llmpt 1.3.14 → 1.3.16

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/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # Changelog
2
2
 
3
+ ## v1.3.16 (2026-07-14)
4
+
5
+ ### 修复
6
+ - 兼容 GLM 等模型的 `delta.reasoning` 思考字段(原仅支持 `reasoning_content`)
7
+
8
+ ---
9
+
10
+ ## v1.3.15 (2026-06-17)
11
+
12
+ ### 新增
13
+ - Raw JSON 面板改为展示完整 trace 所有字段
14
+
15
+ ### 修复
16
+ - Response 面板正确显示 assistant 的 tool_calls(OpenAI 格式)
17
+ - Anthropic 多块 ContentPart 之间添加间距,与 OpenAI 排版一致
18
+ - 修复多个 tool_result 在同一 user message 时只显示第一个的问题
19
+ - **SSE 流式解析加跨 chunk 行缓冲**:修复 tool_calls 因 TCP 分包截断而丢失的 bug
20
+ - `llmpt claude` 子命令模式未配置 Anthropic API Key 时打印明确警告
21
+
22
+ ### 变更
23
+ - 移除独立的 Tool Calls section,response body 中已包含 tool_call 信息
24
+
25
+ ---
26
+
3
27
  ## v1.3.14 (2026-06-17)
4
28
 
5
29
  ### 修复
package/dist/index.js CHANGED
@@ -118,6 +118,11 @@ async function main() {
118
118
  console.log(` 修改后重启服务生效`);
119
119
  // ── 子命令模式:启动 claude,claude 退出后关闭 LPT ──
120
120
  if (isClaudeSubcommand) {
121
+ // claude 模式必须有 anthropic provider,否则所有请求会被 LPT 拦截后返回 400
122
+ if (!config.providers.anthropic?.apiKey) {
123
+ process.stdout.write(`⚠️ 警告:未配置 Anthropic API Key,claude 的网络请求将无法转发!\n`);
124
+ process.stdout.write(` 请在 ${envPath} 中设置 ANTHROPIC_API_KEY=sk-ant-xxx\n\n`);
125
+ }
121
126
  // 打印状态行(console.log 已被静默,直接写 stdout)
122
127
  process.stdout.write(`✅ LPT 代理已就绪:http://localhost:${config.proxy.port}\n`);
123
128
  process.stdout.write(`🔍 启动 claude ${claudeArgs.join(' ') || '(interactive)'}\n\n`);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/server/proxy/stream.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,aAAa,CAAC;AAErE;;;GAGG;AACH,wBAAsB,cAAc,CAClC,gBAAgB,EAAE,QAAQ,EAC1B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,cAAc,EACzB,EAAE,EAAE,QAAQ,EACZ,gBAAgB,EAAE,MAAM,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,QAAQ,CAAC,CAiJnB"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/server/proxy/stream.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAwB,MAAM,aAAa,CAAC;AAErE;;;GAGG;AACH,wBAAsB,cAAc,CAClC,gBAAgB,EAAE,QAAQ,EAC1B,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,cAAc,EACzB,EAAE,EAAE,QAAQ,EACZ,gBAAgB,EAAE,MAAM,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,QAAQ,CAAC,CAyJnB"}
@@ -17,6 +17,8 @@ export async function proxySSEStream(upstreamResponse, trace, collector, ws, req
17
17
  let reasoningContent = '';
18
18
  const toolCallsMap = new Map();
19
19
  let usage;
20
+ // SSE 行缓冲:一条 data 行可能跨多个 TCP chunk,需要跨 chunk 拼接
21
+ let lineBuffer = '';
20
22
  const isAnthropic = providerType === 'anthropic';
21
23
  const reader = upstreamResponse.body.getReader();
22
24
  const decoder = new TextDecoder();
@@ -49,9 +51,11 @@ export async function proxySSEStream(upstreamResponse, trace, collector, ws, req
49
51
  }
50
52
  // Record chunk for trace
51
53
  collector.appendChunk(trace.id, chunk);
52
- // Parse SSE data lines
53
- const lines = chunk.split('\n');
54
- for (const line of lines) {
54
+ // Parse SSE data lines — 用 lineBuffer 跨 chunk 拼接不完整的行
55
+ const rawLines = (lineBuffer + chunk).split('\n');
56
+ // 最后一段可能不完整,留到下次 chunk 拼接
57
+ lineBuffer = rawLines.pop() ?? '';
58
+ for (const line of rawLines) {
55
59
  if (!line.startsWith('data: '))
56
60
  continue;
57
61
  const data = line.slice(6).trim();
@@ -73,8 +77,11 @@ export async function proxySSEStream(upstreamResponse, trace, collector, ws, req
73
77
  if (delta) {
74
78
  if (typeof delta.content === 'string')
75
79
  fullContent += delta.content;
80
+ // 兼容不同模型的思考字段名:reasoning_content (DeepSeek/通用) / reasoning (GLM)
76
81
  if (typeof delta.reasoning_content === 'string')
77
82
  reasoningContent += delta.reasoning_content;
83
+ else if (typeof delta.reasoning === 'string')
84
+ reasoningContent += delta.reasoning;
78
85
  if (Array.isArray(delta.tool_calls)) {
79
86
  for (const tc of delta.tool_calls) {
80
87
  const idx = tc.index ?? 0;
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/server/proxy/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../src/server/proxy/stream.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- *,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.z-20{z-index:20}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-auto{margin-left:auto}.mt-0\.5{margin-top:.125rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-1\.5{height:.375rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-full{height:100%}.h-screen{height:100vh}.w-1\.5{width:.375rem}.w-7{width:1.75rem}.w-px{width:1px}.min-w-0{min-width:0}.max-w-\[90px\]{max-width:90px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-5{gap:1.25rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1\.5{row-gap:.375rem}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.bg-transparent{background-color:#0000}.p-3{padding:.75rem}.p-5{padding:1.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-1{padding-top:.25rem}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tracking-tight{letter-spacing:-.025em}.outline-none{outline-offset:2px;outline:2px solid #0000}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--bg:#f4f5f7;--bg-card:#fff;--bg-hover:#f0f1f4;--bg-active:#e8ecf4;--bg-code:#f6f8fa;--border:#e2e4e9;--border-light:#edeef1;--scrollbar-bg1:#bbbec7;--shadow-sm:0 1px 3px #0000000f;--shadow-md:0 2px 8px #00000014;--radius:10px;--radius-sm:6px;--text:#1c2024;--text-secondary:#60646c;--text-tertiary:#a0a4ab;--blue:#3b82f6;--blue-bg:#eff6ff;--green:#10b981;--green-bg:#ecfdf5;--amber:#f59e0b;--amber-bg:#fffbeb;--red:#ef4444;--red-bg:#fef2f2;--red-bg-hi:#fecaca;--green-bg-hi:#bbf7d0;--purple:#8b5cf6;--purple-bg:#f5f3ff;--cyan:#06b6d4;--cyan-bg:#ecfeff;--orange:#f97316;--orange-bg:#fff7ed;--indigo:#6366f1;--mono:ui-monospace, "Cascadia Code", "Cascadia Mono", Consolas, "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", monospace;--sans:"Microsoft YaHei UI", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", sans-serif}[data-theme=dark]{--bg:#0d1117;--bg-card:#161b22;--bg-hover:#1c2128;--bg-active:#252c35;--bg-code:#1c2128;--border:#30363d;--border-light:#21262d;--scrollbar-bg1:#484f58;--shadow-sm:0 1px 3px #0000004d;--shadow-md:0 2px 8px #0006;--text:#e6edf3;--text-secondary:#8b949e;--text-tertiary:#6e7681;--blue:#58a6ff;--blue-bg:#0d2240;--green:#3fb950;--green-bg:#0d2d1a;--amber:#d29922;--amber-bg:#2d2200;--red:#f85149;--red-bg:#3d1117;--red-bg-hi:#6b2020;--green-bg-hi:#1a5c33;--purple:#bc8cff;--purple-bg:#1f1338;--cyan:#39d2c0;--cyan-bg:#0a2e2c;--orange:#f0883e;--orange-bg:#2d1b00;--indigo:#8b8fff}[data-theme=dark] pre,[data-theme=dark] .pre-text{background:#ffffff0a;border-color:#ffffff0f}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--sans);font-feature-settings:"cv02", "cv03", "cv04", "cv11";background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;height:100vh;font-size:14px;line-height:1.5}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px;min-height:30px}::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}.sidebar-scroll::-webkit-scrollbar{width:8px}.sidebar-scroll::-webkit-scrollbar-thumb{background:var(--scrollbar-bg1);border-radius:4px;min-height:40px}.sidebar-scroll::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.detail-scroll::-webkit-scrollbar{width:8px}.detail-scroll::-webkit-scrollbar-thumb{background:var(--scrollbar-bg1);border-radius:4px;min-height:40px}.detail-scroll::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.json-view{font-family:var(--mono);padding:4px 0;font-size:12px;line-height:1.5;overflow-x:auto}.json-view .jk{color:var(--purple)}.json-view .js{color:var(--green);white-space:pre-wrap;word-break:break-all}.json-view .jn{color:var(--amber)}.json-view .jb{color:var(--red)}.json-view .jnull,.json-view .json-punct{color:var(--text-tertiary)}.json-view .jt-line{padding-left:12px}.json-view .jt-toggle{cursor:pointer;color:var(--text-tertiary);text-align:center;-webkit-user-select:none;user-select:none;width:12px;margin-right:2px;font-size:10px;display:inline-block}.json-view .jt-toggle:hover{color:var(--text-secondary)}.json-view .jt-summary{color:var(--text-tertiary);margin-left:4px;font-size:11px;font-style:italic;display:none}.json-view .jt-summary.jt-show{display:inline}.json-view .jt-children{padding-left:4px}.json-view .jt-children:not(.jt-open),.json-view .jt-close.jt-hidden{display:none}[data-theme=dark] .json-view .jk{color:#bc8cff}[data-theme=dark] .json-view .js{color:#3fb950}[data-theme=dark] .json-view .jn{color:#d29922}[data-theme=dark] .json-view .jb{color:#f85149}[data-theme=dark] .json-view .json-punct,[data-theme=dark] .json-view .jt-toggle{color:#6e7681}[data-theme=dark] .json-view .jt-toggle:hover{color:#c9d1d9}[data-theme=dark] .json-view .jt-summary{color:#6e7681}@keyframes pulse-dot{0%,80%,to{opacity:.2;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}.streaming-dots{vertical-align:middle;align-items:center;gap:3px;display:inline-flex}.streaming-dots span{background:var(--blue);border-radius:50%;width:5px;height:5px;animation:1.2s ease-in-out infinite pulse-dot}.streaming-dots span:nth-child(2){animation-delay:.2s}.streaming-dots span:nth-child(3){animation-delay:.4s}.streaming-cursor:after{content:"";background:var(--blue);vertical-align:text-bottom;width:2px;height:1em;margin-left:2px;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.filter-chip{font-size:11px;font-family:var(--sans);border:1px solid var(--border);background:var(--bg-card);color:var(--text-secondary);cursor:pointer;white-space:nowrap;border-radius:20px;padding:3px 10px;line-height:1.4;transition:all .15s}.filter-chip:hover{border-color:var(--blue);color:var(--blue)}.filter-chip.active{background:var(--blue);border-color:var(--blue);color:#fff}.filter-chip .chip-count{opacity:.65;margin-left:3px;font-size:10px}.clear-split-btn{border:1px solid var(--border);border-radius:6px;align-items:stretch;display:flex}.clear-split-main{font-size:11px;font-family:var(--sans);border:none;border-right:1px solid var(--border);color:var(--text-tertiary);cursor:pointer;background:0 0;border-radius:5px 0 0 5px;align-items:center;gap:4px;padding:3px 8px;transition:background .15s,color .15s;display:flex}.clear-split-main:hover{background:var(--bg-hover);color:var(--text-secondary)}.clear-split-arrow{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:0 5px 5px 0;align-items:center;padding:0 5px;transition:background .15s,color .15s;display:flex}.clear-split-arrow:hover{background:var(--bg-hover);color:var(--text-secondary)}.clear-dropdown{background:var(--bg-card);border:1px solid var(--border);min-width:230px;box-shadow:var(--shadow-md);z-index:100;border-radius:8px;padding:5px;position:absolute;top:calc(100% + 6px);right:0}.clear-dropdown-label{color:var(--text-tertiary);letter-spacing:.03em;text-transform:uppercase;padding:4px 8px 6px;font-size:10px}.clear-dropdown-item{width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;font-family:var(--sans);background:0 0;border:none;border-radius:6px;align-items:flex-start;gap:8px;padding:8px 10px;transition:background .12s;display:flex}.clear-dropdown-item:hover{background:var(--bg-hover);color:var(--text)}.clear-dropdown-item.danger{color:var(--red)}.clear-dropdown-item.danger:hover{background:var(--red-bg);color:var(--red)}.clear-dropdown-item svg{flex-shrink:0;margin-top:2px}.clear-dropdown-item-title{font-size:12px;font-weight:500;line-height:1.4}.clear-dropdown-item-desc{opacity:.7;margin-top:1px;font-size:11px;line-height:1.4}.file-group-header{border-top:1px solid var(--border);border-bottom:1px solid var(--border);z-index:1;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:5px;padding:4px 8px 4px 10px;transition:background .12s;display:flex;position:sticky;top:0}.file-group-header.session{background:var(--bg-active)}.file-group-header.history{background:var(--bg-hover)}.file-group-header:hover{filter:brightness(.97)}[data-theme=dark] .file-group-header:hover{filter:brightness(1.1)}.file-group-chevron{color:var(--text-tertiary);flex-shrink:0;transition:transform .18s}.file-group-label{color:var(--text-secondary);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:10.5px;font-weight:600;font-family:var(--mono);flex:1;overflow:hidden}.file-group-header.session .file-group-label{color:var(--blue)}.file-group-count{font-size:10px;font-family:var(--mono);color:var(--text-tertiary);background:var(--bg-code);border:1px solid var(--border);border-radius:10px;flex-shrink:0;padding:0 5px;line-height:1.6}.file-group-tokens{font-size:10px;font-family:var(--mono);color:var(--blue);background:var(--blue-bg);border-radius:10px;flex-shrink:0;padding:0 5px;line-height:1.6}.file-group-delete{width:20px;height:20px;color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;transition:background .12s,color .12s;display:flex}.file-group-delete:hover{background:var(--red-bg);color:var(--red)}.sidebar-sort-segment{border:1px solid var(--border);border-radius:6px;display:flex;overflow:hidden}.sidebar-sort-btn{border:none;border-right:1px solid var(--border);color:var(--text-tertiary);cursor:pointer;background:0 0;padding:3px 8px;font-size:11px;transition:all .1s}.sidebar-sort-btn:last-child{border-right:none}.sidebar-sort-btn:hover{background:var(--bg-hover);color:var(--text)}.sidebar-sort-btn.active{background:var(--blue-bg);color:var(--blue);font-weight:600}.position-indicator{border-bottom:1px solid var(--border-light);color:var(--text-tertiary);align-items:center;gap:8px;padding:4px 10px;font-size:10px;display:flex}.pi-bar{background:var(--border);border-radius:2px;flex:1;height:2px;overflow:hidden}.pi-fill{background:var(--blue);height:100%;transition:width .2s}.resize-handle{cursor:col-resize;z-index:5;flex-shrink:0;width:4px;transition:background .15s;position:relative}.resize-handle:hover,.resize-handle.dragging{background:var(--blue)}.prose-content{color:var(--text);font-size:13.5px;line-height:1.6}.prose-content pre{background:var(--bg-code);border:1px solid var(--border-light);font-family:var(--mono);border-radius:6px;margin:6px 0;padding:10px 14px;font-size:12px;line-height:1.55;overflow-x:auto}.prose-content code:not(pre code){background:var(--bg-code);border:1px solid var(--border-light);font-family:var(--mono);color:var(--purple);border-radius:4px;padding:1px 5px;font-size:12px}.prose-content p{margin:0;line-height:1.6}.prose-content p+p{margin-top:4px}.prose-content ul,.prose-content ol{margin:4px 0;padding-left:20px}.prose-content li{margin:2px 0;line-height:1.55}.prose-content h1,.prose-content h2,.prose-content h3,.prose-content h4{letter-spacing:-.01em;color:var(--text);margin:10px 0 4px;font-weight:600;line-height:1.3}.prose-content h1{font-size:1.15em}.prose-content h2{font-size:1.05em}.prose-content h3{font-size:.95em}.prose-content h4{color:var(--text-secondary);font-size:.9em}.prose-content blockquote{border-left:3px solid var(--blue);color:var(--text-secondary);margin:6px 0;padding-left:12px;font-style:italic}.prose-content hr{border:none;border-top:1px solid var(--border);margin:8px 0}.prose-content table{border-collapse:collapse;width:100%;margin:6px 0;font-size:12.5px}.prose-content th,.prose-content td{border:1px solid var(--border);text-align:left;padding:5px 10px}.prose-content th{background:var(--bg-code);font-weight:600}.prose-content a{color:var(--blue);text-decoration:underline}.prose-content strong{color:var(--text);font-weight:600}.thinking-block{border:1px solid var(--cyan);border-radius:6px;margin:4px 0;overflow:hidden}.thinking-block-header{background:var(--cyan-bg);cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--cyan);align-items:center;gap:6px;padding:5px 10px;font-size:11px;font-weight:600;display:flex}.thinking-block-header:hover{filter:brightness(.97)}.thinking-arrow{margin-right:4px}.thinking-block-header .copy-btn{margin-left:auto}.content-block .md-prose,.content-block .md-prose p,.content-block .md-prose li,.thinking-block .md-prose,.thinking-block .md-prose p,.thinking-block .md-prose li{white-space:normal}.thinking-section{flex-direction:column;gap:8px;display:flex}.thinking-section-meta{align-items:center;gap:10px;display:flex}.thinking-section-lines{color:var(--text-tertiary);font-size:11px;font-family:var(--mono)}.thinking-section-body{font-family:var(--mono);color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;background:var(--bg-code);border:1px solid var(--border-light);border-radius:var(--radius-sm);max-height:500px;padding:10px 12px;font-size:12px;line-height:1.65;overflow-y:auto}.thinking-section-body.thinking-section-body>.md-prose{font-family:var(--sans);font-size:13px}.thinking-badge{background:color-mix(in srgb, var(--indigo) 12%, transparent);color:var(--indigo)}.section-header:has(+.section-body .thinking-section) .badge{background:color-mix(in srgb, var(--indigo) 12%, transparent);color:var(--indigo)}.msg-role-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;display:inline-flex}.msg-role-toggle:hover{filter:brightness(1.15)}.msg-collapse-arrow{flex-shrink:0;align-self:center;align-items:center;font-size:8px;line-height:1;transition:transform .15s;display:inline-flex}.msg-collapse-arrow.open{transform:rotate(90deg)}.msg-tool-id{opacity:.7;font-size:9px;font-weight:400;font-family:var(--mono);letter-spacing:0}.msg-collapsed-hint{color:var(--text-tertiary);font-size:11px;font-family:var(--mono);white-space:nowrap;text-overflow:ellipsis;margin-top:2px;overflow:hidden}.msg-tool-calls{gap:4px;margin-top:6px;display:grid}.copy-btn{opacity:0;border:1px solid var(--border);background:var(--bg-card);color:var(--text-tertiary);cursor:pointer;border-radius:4px;padding:2px 6px;font-size:10px;line-height:1.4;transition:opacity .15s}.copy-btn:hover{color:var(--text);border-color:var(--text-secondary)}.copy-btn.copied{color:var(--green);border-color:var(--green)}.msg-block:hover .copy-btn,.section-header:hover .copy-btn,.thinking-block-header:hover .copy-btn{opacity:1}.detail-content{gap:8px;padding:12px 20px;display:grid}.error-banner{background:var(--red-bg);border:1px solid var(--red-bg-hi);border-radius:var(--radius-sm);align-items:center;gap:6px;padding:6px 10px;font-size:12.5px;line-height:1;display:flex}.eb-icon{color:var(--red);font-size:12px}.eb-code{color:var(--red);font-weight:600}.eb-sep{color:var(--text-tertiary)}.eb-message{color:var(--text-secondary)}.token-usage-bar{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;padding:7px 12px;display:flex}.token-bar{flex-wrap:wrap;flex:1;align-items:center;gap:4px 0;display:flex}.tok-group{border-right:1px solid var(--border);align-items:center;gap:10px;margin-right:12px;padding-right:12px;display:flex}.tok-group:last-child{border-right:none;margin-right:0;padding-right:0}.tok-item{align-items:center;gap:4px;display:flex}.tok-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.tok-label{color:var(--text-tertiary);font-size:11px}.tok-val{color:var(--text-secondary);font-weight:600;font-family:var(--mono);font-size:11px}.tok-arrow{flex-shrink:0;font-size:11px;font-weight:700}.timing-bar{align-items:center;gap:0;display:flex}.timing-item{border-right:1px solid var(--border);align-items:center;gap:4px;margin-right:12px;padding-right:12px;display:flex}.timing-item:last-child{border-right:none;margin-right:0;padding-right:0}.section{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);box-shadow:var(--shadow-sm);overflow:hidden}.section-header{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:8px 12px;transition:background .1s;display:flex}.section-header:hover{background:var(--bg-hover)}.section-header .chevron{color:var(--text-tertiary);flex-shrink:0;width:12px;font-size:10px;transition:transform .2s}.section-header .chevron.open{transform:rotate(90deg)}.section-header .title{color:var(--text);flex:1;min-width:0;font-size:13px;font-weight:600}.section-header .badge{background:var(--bg);color:var(--text-tertiary);white-space:nowrap;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:500}.section-header .copy-btn{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-card);color:var(--text-tertiary);cursor:pointer;opacity:0;padding:3px 10px;font-size:11px;transition:all .15s}.section-header:hover .copy-btn{opacity:1}.section-header .copy-btn:hover{color:var(--blue);border-color:var(--blue)}.section-body{padding:0 12px 12px;display:none;overflow-x:auto}.section-body.open{display:block}.messages-list{gap:8px;display:grid}.msg{border-radius:var(--radius-sm);border:1px solid var(--border-light);padding:10px 14px;font-size:13px;line-height:1.6}.msg.user{background:var(--blue-bg);border-color:#c7d2fe}.msg.assistant{background:var(--green-bg);border-color:#a7f3d0}.msg.system{background:var(--amber-bg);border-color:#fde68a}.msg.tool_result{background:var(--purple-bg);border-color:#c4b5fd}[data-theme=dark] .msg.user{border-color:#1f3a5f}[data-theme=dark] .msg.assistant{border-color:#1a3a26}[data-theme=dark] .msg.system{border-color:#3d3000}[data-theme=dark] .msg.tool_result{border-color:#2a1f48}.msg-header-row{flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;margin-bottom:6px;display:flex}.msg-role{text-transform:uppercase;letter-spacing:.5px;color:#fff;border-radius:4px;align-items:center;padding:2px 8px;font-size:10px;font-weight:700;display:inline-flex}.msg.user .msg-role{background:var(--blue)}.msg.assistant .msg-role{background:var(--green)}.msg.system .msg-role{background:var(--amber)}.msg.tool_result .msg-role{background:var(--purple)}.content-block{white-space:pre-wrap;word-break:break-word;margin-top:6px}.content-block:first-child{margin-top:0}.content-block.block-framed{border:1px solid var(--border-light);border-radius:var(--radius-sm);background:#ffffff73;margin-top:6px;padding:8px 10px}[data-theme=dark] .content-block.block-framed{background:#ffffff08;border-color:#ffffff14}.content-block-text{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6}.system-prompt-blocks .content-block-text{font-family:var(--mono);color:var(--text-secondary);font-size:12px;line-height:1.65}.tool-use-label{color:var(--cyan);background:var(--cyan-bg);border-radius:4px;align-items:center;gap:4px;margin-bottom:6px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex}.thinking-preview{font-family:var(--mono);color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:11px;overflow:hidden}.tool-block{border:1px solid var(--border-light);border-radius:var(--radius-sm);background:var(--bg-card);overflow:hidden}.tool-block-header{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:baseline;gap:10px;padding:8px 12px;transition:background .1s;display:flex}.tool-block-header:hover{background:var(--bg-hover)}.tb-arrow{color:var(--text-tertiary);flex-shrink:0;font-size:9px;transition:transform .15s}.tb-arrow.open{transform:rotate(90deg)}.tb-name{color:var(--cyan);font-family:var(--mono);flex-shrink:0;font-size:12px;font-weight:600}.tb-desc{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:12px;overflow:hidden}.tool-block-body{border-top:1px solid var(--border-light);padding:10px 12px 12px;font-size:12px;display:none}.tool-block-body.open{display:block}.tb-full-desc{color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;margin-bottom:10px;font-size:12px;line-height:1.55}.tb-params-title{color:var(--text);text-transform:uppercase;letter-spacing:.3px;margin-bottom:8px;font-size:11px;font-weight:600}.tb-param{border-radius:var(--radius-sm);background:var(--bg);margin-bottom:4px;padding:7px 9px}.tb-param-row1{align-items:center;gap:8px;display:flex}.tb-pname{color:var(--blue);font-family:var(--mono);font-size:12px;font-weight:600}.tb-ptype{font-size:10px;font-family:var(--mono);color:var(--amber);background:var(--amber-bg);border-radius:3px;padding:1px 6px;font-weight:500}.tb-prequired{color:var(--red);background:var(--red-bg);border-radius:3px;padding:1px 6px;font-size:10px;font-weight:600}.tb-pdesc{color:var(--text-tertiary);white-space:pre-wrap;word-break:break-word;margin-top:4px;font-size:12px;line-height:1.5}.headers-grid{font-family:var(--mono);grid-template-columns:max-content minmax(0,1fr);gap:3px 12px;font-size:11px;display:grid}.header-key{color:var(--purple);white-space:nowrap;font-weight:500}.header-val{color:var(--text-secondary);overflow-wrap:anywhere}.stream-event-row{font-family:var(--mono);border-radius:3px;gap:8px;padding:2px 4px;font-size:11px;display:flex}.stream-event-row:hover{background:var(--bg-hover)}.stream-event-idx{color:var(--text-tertiary);flex-shrink:0;min-width:28px}.stream-event-data{color:var(--text-secondary);overflow-wrap:anywhere}.text-toggle-bar{border:1px solid var(--border);border-radius:5px;margin-top:8px;display:inline-flex;overflow:hidden}.text-toggle-btn{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;padding:2px 8px;font-size:10px;line-height:1.6;transition:all .12s}.text-toggle-btn+.text-toggle-btn{border-left:1px solid var(--border)}.text-toggle-btn:hover{color:var(--text)}.text-toggle-btn.active{background:var(--blue-bg);color:var(--blue);font-weight:500}.text-raw{white-space:pre-wrap;word-break:break-word;font-family:var(--sans);color:var(--text);background:0 0;border:none;padding:2px 0;font-size:14px;line-height:1.6}.text-raw.mono{font-size:13px;font-family:var(--mono)}.text-raw.sans{font-family:var(--sans);font-size:14px;line-height:1.6}.text-pane{resize:vertical;border:1px solid var(--border-light);border-radius:var(--radius-sm);background:var(--bg);min-height:40px;max-height:480px;padding:8px 10px;overflow:auto}.text-pane .md-prose,.text-pane .text-raw{max-height:none;overflow:visible}.thinking-section-body.text-pane{background:var(--bg-code);border-color:var(--border-light);max-height:500px;padding:10px 12px}.md-prose{font-size:14px;line-height:1.6;font-family:var(--sans);color:var(--text);word-break:break-word;overflow-wrap:anywhere}.md-prose p{margin:0 0 6px}.md-prose p:last-child{margin-bottom:0}.md-prose.compact p{margin:0 0 2px}.md-prose.compact h1,.md-prose.compact h2,.md-prose.compact h3,.md-prose.compact h4{margin:8px 0 3px}.md-prose.compact ul,.md-prose.compact ol{margin:2px 0 4px}.md-prose.compact li{margin:1px 0}.md-prose.compact blockquote{margin:4px 0}.md-prose h1,.md-prose h2,.md-prose h3,.md-prose h4,.md-prose h5,.md-prose h6{color:var(--text);margin:14px 0 6px;font-weight:700;line-height:1.3}.md-prose h1{border-bottom:2px solid var(--border);padding-bottom:6px;font-size:1.45em}.md-prose h2{border-bottom:1px solid var(--border-light);padding-bottom:4px;font-size:1.25em}.md-prose h3{font-size:1.1em}.md-prose h4{font-size:1em}.md-prose h5,.md-prose h6{color:var(--text-secondary);font-size:.9em}.md-prose h1:first-child,.md-prose h2:first-child,.md-prose h3:first-child{margin-top:0}.md-prose strong{color:var(--text);font-weight:700}.md-prose em{font-style:italic}.md-prose del{color:var(--text-tertiary);text-decoration:line-through}.md-prose blockquote{border-left:3px solid var(--blue);background:var(--blue-bg);border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--text-secondary);margin:10px 0;padding:8px 14px;font-style:italic}.md-prose blockquote p{margin:0}.md-prose blockquote p+p{margin-top:6px}.md-prose ul,.md-prose ol{margin:4px 0 6px;padding-left:1.6em}.md-prose ul{list-style:outside}.md-prose ol{list-style:decimal}.md-prose li,.md-prose li>ul,.md-prose li>ol{margin:3px 0}.md-prose li>p:first-child{margin-top:0}.md-prose li>p:last-child{margin-bottom:0}.md-prose li>.md-code-wrapper:first-child{margin-top:4px}.md-prose li>.md-code-wrapper:last-child{margin-bottom:0}.md-prose li.task-item{margin-left:-1em;list-style:none}.md-prose li:has(>input[type=checkbox]){margin-left:-1em;list-style:none}.md-prose li input[type=checkbox]{accent-color:var(--blue);vertical-align:-1px;margin-right:5px}.md-prose a{color:var(--blue);text-decoration:none}.md-prose a:hover{text-decoration:underline}.md-prose hr{border:none;border-top:1px solid var(--border);margin:16px 0}.md-prose code,.md-prose .md-inline-code{font-family:var(--mono);background:var(--bg-code);color:var(--red);border:1px solid var(--border-light);white-space:pre-wrap;word-break:break-all;border-radius:4px;padding:1px 5px;font-size:.87em}.md-code-wrapper{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-code);margin:10px 0;overflow:hidden}.md-code-wrapper:last-child{margin-bottom:0}.md-code-header{background:var(--bg-hover);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;min-height:28px;padding:5px 10px;display:flex}.md-code-lang{font-family:var(--mono);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.5px;font-size:10px;font-weight:600}.md-code-copy{border:1px solid var(--border);background:var(--bg-card);color:var(--text-tertiary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin-left:auto;padding:2px 7px;font-size:10px;line-height:1.6;transition:all .15s;display:inline-flex}.md-code-copy:hover{color:var(--text);border-color:var(--text-secondary)}.md-code-copy.copied{color:var(--green);border-color:var(--green)}.md-code-wrapper pre{background:0 0;border:none;border-radius:0;margin:0;padding:12px 14px;overflow-x:auto}.md-code-wrapper pre code{font-family:var(--mono);color:inherit;white-space:pre;word-break:normal;background:0 0;border:none;padding:0;font-size:12px;line-height:1.6}.md-prose table{border-collapse:collapse;width:100%;margin:10px 0;font-size:12.5px}.md-prose th,.md-prose td{border:1px solid var(--border);text-align:left;padding:7px 12px}.md-prose th{background:var(--bg-hover);color:var(--text);font-weight:600}.md-prose tr:nth-child(2n) td{background:var(--bg)}.md-prose tr:hover td{background:var(--bg-hover)}.md-code-wrapper .hljs{color:#24292e}.md-code-wrapper .hljs-comment,.md-code-wrapper .hljs-punctuation{color:#6a737d}.md-code-wrapper .hljs-attr,.md-code-wrapper .hljs-attribute,.md-code-wrapper .hljs-meta,.md-code-wrapper .hljs-selector-attr,.md-code-wrapper .hljs-selector-class,.md-code-wrapper .hljs-selector-id{color:#005cc5}.md-code-wrapper .hljs-variable,.md-code-wrapper .hljs-literal{color:#e36209}.md-code-wrapper .hljs-number,.md-code-wrapper .hljs-doctag,.md-code-wrapper .hljs-keyword,.md-code-wrapper .hljs-template-tag,.md-code-wrapper .hljs-template-variable,.md-code-wrapper .hljs-type,.md-code-wrapper .hljs-tag{color:#d73a49}.md-code-wrapper .hljs-name{color:#22863a}.md-code-wrapper .hljs-section,.md-code-wrapper .hljs-title{color:#6f42c1;font-weight:700}.md-code-wrapper .hljs-addition,.md-code-wrapper .hljs-selector-tag,.md-code-wrapper .hljs-string,.md-code-wrapper .hljs-emphasis{color:#032f62}.md-code-wrapper .hljs-link,.md-code-wrapper .hljs-operator,.md-code-wrapper .hljs-bullet{color:#005cc5}.md-code-wrapper .hljs-deletion{color:#b31d28}.md-code-wrapper .hljs-strong{font-weight:700}[data-theme=dark] .md-code-wrapper .hljs{color:#e6edf3}[data-theme=dark] .md-code-wrapper .hljs-comment,[data-theme=dark] .md-code-wrapper .hljs-punctuation{color:#8b949e}[data-theme=dark] .md-code-wrapper .hljs-attr,[data-theme=dark] .md-code-wrapper .hljs-attribute,[data-theme=dark] .md-code-wrapper .hljs-meta,[data-theme=dark] .md-code-wrapper .hljs-selector-attr,[data-theme=dark] .md-code-wrapper .hljs-selector-class,[data-theme=dark] .md-code-wrapper .hljs-selector-id{color:#79c0ff}[data-theme=dark] .md-code-wrapper .hljs-variable,[data-theme=dark] .md-code-wrapper .hljs-literal{color:#ffa657}[data-theme=dark] .md-code-wrapper .hljs-number,[data-theme=dark] .md-code-wrapper .hljs-doctag,[data-theme=dark] .md-code-wrapper .hljs-keyword,[data-theme=dark] .md-code-wrapper .hljs-template-tag,[data-theme=dark] .md-code-wrapper .hljs-template-variable,[data-theme=dark] .md-code-wrapper .hljs-type,[data-theme=dark] .md-code-wrapper .hljs-tag{color:#ff7b72}[data-theme=dark] .md-code-wrapper .hljs-name{color:#7ee787}[data-theme=dark] .md-code-wrapper .hljs-section,[data-theme=dark] .md-code-wrapper .hljs-title{color:#d2a8ff;font-weight:700}[data-theme=dark] .md-code-wrapper .hljs-addition,[data-theme=dark] .md-code-wrapper .hljs-selector-tag,[data-theme=dark] .md-code-wrapper .hljs-string,[data-theme=dark] .md-code-wrapper .hljs-emphasis{color:#a5d6ff}[data-theme=dark] .md-code-wrapper .hljs-link,[data-theme=dark] .md-code-wrapper .hljs-operator,[data-theme=dark] .md-code-wrapper .hljs-bullet{color:#79c0ff}[data-theme=dark] .md-code-wrapper .hljs-deletion{color:#ffa198}[data-theme=dark] .md-code-wrapper .hljs-strong{font-weight:700}[data-theme=dark] .md-code-wrapper{border-color:var(--border);background:#161b22}[data-theme=dark] .md-code-wrapper .hljs{background:#161b22}[data-theme=dark] .md-code-header{border-bottom-color:var(--border);background:#21262d}.confirm-overlay{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#00000059;justify-content:center;align-items:center;animation:.12s confirm-fade-in;display:flex;position:fixed;inset:0}@keyframes confirm-fade-in{0%{opacity:0}to{opacity:1}}.confirm-dialog{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;width:360px;max-width:calc(100vw - 40px);padding:28px 28px 22px;animation:.15s cubic-bezier(.34,1.2,.64,1) confirm-slide-in;box-shadow:0 8px 40px #0000002e,0 2px 8px #0000001a}@keyframes confirm-slide-in{0%{opacity:0;transform:translateY(-12px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.confirm-icon-row{justify-content:center;margin-bottom:14px;display:flex}.confirm-icon{background:color-mix(in srgb, var(--amber) 15%, transparent);width:44px;height:44px;color:var(--amber);border-radius:50%;justify-content:center;align-items:center;display:flex}.confirm-icon.danger{background:color-mix(in srgb, var(--red) 15%, transparent);color:var(--red)}.confirm-title{text-align:center;color:var(--text);margin-bottom:8px;font-size:15px;font-weight:600}.confirm-message{color:var(--text-secondary);text-align:center;margin-bottom:22px;font-size:13px;line-height:1.6}.confirm-actions{gap:10px;display:flex}.confirm-btn{border:1px solid var(--border);cursor:pointer;border-radius:8px;outline:none;flex:1;padding:8px 0;font-size:13px;font-weight:500;transition:background .12s,border-color .12s,opacity .12s}.confirm-btn.cancel{background:var(--bg);color:var(--text-secondary)}.confirm-btn.cancel:hover{background:var(--bg-hover);border-color:var(--border-strong)}.confirm-btn.ok{background:var(--blue);color:#fff;border-color:#0000}.confirm-btn.ok:hover{opacity:.88}.confirm-btn.ok.danger{background:var(--red)}.confirm-btn:focus-visible{box-shadow:0 0 0 2px var(--blue)}
1
+ *,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{opacity:1;color:#9ca3af}textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.z-20{z-index:20}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-auto{margin-left:auto}.mt-0\.5{margin-top:.125rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-1\.5{height:.375rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-full{height:100%}.h-screen{height:100vh}.w-1\.5{width:.375rem}.w-7{width:1.75rem}.w-px{width:1px}.min-w-0{min-width:0}.max-w-\[90px\]{max-width:90px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.transform{transform:translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-5{gap:1.25rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1\.5{row-gap:.375rem}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.bg-transparent{background-color:#0000}.p-3{padding:.75rem}.p-5{padding:1.25rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-1{padding-top:.25rem}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tracking-tight{letter-spacing:-.025em}.outline-none{outline-offset:2px;outline:2px solid #0000}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}:root{--bg:#f4f5f7;--bg-card:#fff;--bg-hover:#f0f1f4;--bg-active:#e8ecf4;--bg-code:#f6f8fa;--border:#e2e4e9;--border-light:#edeef1;--scrollbar-bg1:#bbbec7;--shadow-sm:0 1px 3px #0000000f;--shadow-md:0 2px 8px #00000014;--radius:10px;--radius-sm:6px;--text:#1c2024;--text-secondary:#60646c;--text-tertiary:#a0a4ab;--blue:#3b82f6;--blue-bg:#eff6ff;--green:#10b981;--green-bg:#ecfdf5;--amber:#f59e0b;--amber-bg:#fffbeb;--red:#ef4444;--red-bg:#fef2f2;--red-bg-hi:#fecaca;--green-bg-hi:#bbf7d0;--purple:#8b5cf6;--purple-bg:#f5f3ff;--cyan:#06b6d4;--cyan-bg:#ecfeff;--orange:#f97316;--orange-bg:#fff7ed;--indigo:#6366f1;--mono:ui-monospace, "Cascadia Code", "Cascadia Mono", Consolas, "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", monospace;--sans:"Microsoft YaHei UI", "Microsoft YaHei", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", sans-serif}[data-theme=dark]{--bg:#0d1117;--bg-card:#161b22;--bg-hover:#1c2128;--bg-active:#252c35;--bg-code:#1c2128;--border:#30363d;--border-light:#21262d;--scrollbar-bg1:#484f58;--shadow-sm:0 1px 3px #0000004d;--shadow-md:0 2px 8px #0006;--text:#e6edf3;--text-secondary:#8b949e;--text-tertiary:#6e7681;--blue:#58a6ff;--blue-bg:#0d2240;--green:#3fb950;--green-bg:#0d2d1a;--amber:#d29922;--amber-bg:#2d2200;--red:#f85149;--red-bg:#3d1117;--red-bg-hi:#6b2020;--green-bg-hi:#1a5c33;--purple:#bc8cff;--purple-bg:#1f1338;--cyan:#39d2c0;--cyan-bg:#0a2e2c;--orange:#f0883e;--orange-bg:#2d1b00;--indigo:#8b8fff}[data-theme=dark] pre,[data-theme=dark] .pre-text{background:#ffffff0a;border-color:#ffffff0f}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--sans);font-feature-settings:"cv02", "cv03", "cv04", "cv11";background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;height:100vh;font-size:14px;line-height:1.5}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px;min-height:30px}::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}.sidebar-scroll::-webkit-scrollbar{width:8px}.sidebar-scroll::-webkit-scrollbar-thumb{background:var(--scrollbar-bg1);border-radius:4px;min-height:40px}.sidebar-scroll::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.detail-scroll::-webkit-scrollbar{width:8px}.detail-scroll::-webkit-scrollbar-thumb{background:var(--scrollbar-bg1);border-radius:4px;min-height:40px}.detail-scroll::-webkit-scrollbar-thumb:hover{background:var(--text-secondary)}.json-view{font-family:var(--mono);padding:4px 0;font-size:12px;line-height:1.5;overflow-x:auto}.json-view .jk{color:var(--purple)}.json-view .js{color:var(--green);white-space:pre-wrap;word-break:break-all}.json-view .jn{color:var(--amber)}.json-view .jb{color:var(--red)}.json-view .jnull,.json-view .json-punct{color:var(--text-tertiary)}.json-view .jt-line{padding-left:12px}.json-view .jt-toggle{cursor:pointer;color:var(--text-tertiary);text-align:center;-webkit-user-select:none;user-select:none;width:12px;margin-right:2px;font-size:10px;display:inline-block}.json-view .jt-toggle:hover{color:var(--text-secondary)}.json-view .jt-summary{color:var(--text-tertiary);margin-left:4px;font-size:11px;font-style:italic;display:none}.json-view .jt-summary.jt-show{display:inline}.json-view .jt-children{padding-left:4px}.json-view .jt-children:not(.jt-open),.json-view .jt-close.jt-hidden{display:none}[data-theme=dark] .json-view .jk{color:#bc8cff}[data-theme=dark] .json-view .js{color:#3fb950}[data-theme=dark] .json-view .jn{color:#d29922}[data-theme=dark] .json-view .jb{color:#f85149}[data-theme=dark] .json-view .json-punct,[data-theme=dark] .json-view .jt-toggle{color:#6e7681}[data-theme=dark] .json-view .jt-toggle:hover{color:#c9d1d9}[data-theme=dark] .json-view .jt-summary{color:#6e7681}@keyframes pulse-dot{0%,80%,to{opacity:.2;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}.streaming-dots{vertical-align:middle;align-items:center;gap:3px;display:inline-flex}.streaming-dots span{background:var(--blue);border-radius:50%;width:5px;height:5px;animation:1.2s ease-in-out infinite pulse-dot}.streaming-dots span:nth-child(2){animation-delay:.2s}.streaming-dots span:nth-child(3){animation-delay:.4s}.streaming-cursor:after{content:"";background:var(--blue);vertical-align:text-bottom;width:2px;height:1em;margin-left:2px;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.filter-chip{font-size:11px;font-family:var(--sans);border:1px solid var(--border);background:var(--bg-card);color:var(--text-secondary);cursor:pointer;white-space:nowrap;border-radius:20px;padding:3px 10px;line-height:1.4;transition:all .15s}.filter-chip:hover{border-color:var(--blue);color:var(--blue)}.filter-chip.active{background:var(--blue);border-color:var(--blue);color:#fff}.filter-chip .chip-count{opacity:.65;margin-left:3px;font-size:10px}.clear-split-btn{border:1px solid var(--border);border-radius:6px;align-items:stretch;display:flex}.clear-split-main{font-size:11px;font-family:var(--sans);border:none;border-right:1px solid var(--border);color:var(--text-tertiary);cursor:pointer;background:0 0;border-radius:5px 0 0 5px;align-items:center;gap:4px;padding:3px 8px;transition:background .15s,color .15s;display:flex}.clear-split-main:hover{background:var(--bg-hover);color:var(--text-secondary)}.clear-split-arrow{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:0 5px 5px 0;align-items:center;padding:0 5px;transition:background .15s,color .15s;display:flex}.clear-split-arrow:hover{background:var(--bg-hover);color:var(--text-secondary)}.clear-dropdown{background:var(--bg-card);border:1px solid var(--border);min-width:230px;box-shadow:var(--shadow-md);z-index:100;border-radius:8px;padding:5px;position:absolute;top:calc(100% + 6px);right:0}.clear-dropdown-label{color:var(--text-tertiary);letter-spacing:.03em;text-transform:uppercase;padding:4px 8px 6px;font-size:10px}.clear-dropdown-item{width:100%;color:var(--text-secondary);cursor:pointer;text-align:left;font-family:var(--sans);background:0 0;border:none;border-radius:6px;align-items:flex-start;gap:8px;padding:8px 10px;transition:background .12s;display:flex}.clear-dropdown-item:hover{background:var(--bg-hover);color:var(--text)}.clear-dropdown-item.danger{color:var(--red)}.clear-dropdown-item.danger:hover{background:var(--red-bg);color:var(--red)}.clear-dropdown-item svg{flex-shrink:0;margin-top:2px}.clear-dropdown-item-title{font-size:12px;font-weight:500;line-height:1.4}.clear-dropdown-item-desc{opacity:.7;margin-top:1px;font-size:11px;line-height:1.4}.file-group-header{border-top:1px solid var(--border);border-bottom:1px solid var(--border);z-index:1;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:5px;padding:4px 8px 4px 10px;transition:background .12s;display:flex;position:sticky;top:0}.file-group-header.session{background:var(--bg-active)}.file-group-header.history{background:var(--bg-hover)}.file-group-header:hover{filter:brightness(.97)}[data-theme=dark] .file-group-header:hover{filter:brightness(1.1)}.file-group-chevron{color:var(--text-tertiary);flex-shrink:0;transition:transform .18s}.file-group-label{color:var(--text-secondary);letter-spacing:.02em;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:10.5px;font-weight:600;font-family:var(--mono);flex:1;overflow:hidden}.file-group-header.session .file-group-label{color:var(--blue)}.file-group-count{font-size:10px;font-family:var(--mono);color:var(--text-tertiary);background:var(--bg-code);border:1px solid var(--border);border-radius:10px;flex-shrink:0;padding:0 5px;line-height:1.6}.file-group-tokens{font-size:10px;font-family:var(--mono);color:var(--blue);background:var(--blue-bg);border-radius:10px;flex-shrink:0;padding:0 5px;line-height:1.6}.file-group-delete{width:20px;height:20px;color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;transition:background .12s,color .12s;display:flex}.file-group-delete:hover{background:var(--red-bg);color:var(--red)}.sidebar-sort-segment{border:1px solid var(--border);border-radius:6px;display:flex;overflow:hidden}.sidebar-sort-btn{border:none;border-right:1px solid var(--border);color:var(--text-tertiary);cursor:pointer;background:0 0;padding:3px 8px;font-size:11px;transition:all .1s}.sidebar-sort-btn:last-child{border-right:none}.sidebar-sort-btn:hover{background:var(--bg-hover);color:var(--text)}.sidebar-sort-btn.active{background:var(--blue-bg);color:var(--blue);font-weight:600}.position-indicator{border-bottom:1px solid var(--border-light);color:var(--text-tertiary);align-items:center;gap:8px;padding:4px 10px;font-size:10px;display:flex}.pi-bar{background:var(--border);border-radius:2px;flex:1;height:2px;overflow:hidden}.pi-fill{background:var(--blue);height:100%;transition:width .2s}.resize-handle{cursor:col-resize;z-index:5;flex-shrink:0;width:4px;transition:background .15s;position:relative}.resize-handle:hover,.resize-handle.dragging{background:var(--blue)}.prose-content{color:var(--text);font-size:13.5px;line-height:1.6}.prose-content pre{background:var(--bg-code);border:1px solid var(--border-light);font-family:var(--mono);border-radius:6px;margin:6px 0;padding:10px 14px;font-size:12px;line-height:1.55;overflow-x:auto}.prose-content code:not(pre code){background:var(--bg-code);border:1px solid var(--border-light);font-family:var(--mono);color:var(--purple);border-radius:4px;padding:1px 5px;font-size:12px}.prose-content p{margin:0;line-height:1.6}.prose-content p+p{margin-top:4px}.prose-content ul,.prose-content ol{margin:4px 0;padding-left:20px}.prose-content li{margin:2px 0;line-height:1.55}.prose-content h1,.prose-content h2,.prose-content h3,.prose-content h4{letter-spacing:-.01em;color:var(--text);margin:10px 0 4px;font-weight:600;line-height:1.3}.prose-content h1{font-size:1.15em}.prose-content h2{font-size:1.05em}.prose-content h3{font-size:.95em}.prose-content h4{color:var(--text-secondary);font-size:.9em}.prose-content blockquote{border-left:3px solid var(--blue);color:var(--text-secondary);margin:6px 0;padding-left:12px;font-style:italic}.prose-content hr{border:none;border-top:1px solid var(--border);margin:8px 0}.prose-content table{border-collapse:collapse;width:100%;margin:6px 0;font-size:12.5px}.prose-content th,.prose-content td{border:1px solid var(--border);text-align:left;padding:5px 10px}.prose-content th{background:var(--bg-code);font-weight:600}.prose-content a{color:var(--blue);text-decoration:underline}.prose-content strong{color:var(--text);font-weight:600}.thinking-block{border:1px solid var(--cyan);border-radius:6px;margin:4px 0;overflow:hidden}.thinking-block-header{background:var(--cyan-bg);cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--cyan);align-items:center;gap:6px;padding:5px 10px;font-size:11px;font-weight:600;display:flex}.thinking-block-header:hover{filter:brightness(.97)}.thinking-arrow{margin-right:4px}.thinking-block-header .copy-btn{margin-left:auto}.content-block .md-prose,.content-block .md-prose p,.content-block .md-prose li,.thinking-block .md-prose,.thinking-block .md-prose p,.thinking-block .md-prose li{white-space:normal}.thinking-section{flex-direction:column;gap:8px;display:flex}.thinking-section-meta{align-items:center;gap:10px;display:flex}.thinking-section-lines{color:var(--text-tertiary);font-size:11px;font-family:var(--mono)}.thinking-section-body{font-family:var(--mono);color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;background:var(--bg-code);border:1px solid var(--border-light);border-radius:var(--radius-sm);max-height:500px;padding:10px 12px;font-size:12px;line-height:1.65;overflow-y:auto}.thinking-section-body.thinking-section-body>.md-prose{font-family:var(--sans);font-size:13px}.thinking-badge{background:color-mix(in srgb, var(--indigo) 12%, transparent);color:var(--indigo)}.section-header:has(+.section-body .thinking-section) .badge{background:color-mix(in srgb, var(--indigo) 12%, transparent);color:var(--indigo)}.msg-role-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;display:inline-flex}.msg-role-toggle:hover{filter:brightness(1.15)}.msg-collapse-arrow{flex-shrink:0;align-self:center;align-items:center;font-size:8px;line-height:1;transition:transform .15s;display:inline-flex}.msg-collapse-arrow.open{transform:rotate(90deg)}.msg-tool-id{opacity:.7;font-size:9px;font-weight:400;font-family:var(--mono);letter-spacing:0}.msg-collapsed-hint{color:var(--text-tertiary);font-size:11px;font-family:var(--mono);white-space:nowrap;text-overflow:ellipsis;margin-top:2px;overflow:hidden}.msg-tool-calls{gap:4px;margin-top:4px;display:grid}.copy-btn{opacity:0;border:1px solid var(--border);background:var(--bg-card);color:var(--text-tertiary);cursor:pointer;border-radius:4px;padding:2px 6px;font-size:10px;line-height:1.4;transition:opacity .15s}.copy-btn:hover{color:var(--text);border-color:var(--text-secondary)}.copy-btn.copied{color:var(--green);border-color:var(--green)}.msg-block:hover .copy-btn,.section-header:hover .copy-btn,.thinking-block-header:hover .copy-btn{opacity:1}.detail-content{gap:8px;padding:12px 20px;display:grid}.error-banner{background:var(--red-bg);border:1px solid var(--red-bg-hi);border-radius:var(--radius-sm);align-items:center;gap:6px;padding:6px 10px;font-size:12.5px;line-height:1;display:flex}.eb-icon{color:var(--red);font-size:12px}.eb-code{color:var(--red);font-weight:600}.eb-sep{color:var(--text-tertiary)}.eb-message{color:var(--text-secondary)}.token-usage-bar{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-sm);align-items:center;padding:7px 12px;display:flex}.token-bar{flex-wrap:wrap;flex:1;align-items:center;gap:4px 0;display:flex}.tok-group{border-right:1px solid var(--border);align-items:center;gap:10px;margin-right:12px;padding-right:12px;display:flex}.tok-group:last-child{border-right:none;margin-right:0;padding-right:0}.tok-item{align-items:center;gap:4px;display:flex}.tok-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.tok-label{color:var(--text-tertiary);font-size:11px}.tok-val{color:var(--text-secondary);font-weight:600;font-family:var(--mono);font-size:11px}.tok-arrow{flex-shrink:0;font-size:11px;font-weight:700}.timing-bar{align-items:center;gap:0;display:flex}.timing-item{border-right:1px solid var(--border);align-items:center;gap:4px;margin-right:12px;padding-right:12px;display:flex}.timing-item:last-child{border-right:none;margin-right:0;padding-right:0}.section{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-card);box-shadow:var(--shadow-sm);overflow:hidden}.section-header{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:8px 12px;transition:background .1s;display:flex}.section-header:hover{background:var(--bg-hover)}.section-header .chevron{color:var(--text-tertiary);flex-shrink:0;width:12px;font-size:10px;transition:transform .2s}.section-header .chevron.open{transform:rotate(90deg)}.section-header .title{color:var(--text);flex:1;min-width:0;font-size:13px;font-weight:600}.section-header .badge{background:var(--bg);color:var(--text-tertiary);white-space:nowrap;border-radius:10px;padding:2px 8px;font-size:11px;font-weight:500}.section-header .copy-btn{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-card);color:var(--text-tertiary);cursor:pointer;opacity:0;padding:3px 10px;font-size:11px;transition:all .15s}.section-header:hover .copy-btn{opacity:1}.section-header .copy-btn:hover{color:var(--blue);border-color:var(--blue)}.section-body{padding:0 12px 12px;display:none;overflow-x:auto}.section-body.open{display:block}.messages-list{gap:8px;display:grid}.msg{border-radius:var(--radius-sm);border:1px solid var(--border-light);padding:10px 14px;font-size:13px;line-height:1.6}.msg.user{background:var(--blue-bg);border-color:#c7d2fe}.msg.assistant{background:var(--green-bg);border-color:#a7f3d0}.msg.system{background:var(--amber-bg);border-color:#fde68a}.msg.tool_result{background:var(--purple-bg);border-color:#c4b5fd}[data-theme=dark] .msg.user{border-color:#1f3a5f}[data-theme=dark] .msg.assistant{border-color:#1a3a26}[data-theme=dark] .msg.system{border-color:#3d3000}[data-theme=dark] .msg.tool_result{border-color:#2a1f48}.msg-header-row{flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:6px;margin-bottom:6px;display:flex}.msg-role{text-transform:uppercase;letter-spacing:.5px;color:#fff;border-radius:4px;align-items:center;padding:2px 8px;font-size:10px;font-weight:700;display:inline-flex}.msg.user .msg-role{background:var(--blue)}.msg.assistant .msg-role{background:var(--green)}.msg.system .msg-role{background:var(--amber)}.msg.tool_result .msg-role{background:var(--purple)}.content-block{white-space:pre-wrap;word-break:break-word;margin-top:6px}.content-block:first-child{margin-top:0}.content-block.block-framed{border:1px solid var(--border-light);border-radius:var(--radius-sm);background:#ffffff73;margin-top:6px;padding:8px 10px}[data-theme=dark] .content-block.block-framed{background:#ffffff08;border-color:#ffffff14}.content-block-text{white-space:pre-wrap;word-break:break-word;font-size:13px;line-height:1.6}.system-prompt-blocks .content-block-text{font-family:var(--mono);color:var(--text-secondary);font-size:12px;line-height:1.65}.tool-use-label{color:var(--cyan);background:var(--cyan-bg);border-radius:4px;align-items:center;gap:4px;margin-bottom:6px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-flex}.thinking-preview{font-family:var(--mono);color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:11px;overflow:hidden}.tool-block{border:1px solid var(--border-light);border-radius:var(--radius-sm);background:var(--bg-card);overflow:hidden}.content-parts-list{flex-direction:column;gap:4px;display:flex}.content-parts-list .content-block{margin-top:0}.content-parts-list .thinking-block{margin:0}.tool-block-header{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:baseline;gap:10px;padding:8px 12px;transition:background .1s;display:flex}.tool-block-header:hover{background:var(--bg-hover)}.tb-arrow{color:var(--text-tertiary);flex-shrink:0;font-size:9px;transition:transform .15s}.tb-arrow.open{transform:rotate(90deg)}.tb-name{color:var(--cyan);font-family:var(--mono);flex-shrink:0;font-size:12px;font-weight:600}.tb-desc{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:12px;overflow:hidden}.tool-block-body{border-top:1px solid var(--border-light);padding:10px 12px 12px;font-size:12px;display:none}.tool-block-body.open{display:block}.tb-full-desc{color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;margin-bottom:10px;font-size:12px;line-height:1.55}.tb-params-title{color:var(--text);text-transform:uppercase;letter-spacing:.3px;margin-bottom:8px;font-size:11px;font-weight:600}.tb-param{border-radius:var(--radius-sm);background:var(--bg);margin-bottom:4px;padding:7px 9px}.tb-param-row1{align-items:center;gap:8px;display:flex}.tb-pname{color:var(--blue);font-family:var(--mono);font-size:12px;font-weight:600}.tb-ptype{font-size:10px;font-family:var(--mono);color:var(--amber);background:var(--amber-bg);border-radius:3px;padding:1px 6px;font-weight:500}.tb-prequired{color:var(--red);background:var(--red-bg);border-radius:3px;padding:1px 6px;font-size:10px;font-weight:600}.tb-pdesc{color:var(--text-tertiary);white-space:pre-wrap;word-break:break-word;margin-top:4px;font-size:12px;line-height:1.5}.headers-grid{font-family:var(--mono);grid-template-columns:max-content minmax(0,1fr);gap:3px 12px;font-size:11px;display:grid}.header-key{color:var(--purple);white-space:nowrap;font-weight:500}.header-val{color:var(--text-secondary);overflow-wrap:anywhere}.stream-event-row{font-family:var(--mono);border-radius:3px;gap:8px;padding:2px 4px;font-size:11px;display:flex}.stream-event-row:hover{background:var(--bg-hover)}.stream-event-idx{color:var(--text-tertiary);flex-shrink:0;min-width:28px}.stream-event-data{color:var(--text-secondary);overflow-wrap:anywhere}.text-toggle-bar{border:1px solid var(--border);border-radius:5px;margin-top:8px;display:inline-flex;overflow:hidden}.text-toggle-btn{color:var(--text-tertiary);cursor:pointer;background:0 0;border:none;padding:2px 8px;font-size:10px;line-height:1.6;transition:all .12s}.text-toggle-btn+.text-toggle-btn{border-left:1px solid var(--border)}.text-toggle-btn:hover{color:var(--text)}.text-toggle-btn.active{background:var(--blue-bg);color:var(--blue);font-weight:500}.text-raw{white-space:pre-wrap;word-break:break-word;font-family:var(--sans);color:var(--text);background:0 0;border:none;padding:2px 0;font-size:14px;line-height:1.6}.text-raw.mono{font-size:13px;font-family:var(--mono)}.text-raw.sans{font-family:var(--sans);font-size:14px;line-height:1.6}.text-pane{resize:vertical;border:1px solid var(--border-light);border-radius:var(--radius-sm);background:var(--bg);min-height:40px;max-height:480px;padding:8px 10px;overflow:auto}.text-pane .md-prose,.text-pane .text-raw{max-height:none;overflow:visible}.thinking-section-body.text-pane{background:var(--bg-code);border-color:var(--border-light);max-height:500px;padding:10px 12px}.md-prose{font-size:14px;line-height:1.6;font-family:var(--sans);color:var(--text);word-break:break-word;overflow-wrap:anywhere}.md-prose p{margin:0 0 6px}.md-prose p:last-child{margin-bottom:0}.md-prose.compact p{margin:0 0 2px}.md-prose.compact h1,.md-prose.compact h2,.md-prose.compact h3,.md-prose.compact h4{margin:8px 0 3px}.md-prose.compact ul,.md-prose.compact ol{margin:2px 0 4px}.md-prose.compact li{margin:1px 0}.md-prose.compact blockquote{margin:4px 0}.md-prose h1,.md-prose h2,.md-prose h3,.md-prose h4,.md-prose h5,.md-prose h6{color:var(--text);margin:14px 0 6px;font-weight:700;line-height:1.3}.md-prose h1{border-bottom:2px solid var(--border);padding-bottom:6px;font-size:1.45em}.md-prose h2{border-bottom:1px solid var(--border-light);padding-bottom:4px;font-size:1.25em}.md-prose h3{font-size:1.1em}.md-prose h4{font-size:1em}.md-prose h5,.md-prose h6{color:var(--text-secondary);font-size:.9em}.md-prose h1:first-child,.md-prose h2:first-child,.md-prose h3:first-child{margin-top:0}.md-prose strong{color:var(--text);font-weight:700}.md-prose em{font-style:italic}.md-prose del{color:var(--text-tertiary);text-decoration:line-through}.md-prose blockquote{border-left:3px solid var(--blue);background:var(--blue-bg);border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--text-secondary);margin:10px 0;padding:8px 14px;font-style:italic}.md-prose blockquote p{margin:0}.md-prose blockquote p+p{margin-top:6px}.md-prose ul,.md-prose ol{margin:4px 0 6px;padding-left:1.6em}.md-prose ul{list-style:outside}.md-prose ol{list-style:decimal}.md-prose li,.md-prose li>ul,.md-prose li>ol{margin:3px 0}.md-prose li>p:first-child{margin-top:0}.md-prose li>p:last-child{margin-bottom:0}.md-prose li>.md-code-wrapper:first-child{margin-top:4px}.md-prose li>.md-code-wrapper:last-child{margin-bottom:0}.md-prose li.task-item{margin-left:-1em;list-style:none}.md-prose li:has(>input[type=checkbox]){margin-left:-1em;list-style:none}.md-prose li input[type=checkbox]{accent-color:var(--blue);vertical-align:-1px;margin-right:5px}.md-prose a{color:var(--blue);text-decoration:none}.md-prose a:hover{text-decoration:underline}.md-prose hr{border:none;border-top:1px solid var(--border);margin:16px 0}.md-prose code,.md-prose .md-inline-code{font-family:var(--mono);background:var(--bg-code);color:var(--red);border:1px solid var(--border-light);white-space:pre-wrap;word-break:break-all;border-radius:4px;padding:1px 5px;font-size:.87em}.md-code-wrapper{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg-code);margin:10px 0;overflow:hidden}.md-code-wrapper:last-child{margin-bottom:0}.md-code-header{background:var(--bg-hover);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;min-height:28px;padding:5px 10px;display:flex}.md-code-lang{font-family:var(--mono);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.5px;font-size:10px;font-weight:600}.md-code-copy{border:1px solid var(--border);background:var(--bg-card);color:var(--text-tertiary);cursor:pointer;border-radius:4px;align-items:center;gap:4px;margin-left:auto;padding:2px 7px;font-size:10px;line-height:1.6;transition:all .15s;display:inline-flex}.md-code-copy:hover{color:var(--text);border-color:var(--text-secondary)}.md-code-copy.copied{color:var(--green);border-color:var(--green)}.md-code-wrapper pre{background:0 0;border:none;border-radius:0;margin:0;padding:12px 14px;overflow-x:auto}.md-code-wrapper pre code{font-family:var(--mono);color:inherit;white-space:pre;word-break:normal;background:0 0;border:none;padding:0;font-size:12px;line-height:1.6}.md-prose table{border-collapse:collapse;width:100%;margin:10px 0;font-size:12.5px}.md-prose th,.md-prose td{border:1px solid var(--border);text-align:left;padding:7px 12px}.md-prose th{background:var(--bg-hover);color:var(--text);font-weight:600}.md-prose tr:nth-child(2n) td{background:var(--bg)}.md-prose tr:hover td{background:var(--bg-hover)}.md-code-wrapper .hljs{color:#24292e}.md-code-wrapper .hljs-comment,.md-code-wrapper .hljs-punctuation{color:#6a737d}.md-code-wrapper .hljs-attr,.md-code-wrapper .hljs-attribute,.md-code-wrapper .hljs-meta,.md-code-wrapper .hljs-selector-attr,.md-code-wrapper .hljs-selector-class,.md-code-wrapper .hljs-selector-id{color:#005cc5}.md-code-wrapper .hljs-variable,.md-code-wrapper .hljs-literal{color:#e36209}.md-code-wrapper .hljs-number,.md-code-wrapper .hljs-doctag,.md-code-wrapper .hljs-keyword,.md-code-wrapper .hljs-template-tag,.md-code-wrapper .hljs-template-variable,.md-code-wrapper .hljs-type,.md-code-wrapper .hljs-tag{color:#d73a49}.md-code-wrapper .hljs-name{color:#22863a}.md-code-wrapper .hljs-section,.md-code-wrapper .hljs-title{color:#6f42c1;font-weight:700}.md-code-wrapper .hljs-addition,.md-code-wrapper .hljs-selector-tag,.md-code-wrapper .hljs-string,.md-code-wrapper .hljs-emphasis{color:#032f62}.md-code-wrapper .hljs-link,.md-code-wrapper .hljs-operator,.md-code-wrapper .hljs-bullet{color:#005cc5}.md-code-wrapper .hljs-deletion{color:#b31d28}.md-code-wrapper .hljs-strong{font-weight:700}[data-theme=dark] .md-code-wrapper .hljs{color:#e6edf3}[data-theme=dark] .md-code-wrapper .hljs-comment,[data-theme=dark] .md-code-wrapper .hljs-punctuation{color:#8b949e}[data-theme=dark] .md-code-wrapper .hljs-attr,[data-theme=dark] .md-code-wrapper .hljs-attribute,[data-theme=dark] .md-code-wrapper .hljs-meta,[data-theme=dark] .md-code-wrapper .hljs-selector-attr,[data-theme=dark] .md-code-wrapper .hljs-selector-class,[data-theme=dark] .md-code-wrapper .hljs-selector-id{color:#79c0ff}[data-theme=dark] .md-code-wrapper .hljs-variable,[data-theme=dark] .md-code-wrapper .hljs-literal{color:#ffa657}[data-theme=dark] .md-code-wrapper .hljs-number,[data-theme=dark] .md-code-wrapper .hljs-doctag,[data-theme=dark] .md-code-wrapper .hljs-keyword,[data-theme=dark] .md-code-wrapper .hljs-template-tag,[data-theme=dark] .md-code-wrapper .hljs-template-variable,[data-theme=dark] .md-code-wrapper .hljs-type,[data-theme=dark] .md-code-wrapper .hljs-tag{color:#ff7b72}[data-theme=dark] .md-code-wrapper .hljs-name{color:#7ee787}[data-theme=dark] .md-code-wrapper .hljs-section,[data-theme=dark] .md-code-wrapper .hljs-title{color:#d2a8ff;font-weight:700}[data-theme=dark] .md-code-wrapper .hljs-addition,[data-theme=dark] .md-code-wrapper .hljs-selector-tag,[data-theme=dark] .md-code-wrapper .hljs-string,[data-theme=dark] .md-code-wrapper .hljs-emphasis{color:#a5d6ff}[data-theme=dark] .md-code-wrapper .hljs-link,[data-theme=dark] .md-code-wrapper .hljs-operator,[data-theme=dark] .md-code-wrapper .hljs-bullet{color:#79c0ff}[data-theme=dark] .md-code-wrapper .hljs-deletion{color:#ffa198}[data-theme=dark] .md-code-wrapper .hljs-strong{font-weight:700}[data-theme=dark] .md-code-wrapper{border-color:var(--border);background:#161b22}[data-theme=dark] .md-code-wrapper .hljs{background:#161b22}[data-theme=dark] .md-code-header{border-bottom-color:var(--border);background:#21262d}.confirm-overlay{z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#00000059;justify-content:center;align-items:center;animation:.12s confirm-fade-in;display:flex;position:fixed;inset:0}@keyframes confirm-fade-in{0%{opacity:0}to{opacity:1}}.confirm-dialog{background:var(--bg-card);border:1px solid var(--border);border-radius:12px;width:360px;max-width:calc(100vw - 40px);padding:28px 28px 22px;animation:.15s cubic-bezier(.34,1.2,.64,1) confirm-slide-in;box-shadow:0 8px 40px #0000002e,0 2px 8px #0000001a}@keyframes confirm-slide-in{0%{opacity:0;transform:translateY(-12px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.confirm-icon-row{justify-content:center;margin-bottom:14px;display:flex}.confirm-icon{background:color-mix(in srgb, var(--amber) 15%, transparent);width:44px;height:44px;color:var(--amber);border-radius:50%;justify-content:center;align-items:center;display:flex}.confirm-icon.danger{background:color-mix(in srgb, var(--red) 15%, transparent);color:var(--red)}.confirm-title{text-align:center;color:var(--text);margin-bottom:8px;font-size:15px;font-weight:600}.confirm-message{color:var(--text-secondary);text-align:center;margin-bottom:22px;font-size:13px;line-height:1.6}.confirm-actions{gap:10px;display:flex}.confirm-btn{border:1px solid var(--border);cursor:pointer;border-radius:8px;outline:none;flex:1;padding:8px 0;font-size:13px;font-weight:500;transition:background .12s,border-color .12s,opacity .12s}.confirm-btn.cancel{background:var(--bg);color:var(--text-secondary)}.confirm-btn.cancel:hover{background:var(--bg-hover);border-color:var(--border-strong)}.confirm-btn.ok{background:var(--blue);color:#fff;border-color:#0000}.confirm-btn.ok:hover{opacity:.88}.confirm-btn.ok.danger{background:var(--red)}.confirm-btn:focus-visible{box-shadow:0 0 0 2px var(--blue)}
@@ -0,0 +1,19 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{C as t,D as n,E as r,O as i,S as a,T as o,_ as s,a as c,b as l,c as u,d,f,g as p,h as m,i as h,k as g,l as _,m as v,n as y,o as b,p as x,r as ee,s as te,t as S,u as ne,v as re,w as C,x as ie,y as ae}from"./react-vendor-BnH7jZBV.js";import{_ as w,a as T,b as E,c as D,d as O,f as k,g as A,h as j,i as M,l as oe,m as N,n as P,o as F,p as I,r as L,s as se,t as ce,u as R,v as z,y as B}from"./markdown-DsSlw-Z4.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var V=e(g(),1),H=e(i(),1),U=`/api`;async function W(e,t){let n=await fetch(`${U}${e}`,t);if(!n.ok)throw Error(`API error: ${n.status}`);return n.json()}var G={getTraces:e=>{let t=new URLSearchParams;e?.model&&t.set(`model`,e.model),e?.provider&&t.set(`provider`,e.provider),e?.status&&t.set(`status`,e.status),e?.keyword&&t.set(`keyword`,e.keyword),e?.limit&&t.set(`limit`,String(e.limit)),e?.offset&&t.set(`offset`,String(e.offset));let n=t.toString();return W(`/traces${n?`?`+n:``}`)},getTrace:e=>W(`/traces/${e}`),reloadTraces:()=>W(`/traces/reload`,{method:`POST`}),getTraceFiles:()=>W(`/traces/files`),deleteTraceFile:e=>W(`/traces/file/${encodeURIComponent(e)}`,{method:`DELETE`}),deleteTraces:(e=!1)=>W(`/traces${e?`?files=true`:``}`,{method:`DELETE`}),getProviders:()=>W(`/providers`),getStats:()=>W(`/stats`),getConfig:()=>W(`/config`)};function le({url:e,onEvent:t,reconnectInterval:n=3e3}){let r=(0,V.useRef)(null),[i,a]=(0,V.useState)(!1),o=(0,V.useRef)(),s=(0,V.useRef)(t);s.current=t;let c=(0,V.useCallback)(()=>{try{let t=new WebSocket(e);t.onopen=()=>{a(!0),console.log(`[WS] Connected`)},t.onclose=()=>{a(!1),console.log(`[WS] Disconnected, reconnecting...`),o.current=setTimeout(c,n)},t.onerror=e=>{console.error(`[WS] Error:`,e),t.close()},t.onmessage=e=>{try{let t=JSON.parse(e.data);s.current?.(t)}catch{}},r.current=t}catch{o.current=setTimeout(c,n)}},[e,n]);return(0,V.useEffect)(()=>(c(),()=>{clearTimeout(o.current),r.current?.close()}),[c]),{connected:i,send:(0,V.useCallback)(e=>{r.current?.readyState===WebSocket.OPEN&&r.current.send(JSON.stringify(e))},[])}}var K=x();function q({content:e,children:t,placement:n=`top`,delay:r=300}){let[i,a]=(0,V.useState)(!1),{refs:o,floatingStyles:s,context:l}=h({open:i,onOpenChange:a,placement:n,whileElementsMounted:f,middleware:[ne(4),_({padding:8}),d({padding:8})]}),{getReferenceProps:p,getFloatingProps:m}=te([b(l,{move:!1,delay:{open:r,close:0}}),c(l),ee(l),u(l,{role:`tooltip`})]);return(0,K.jsxs)(K.Fragment,{children:[V.cloneElement(t,p({ref:o.setReference,...t.props})),i&&e!=null&&e!==``&&(0,K.jsx)(y,{children:(0,K.jsx)(`div`,{ref:o.setFloating,style:{...s,zIndex:9999,pointerEvents:`none`},...m(),children:(0,K.jsx)(`div`,{style:{background:`var(--bg-card)`,color:`var(--text-secondary)`,border:`1px solid var(--border)`,padding:`5px 9px`,borderRadius:`6px`,fontSize:`11.5px`,fontFamily:`var(--sans)`,fontWeight:400,lineHeight:1.5,letterSpacing:`0.01em`,maxWidth:`260px`,boxShadow:`var(--shadow-md)`},children:e})})})]})}function ue({traces:e,activeId:t,onSelect:n,loading:r,onDeleteFile:i}){let[s,c]=(0,V.useState)(`time`),[l,u]=(0,V.useState)(new Set);if(r)return(0,K.jsxs)(`div`,{className:`flex items-center justify-center flex-1 gap-2 text-sm`,style:{color:`var(--text-tertiary)`},children:[(0,K.jsx)(a,{size:14,className:`animate-spin`}),` 加载中…`]});if(e.length===0)return(0,K.jsx)(`div`,{className:`flex items-center justify-center flex-1 text-sm`,style:{color:`var(--text-tertiary)`},children:`暂无请求`});let d=[...e].sort((e,t)=>{if(s===`model`)return(e.model||``).localeCompare(t.model||``);if(s===`status`){let n=e=>e===`streaming`?0:e===`error`?1:e===`pending`?2:3;return n(e.status)-n(t.status)}return 0}),f=d.findIndex(e=>e.id===t),m=d.length>1&&f>=0?Math.round(f/(d.length-1)*100):0,h=[];if(s===`time`){let e=[];for(let t of d)t.sourceFile&&!e.includes(t.sourceFile)&&e.push(t.sourceFile);let t=d.map((e,t)=>({trace:e,globalIdx:t+1})).filter(e=>!e.trace.sourceFile);t.length>0&&h.push({key:`__session__`,label:`当前会话`,fileName:null,items:t});for(let t of e){let e=d.map((e,t)=>({trace:e,globalIdx:t+1})).filter(e=>e.trace.sourceFile===t);if(e.length>0){let n=t.match(/traces-(\d{4}-\d{2}-\d{2})T(\d{2}-\d{2}-\d{2})/),r=n?`${n[1]} ${n[2].replace(/-/g,`:`)}`:t.replace(`.jsonl`,``);h.push({key:t,label:r,fileName:t,items:e})}}}else h.push({key:`__all__`,label:``,fileName:null,items:d.map((e,t)=>({trace:e,globalIdx:t+1}))});let g=e=>{u(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};return(0,K.jsxs)(`div`,{className:`flex flex-col flex-1 overflow-hidden`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b flex-shrink-0`,style:{borderColor:`var(--border-light)`},children:[(0,K.jsx)(`span`,{className:`text-[10px]`,style:{color:`var(--text-tertiary)`},children:`排序`}),(0,K.jsx)(`div`,{className:`sidebar-sort-segment`,children:[`time`,`model`,`status`].map(e=>(0,K.jsx)(q,{content:e===`time`?`按请求时间(最新在前)`:e===`model`?`按模型名称字母`:`按状态(接收中→错误→完成)`,placement:`bottom`,delay:400,children:(0,K.jsx)(`button`,{className:`sidebar-sort-btn${s===e?` active`:``}`,onClick:()=>c(e),children:e===`time`?`时间`:e===`model`?`模型`:`状态`})},e))}),f>=0&&(0,K.jsxs)(`span`,{className:`ml-auto text-[10px]`,style:{color:`var(--text-tertiary)`},children:[f+1,`/`,d.length]})]}),f>=0&&(0,K.jsx)(`div`,{style:{height:`2px`,background:`var(--border)`},children:(0,K.jsx)(`div`,{style:{width:`${m}%`,height:`100%`,background:`var(--blue)`,transition:`width .2s`}})}),(0,K.jsx)(`div`,{className:`flex-1 overflow-y-auto sidebar-scroll`,children:h.map(e=>{let r=l.has(e.key),a=h.length>1,s=e.fileName!==null;return(0,K.jsxs)(V.Fragment,{children:[a&&(0,K.jsxs)(`div`,{className:`file-group-header${s?` history`:` session`}`,onClick:()=>g(e.key),children:[(0,K.jsx)(o,{size:12,className:`file-group-chevron flex-shrink-0`,style:{transform:r?`rotate(-90deg)`:`rotate(0deg)`}}),(0,K.jsx)(`span`,{className:`file-group-label`,children:e.label}),(0,K.jsx)(`span`,{className:`file-group-count`,children:e.items.length}),(()=>{let t=e.items.reduce((e,{trace:t})=>e+(t.usage?.promptTokens||0),0),n=e.items.reduce((e,{trace:t})=>e+(t.usage?.completionTokens||0),0),r=e.items.reduce((e,{trace:t})=>e+(t.usage?.reasoningTokens||0),0),i=e.items.reduce((e,{trace:t})=>e+(t.usage?.cacheReadTokens||0),0),a=e.items.reduce((e,{trace:t})=>e+(t.usage?.cacheWriteTokens||0),0),o=e.items.reduce((e,{trace:t})=>e+(t.usage?.cachedTokens||0),0),s=t+n;if(s===0)return null;let c=e=>e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e),l=e=>e.toLocaleString();return(0,K.jsx)(q,{content:(0,K.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`auto auto`,gap:`1px 10px`,fontSize:`11px`},children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`输入`}),(0,K.jsx)(`span`,{style:{color:`var(--blue)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(t)}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`输出`}),(0,K.jsx)(`span`,{style:{color:`var(--green)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(n)}),r>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`推理`}),(0,K.jsx)(`span`,{style:{color:`var(--indigo)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(r)})]}),i+o>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`缓存命中`}),(0,K.jsx)(`span`,{style:{color:`var(--cyan)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(i+o)})]}),a>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`缓存写入`}),(0,K.jsx)(`span`,{style:{color:`var(--cyan)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(a)})]}),(0,K.jsx)(`span`,{style:{color:`var(--text-secondary)`,fontWeight:600,borderTop:`1px solid var(--border-light)`,paddingTop:`2px`,marginTop:`1px`},children:`合计`}),(0,K.jsx)(`span`,{style:{color:`var(--text)`,fontWeight:700,textAlign:`right`,fontFamily:`var(--mono)`,borderTop:`1px solid var(--border-light)`,paddingTop:`2px`,marginTop:`1px`},children:l(s)})]}),placement:`bottom`,delay:200,children:(0,K.jsx)(`span`,{className:`file-group-tokens`,onClick:e=>e.stopPropagation(),children:c(s)})})})(),e.fileName&&i&&(0,K.jsx)(q,{content:`删除:${e.fileName}`,placement:`bottom`,children:(0,K.jsx)(`button`,{className:`file-group-delete`,onClick:t=>{t.stopPropagation(),i(e.fileName)},children:(0,K.jsx)(p,{size:11})})})]}),!r&&e.items.map(({trace:e,globalIdx:r})=>(0,K.jsx)(de,{trace:e,isActive:e.id===t,onClick:()=>n(e.id),turnNumber:r},e.id))]},e.key)})})]})}function J(e){let t=(e||``).toLowerCase();return t.includes(`opus`)?{bg:`var(--purple-bg)`,fg:`var(--purple)`}:t.includes(`sonnet`)?{bg:`var(--blue-bg)`,fg:`var(--blue)`}:t.includes(`haiku`)||t.includes(`gpt-4`)?{bg:`var(--green-bg)`,fg:`var(--green)`}:t.includes(`gpt-3`)?{bg:`var(--amber-bg)`,fg:`var(--amber)`}:t.includes(`glm`)||t.includes(`zhipu`)||t.includes(`deepseek`)?{bg:`var(--blue-bg)`,fg:`var(--blue)`}:t.includes(`qwen`)?{bg:`var(--purple-bg)`,fg:`var(--purple)`}:t.includes(`llama`)?{bg:`var(--orange-bg)`,fg:`var(--orange)`}:t.includes(`mistral`)?{bg:`var(--amber-bg)`,fg:`var(--amber)`}:{bg:`var(--bg-code)`,fg:`var(--text-tertiary)`}}function de({trace:e,isActive:t,onClick:n,turnNumber:r}){let i=new Date(e.timestamp).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}),o=e.duration>0?e.duration>=1e3?`${(e.duration/1e3).toFixed(1)}s`:`${e.duration}ms`:e.status===`streaming`?`...`:`-`,s=e.usage?.promptTokens||0,c=e.usage?.completionTokens||0,l=e.usage?.totalTokens||0,u=fe(e),d=J(e.model),f=(e.model||`unknown`).split(`/`).pop()||`unknown`,p=e.status===`streaming`,m=e.status===`error`,h=e.status===`pending`,g=m?`var(--red)`:p?`var(--blue)`:e.status===`completed`?`var(--green)`:`var(--amber)`;return(0,K.jsxs)(`div`,{onClick:n,className:`sidebar-item px-3 py-2 cursor-pointer border-b transition-colors`,style:{background:t?`var(--bg-active)`:`transparent`,borderColor:`var(--border-light)`},children:[(0,K.jsxs)(`div`,{className:`flex items-baseline gap-1.5`,children:[(0,K.jsxs)(`span`,{className:`font-mono flex-shrink-0 text-center`,style:{color:`var(--text-tertiary)`,fontSize:`11px`,fontWeight:700,minWidth:`20px`},children:[`#`,r]}),u?(0,K.jsx)(`span`,{className:`text-xs truncate flex-1`,style:{color:`var(--text)`},children:u}):(0,K.jsx)(`span`,{className:`text-xs truncate flex-1`,style:{color:`var(--text-tertiary)`,fontStyle:`italic`},children:`No content`}),(0,K.jsx)(`span`,{className:`text-[10px] flex-shrink-0 font-mono`,style:{color:`var(--text-tertiary)`},children:i})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5 mt-0.5`,children:[(0,K.jsx)(`div`,{className:`flex items-center justify-center flex-shrink-0`,style:{minWidth:`20px`},children:p?(0,K.jsx)(a,{size:12,className:`animate-spin`,style:{color:`var(--blue)`}}):m?(0,K.jsx)(v,{size:14,strokeWidth:2.8,style:{color:`var(--red)`}}):h?(0,K.jsx)(`span`,{className:`rounded-full`,style:{width:`9px`,height:`9px`,background:`var(--amber)`,display:`inline-block`}}):(0,K.jsx)(`span`,{className:`rounded-full`,style:{width:`9px`,height:`9px`,background:g,display:`inline-block`}})}),(0,K.jsx)(q,{content:e.model,placement:`right`,delay:500,children:(0,K.jsx)(`span`,{className:`text-[10px] font-mono px-1.5 py-0.5 rounded-full truncate max-w-[90px]`,style:{background:d.bg,color:d.fg,lineHeight:`1.3`},children:f})}),(0,K.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5 flex-shrink-0 font-mono`,style:{color:`var(--text-tertiary)`,fontSize:`10px`},children:[l>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{style:{color:`var(--blue)`,fontWeight:600},children:[`↑`,s]}),(0,K.jsxs)(`span`,{style:{color:`var(--green)`,fontWeight:600},children:[`↓`,c]})]}),(0,K.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[(0,K.jsx)(C,{size:9}),o]})]})]})]})}function fe(e){let t=e.request.body.messages;if(t){let e=[...t].reverse().find(e=>e.role===`user`);if(e)return(typeof e.content==`string`?e.content:Array.isArray(e.content)?e.content.filter(e=>typeof e==`object`&&e.type===`text`).map(e=>e.text||``).join(` `):``).replace(/\s+/g,` `).trim().slice(0,100)}return e.request.body.prompt?String(e.request.body.prompt).replace(/\s+/g,` `).trim().slice(0,100):``}z.registerLanguage(`javascript`,w),z.registerLanguage(`js`,w),z.registerLanguage(`jsx`,w),z.registerLanguage(`typescript`,A),z.registerLanguage(`ts`,A),z.registerLanguage(`tsx`,A),z.registerLanguage(`python`,j),z.registerLanguage(`py`,j),z.registerLanguage(`bash`,N),z.registerLanguage(`sh`,N),z.registerLanguage(`shell`,N),z.registerLanguage(`json`,I),z.registerLanguage(`css`,k),z.registerLanguage(`xml`,O),z.registerLanguage(`html`,O),z.registerLanguage(`markdown`,R),z.registerLanguage(`md`,R),z.registerLanguage(`sql`,oe),z.registerLanguage(`go`,D),z.registerLanguage(`rust`,se),z.registerLanguage(`java`,F),z.registerLanguage(`cpp`,T),z.registerLanguage(`c`,T),z.registerLanguage(`csharp`,M),z.registerLanguage(`yaml`,L),z.registerLanguage(`yml`,L),z.registerLanguage(`diff`,P),z.registerLanguage(`plaintext`,ce);function pe({inline:e,className:n,children:i,node:a,...o}){let[s,c]=(0,V.useState)(!1),l=String(i??``).replace(/\n$/,``),u=/language-(\w+)/.exec(n??``)?.[1]??``,d=e??(!n?.startsWith(`language-`)&&!l.includes(`
2
+ `)),f=(0,V.useCallback)(async()=>{try{await navigator.clipboard.writeText(l),c(!0),setTimeout(()=>c(!1),1500)}catch{}},[l]);if(d)return(0,K.jsx)(`code`,{className:n,...o,children:i});let p=``;try{p=u&&z.getLanguage(u)?z.highlight(l,{language:u,ignoreIllegals:!0}).value:z.highlightAuto(l).value}catch{p=l.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}return(0,K.jsxs)(`div`,{className:`md-code-wrapper`,children:[(0,K.jsxs)(`div`,{className:`md-code-header`,children:[u&&(0,K.jsx)(`span`,{className:`md-code-lang`,children:u}),(0,K.jsxs)(`button`,{className:`md-code-copy${s?` copied`:``}`,onClick:f,title:`复制代码`,children:[s?(0,K.jsx)(r,{size:11}):(0,K.jsx)(t,{size:11}),(0,K.jsx)(`span`,{children:s?`已复制`:`复制`})]})]}),(0,K.jsx)(`pre`,{className:`hljs md-code-pre`,children:(0,K.jsx)(`code`,{className:`hljs${u?` language-${u}`:``}`,dangerouslySetInnerHTML:{__html:B.sanitize(p)}})})]})}function me({text:e,isStreaming:t,className:n}){return e?(0,K.jsx)(`div`,{className:[`md-prose`,t?`streaming-cursor`:``,n??``].filter(Boolean).join(` `),children:(0,K.jsx)(S,{remarkPlugins:[E],components:{code:pe,a:({href:e,children:t,...n})=>(0,K.jsx)(`a`,{href:e,target:`_blank`,rel:`noopener noreferrer`,...n,children:t})},children:e})}):null}var he={};function ge({trace:e}){let t=e.response.status||0,n=t>=400||e.status===`error`,r=e.status===`streaming`,i=(0,V.useRef)(null);(0,V.useEffect)(()=>{r&&i.current&&(i.current.scrollTop=i.current.scrollHeight)},[e.response,r]);let a=e,o=e.request.body.messages||[],s=je(e),c=o.filter(e=>e.role!==`system`&&e.role!==`developer`),l=Me(e),u=Array.isArray(l)?l.filter(e=>e.type===`thinking`).map(e=>e.thinking||``).join(`
3
+
4
+ `):``,d=Array.isArray(l)?(()=>{let e=l.filter(e=>e.type!==`thinking`);return e.length===0?null:e.length===1&&e[0].type===`text`?e[0].text||null:e})():l,f=e.request.body.tools||[];e.toolCalls;let p=e.usage,m=Ne(e);return(0,K.jsxs)(`div`,{ref:i,className:`detail-content`,children:[n&&(0,K.jsxs)(`div`,{className:`error-banner`,children:[(0,K.jsx)(`span`,{className:`eb-icon`,children:`⚠`}),(0,K.jsx)(`span`,{className:`eb-code`,children:t>=400?`HTTP ${t}`:e.error?.code||`Error`}),(0,K.jsx)(`span`,{className:`eb-sep`,children:`·`}),(0,K.jsx)(`span`,{className:`eb-message`,children:e.error?.message||`Unknown error`})]}),(0,K.jsx)(ve,{usage:p,duration:e.duration,ttfb:e.ttfb,isStreaming:r}),s&&(0,K.jsx)(Y,{title:`System Prompt`,defaultOpen:!1,copyText:s,badge:`system`,children:(0,K.jsx)(Ce,{text:s})}),c.length>0&&(0,K.jsx)(Y,{title:`Messages`,defaultOpen:!0,badge:`${c.length}`,copyText:c.map(e=>{let t=typeof e.content==`string`?e.content:Array.isArray(e.content)?e.content.map(e=>e.text||e.thinking||``).join(`
5
+ `):``;return`[${e.role.toUpperCase()}]\n${t}`}).join(`
6
+
7
+ ---
8
+
9
+ `),children:(0,K.jsx)(`div`,{className:`messages-list`,children:c.map((e,t)=>(0,K.jsx)(be,{message:e},t))})}),(0,K.jsxs)(Y,{title:`Response`,defaultOpen:!0,badge:t?`${t}`:r?`live`:void 0,copyText:(d?typeof d==`string`?d:d.map(e=>e.text||``).join(`
10
+
11
+ `):``)||void 0,children:[u&&(0,K.jsx)(Te,{content:u}),d||m.length>0?(0,K.jsx)(be,{message:{role:`assistant`,content:d??``,tool_calls:m.length>0?m:void 0},isStreaming:r}):e.error?(0,K.jsxs)(`div`,{className:`msg system`,style:{marginBottom:0},children:[(0,K.jsx)(`span`,{className:`msg-role`,style:{background:`var(--red)`,color:`#fff`},children:`ERROR`}),(0,K.jsxs)(`div`,{className:`content-block`,children:[`[`,e.error.code,`] `,e.error.message]})]}):(0,K.jsx)(`div`,{style:{color:`var(--text-tertiary)`,fontSize:`13px`,padding:`4px 0`},children:r?(0,K.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`8px`,color:`var(--text-tertiary)`,fontSize:`12px`},children:[`接收中 `,(0,K.jsxs)(`span`,{className:`streaming-dots`,children:[(0,K.jsx)(`span`,{}),(0,K.jsx)(`span`,{}),(0,K.jsx)(`span`,{})]})]}):`No response content`})]}),f.length>0&&(0,K.jsx)(Y,{title:`Tools Definition`,defaultOpen:!1,badge:`${f.length}`,copyText:JSON.stringify(f,null,2),children:(0,K.jsx)(Ee,{tools:f})}),(0,K.jsx)(Y,{title:`Raw JSON`,defaultOpen:!1,copyText:JSON.stringify(a,null,2),children:(0,K.jsx)(Q,{data:a})})]})}function _e(e){return e>=1e3?`${(e/1e3).toFixed(2)}s`:`${e}ms`}function ve({usage:e,duration:t,ttfb:n,isStreaming:r}){let i=(e?.cachedTokens||0)+(e?.cacheReadTokens||0)+(e?.cacheWriteTokens||0)>0;return(0,K.jsx)(`div`,{className:`token-usage-bar`,children:(0,K.jsx)(`div`,{className:`token-bar`,children:r?(0,K.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`6px`,fontSize:`11px`,color:`var(--text-tertiary)`},children:[`接收中 `,(0,K.jsxs)(`span`,{className:`streaming-dots`,children:[(0,K.jsx)(`span`,{}),(0,K.jsx)(`span`,{}),(0,K.jsx)(`span`,{})]})]}):e?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`tok-group`,children:(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-label`,children:`合计`}),(0,K.jsx)(`span`,{className:`tok-val`,style:{color:`var(--text)`,fontSize:`12px`},children:e.totalTokens.toLocaleString()})]})}),(0,K.jsxs)(`span`,{className:`tok-group`,children:[(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-arrow`,style:{color:`var(--blue)`},children:`↑`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.promptTokens.toLocaleString()})]}),(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-arrow`,style:{color:`var(--green)`},children:`↓`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.completionTokens.toLocaleString()})]}),(e.reasoningTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-dot`,style:{background:`var(--indigo)`}}),(0,K.jsx)(`span`,{className:`tok-label`,children:`推理`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.reasoningTokens.toLocaleString()})]})]}),i&&(0,K.jsxs)(`span`,{className:`tok-group`,children:[(e.cachedTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-dot`,style:{background:`var(--cyan)`}}),(0,K.jsx)(`span`,{className:`tok-label`,children:`缓存命中`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.cachedTokens.toLocaleString()})]}),(e.cacheReadTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-dot`,style:{background:`var(--cyan)`}}),(0,K.jsx)(`span`,{className:`tok-label`,children:`缓存读`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.cacheReadTokens.toLocaleString()})]}),(e.cacheWriteTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-dot`,style:{background:`var(--amber)`}}),(0,K.jsx)(`span`,{className:`tok-label`,children:`缓存写`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.cacheWriteTokens.toLocaleString()})]})]}),(0,K.jsxs)(`span`,{className:`tok-group`,children:[n>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-label`,children:`首字`}),(0,K.jsx)(`span`,{className:`tok-val`,children:_e(n)})]}),t>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-label`,children:`耗时`}),(0,K.jsx)(`span`,{className:`tok-val`,children:_e(t)})]}),t>0&&(e.completionTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-label`,children:`速度`}),(0,K.jsxs)(`span`,{className:`tok-val`,children:[Math.round(e.completionTokens/(t/1e3)),` tok/s`]})]})]})]}):(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`,fontSize:`11px`},children:`无 token 数据`})})})}function Y({title:e,defaultOpen:t,badge:n,copyText:r,children:i}){let[a,o]=(0,V.useState)(he[e]??t);return(0,K.jsxs)(`div`,{className:`section`,children:[(0,K.jsxs)(`div`,{className:`section-header`,onClick:()=>{let t=!a;o(t),he[e]=t},children:[(0,K.jsx)(`span`,{className:`chevron${a?` open`:``}`,children:`▶`}),(0,K.jsx)(`span`,{className:`title`,children:e}),n&&(0,K.jsx)(`span`,{className:`badge`,children:n}),r!==void 0&&r!==``&&(0,K.jsx)(Z,{getText:()=>r,className:`copy-btn`,stopPropagation:!0})]}),a&&(0,K.jsx)(`div`,{className:`section-body open`,children:i})]})}function ye(e){let t=e.role,n=e.content;if(t===`user`&&Array.isArray(n)&&n.length>0&&n.every(e=>e.type===`tool_result`))if(n.length===1){let e=n[0],t=e.content??e.text;return{role:`tool`,content:typeof t==`string`?t:JSON.stringify(t??``),tool_call_id:e.tool_use_id}}else return{role:`tool`,content:n};return{role:t,content:n,tool_call_id:e.tool_call_id,tool_calls:e.tool_calls}}function be({message:e,isStreaming:t}){let{role:n,content:r,tool_calls:i}=ye(e),a=typeof r==`string`,o=!a&&Array.isArray(r)&&r.some(e=>e.type===`text`||e.type===`input_text`||e.type===`output_text`),s=a&&r.trim().length>0||o,[c,l]=(0,V.useState)(`markdown`),u=()=>typeof r==`string`?r:Array.isArray(r)?r.map(e=>e.text||e.thinking||``).filter(Boolean).join(`
12
+
13
+ `):``,d=n===`user`?`user`:n===`assistant`?`assistant`:n===`system`||n===`developer`?`system`:n===`tool`?`tool_result`:``,f=a?r.trim().length>0:Array.isArray(r)&&r.length>0,[p,m]=(0,V.useState)(n===`tool`);return(0,K.jsxs)(`div`,{className:`msg ${d}`,children:[(0,K.jsxs)(`div`,{className:`msg-header-row`,children:[(0,K.jsxs)(`span`,{className:`msg-role msg-role-toggle`,onClick:()=>m(e=>!e),title:p?`展开`:`收起`,children:[(0,K.jsx)(`span`,{className:`msg-collapse-arrow${p?``:` open`}`,children:`▶`}),n.toUpperCase()]}),s&&!p&&(0,K.jsxs)(`div`,{className:`text-toggle-bar`,style:{marginLeft:`8px`,marginTop:0},children:[(0,K.jsx)(`button`,{className:`text-toggle-btn${c===`raw`?` active`:``}`,onClick:()=>l(`raw`),children:`原文`}),(0,K.jsx)(`button`,{className:`text-toggle-btn${c===`markdown`?` active`:``}`,onClick:()=>l(`markdown`),children:`渲染`})]}),(0,K.jsx)(`span`,{style:{marginLeft:`auto`},children:(0,K.jsx)(Z,{getText:u})})]}),!p&&(0,K.jsxs)(K.Fragment,{children:[a?(0,K.jsx)(X,{text:r,mode:c}):Array.isArray(r)?(0,K.jsx)(`div`,{className:`content-parts-list`,children:r.map((e,n)=>(0,K.jsx)(Se,{block:e,textMode:o?c:`markdown`,isStreaming:t&&n===r.length-1},n))}):r?(0,K.jsx)(Q,{data:r}):null,i&&i.length>0&&(0,K.jsx)(`div`,{className:`msg-tool-calls`,children:i.map(e=>(0,K.jsx)(xe,{name:e.function.name,callId:e.id,rawArgs:e.function.arguments},e.id))})]}),p&&(f||i&&i.length>0)&&(0,K.jsx)(`div`,{className:`msg-collapsed-hint`,children:[f?a?`${r.slice(0,60).replace(/\n/g,` `)}…`:`${r.length} 块`:``,i?.length?`${i.length} tool_call`:``].filter(Boolean).join(` · `)})]})}function xe({name:e,callId:t,rawArgs:n,block:r}){let[i,a]=(0,V.useState)(!1),o=e??r?.name??`tool_use`,s=t??r?.id??``,c=r?.input??n;if(typeof c==`string`)try{c=JSON.parse(c)}catch{}let l=c&&typeof c==`object`?Object.keys(c).length:0;return(0,K.jsxs)(`div`,{className:`tool-block`,children:[(0,K.jsxs)(`div`,{className:`tool-block-header`,onClick:()=>a(e=>!e),children:[(0,K.jsx)(`span`,{className:`tb-arrow${i?` open`:``}`,children:`▶`}),(0,K.jsx)(`span`,{className:`tb-name`,children:o}),!i&&l>0&&(0,K.jsxs)(`span`,{className:`tb-desc`,children:[`(`,l,` args)`]}),s&&(0,K.jsx)(`span`,{style:{marginLeft:`auto`,opacity:.45,fontSize:`11px`,fontFamily:`var(--mono)`},children:s})]}),i&&(0,K.jsx)(`div`,{className:`tool-block-body open`,children:typeof c==`object`?(0,K.jsx)(Q,{data:c}):(0,K.jsx)(`pre`,{className:`text-raw`,children:String(c)})})]})}function Se({block:e,textMode:t,isStreaming:n}){let r=t??`markdown`;if(e.type===`text`||e.type===`input_text`||e.type===`output_text`)return(0,K.jsx)(`div`,{className:`content-block`,children:(0,K.jsx)(X,{text:e.text||``,mode:r,isStreaming:n})});if(e.type===`thinking`)return(0,K.jsx)(we,{content:e.thinking||``});if(e.type===`tool_use`)return(0,K.jsx)(xe,{block:e});if(e.type===`tool_result`){let t=e.content??e.text;return(0,K.jsxs)(`div`,{className:`content-block block-framed`,style:{borderColor:`var(--purple)`,background:`var(--purple-bg)`},children:[(0,K.jsxs)(`span`,{className:`tool-use-label`,style:{color:`var(--purple)`,background:`color-mix(in srgb, var(--purple) 15%, transparent)`},children:[`↩ tool_result: `,e.tool_use_id||``]}),(0,K.jsx)(`div`,{className:`content-block-text`,children:typeof t==`string`?t:(0,K.jsx)(Q,{data:t})})]})}return(0,K.jsx)(Q,{data:e})}function X({text:e,mode:t,isStreaming:n,sans:r,compact:i,className:a}){return e?(0,K.jsxs)(`div`,{className:`text-pane${a?` `+a:``}`,children:[(0,K.jsx)(`pre`,{className:`text-raw${r?` sans`:``}`,style:{display:t===`raw`?void 0:`none`},children:e}),(0,K.jsx)(`div`,{style:{display:t===`markdown`?void 0:`none`},children:i?(0,K.jsx)(`div`,{className:`text-raw sans`,style:{whiteSpace:`pre-wrap`},children:e}):(0,K.jsx)(me,{text:e,isStreaming:n})})]}):null}function Ce({text:e}){let[t,n]=(0,V.useState)(`markdown`);return(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`div`,{className:`text-toggle-bar`,style:{marginBottom:`6px`},children:[(0,K.jsx)(`button`,{className:`text-toggle-btn${t===`raw`?` active`:``}`,onClick:()=>n(`raw`),children:`原文`}),(0,K.jsx)(`button`,{className:`text-toggle-btn${t===`markdown`?` active`:``}`,onClick:()=>n(`markdown`),children:`渲染`})]}),(0,K.jsx)(X,{text:e,mode:t,sans:!0})]})}function we({content:e,marginBottom:t}){let[n,r]=(0,V.useState)(!1),[i,a]=(0,V.useState)(`markdown`),o=e.slice(0,80).replace(/\n/g,` `);return(0,K.jsxs)(`div`,{className:`thinking-block content-block`,style:t?{marginBottom:t}:void 0,children:[(0,K.jsxs)(`div`,{className:`thinking-block-header`,onClick:()=>r(e=>!e),children:[(0,K.jsxs)(`span`,{className:`thinking-label`,children:[(0,K.jsx)(`span`,{className:`thinking-arrow`,children:n?`▼`:`▶`}),(0,K.jsx)(`span`,{children:`Thinking`})]}),n?(0,K.jsxs)(`div`,{className:`text-toggle-bar`,style:{marginTop:0,marginLeft:`4px`},onClick:e=>e.stopPropagation(),children:[(0,K.jsx)(`button`,{className:`text-toggle-btn${i===`raw`?` active`:``}`,onClick:()=>a(`raw`),children:`原文`}),(0,K.jsx)(`button`,{className:`text-toggle-btn${i===`markdown`?` active`:``}`,onClick:()=>a(`markdown`),children:`渲染`})]}):(0,K.jsxs)(`span`,{className:`thinking-preview`,children:[o,`…`]}),(0,K.jsx)(Z,{getText:()=>e,stopPropagation:!0,className:`copy-btn`})]}),n&&(0,K.jsx)(X,{text:e,mode:i,sans:!0})]})}function Te({content:e}){return(0,K.jsx)(we,{content:e,marginBottom:8})}function Ee({tools:e}){return(0,K.jsx)(`div`,{style:{display:`grid`,gap:`4px`},children:e.map((e,t)=>(0,K.jsx)(De,{tool:e},t))})}function De({tool:e}){let[t,n]=(0,V.useState)(!1),r=e.function||e,i=r.name||e.name||`unknown`,a=r.description||e.description||``,o=r.parameters||e.input_schema||e.parameters,s=o?.required||[],c=o?.properties||{};return(0,K.jsxs)(`div`,{className:`tool-block`,children:[(0,K.jsxs)(`div`,{className:`tool-block-header`,onClick:()=>n(e=>!e),children:[(0,K.jsx)(`span`,{className:`tb-arrow${t?` open`:``}`,children:`▶`}),(0,K.jsx)(`span`,{className:`tb-name`,children:i}),(0,K.jsx)(`span`,{className:`tb-desc`,children:a})]}),t&&(0,K.jsxs)(`div`,{className:`tool-block-body open`,children:[a&&(0,K.jsx)(`div`,{className:`tb-full-desc`,children:a}),Object.keys(c).length>0?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`div`,{className:`tb-params-title`,children:`Parameters`}),Object.entries(c).map(([e,t])=>(0,K.jsxs)(`div`,{className:`tb-param`,children:[(0,K.jsxs)(`div`,{className:`tb-param-row1`,children:[(0,K.jsx)(`span`,{className:`tb-pname`,children:e}),t.type&&(0,K.jsx)(`span`,{className:`tb-ptype`,children:t.type}),s.includes(e)&&(0,K.jsx)(`span`,{className:`tb-prequired`,children:`required`})]}),t.description&&(0,K.jsx)(`div`,{className:`tb-pdesc`,children:t.description})]},e))]}):o?(0,K.jsx)(Q,{data:o}):null]})]})}function Z({getText:e,className:n=`copy-btn`,stopPropagation:i=!1}){let[a,o]=(0,V.useState)(!1);return(0,K.jsx)(`button`,{className:`${n}${a?` copied`:``}`,onClick:async t=>{i&&t.stopPropagation();try{await navigator.clipboard.writeText(e()),o(!0),setTimeout(()=>o(!1),1500)}catch{}},"data-tip":`复制`,children:a?(0,K.jsx)(r,{size:10}):(0,K.jsx)(t,{size:10})})}var Oe=0;function Q({data:e}){return Oe=0,(0,K.jsx)(`div`,{className:`json-view`,children:$(e,0)})}var ke=new Set([`chunks`,`headers`,`tools`]);function $(e,t,n){if(t>50)return(0,K.jsx)(`span`,{className:`json-punct`,children:`…`});if(e===null)return(0,K.jsx)(`span`,{className:`jnull`,children:`null`});if(e===void 0)return(0,K.jsx)(`span`,{className:`jnull`,children:`undefined`});if(typeof e==`boolean`)return(0,K.jsx)(`span`,{className:`jb`,children:String(e)});if(typeof e==`number`)return(0,K.jsx)(`span`,{className:`jn`,children:e});if(typeof e==`string`)return(0,K.jsxs)(`span`,{className:`js`,children:[`"`,e.length>300?e.slice(0,300)+`…`:e,`"`]});if(typeof e!=`object`)return(0,K.jsx)(`span`,{children:String(e)});let r=Array.isArray(e),i=r?e.map((e,t)=>[t,e]):Object.entries(e),a=i.length;if(a===0)return(0,K.jsx)(`span`,{className:`json-punct`,children:r?`[]`:`{}`});if(a<=3&&t<2&&i.every(([,e])=>typeof e!=`object`||!e)){let e=i.map(([e,n],i)=>(0,K.jsxs)(`span`,{children:[!r&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{className:`jk`,children:[`"`,String(e),`"`]}),(0,K.jsx)(`span`,{className:`json-punct`,children:`: `})]}),$(n,t+1),i<a-1&&(0,K.jsx)(`span`,{className:`json-punct`,children:`, `})]},String(e)));return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`json-punct`,children:r?`[`:`{`}),e,(0,K.jsx)(`span`,{className:`json-punct`,children:r?`]`:`}`})]})}let o=`jt`+ Oe++,s=`${a} ${r?`item`:`key`}${a===1?``:`s`}`,c=n!==void 0&&ke.has(n),l=i.map(([e,n])=>(0,K.jsxs)(`div`,{className:`jt-line`,children:[!r&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{className:`jk`,children:[`"`,String(e),`"`]}),(0,K.jsx)(`span`,{className:`json-punct`,children:`: `})]}),$(n,t+1,String(e))]},String(e)));return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`jt-toggle${c?``:` jt-open`}`,onClick:e=>Ae(e,o),style:{cursor:`pointer`},children:c?`▶`:`▼`}),(0,K.jsx)(`span`,{className:`json-punct`,children:r?`[`:`{`}),(0,K.jsxs)(`span`,{className:`jt-summary${c?` jt-show`:``}`,id:`${o}s`,children:[`… `,s]}),(0,K.jsx)(`div`,{className:`jt-children${c?``:` jt-open`}`,id:o,children:l}),(0,K.jsx)(`div`,{className:`jt-close${c?` jt-hidden`:``}`,id:`${o}c`,children:(0,K.jsx)(`span`,{className:`json-punct`,children:r?`]`:`}`})})]})}function Ae(e,t){e.stopPropagation();let n=document.getElementById(t),r=document.getElementById(t+`s`),i=document.getElementById(t+`c`),a=e.currentTarget;n&&(n.classList.contains(`jt-open`)?(n.classList.remove(`jt-open`),a.classList.remove(`jt-open`),a.textContent=`▶`,r?.classList.add(`jt-show`),i?.classList.add(`jt-hidden`)):(n.classList.add(`jt-open`),a.classList.add(`jt-open`),a.textContent=`▼`,r?.classList.remove(`jt-show`),i?.classList.remove(`jt-hidden`)))}function je(e){let t=e.request.body,n=[];if(typeof t.system==`string`&&t.system.trim())n.push(t.system);else if(Array.isArray(t.system)){let e=t.system.map(e=>typeof e==`string`?e:e?.type===`text`&&e.text||``).filter(Boolean).join(`
14
+
15
+ `);e.trim()&&n.push(e)}let r=e.request.body.messages||[];for(let e of r)if(e.role===`system`||e.role===`developer`){let t=typeof e.content==`string`?e.content:Array.isArray(e.content)?e.content.map(e=>e.text||``).filter(Boolean).join(`
16
+
17
+ `):``;t.trim()&&n.push(t)}return n.length?n.join(`
18
+
19
+ `):null}function Me(e){let t=e.response.body;if(!t)return null;if(t.choices&&Array.isArray(t.choices)&&t.choices.length>0){let e=t.choices[0].message;if(e){let t=e.content,n=e.reasoning_content??e.reasoning,r=[];if(n&&r.push({type:`thinking`,thinking:n}),typeof t==`string`&&t.trim()?r.push({type:`text`,text:t}):Array.isArray(t)?r.push(...t):t!=null&&r.push({type:`text`,text:JSON.stringify(t)}),r.length===1&&r[0].type===`text`)return r[0].text||null;if(r.length>0)return r}return null}if(t.content&&Array.isArray(t.content)){let e=t.content;return e.length===1&&e[0].type===`text`?e[0].text||null:e}return typeof t.text==`string`?t.text:null}function Ne(e){let t=e.response.body;if(!t)return[];if(Array.isArray(t.choices)&&t.choices.length>0){let e=t.choices[0].message;if(e&&Array.isArray(e.tool_calls))return e.tool_calls}return[]}function Pe({onClose:e}){let[t,n]=(0,V.useState)([]),[r,i]=(0,V.useState)(!0),[a,o]=(0,V.useState)(null);(0,V.useEffect)(()=>{Promise.all([G.getProviders().then(n).catch(()=>{}),G.getConfig().then(e=>o(e.proxy?.port??null)).catch(()=>{})]).finally(()=>i(!1))},[]);let s=a??(window.location.port?Number(window.location.port):void 0);return(0,K.jsxs)(`div`,{className:`p-5 space-y-5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`h2`,{className:`text-base font-semibold`,children:`设置`}),(0,K.jsx)(`button`,{onClick:e,style:{color:`var(--text-tertiary)`},children:(0,K.jsx)(v,{size:16})})]}),(0,K.jsxs)(`div`,{className:`rounded-lg p-3`,style:{background:`var(--bg)`,border:`1px solid var(--border)`},children:[(0,K.jsx)(`h3`,{className:`text-sm font-medium mb-2`,children:`代理服务器`}),(0,K.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-1.5 text-xs`,children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`监听端口`}),(0,K.jsx)(`span`,{className:`font-mono`,style:{color:`var(--blue)`},children:s}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`OpenAI Base URL`}),(0,K.jsxs)(`span`,{className:`font-mono`,style:{color:`var(--blue)`},children:[`http://localhost:`,s,`/v1`]}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`Anthropic Base URL`}),(0,K.jsxs)(`span`,{className:`font-mono`,style:{color:`var(--blue)`},children:[`http://localhost:`,s]})]})]}),(0,K.jsxs)(`div`,{className:`rounded-lg p-3`,style:{background:`var(--bg)`,border:`1px solid var(--border)`},children:[(0,K.jsx)(`h3`,{className:`text-sm font-medium mb-1`,children:`上游服务商`}),(0,K.jsxs)(`p`,{className:`text-[11px] mb-3`,style:{color:`var(--text-tertiary)`},children:[`修改请编辑项目根目录的 `,(0,K.jsx)(`code`,{className:`font-mono px-1 py-0.5 rounded`,style:{background:`var(--bg-code)`},children:`.env`}),` 文件后重启服务`]}),r?(0,K.jsx)(`div`,{className:`text-sm`,style:{color:`var(--text-tertiary)`},children:`加载中…`}):t.length===0?(0,K.jsxs)(`div`,{className:`text-sm italic`,style:{color:`var(--text-tertiary)`},children:[`未检测到已配置的 Provider。请在 `,(0,K.jsx)(`code`,{className:`font-mono`,children:`.env`}),` 中设置 `,(0,K.jsx)(`code`,{className:`font-mono`,children:`OPENAI_API_KEY`}),` 等变量。`]}):(0,K.jsx)(`div`,{className:`space-y-1.5`,children:t.map(e=>(0,K.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-2 rounded`,style:{border:`1px solid var(--border)`},children:[(0,K.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full flex-shrink-0`,style:{background:`var(--green)`}}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsx)(`div`,{className:`text-sm font-medium capitalize`,children:e.type}),(0,K.jsx)(`div`,{className:`text-[11px] font-mono truncate`,style:{color:`var(--text-tertiary)`},children:e.baseUrl})]}),e.apiKey&&(0,K.jsx)(`span`,{className:`text-[11px] font-mono flex-shrink-0`,style:{color:`var(--text-tertiary)`},children:e.apiKey})]},e.type))})]}),(0,K.jsxs)(`div`,{className:`flex items-center justify-end gap-3 pt-1`,style:{color:`var(--text-tertiary)`,fontSize:`11px`},children:[(0,K.jsxs)(`span`,{children:[`LPT v`,`1.3.16`]}),(0,K.jsx)(`span`,{style:{opacity:.35},children:`·`}),(0,K.jsx)(`a`,{href:`https://github.com/zhxsking/llm_proxy_trace`,target:`_blank`,rel:`noopener noreferrer`,style:{color:`var(--text-tertiary)`,textDecoration:`none`},onMouseEnter:e=>e.currentTarget.style.color=`var(--text-secondary)`,onMouseLeave:e=>e.currentTarget.style.color=`var(--text-tertiary)`,children:`GitHub`})]})]})}function Fe({open:e,title:t,message:n,confirmText:r=`确认`,cancelText:i=`取消`,danger:a=!1,onConfirm:o,onCancel:s}){let c=(0,V.useRef)(null);return(0,V.useEffect)(()=>{e&&c.current?.focus()},[e]),(0,V.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&s(),e.key===`Enter`&&o()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,o,s]),e?(0,K.jsx)(`div`,{className:`confirm-overlay`,onClick:s,children:(0,K.jsxs)(`div`,{className:`confirm-dialog`,onClick:e=>e.stopPropagation(),children:[(0,K.jsx)(`div`,{className:`confirm-icon-row`,children:(0,K.jsx)(`span`,{className:`confirm-icon${a?` danger`:``}`,children:(0,K.jsx)(m,{size:20})})}),(0,K.jsx)(`div`,{className:`confirm-title`,children:t}),(0,K.jsx)(`div`,{className:`confirm-message`,children:n}),(0,K.jsxs)(`div`,{className:`confirm-actions`,children:[(0,K.jsx)(`button`,{className:`confirm-btn cancel`,onClick:s,children:i}),(0,K.jsx)(`button`,{ref:c,className:`confirm-btn ok${a?` danger`:``}`,onClick:o,children:r})]})]})}):null}function Ie(){try{let e=localStorage.getItem(`lpt-theme`);if(e===`dark`||e===`light`)return e}catch{}return window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function Le(e){document.documentElement.setAttribute(`data-theme`,e);try{localStorage.setItem(`lpt-theme`,e)}catch{}}function Re(){let[e,t]=(0,V.useState)([]),[r,i]=(0,V.useState)(null),[a,c]=(0,V.useState)(null),[u,d]=(0,V.useState)(``),[f,m]=(0,V.useState)(`all`),[h,g]=(0,V.useState)(!1),[_,y]=(0,V.useState)({open:!1,title:``,message:``,onConfirm:()=>{}}),b=(e,t,n)=>{y({open:!0,title:e,message:t,onConfirm:n})},x=()=>y(e=>({...e,open:!1})),[ee,te]=(0,V.useState)(!0),[S,ne]=(0,V.useState)(Ie),[C,w]=(0,V.useState)(320),T=(0,V.useRef)(!1),E=(0,V.useRef)(0),D=(0,V.useRef)(0),[O,k]=(0,V.useState)(!1),A=(0,V.useRef)(null),[j,M]=(0,V.useState)(!1);(0,V.useEffect)(()=>{Le(S)},[S]),(0,V.useEffect)(()=>{if(!O)return;let e=e=>{A.current&&!A.current.contains(e.target)&&k(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[O]);let oe=()=>ne(e=>e===`light`?`dark`:`light`),N=e.find(e=>e.id===a)||null,P=(0,V.useCallback)(async()=>{try{let[e,n]=await Promise.all([G.getTraces({keyword:u||void 0,limit:200}),G.getStats()]);t(e.traces),i(n)}catch{}finally{te(!1)}},[u]),F=(0,V.useCallback)(e=>{if(e.type===`trace:new`){let n=e.data;u||t(e=>[n,...e]),i(e=>e&&{...e,totalCalls:e.totalCalls+1})}else if(e.type===`trace:update`||e.type===`trace:complete`){let n=e.data;t(e=>e.map(e=>e.id===n.id?{...e,...n}:e)),e.type===`trace:complete`&&G.getStats().then(i).catch(()=>{})}},[u]),{connected:I}=le({url:`ws://${window.location.host}/ws`,onEvent:F});(0,V.useEffect)(()=>{P()},[P]);let L=e=>{T.current=!0,E.current=e.clientX,D.current=C,document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let t=e=>{if(!T.current)return;let t=e.clientX-E.current;w(Math.max(240,Math.min(600,D.current+t)))},n=()=>{T.current=!1,document.body.style.userSelect=``,document.body.style.cursor=``,document.removeEventListener(`mousemove`,t),document.removeEventListener(`mouseup`,n)};document.addEventListener(`mousemove`,t),document.addEventListener(`mouseup`,n)},se=r?.totalTokens??0,ce=r?.totalCalls??0,R=r?.avgDuration??0,z=e.reduce((e,t)=>e+(t.usage?.promptTokens||0),0),B=e.reduce((e,t)=>e+(t.usage?.completionTokens||0),0),H=f===`all`?e:e.filter(e=>e.status===f),U={};for(let t of e)t.model&&(U[t.model]=(U[t.model]||0)+1);let W=Object.entries(U).sort((e,t)=>t[1]-e[1]).slice(0,4),[J,de]=(0,V.useState)(null),fe=J?H.filter(e=>e.model===J):H,pe=e.filter(e=>e.status===`error`).length;return(0,K.jsxs)(`div`,{className:`flex flex-col h-screen overflow-hidden`,style:{background:`var(--bg)`,color:`var(--text)`},children:[(0,K.jsxs)(`header`,{className:`flex items-center gap-3 px-4 flex-shrink-0`,style:{background:`var(--bg-card)`,borderBottom:`1px solid var(--border)`,height:`52px`,zIndex:10},children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[(0,K.jsx)(n,{size:18,style:{color:`var(--blue)`}}),(0,K.jsx)(`span`,{className:`text-sm font-semibold tracking-tight`,children:`LPT`})]}),(0,K.jsx)(`div`,{className:`w-px h-5 flex-shrink-0`,style:{background:`var(--border)`}}),(0,K.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] flex-shrink-0`,style:{color:`var(--text-tertiary)`},children:[(0,K.jsxs)(`span`,{children:[`请求 `,(0,K.jsx)(`b`,{className:`font-mono`,style:{color:`var(--text-secondary)`},children:ce})]}),(0,K.jsxs)(`span`,{children:[`Tokens `,(0,K.jsx)(`b`,{className:`font-mono`,style:{color:`var(--text-secondary)`},children:se.toLocaleString()})]}),z>0&&(0,K.jsxs)(`span`,{className:`flex items-center gap-0.5 font-mono`,style:{color:`var(--blue)`},children:[`↑`,(0,K.jsx)(`b`,{children:z.toLocaleString()})]}),B>0&&(0,K.jsxs)(`span`,{className:`flex items-center gap-0.5 font-mono`,style:{color:`var(--green)`},children:[`↓`,(0,K.jsx)(`b`,{children:B.toLocaleString()})]}),R>0&&(0,K.jsxs)(`span`,{children:[`均 `,R,`ms`]})]}),W.length>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`div`,{className:`w-px h-5 flex-shrink-0`,style:{background:`var(--border)`}}),(0,K.jsx)(`div`,{className:`flex items-center gap-1.5 overflow-hidden flex-1`,children:W.map(([e,t])=>(0,K.jsxs)(`button`,{onClick:()=>de(t=>t===e?null:e),className:`filter-chip${J===e?` active`:``}`,children:[e.split(`/`).pop()||e,(0,K.jsx)(`span`,{className:`chip-count`,children:t})]},e))})]}),(0,K.jsxs)(`div`,{className:`ml-auto flex items-center gap-2 flex-shrink-0`,children:[(0,K.jsxs)(`span`,{className:`text-[11px] flex items-center gap-1`,style:{color:I?`var(--green)`:`var(--red)`},children:[(0,K.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full`,style:{background:I?`var(--green)`:`var(--red)`}}),I?`实时`:`离线`]}),(0,K.jsx)(q,{content:`从磁盘加载历史记录`,children:(0,K.jsxs)(`button`,{onClick:async()=>{M(!0),await G.reloadTraces().catch(()=>{}),await P(),M(!1)},className:`flex items-center gap-1 text-[11px] px-2 py-1 rounded border transition-colors`,style:{borderColor:`var(--border)`,color:j?`var(--blue)`:`var(--text-tertiary)`},disabled:j,children:[(0,K.jsx)(l,{size:12,style:{animation:j?`spin 1s linear infinite`:`none`}}),`加载记录`]})}),(0,K.jsxs)(`div`,{ref:A,className:`clear-split-btn`,style:{position:`relative`},children:[(0,K.jsx)(q,{content:`清空当前会话`,children:(0,K.jsxs)(`button`,{onClick:()=>{G.deleteTraces(!1).then(()=>{t([]),P()}),k(!1)},className:`clear-split-main`,children:[(0,K.jsx)(p,{size:12}),` 清空`]})}),(0,K.jsx)(`button`,{onClick:()=>k(e=>!e),className:`clear-split-arrow`,"aria-label":`更多清空选项`,children:(0,K.jsx)(o,{size:11})}),O&&(0,K.jsxs)(`div`,{className:`clear-dropdown`,children:[(0,K.jsx)(`div`,{className:`clear-dropdown-label`,children:`选择清空方式`}),(0,K.jsxs)(`button`,{className:`clear-dropdown-item`,onClick:()=>{G.deleteTraces(!1).then(()=>{t([]),P()}),k(!1)},children:[(0,K.jsx)(p,{size:12}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`div`,{className:`clear-dropdown-item-title`,children:`清空当前会话`}),(0,K.jsx)(`div`,{className:`clear-dropdown-item-desc`,children:`仅清内存,文件保留,重启可恢复`})]})]}),(0,K.jsxs)(`button`,{className:`clear-dropdown-item danger`,onClick:()=>{k(!1),b(`永久删除所有文件`,`将永久删除所有 Trace 文件,无法恢复,确认吗?`,()=>{G.deleteTraces(!0).then(()=>{t([]),P()})})},children:[(0,K.jsx)(p,{size:12}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`div`,{className:`clear-dropdown-item-title`,children:`永久删除所有文件`}),(0,K.jsx)(`div`,{className:`clear-dropdown-item-desc`,children:`删除磁盘 JSONL,重启不恢复`})]})]})]})]}),(0,K.jsx)(q,{content:S===`dark`?`浅色模式`:`深色模式`,children:(0,K.jsx)(`button`,{onClick:oe,className:`flex items-center justify-center w-7 h-7 rounded border transition-colors`,style:{borderColor:`var(--border)`,color:`var(--text-tertiary)`},children:S===`dark`?(0,K.jsx)(s,{size:13}):(0,K.jsx)(ie,{size:13})})}),(0,K.jsx)(q,{content:`Provider 与代理设置`,children:(0,K.jsxs)(`button`,{onClick:()=>g(!h),className:`flex items-center gap-1 text-[11px] px-2 py-1 rounded border transition-colors`,style:{borderColor:h?`var(--blue)`:`var(--border)`,color:h?`var(--blue)`:`var(--text-tertiary)`,background:h?`var(--blue-bg)`:`transparent`},children:[(0,K.jsx)(re,{size:12}),` 设置`]})})]})]}),(0,K.jsxs)(`div`,{className:`flex flex-1 overflow-hidden relative`,children:[h&&(0,K.jsx)(`div`,{className:`absolute inset-0 z-20 flex`,style:{background:`rgba(0,0,0,0.15)`},onClick:()=>g(!1),children:(0,K.jsx)(`div`,{className:`ml-auto h-full overflow-auto`,style:{width:`420px`,background:`var(--bg-card)`,borderLeft:`1px solid var(--border)`},onClick:e=>e.stopPropagation(),children:(0,K.jsx)(Pe,{onClose:()=>g(!1)})})}),(0,K.jsxs)(`div`,{className:`flex flex-col flex-shrink-0`,style:{width:`${C}px`,borderRight:`1px solid var(--border)`,background:`var(--bg-card)`},children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b flex-shrink-0`,style:{borderColor:`var(--border)`},children:[(0,K.jsx)(ae,{size:13,style:{color:`var(--text-tertiary)`}}),(0,K.jsx)(`input`,{type:`text`,placeholder:`搜索消息、模型…`,value:u,onChange:e=>d(e.target.value),className:`flex-1 text-xs bg-transparent outline-none`,style:{color:`var(--text)`}}),u&&(0,K.jsx)(`button`,{onClick:()=>d(``),style:{color:`var(--text-tertiary)`},children:(0,K.jsx)(v,{size:11})}),(0,K.jsx)(`div`,{className:`flex items-center gap-1 flex-shrink-0`,children:[`all`,`error`].map(t=>(0,K.jsx)(q,{content:t===`all`?`显示全部请求`:`只看报错的请求`,placement:`bottom`,delay:400,children:(0,K.jsx)(`button`,{onClick:()=>m(t),className:`filter-chip${f===t?` active`:``}`,style:{fontSize:`10px`,padding:`2px 7px`},children:t===`all`?`全部 ${e.length}`:`✕ ${pe}`})},t))})]}),(0,K.jsx)(ue,{traces:fe,activeId:a,onSelect:e=>{c(e)},loading:ee,onDeleteFile:n=>{b(`删除记录文件`,`删除 ${n}?此操作不可恢复。`,async()=>{await G.deleteTraceFile(n).catch(()=>{}),t(e=>e.filter(e=>e.sourceFile!==n)),a&&e.find(e=>e.id===a)?.sourceFile===n&&c(null)})}})]}),(0,K.jsx)(`div`,{className:`resize-handle`,onMouseDown:L,style:{background:`var(--border-light)`}}),(0,K.jsx)(`div`,{className:`flex-1 overflow-auto detail-scroll`,style:{background:`var(--bg)`},children:N?(0,K.jsx)(ge,{trace:N},N.id):(0,K.jsx)(ze,{hasTraces:e.length>0})})]}),(0,K.jsx)(Fe,{open:_.open,title:_.title,message:_.message,confirmText:`确认删除`,danger:!0,onConfirm:()=>{x(),_.onConfirm()},onCancel:x})]})}function ze({hasTraces:e}){let t=window.location.port,r=t?`http://localhost:${t}`:window.location.origin;return e?(0,K.jsx)(`div`,{className:`flex items-center justify-center h-full text-sm`,style:{color:`var(--text-tertiary)`},children:`选择左侧一条请求查看详情`}):(0,K.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-5`,style:{padding:`40px`},children:[(0,K.jsx)(n,{size:28,style:{color:`var(--border)`}}),(0,K.jsxs)(`div`,{style:{textAlign:`center`},children:[(0,K.jsx)(`div`,{style:{fontSize:`15px`,fontWeight:600,color:`var(--text)`,marginBottom:`6px`},children:`等待第一条请求…`}),(0,K.jsx)(`div`,{style:{fontSize:`12px`,color:`var(--text-tertiary)`,lineHeight:1.7},children:`设置以下环境变量,所有兼容 OpenAI 接口的工具都会被自动拦截`})]}),(0,K.jsxs)(`div`,{style:{background:`var(--bg-code)`,border:`1px solid var(--border)`,borderRadius:`8px`,padding:`14px 18px`,fontFamily:`var(--mono)`,fontSize:`13px`,lineHeight:2,minWidth:`340px`},children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{style:{color:`var(--amber)`},children:`export `}),(0,K.jsx)(`span`,{style:{color:`var(--blue)`},children:`OPENAI_BASE_URL`}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`=`}),(0,K.jsxs)(`span`,{style:{color:`var(--green)`},children:[`"`,r,`/v1"`]})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{style:{color:`var(--amber)`},children:`export `}),(0,K.jsx)(`span`,{style:{color:`var(--blue)`},children:`OPENAI_API_KEY`}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`=`}),(0,K.jsx)(`span`,{style:{color:`var(--green)`},children:`"any-key"`}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`,fontStyle:`italic`,fontSize:`11px`},children:` # 代理不验证 key`})]})]}),(0,K.jsxs)(`div`,{style:{fontSize:`11px`,color:`var(--text-tertiary)`,lineHeight:1.7,textAlign:`center`,maxWidth:`320px`},children:[`上游 API 地址在 `,(0,K.jsx)(`span`,{style:{color:`var(--blue)`},children:`设置`}),` 中配置。 记录内容包括流式输出、工具调用与思考过程。`]})]})}H.createRoot(document.getElementById(`root`)).render((0,K.jsx)(V.StrictMode,{children:(0,K.jsx)(Re,{})}));
@@ -6,11 +6,11 @@
6
6
  <title>LLM Proxy Trace</title>
7
7
 
8
8
  <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%233b82f6' stroke-width='2'><circle cx='12' cy='12' r='10'/><path d='M12 6v6l4 2'/></svg>" />
9
- <script type="module" crossorigin src="/assets/index-CW-brPEA.js"></script>
9
+ <script type="module" crossorigin src="/assets/index-BnDHdtav.js"></script>
10
10
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-QTnfLwEv.js">
11
11
  <link rel="modulepreload" crossorigin href="/assets/markdown-DsSlw-Z4.js">
12
12
  <link rel="modulepreload" crossorigin href="/assets/react-vendor-BnH7jZBV.js">
13
- <link rel="stylesheet" crossorigin href="/assets/index-CWTWukHt.css">
13
+ <link rel="stylesheet" crossorigin href="/assets/index-2Yq5QIJb.css">
14
14
  </head>
15
15
  <body>
16
16
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "llmpt",
3
- "version": "1.3.14",
3
+ "version": "1.3.16",
4
4
  "description": "LLM Proxy Trace - local LLM proxy that captures full traces with real-time Web dashboard",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,21 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{C as t,D as n,E as r,O as i,S as a,T as o,_ as s,a as c,b as l,c as u,d,f,g as p,h as m,i as h,k as g,l as _,m as v,n as y,o as b,p as x,r as ee,s as te,t as S,u as ne,v as re,w as C,x as ie,y as ae}from"./react-vendor-BnH7jZBV.js";import{_ as w,a as T,b as E,c as D,d as O,f as k,g as A,h as j,i as M,l as oe,m as N,n as P,o as F,p as I,r as L,s as se,t as ce,u as R,v as z,y as B}from"./markdown-DsSlw-Z4.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var V=e(g(),1),H=e(i(),1),U=`/api`;async function W(e,t){let n=await fetch(`${U}${e}`,t);if(!n.ok)throw Error(`API error: ${n.status}`);return n.json()}var G={getTraces:e=>{let t=new URLSearchParams;e?.model&&t.set(`model`,e.model),e?.provider&&t.set(`provider`,e.provider),e?.status&&t.set(`status`,e.status),e?.keyword&&t.set(`keyword`,e.keyword),e?.limit&&t.set(`limit`,String(e.limit)),e?.offset&&t.set(`offset`,String(e.offset));let n=t.toString();return W(`/traces${n?`?`+n:``}`)},getTrace:e=>W(`/traces/${e}`),reloadTraces:()=>W(`/traces/reload`,{method:`POST`}),getTraceFiles:()=>W(`/traces/files`),deleteTraceFile:e=>W(`/traces/file/${encodeURIComponent(e)}`,{method:`DELETE`}),deleteTraces:(e=!1)=>W(`/traces${e?`?files=true`:``}`,{method:`DELETE`}),getProviders:()=>W(`/providers`),getStats:()=>W(`/stats`),getConfig:()=>W(`/config`)};function le({url:e,onEvent:t,reconnectInterval:n=3e3}){let r=(0,V.useRef)(null),[i,a]=(0,V.useState)(!1),o=(0,V.useRef)(),s=(0,V.useRef)(t);s.current=t;let c=(0,V.useCallback)(()=>{try{let t=new WebSocket(e);t.onopen=()=>{a(!0),console.log(`[WS] Connected`)},t.onclose=()=>{a(!1),console.log(`[WS] Disconnected, reconnecting...`),o.current=setTimeout(c,n)},t.onerror=e=>{console.error(`[WS] Error:`,e),t.close()},t.onmessage=e=>{try{let t=JSON.parse(e.data);s.current?.(t)}catch{}},r.current=t}catch{o.current=setTimeout(c,n)}},[e,n]);return(0,V.useEffect)(()=>(c(),()=>{clearTimeout(o.current),r.current?.close()}),[c]),{connected:i,send:(0,V.useCallback)(e=>{r.current?.readyState===WebSocket.OPEN&&r.current.send(JSON.stringify(e))},[])}}var K=x();function q({content:e,children:t,placement:n=`top`,delay:r=300}){let[i,a]=(0,V.useState)(!1),{refs:o,floatingStyles:s,context:l}=h({open:i,onOpenChange:a,placement:n,whileElementsMounted:f,middleware:[ne(4),_({padding:8}),d({padding:8})]}),{getReferenceProps:p,getFloatingProps:m}=te([b(l,{move:!1,delay:{open:r,close:0}}),c(l),ee(l),u(l,{role:`tooltip`})]);return(0,K.jsxs)(K.Fragment,{children:[V.cloneElement(t,p({ref:o.setReference,...t.props})),i&&e!=null&&e!==``&&(0,K.jsx)(y,{children:(0,K.jsx)(`div`,{ref:o.setFloating,style:{...s,zIndex:9999,pointerEvents:`none`},...m(),children:(0,K.jsx)(`div`,{style:{background:`var(--bg-card)`,color:`var(--text-secondary)`,border:`1px solid var(--border)`,padding:`5px 9px`,borderRadius:`6px`,fontSize:`11.5px`,fontFamily:`var(--sans)`,fontWeight:400,lineHeight:1.5,letterSpacing:`0.01em`,maxWidth:`260px`,boxShadow:`var(--shadow-md)`},children:e})})})]})}function ue({traces:e,activeId:t,onSelect:n,loading:r,onDeleteFile:i}){let[s,c]=(0,V.useState)(`time`),[l,u]=(0,V.useState)(new Set);if(r)return(0,K.jsxs)(`div`,{className:`flex items-center justify-center flex-1 gap-2 text-sm`,style:{color:`var(--text-tertiary)`},children:[(0,K.jsx)(a,{size:14,className:`animate-spin`}),` 加载中…`]});if(e.length===0)return(0,K.jsx)(`div`,{className:`flex items-center justify-center flex-1 text-sm`,style:{color:`var(--text-tertiary)`},children:`暂无请求`});let d=[...e].sort((e,t)=>{if(s===`model`)return(e.model||``).localeCompare(t.model||``);if(s===`status`){let n=e=>e===`streaming`?0:e===`error`?1:e===`pending`?2:3;return n(e.status)-n(t.status)}return 0}),f=d.findIndex(e=>e.id===t),m=d.length>1&&f>=0?Math.round(f/(d.length-1)*100):0,h=[];if(s===`time`){let e=[];for(let t of d)t.sourceFile&&!e.includes(t.sourceFile)&&e.push(t.sourceFile);let t=d.map((e,t)=>({trace:e,globalIdx:t+1})).filter(e=>!e.trace.sourceFile);t.length>0&&h.push({key:`__session__`,label:`当前会话`,fileName:null,items:t});for(let t of e){let e=d.map((e,t)=>({trace:e,globalIdx:t+1})).filter(e=>e.trace.sourceFile===t);if(e.length>0){let n=t.match(/traces-(\d{4}-\d{2}-\d{2})T(\d{2}-\d{2}-\d{2})/),r=n?`${n[1]} ${n[2].replace(/-/g,`:`)}`:t.replace(`.jsonl`,``);h.push({key:t,label:r,fileName:t,items:e})}}}else h.push({key:`__all__`,label:``,fileName:null,items:d.map((e,t)=>({trace:e,globalIdx:t+1}))});let g=e=>{u(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};return(0,K.jsxs)(`div`,{className:`flex flex-col flex-1 overflow-hidden`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b flex-shrink-0`,style:{borderColor:`var(--border-light)`},children:[(0,K.jsx)(`span`,{className:`text-[10px]`,style:{color:`var(--text-tertiary)`},children:`排序`}),(0,K.jsx)(`div`,{className:`sidebar-sort-segment`,children:[`time`,`model`,`status`].map(e=>(0,K.jsx)(q,{content:e===`time`?`按请求时间(最新在前)`:e===`model`?`按模型名称字母`:`按状态(接收中→错误→完成)`,placement:`bottom`,delay:400,children:(0,K.jsx)(`button`,{className:`sidebar-sort-btn${s===e?` active`:``}`,onClick:()=>c(e),children:e===`time`?`时间`:e===`model`?`模型`:`状态`})},e))}),f>=0&&(0,K.jsxs)(`span`,{className:`ml-auto text-[10px]`,style:{color:`var(--text-tertiary)`},children:[f+1,`/`,d.length]})]}),f>=0&&(0,K.jsx)(`div`,{style:{height:`2px`,background:`var(--border)`},children:(0,K.jsx)(`div`,{style:{width:`${m}%`,height:`100%`,background:`var(--blue)`,transition:`width .2s`}})}),(0,K.jsx)(`div`,{className:`flex-1 overflow-y-auto sidebar-scroll`,children:h.map(e=>{let r=l.has(e.key),a=h.length>1,s=e.fileName!==null;return(0,K.jsxs)(V.Fragment,{children:[a&&(0,K.jsxs)(`div`,{className:`file-group-header${s?` history`:` session`}`,onClick:()=>g(e.key),children:[(0,K.jsx)(o,{size:12,className:`file-group-chevron flex-shrink-0`,style:{transform:r?`rotate(-90deg)`:`rotate(0deg)`}}),(0,K.jsx)(`span`,{className:`file-group-label`,children:e.label}),(0,K.jsx)(`span`,{className:`file-group-count`,children:e.items.length}),(()=>{let t=e.items.reduce((e,{trace:t})=>e+(t.usage?.promptTokens||0),0),n=e.items.reduce((e,{trace:t})=>e+(t.usage?.completionTokens||0),0),r=e.items.reduce((e,{trace:t})=>e+(t.usage?.reasoningTokens||0),0),i=e.items.reduce((e,{trace:t})=>e+(t.usage?.cacheReadTokens||0),0),a=e.items.reduce((e,{trace:t})=>e+(t.usage?.cacheWriteTokens||0),0),o=e.items.reduce((e,{trace:t})=>e+(t.usage?.cachedTokens||0),0),s=t+n;if(s===0)return null;let c=e=>e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e),l=e=>e.toLocaleString();return(0,K.jsx)(q,{content:(0,K.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`auto auto`,gap:`1px 10px`,fontSize:`11px`},children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`输入`}),(0,K.jsx)(`span`,{style:{color:`var(--blue)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(t)}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`输出`}),(0,K.jsx)(`span`,{style:{color:`var(--green)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(n)}),r>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`推理`}),(0,K.jsx)(`span`,{style:{color:`var(--indigo)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(r)})]}),i+o>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`缓存命中`}),(0,K.jsx)(`span`,{style:{color:`var(--cyan)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(i+o)})]}),a>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`缓存写入`}),(0,K.jsx)(`span`,{style:{color:`var(--cyan)`,fontWeight:600,textAlign:`right`,fontFamily:`var(--mono)`},children:l(a)})]}),(0,K.jsx)(`span`,{style:{color:`var(--text-secondary)`,fontWeight:600,borderTop:`1px solid var(--border-light)`,paddingTop:`2px`,marginTop:`1px`},children:`合计`}),(0,K.jsx)(`span`,{style:{color:`var(--text)`,fontWeight:700,textAlign:`right`,fontFamily:`var(--mono)`,borderTop:`1px solid var(--border-light)`,paddingTop:`2px`,marginTop:`1px`},children:l(s)})]}),placement:`bottom`,delay:200,children:(0,K.jsx)(`span`,{className:`file-group-tokens`,onClick:e=>e.stopPropagation(),children:c(s)})})})(),e.fileName&&i&&(0,K.jsx)(q,{content:`删除:${e.fileName}`,placement:`bottom`,children:(0,K.jsx)(`button`,{className:`file-group-delete`,onClick:t=>{t.stopPropagation(),i(e.fileName)},children:(0,K.jsx)(p,{size:11})})})]}),!r&&e.items.map(({trace:e,globalIdx:r})=>(0,K.jsx)(de,{trace:e,isActive:e.id===t,onClick:()=>n(e.id),turnNumber:r},e.id))]},e.key)})})]})}function J(e){let t=(e||``).toLowerCase();return t.includes(`opus`)?{bg:`var(--purple-bg)`,fg:`var(--purple)`}:t.includes(`sonnet`)?{bg:`var(--blue-bg)`,fg:`var(--blue)`}:t.includes(`haiku`)||t.includes(`gpt-4`)?{bg:`var(--green-bg)`,fg:`var(--green)`}:t.includes(`gpt-3`)?{bg:`var(--amber-bg)`,fg:`var(--amber)`}:t.includes(`glm`)||t.includes(`zhipu`)||t.includes(`deepseek`)?{bg:`var(--blue-bg)`,fg:`var(--blue)`}:t.includes(`qwen`)?{bg:`var(--purple-bg)`,fg:`var(--purple)`}:t.includes(`llama`)?{bg:`var(--orange-bg)`,fg:`var(--orange)`}:t.includes(`mistral`)?{bg:`var(--amber-bg)`,fg:`var(--amber)`}:{bg:`var(--bg-code)`,fg:`var(--text-tertiary)`}}function de({trace:e,isActive:t,onClick:n,turnNumber:r}){let i=new Date(e.timestamp).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`,second:`2-digit`}),o=e.duration>0?e.duration>=1e3?`${(e.duration/1e3).toFixed(1)}s`:`${e.duration}ms`:e.status===`streaming`?`...`:`-`,s=e.usage?.promptTokens||0,c=e.usage?.completionTokens||0,l=e.usage?.totalTokens||0,u=fe(e),d=J(e.model),f=(e.model||`unknown`).split(`/`).pop()||`unknown`,p=e.status===`streaming`,m=e.status===`error`,h=e.status===`pending`,g=m?`var(--red)`:p?`var(--blue)`:e.status===`completed`?`var(--green)`:`var(--amber)`;return(0,K.jsxs)(`div`,{onClick:n,className:`sidebar-item px-3 py-2 cursor-pointer border-b transition-colors`,style:{background:t?`var(--bg-active)`:`transparent`,borderColor:`var(--border-light)`},children:[(0,K.jsxs)(`div`,{className:`flex items-baseline gap-1.5`,children:[(0,K.jsxs)(`span`,{className:`font-mono flex-shrink-0 text-center`,style:{color:`var(--text-tertiary)`,fontSize:`11px`,fontWeight:700,minWidth:`20px`},children:[`#`,r]}),u?(0,K.jsx)(`span`,{className:`text-xs truncate flex-1`,style:{color:`var(--text)`},children:u}):(0,K.jsx)(`span`,{className:`text-xs truncate flex-1`,style:{color:`var(--text-tertiary)`,fontStyle:`italic`},children:`No content`}),(0,K.jsx)(`span`,{className:`text-[10px] flex-shrink-0 font-mono`,style:{color:`var(--text-tertiary)`},children:i})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5 mt-0.5`,children:[(0,K.jsx)(`div`,{className:`flex items-center justify-center flex-shrink-0`,style:{minWidth:`20px`},children:p?(0,K.jsx)(a,{size:12,className:`animate-spin`,style:{color:`var(--blue)`}}):m?(0,K.jsx)(v,{size:14,strokeWidth:2.8,style:{color:`var(--red)`}}):h?(0,K.jsx)(`span`,{className:`rounded-full`,style:{width:`9px`,height:`9px`,background:`var(--amber)`,display:`inline-block`}}):(0,K.jsx)(`span`,{className:`rounded-full`,style:{width:`9px`,height:`9px`,background:g,display:`inline-block`}})}),(0,K.jsx)(q,{content:e.model,placement:`right`,delay:500,children:(0,K.jsx)(`span`,{className:`text-[10px] font-mono px-1.5 py-0.5 rounded-full truncate max-w-[90px]`,style:{background:d.bg,color:d.fg,lineHeight:`1.3`},children:f})}),(0,K.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5 flex-shrink-0 font-mono`,style:{color:`var(--text-tertiary)`,fontSize:`10px`},children:[l>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{style:{color:`var(--blue)`,fontWeight:600},children:[`↑`,s]}),(0,K.jsxs)(`span`,{style:{color:`var(--green)`,fontWeight:600},children:[`↓`,c]})]}),(0,K.jsxs)(`span`,{className:`flex items-center gap-0.5`,children:[(0,K.jsx)(C,{size:9}),o]})]})]})]})}function fe(e){let t=e.request.body.messages;if(t){let e=[...t].reverse().find(e=>e.role===`user`);if(e)return(typeof e.content==`string`?e.content:Array.isArray(e.content)?e.content.filter(e=>typeof e==`object`&&e.type===`text`).map(e=>e.text||``).join(` `):``).replace(/\s+/g,` `).trim().slice(0,100)}return e.request.body.prompt?String(e.request.body.prompt).replace(/\s+/g,` `).trim().slice(0,100):``}z.registerLanguage(`javascript`,w),z.registerLanguage(`js`,w),z.registerLanguage(`jsx`,w),z.registerLanguage(`typescript`,A),z.registerLanguage(`ts`,A),z.registerLanguage(`tsx`,A),z.registerLanguage(`python`,j),z.registerLanguage(`py`,j),z.registerLanguage(`bash`,N),z.registerLanguage(`sh`,N),z.registerLanguage(`shell`,N),z.registerLanguage(`json`,I),z.registerLanguage(`css`,k),z.registerLanguage(`xml`,O),z.registerLanguage(`html`,O),z.registerLanguage(`markdown`,R),z.registerLanguage(`md`,R),z.registerLanguage(`sql`,oe),z.registerLanguage(`go`,D),z.registerLanguage(`rust`,se),z.registerLanguage(`java`,F),z.registerLanguage(`cpp`,T),z.registerLanguage(`c`,T),z.registerLanguage(`csharp`,M),z.registerLanguage(`yaml`,L),z.registerLanguage(`yml`,L),z.registerLanguage(`diff`,P),z.registerLanguage(`plaintext`,ce);function pe({inline:e,className:n,children:i,node:a,...o}){let[s,c]=(0,V.useState)(!1),l=String(i??``).replace(/\n$/,``),u=/language-(\w+)/.exec(n??``)?.[1]??``,d=e??(!n?.startsWith(`language-`)&&!l.includes(`
2
- `)),f=(0,V.useCallback)(async()=>{try{await navigator.clipboard.writeText(l),c(!0),setTimeout(()=>c(!1),1500)}catch{}},[l]);if(d)return(0,K.jsx)(`code`,{className:n,...o,children:i});let p=``;try{p=u&&z.getLanguage(u)?z.highlight(l,{language:u,ignoreIllegals:!0}).value:z.highlightAuto(l).value}catch{p=l.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`)}return(0,K.jsxs)(`div`,{className:`md-code-wrapper`,children:[(0,K.jsxs)(`div`,{className:`md-code-header`,children:[u&&(0,K.jsx)(`span`,{className:`md-code-lang`,children:u}),(0,K.jsxs)(`button`,{className:`md-code-copy${s?` copied`:``}`,onClick:f,title:`复制代码`,children:[s?(0,K.jsx)(r,{size:11}):(0,K.jsx)(t,{size:11}),(0,K.jsx)(`span`,{children:s?`已复制`:`复制`})]})]}),(0,K.jsx)(`pre`,{className:`hljs md-code-pre`,children:(0,K.jsx)(`code`,{className:`hljs${u?` language-${u}`:``}`,dangerouslySetInnerHTML:{__html:B.sanitize(p)}})})]})}function me({text:e,isStreaming:t,className:n}){return e?(0,K.jsx)(`div`,{className:[`md-prose`,t?`streaming-cursor`:``,n??``].filter(Boolean).join(` `),children:(0,K.jsx)(S,{remarkPlugins:[E],components:{code:pe,a:({href:e,children:t,...n})=>(0,K.jsx)(`a`,{href:e,target:`_blank`,rel:`noopener noreferrer`,...n,children:t})},children:e})}):null}var he={};function ge({trace:e}){let t=e.response.status||0,n=t>=400||e.status===`error`,r=e.status===`streaming`,i=(0,V.useRef)(null);(0,V.useEffect)(()=>{r&&i.current&&(i.current.scrollTop=i.current.scrollHeight)},[e.response,r]);let a={request:e.request,response:e.response},o=e.request.body.messages||[],s=Me(e),c=o.filter(e=>e.role!==`system`&&e.role!==`developer`),l=Ne(e),u=Array.isArray(l)?l.filter(e=>e.type===`thinking`).map(e=>e.thinking||``).join(`
3
-
4
- `):``,d=Array.isArray(l)?(()=>{let e=l.filter(e=>e.type!==`thinking`);return e.length===0?null:e.length===1&&e[0].type===`text`?e[0].text||null:e})():l,f=e.request.body.tools||[],p=e.toolCalls||[],m=e.usage;return(0,K.jsxs)(`div`,{ref:i,className:`detail-content`,children:[n&&(0,K.jsxs)(`div`,{className:`error-banner`,children:[(0,K.jsx)(`span`,{className:`eb-icon`,children:`⚠`}),(0,K.jsx)(`span`,{className:`eb-code`,children:t>=400?`HTTP ${t}`:e.error?.code||`Error`}),(0,K.jsx)(`span`,{className:`eb-sep`,children:`·`}),(0,K.jsx)(`span`,{className:`eb-message`,children:e.error?.message||`Unknown error`})]}),(0,K.jsx)(ve,{usage:m,duration:e.duration,ttfb:e.ttfb,isStreaming:r}),s&&(0,K.jsx)(Y,{title:`System Prompt`,defaultOpen:!1,copyText:s,badge:`system`,children:(0,K.jsx)(Ce,{text:s})}),c.length>0&&(0,K.jsx)(Y,{title:`Messages`,defaultOpen:!0,badge:`${c.length}`,copyText:c.map(e=>{let t=typeof e.content==`string`?e.content:Array.isArray(e.content)?e.content.map(e=>e.text||e.thinking||``).join(`
5
- `):``;return`[${e.role.toUpperCase()}]\n${t}`}).join(`
6
-
7
- ---
8
-
9
- `),children:(0,K.jsx)(`div`,{className:`messages-list`,children:c.map((e,t)=>(0,K.jsx)(be,{message:e},t))})}),(0,K.jsxs)(Y,{title:`Response`,defaultOpen:!0,badge:t?`${t}`:r?`live`:void 0,copyText:(d?typeof d==`string`?d:d.map(e=>e.text||``).join(`
10
-
11
- `):``)||void 0,children:[u&&(0,K.jsx)(Te,{content:u}),d?(0,K.jsx)(be,{message:{role:`assistant`,content:d},isStreaming:r}):e.error?(0,K.jsxs)(`div`,{className:`msg system`,style:{marginBottom:0},children:[(0,K.jsx)(`span`,{className:`msg-role`,style:{background:`var(--red)`,color:`#fff`},children:`ERROR`}),(0,K.jsxs)(`div`,{className:`content-block`,children:[`[`,e.error.code,`] `,e.error.message]})]}):(0,K.jsx)(`div`,{style:{color:`var(--text-tertiary)`,fontSize:`13px`,padding:`4px 0`},children:r?(0,K.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`8px`,color:`var(--text-tertiary)`,fontSize:`12px`},children:[`接收中 `,(0,K.jsxs)(`span`,{className:`streaming-dots`,children:[(0,K.jsx)(`span`,{}),(0,K.jsx)(`span`,{}),(0,K.jsx)(`span`,{})]})]}):`No response content`})]}),p.length>0&&(0,K.jsx)(Y,{title:`Tool Calls`,defaultOpen:!0,badge:`${p.length}`,copyText:p.map(e=>`${e.name}(${JSON.stringify(e.arguments,null,2)})`).join(`
12
-
13
- `),children:(0,K.jsx)(`div`,{style:{display:`grid`,gap:`4px`},children:p.map((e,t)=>(0,K.jsx)(Ee,{toolCall:e},t))})}),f.length>0&&(0,K.jsx)(Y,{title:`Tools Definition`,defaultOpen:!1,badge:`${f.length}`,copyText:JSON.stringify(f,null,2),children:(0,K.jsx)(De,{tools:f})}),(0,K.jsx)(Y,{title:`Raw JSON`,defaultOpen:!1,copyText:JSON.stringify(a,null,2),children:(0,K.jsx)(Q,{data:a})})]})}function _e(e){return e>=1e3?`${(e/1e3).toFixed(2)}s`:`${e}ms`}function ve({usage:e,duration:t,ttfb:n,isStreaming:r}){let i=(e?.cachedTokens||0)+(e?.cacheReadTokens||0)+(e?.cacheWriteTokens||0)>0;return(0,K.jsx)(`div`,{className:`token-usage-bar`,children:(0,K.jsx)(`div`,{className:`token-bar`,children:r?(0,K.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`6px`,fontSize:`11px`,color:`var(--text-tertiary)`},children:[`接收中 `,(0,K.jsxs)(`span`,{className:`streaming-dots`,children:[(0,K.jsx)(`span`,{}),(0,K.jsx)(`span`,{}),(0,K.jsx)(`span`,{})]})]}):e?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`tok-group`,children:(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-label`,children:`合计`}),(0,K.jsx)(`span`,{className:`tok-val`,style:{color:`var(--text)`,fontSize:`12px`},children:e.totalTokens.toLocaleString()})]})}),(0,K.jsxs)(`span`,{className:`tok-group`,children:[(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-arrow`,style:{color:`var(--blue)`},children:`↑`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.promptTokens.toLocaleString()})]}),(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-arrow`,style:{color:`var(--green)`},children:`↓`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.completionTokens.toLocaleString()})]}),(e.reasoningTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-dot`,style:{background:`var(--indigo)`}}),(0,K.jsx)(`span`,{className:`tok-label`,children:`推理`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.reasoningTokens.toLocaleString()})]})]}),i&&(0,K.jsxs)(`span`,{className:`tok-group`,children:[(e.cachedTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-dot`,style:{background:`var(--cyan)`}}),(0,K.jsx)(`span`,{className:`tok-label`,children:`缓存命中`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.cachedTokens.toLocaleString()})]}),(e.cacheReadTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-dot`,style:{background:`var(--cyan)`}}),(0,K.jsx)(`span`,{className:`tok-label`,children:`缓存读`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.cacheReadTokens.toLocaleString()})]}),(e.cacheWriteTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-dot`,style:{background:`var(--amber)`}}),(0,K.jsx)(`span`,{className:`tok-label`,children:`缓存写`}),(0,K.jsx)(`span`,{className:`tok-val`,children:e.cacheWriteTokens.toLocaleString()})]})]}),(0,K.jsxs)(`span`,{className:`tok-group`,children:[n>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-label`,children:`首字`}),(0,K.jsx)(`span`,{className:`tok-val`,children:_e(n)})]}),t>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-label`,children:`耗时`}),(0,K.jsx)(`span`,{className:`tok-val`,children:_e(t)})]}),t>0&&(e.completionTokens||0)>0&&(0,K.jsxs)(`span`,{className:`tok-item`,children:[(0,K.jsx)(`span`,{className:`tok-label`,children:`速度`}),(0,K.jsxs)(`span`,{className:`tok-val`,children:[Math.round(e.completionTokens/(t/1e3)),` tok/s`]})]})]})]}):(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`,fontSize:`11px`},children:`无 token 数据`})})})}function Y({title:e,defaultOpen:t,badge:n,copyText:r,children:i}){let[a,o]=(0,V.useState)(he[e]??t);return(0,K.jsxs)(`div`,{className:`section`,children:[(0,K.jsxs)(`div`,{className:`section-header`,onClick:()=>{let t=!a;o(t),he[e]=t},children:[(0,K.jsx)(`span`,{className:`chevron${a?` open`:``}`,children:`▶`}),(0,K.jsx)(`span`,{className:`title`,children:e}),n&&(0,K.jsx)(`span`,{className:`badge`,children:n}),r!==void 0&&r!==``&&(0,K.jsx)(Z,{getText:()=>r,className:`copy-btn`,stopPropagation:!0})]}),a&&(0,K.jsx)(`div`,{className:`section-body open`,children:i})]})}function ye(e){let t=e.role,n=e.content;if(t===`user`&&Array.isArray(n)&&n.length>0&&n.every(e=>e.type===`tool_result`)){let e=n[0],t=e.content??e.text;return{role:`tool`,content:typeof t==`string`?t:JSON.stringify(t??``),tool_call_id:e.tool_use_id}}return{role:t,content:n,tool_call_id:e.tool_call_id,tool_calls:e.tool_calls}}function be({message:e,isStreaming:t}){let{role:n,content:r,tool_calls:i}=ye(e),a=typeof r==`string`,o=!a&&Array.isArray(r)&&r.some(e=>e.type===`text`||e.type===`input_text`||e.type===`output_text`),s=a&&r.trim().length>0||o,[c,l]=(0,V.useState)(`markdown`),u=()=>typeof r==`string`?r:Array.isArray(r)?r.map(e=>e.text||e.thinking||``).filter(Boolean).join(`
14
-
15
- `):``,d=n===`user`?`user`:n===`assistant`?`assistant`:n===`system`||n===`developer`?`system`:n===`tool`?`tool_result`:``,f=a?r.trim().length>0:Array.isArray(r)&&r.length>0,[p,m]=(0,V.useState)(n===`tool`);return(0,K.jsxs)(`div`,{className:`msg ${d}`,children:[(0,K.jsxs)(`div`,{className:`msg-header-row`,children:[(0,K.jsxs)(`span`,{className:`msg-role msg-role-toggle`,onClick:()=>m(e=>!e),title:p?`展开`:`收起`,children:[(0,K.jsx)(`span`,{className:`msg-collapse-arrow${p?``:` open`}`,children:`▶`}),n.toUpperCase()]}),s&&!p&&(0,K.jsxs)(`div`,{className:`text-toggle-bar`,style:{marginLeft:`8px`,marginTop:0},children:[(0,K.jsx)(`button`,{className:`text-toggle-btn${c===`raw`?` active`:``}`,onClick:()=>l(`raw`),children:`原文`}),(0,K.jsx)(`button`,{className:`text-toggle-btn${c===`markdown`?` active`:``}`,onClick:()=>l(`markdown`),children:`渲染`})]}),(0,K.jsx)(`span`,{style:{marginLeft:`auto`},children:(0,K.jsx)(Z,{getText:u})})]}),!p&&(0,K.jsxs)(K.Fragment,{children:[a?(0,K.jsx)(X,{text:r,mode:c}):Array.isArray(r)?(0,K.jsx)(`div`,{children:r.map((e,n)=>(0,K.jsx)(Se,{block:e,textMode:o?c:`markdown`,isStreaming:t&&n===r.length-1},n))}):r?(0,K.jsx)(Q,{data:r}):null,i&&i.length>0&&(0,K.jsx)(`div`,{className:`msg-tool-calls`,children:i.map(e=>(0,K.jsx)(xe,{name:e.function.name,callId:e.id,rawArgs:e.function.arguments},e.id))})]}),p&&(f||i&&i.length>0)&&(0,K.jsx)(`div`,{className:`msg-collapsed-hint`,children:[f?a?`${r.slice(0,60).replace(/\n/g,` `)}…`:`${r.length} 块`:``,i?.length?`${i.length} tool_call`:``].filter(Boolean).join(` · `)})]})}function xe({name:e,callId:t,rawArgs:n,block:r}){let[i,a]=(0,V.useState)(!1),o=e??r?.name??`tool_use`,s=t??r?.id??``,c=r?.input??n;if(typeof c==`string`)try{c=JSON.parse(c)}catch{}let l=c&&typeof c==`object`?Object.keys(c).length:0;return(0,K.jsxs)(`div`,{className:`tool-block`,children:[(0,K.jsxs)(`div`,{className:`tool-block-header`,onClick:()=>a(e=>!e),children:[(0,K.jsx)(`span`,{className:`tb-arrow${i?` open`:``}`,children:`▶`}),(0,K.jsx)(`span`,{className:`tb-name`,children:o}),!i&&l>0&&(0,K.jsxs)(`span`,{className:`tb-desc`,children:[`(`,l,` args)`]}),s&&(0,K.jsx)(`span`,{style:{marginLeft:`auto`,opacity:.45,fontSize:`11px`,fontFamily:`var(--mono)`},children:s})]}),i&&(0,K.jsx)(`div`,{className:`tool-block-body open`,children:typeof c==`object`?(0,K.jsx)(Q,{data:c}):(0,K.jsx)(`pre`,{className:`text-raw`,children:String(c)})})]})}function Se({block:e,textMode:t,isStreaming:n}){let r=t??`markdown`;if(e.type===`text`||e.type===`input_text`||e.type===`output_text`)return(0,K.jsx)(`div`,{className:`content-block`,children:(0,K.jsx)(X,{text:e.text||``,mode:r,isStreaming:n})});if(e.type===`thinking`)return(0,K.jsx)(we,{content:e.thinking||``});if(e.type===`tool_use`)return(0,K.jsx)(xe,{block:e});if(e.type===`tool_result`){let t=e.content??e.text;return(0,K.jsxs)(`div`,{className:`content-block block-framed`,style:{borderColor:`var(--purple)`,background:`var(--purple-bg)`},children:[(0,K.jsxs)(`span`,{className:`tool-use-label`,style:{color:`var(--purple)`,background:`color-mix(in srgb, var(--purple) 15%, transparent)`},children:[`↩ tool_result: `,e.tool_use_id||``]}),(0,K.jsx)(`div`,{className:`content-block-text`,children:typeof t==`string`?t:(0,K.jsx)(Q,{data:t})})]})}return(0,K.jsx)(Q,{data:e})}function X({text:e,mode:t,isStreaming:n,sans:r,compact:i,className:a}){return e?(0,K.jsxs)(`div`,{className:`text-pane${a?` `+a:``}`,children:[(0,K.jsx)(`pre`,{className:`text-raw${r?` sans`:``}`,style:{display:t===`raw`?void 0:`none`},children:e}),(0,K.jsx)(`div`,{style:{display:t===`markdown`?void 0:`none`},children:i?(0,K.jsx)(`div`,{className:`text-raw sans`,style:{whiteSpace:`pre-wrap`},children:e}):(0,K.jsx)(me,{text:e,isStreaming:n})})]}):null}function Ce({text:e}){let[t,n]=(0,V.useState)(`markdown`);return(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`div`,{className:`text-toggle-bar`,style:{marginBottom:`6px`},children:[(0,K.jsx)(`button`,{className:`text-toggle-btn${t===`raw`?` active`:``}`,onClick:()=>n(`raw`),children:`原文`}),(0,K.jsx)(`button`,{className:`text-toggle-btn${t===`markdown`?` active`:``}`,onClick:()=>n(`markdown`),children:`渲染`})]}),(0,K.jsx)(X,{text:e,mode:t,sans:!0})]})}function we({content:e,marginBottom:t}){let[n,r]=(0,V.useState)(!1),[i,a]=(0,V.useState)(`markdown`),o=e.slice(0,80).replace(/\n/g,` `);return(0,K.jsxs)(`div`,{className:`thinking-block content-block`,style:t?{marginBottom:t}:void 0,children:[(0,K.jsxs)(`div`,{className:`thinking-block-header`,onClick:()=>r(e=>!e),children:[(0,K.jsxs)(`span`,{className:`thinking-label`,children:[(0,K.jsx)(`span`,{className:`thinking-arrow`,children:n?`▼`:`▶`}),(0,K.jsx)(`span`,{children:`Thinking`})]}),n?(0,K.jsxs)(`div`,{className:`text-toggle-bar`,style:{marginTop:0,marginLeft:`4px`},onClick:e=>e.stopPropagation(),children:[(0,K.jsx)(`button`,{className:`text-toggle-btn${i===`raw`?` active`:``}`,onClick:()=>a(`raw`),children:`原文`}),(0,K.jsx)(`button`,{className:`text-toggle-btn${i===`markdown`?` active`:``}`,onClick:()=>a(`markdown`),children:`渲染`})]}):(0,K.jsxs)(`span`,{className:`thinking-preview`,children:[o,`…`]}),(0,K.jsx)(Z,{getText:()=>e,stopPropagation:!0,className:`copy-btn`})]}),n&&(0,K.jsx)(X,{text:e,mode:i,sans:!0})]})}function Te({content:e}){return(0,K.jsx)(we,{content:e,marginBottom:8})}function Ee({toolCall:e}){let[t,n]=(0,V.useState)(!1),r=typeof e.arguments==`object`?Object.keys(e.arguments||{}).length:0;return(0,K.jsxs)(`div`,{className:`tool-block`,children:[(0,K.jsxs)(`div`,{className:`tool-block-header`,onClick:()=>n(e=>!e),children:[(0,K.jsx)(`span`,{className:`tb-arrow${t?` open`:``}`,children:`▶`}),(0,K.jsx)(`span`,{className:`tb-name`,children:e.name}),!t&&r>0&&(0,K.jsxs)(`span`,{className:`tb-desc`,children:[`(`,r,` args)`]})]}),t&&(0,K.jsxs)(`div`,{className:`tool-block-body open`,children:[(0,K.jsx)(Q,{data:e.arguments}),e.result!==void 0&&(0,K.jsxs)(`div`,{style:{marginTop:`10px`,paddingTop:`10px`,borderTop:`1px solid var(--border-light)`},children:[(0,K.jsx)(`div`,{style:{fontSize:`11px`,fontWeight:600,color:`var(--orange)`,marginBottom:`6px`,textTransform:`uppercase`},children:`Result`}),(0,K.jsx)(Q,{data:e.result})]})]})]})}function De({tools:e}){return(0,K.jsx)(`div`,{style:{display:`grid`,gap:`4px`},children:e.map((e,t)=>(0,K.jsx)(Oe,{tool:e},t))})}function Oe({tool:e}){let[t,n]=(0,V.useState)(!1),r=e.function||e,i=r.name||e.name||`unknown`,a=r.description||e.description||``,o=r.parameters||e.input_schema||e.parameters,s=o?.required||[],c=o?.properties||{};return(0,K.jsxs)(`div`,{className:`tool-block`,children:[(0,K.jsxs)(`div`,{className:`tool-block-header`,onClick:()=>n(e=>!e),children:[(0,K.jsx)(`span`,{className:`tb-arrow${t?` open`:``}`,children:`▶`}),(0,K.jsx)(`span`,{className:`tb-name`,children:i}),(0,K.jsx)(`span`,{className:`tb-desc`,children:a})]}),t&&(0,K.jsxs)(`div`,{className:`tool-block-body open`,children:[a&&(0,K.jsx)(`div`,{className:`tb-full-desc`,children:a}),Object.keys(c).length>0?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`div`,{className:`tb-params-title`,children:`Parameters`}),Object.entries(c).map(([e,t])=>(0,K.jsxs)(`div`,{className:`tb-param`,children:[(0,K.jsxs)(`div`,{className:`tb-param-row1`,children:[(0,K.jsx)(`span`,{className:`tb-pname`,children:e}),t.type&&(0,K.jsx)(`span`,{className:`tb-ptype`,children:t.type}),s.includes(e)&&(0,K.jsx)(`span`,{className:`tb-prequired`,children:`required`})]}),t.description&&(0,K.jsx)(`div`,{className:`tb-pdesc`,children:t.description})]},e))]}):o?(0,K.jsx)(Q,{data:o}):null]})]})}function Z({getText:e,className:n=`copy-btn`,stopPropagation:i=!1}){let[a,o]=(0,V.useState)(!1);return(0,K.jsx)(`button`,{className:`${n}${a?` copied`:``}`,onClick:async t=>{i&&t.stopPropagation();try{await navigator.clipboard.writeText(e()),o(!0),setTimeout(()=>o(!1),1500)}catch{}},"data-tip":`复制`,children:a?(0,K.jsx)(r,{size:10}):(0,K.jsx)(t,{size:10})})}var ke=0;function Q({data:e}){return ke=0,(0,K.jsx)(`div`,{className:`json-view`,children:$(e,0)})}var Ae=new Set([`chunks`,`headers`,`tools`]);function $(e,t,n){if(t>50)return(0,K.jsx)(`span`,{className:`json-punct`,children:`…`});if(e===null)return(0,K.jsx)(`span`,{className:`jnull`,children:`null`});if(e===void 0)return(0,K.jsx)(`span`,{className:`jnull`,children:`undefined`});if(typeof e==`boolean`)return(0,K.jsx)(`span`,{className:`jb`,children:String(e)});if(typeof e==`number`)return(0,K.jsx)(`span`,{className:`jn`,children:e});if(typeof e==`string`)return(0,K.jsxs)(`span`,{className:`js`,children:[`"`,e.length>300?e.slice(0,300)+`…`:e,`"`]});if(typeof e!=`object`)return(0,K.jsx)(`span`,{children:String(e)});let r=Array.isArray(e),i=r?e.map((e,t)=>[t,e]):Object.entries(e),a=i.length;if(a===0)return(0,K.jsx)(`span`,{className:`json-punct`,children:r?`[]`:`{}`});if(a<=3&&t<2&&i.every(([,e])=>typeof e!=`object`||!e)){let e=i.map(([e,n],i)=>(0,K.jsxs)(`span`,{children:[!r&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{className:`jk`,children:[`"`,String(e),`"`]}),(0,K.jsx)(`span`,{className:`json-punct`,children:`: `})]}),$(n,t+1),i<a-1&&(0,K.jsx)(`span`,{className:`json-punct`,children:`, `})]},String(e)));return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`json-punct`,children:r?`[`:`{`}),e,(0,K.jsx)(`span`,{className:`json-punct`,children:r?`]`:`}`})]})}let o=`jt`+ ke++,s=`${a} ${r?`item`:`key`}${a===1?``:`s`}`,c=n!==void 0&&Ae.has(n),l=i.map(([e,n])=>(0,K.jsxs)(`div`,{className:`jt-line`,children:[!r&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{className:`jk`,children:[`"`,String(e),`"`]}),(0,K.jsx)(`span`,{className:`json-punct`,children:`: `})]}),$(n,t+1,String(e))]},String(e)));return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`span`,{className:`jt-toggle${c?``:` jt-open`}`,onClick:e=>je(e,o),style:{cursor:`pointer`},children:c?`▶`:`▼`}),(0,K.jsx)(`span`,{className:`json-punct`,children:r?`[`:`{`}),(0,K.jsxs)(`span`,{className:`jt-summary${c?` jt-show`:``}`,id:`${o}s`,children:[`… `,s]}),(0,K.jsx)(`div`,{className:`jt-children${c?``:` jt-open`}`,id:o,children:l}),(0,K.jsx)(`div`,{className:`jt-close${c?` jt-hidden`:``}`,id:`${o}c`,children:(0,K.jsx)(`span`,{className:`json-punct`,children:r?`]`:`}`})})]})}function je(e,t){e.stopPropagation();let n=document.getElementById(t),r=document.getElementById(t+`s`),i=document.getElementById(t+`c`),a=e.currentTarget;n&&(n.classList.contains(`jt-open`)?(n.classList.remove(`jt-open`),a.classList.remove(`jt-open`),a.textContent=`▶`,r?.classList.add(`jt-show`),i?.classList.add(`jt-hidden`)):(n.classList.add(`jt-open`),a.classList.add(`jt-open`),a.textContent=`▼`,r?.classList.remove(`jt-show`),i?.classList.remove(`jt-hidden`)))}function Me(e){let t=e.request.body,n=[];if(typeof t.system==`string`&&t.system.trim())n.push(t.system);else if(Array.isArray(t.system)){let e=t.system.map(e=>typeof e==`string`?e:e?.type===`text`&&e.text||``).filter(Boolean).join(`
16
-
17
- `);e.trim()&&n.push(e)}let r=e.request.body.messages||[];for(let e of r)if(e.role===`system`||e.role===`developer`){let t=typeof e.content==`string`?e.content:Array.isArray(e.content)?e.content.map(e=>e.text||``).filter(Boolean).join(`
18
-
19
- `):``;t.trim()&&n.push(t)}return n.length?n.join(`
20
-
21
- `):null}function Ne(e){let t=e.response.body;if(!t)return null;if(t.choices&&Array.isArray(t.choices)&&t.choices.length>0){let e=t.choices[0].message;if(e){let t=e.content,n=e.reasoning_content,r=[];if(n&&r.push({type:`thinking`,thinking:n}),typeof t==`string`&&t.trim()?r.push({type:`text`,text:t}):Array.isArray(t)?r.push(...t):t!=null&&r.push({type:`text`,text:JSON.stringify(t)}),r.length===1&&r[0].type===`text`)return r[0].text||null;if(r.length>0)return r}return null}if(t.content&&Array.isArray(t.content)){let e=t.content;return e.length===1&&e[0].type===`text`?e[0].text||null:e}return typeof t.text==`string`?t.text:null}function Pe({onClose:e}){let[t,n]=(0,V.useState)([]),[r,i]=(0,V.useState)(!0),[a,o]=(0,V.useState)(null);(0,V.useEffect)(()=>{Promise.all([G.getProviders().then(n).catch(()=>{}),G.getConfig().then(e=>o(e.proxy?.port??null)).catch(()=>{})]).finally(()=>i(!1))},[]);let s=a??(window.location.port?Number(window.location.port):void 0);return(0,K.jsxs)(`div`,{className:`p-5 space-y-5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,K.jsx)(`h2`,{className:`text-base font-semibold`,children:`设置`}),(0,K.jsx)(`button`,{onClick:e,style:{color:`var(--text-tertiary)`},children:(0,K.jsx)(v,{size:16})})]}),(0,K.jsxs)(`div`,{className:`rounded-lg p-3`,style:{background:`var(--bg)`,border:`1px solid var(--border)`},children:[(0,K.jsx)(`h3`,{className:`text-sm font-medium mb-2`,children:`代理服务器`}),(0,K.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-1.5 text-xs`,children:[(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`监听端口`}),(0,K.jsx)(`span`,{className:`font-mono`,style:{color:`var(--blue)`},children:s}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`OpenAI Base URL`}),(0,K.jsxs)(`span`,{className:`font-mono`,style:{color:`var(--blue)`},children:[`http://localhost:`,s,`/v1`]}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`Anthropic Base URL`}),(0,K.jsxs)(`span`,{className:`font-mono`,style:{color:`var(--blue)`},children:[`http://localhost:`,s]})]})]}),(0,K.jsxs)(`div`,{className:`rounded-lg p-3`,style:{background:`var(--bg)`,border:`1px solid var(--border)`},children:[(0,K.jsx)(`h3`,{className:`text-sm font-medium mb-1`,children:`上游服务商`}),(0,K.jsxs)(`p`,{className:`text-[11px] mb-3`,style:{color:`var(--text-tertiary)`},children:[`修改请编辑项目根目录的 `,(0,K.jsx)(`code`,{className:`font-mono px-1 py-0.5 rounded`,style:{background:`var(--bg-code)`},children:`.env`}),` 文件后重启服务`]}),r?(0,K.jsx)(`div`,{className:`text-sm`,style:{color:`var(--text-tertiary)`},children:`加载中…`}):t.length===0?(0,K.jsxs)(`div`,{className:`text-sm italic`,style:{color:`var(--text-tertiary)`},children:[`未检测到已配置的 Provider。请在 `,(0,K.jsx)(`code`,{className:`font-mono`,children:`.env`}),` 中设置 `,(0,K.jsx)(`code`,{className:`font-mono`,children:`OPENAI_API_KEY`}),` 等变量。`]}):(0,K.jsx)(`div`,{className:`space-y-1.5`,children:t.map(e=>(0,K.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-2 rounded`,style:{border:`1px solid var(--border)`},children:[(0,K.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full flex-shrink-0`,style:{background:`var(--green)`}}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsx)(`div`,{className:`text-sm font-medium capitalize`,children:e.type}),(0,K.jsx)(`div`,{className:`text-[11px] font-mono truncate`,style:{color:`var(--text-tertiary)`},children:e.baseUrl})]}),e.apiKey&&(0,K.jsx)(`span`,{className:`text-[11px] font-mono flex-shrink-0`,style:{color:`var(--text-tertiary)`},children:e.apiKey})]},e.type))})]}),(0,K.jsxs)(`div`,{className:`flex items-center justify-end gap-3 pt-1`,style:{color:`var(--text-tertiary)`,fontSize:`11px`},children:[(0,K.jsxs)(`span`,{children:[`LPT v`,`1.3.14`]}),(0,K.jsx)(`span`,{style:{opacity:.35},children:`·`}),(0,K.jsx)(`a`,{href:`https://github.com/zhxsking/llm_proxy_trace`,target:`_blank`,rel:`noopener noreferrer`,style:{color:`var(--text-tertiary)`,textDecoration:`none`},onMouseEnter:e=>e.currentTarget.style.color=`var(--text-secondary)`,onMouseLeave:e=>e.currentTarget.style.color=`var(--text-tertiary)`,children:`GitHub`})]})]})}function Fe({open:e,title:t,message:n,confirmText:r=`确认`,cancelText:i=`取消`,danger:a=!1,onConfirm:o,onCancel:s}){let c=(0,V.useRef)(null);return(0,V.useEffect)(()=>{e&&c.current?.focus()},[e]),(0,V.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&s(),e.key===`Enter`&&o()};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[e,o,s]),e?(0,K.jsx)(`div`,{className:`confirm-overlay`,onClick:s,children:(0,K.jsxs)(`div`,{className:`confirm-dialog`,onClick:e=>e.stopPropagation(),children:[(0,K.jsx)(`div`,{className:`confirm-icon-row`,children:(0,K.jsx)(`span`,{className:`confirm-icon${a?` danger`:``}`,children:(0,K.jsx)(m,{size:20})})}),(0,K.jsx)(`div`,{className:`confirm-title`,children:t}),(0,K.jsx)(`div`,{className:`confirm-message`,children:n}),(0,K.jsxs)(`div`,{className:`confirm-actions`,children:[(0,K.jsx)(`button`,{className:`confirm-btn cancel`,onClick:s,children:i}),(0,K.jsx)(`button`,{ref:c,className:`confirm-btn ok${a?` danger`:``}`,onClick:o,children:r})]})]})}):null}function Ie(){try{let e=localStorage.getItem(`lpt-theme`);if(e===`dark`||e===`light`)return e}catch{}return window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`}function Le(e){document.documentElement.setAttribute(`data-theme`,e);try{localStorage.setItem(`lpt-theme`,e)}catch{}}function Re(){let[e,t]=(0,V.useState)([]),[r,i]=(0,V.useState)(null),[a,c]=(0,V.useState)(null),[u,d]=(0,V.useState)(``),[f,m]=(0,V.useState)(`all`),[h,g]=(0,V.useState)(!1),[_,y]=(0,V.useState)({open:!1,title:``,message:``,onConfirm:()=>{}}),b=(e,t,n)=>{y({open:!0,title:e,message:t,onConfirm:n})},x=()=>y(e=>({...e,open:!1})),[ee,te]=(0,V.useState)(!0),[S,ne]=(0,V.useState)(Ie),[C,w]=(0,V.useState)(320),T=(0,V.useRef)(!1),E=(0,V.useRef)(0),D=(0,V.useRef)(0),[O,k]=(0,V.useState)(!1),A=(0,V.useRef)(null),[j,M]=(0,V.useState)(!1);(0,V.useEffect)(()=>{Le(S)},[S]),(0,V.useEffect)(()=>{if(!O)return;let e=e=>{A.current&&!A.current.contains(e.target)&&k(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[O]);let oe=()=>ne(e=>e===`light`?`dark`:`light`),N=e.find(e=>e.id===a)||null,P=(0,V.useCallback)(async()=>{try{let[e,n]=await Promise.all([G.getTraces({keyword:u||void 0,limit:200}),G.getStats()]);t(e.traces),i(n)}catch{}finally{te(!1)}},[u]),F=(0,V.useCallback)(e=>{if(e.type===`trace:new`){let n=e.data;u||t(e=>[n,...e]),i(e=>e&&{...e,totalCalls:e.totalCalls+1})}else if(e.type===`trace:update`||e.type===`trace:complete`){let n=e.data;t(e=>e.map(e=>e.id===n.id?{...e,...n}:e)),e.type===`trace:complete`&&G.getStats().then(i).catch(()=>{})}},[u]),{connected:I}=le({url:`ws://${window.location.host}/ws`,onEvent:F});(0,V.useEffect)(()=>{P()},[P]);let L=e=>{T.current=!0,E.current=e.clientX,D.current=C,document.body.style.userSelect=`none`,document.body.style.cursor=`col-resize`;let t=e=>{if(!T.current)return;let t=e.clientX-E.current;w(Math.max(240,Math.min(600,D.current+t)))},n=()=>{T.current=!1,document.body.style.userSelect=``,document.body.style.cursor=``,document.removeEventListener(`mousemove`,t),document.removeEventListener(`mouseup`,n)};document.addEventListener(`mousemove`,t),document.addEventListener(`mouseup`,n)},se=r?.totalTokens??0,ce=r?.totalCalls??0,R=r?.avgDuration??0,z=e.reduce((e,t)=>e+(t.usage?.promptTokens||0),0),B=e.reduce((e,t)=>e+(t.usage?.completionTokens||0),0),H=f===`all`?e:e.filter(e=>e.status===f),U={};for(let t of e)t.model&&(U[t.model]=(U[t.model]||0)+1);let W=Object.entries(U).sort((e,t)=>t[1]-e[1]).slice(0,4),[J,de]=(0,V.useState)(null),fe=J?H.filter(e=>e.model===J):H,pe=e.filter(e=>e.status===`error`).length;return(0,K.jsxs)(`div`,{className:`flex flex-col h-screen overflow-hidden`,style:{background:`var(--bg)`,color:`var(--text)`},children:[(0,K.jsxs)(`header`,{className:`flex items-center gap-3 px-4 flex-shrink-0`,style:{background:`var(--bg-card)`,borderBottom:`1px solid var(--border)`,height:`52px`,zIndex:10},children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[(0,K.jsx)(n,{size:18,style:{color:`var(--blue)`}}),(0,K.jsx)(`span`,{className:`text-sm font-semibold tracking-tight`,children:`LPT`})]}),(0,K.jsx)(`div`,{className:`w-px h-5 flex-shrink-0`,style:{background:`var(--border)`}}),(0,K.jsxs)(`div`,{className:`flex items-center gap-3 text-[11px] flex-shrink-0`,style:{color:`var(--text-tertiary)`},children:[(0,K.jsxs)(`span`,{children:[`请求 `,(0,K.jsx)(`b`,{className:`font-mono`,style:{color:`var(--text-secondary)`},children:ce})]}),(0,K.jsxs)(`span`,{children:[`Tokens `,(0,K.jsx)(`b`,{className:`font-mono`,style:{color:`var(--text-secondary)`},children:se.toLocaleString()})]}),z>0&&(0,K.jsxs)(`span`,{className:`flex items-center gap-0.5 font-mono`,style:{color:`var(--blue)`},children:[`↑`,(0,K.jsx)(`b`,{children:z.toLocaleString()})]}),B>0&&(0,K.jsxs)(`span`,{className:`flex items-center gap-0.5 font-mono`,style:{color:`var(--green)`},children:[`↓`,(0,K.jsx)(`b`,{children:B.toLocaleString()})]}),R>0&&(0,K.jsxs)(`span`,{children:[`均 `,R,`ms`]})]}),W.length>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`div`,{className:`w-px h-5 flex-shrink-0`,style:{background:`var(--border)`}}),(0,K.jsx)(`div`,{className:`flex items-center gap-1.5 overflow-hidden flex-1`,children:W.map(([e,t])=>(0,K.jsxs)(`button`,{onClick:()=>de(t=>t===e?null:e),className:`filter-chip${J===e?` active`:``}`,children:[e.split(`/`).pop()||e,(0,K.jsx)(`span`,{className:`chip-count`,children:t})]},e))})]}),(0,K.jsxs)(`div`,{className:`ml-auto flex items-center gap-2 flex-shrink-0`,children:[(0,K.jsxs)(`span`,{className:`text-[11px] flex items-center gap-1`,style:{color:I?`var(--green)`:`var(--red)`},children:[(0,K.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full`,style:{background:I?`var(--green)`:`var(--red)`}}),I?`实时`:`离线`]}),(0,K.jsx)(q,{content:`从磁盘加载历史记录`,children:(0,K.jsxs)(`button`,{onClick:async()=>{M(!0),await G.reloadTraces().catch(()=>{}),await P(),M(!1)},className:`flex items-center gap-1 text-[11px] px-2 py-1 rounded border transition-colors`,style:{borderColor:`var(--border)`,color:j?`var(--blue)`:`var(--text-tertiary)`},disabled:j,children:[(0,K.jsx)(l,{size:12,style:{animation:j?`spin 1s linear infinite`:`none`}}),`加载记录`]})}),(0,K.jsxs)(`div`,{ref:A,className:`clear-split-btn`,style:{position:`relative`},children:[(0,K.jsx)(q,{content:`清空当前会话`,children:(0,K.jsxs)(`button`,{onClick:()=>{G.deleteTraces(!1).then(()=>{t([]),P()}),k(!1)},className:`clear-split-main`,children:[(0,K.jsx)(p,{size:12}),` 清空`]})}),(0,K.jsx)(`button`,{onClick:()=>k(e=>!e),className:`clear-split-arrow`,"aria-label":`更多清空选项`,children:(0,K.jsx)(o,{size:11})}),O&&(0,K.jsxs)(`div`,{className:`clear-dropdown`,children:[(0,K.jsx)(`div`,{className:`clear-dropdown-label`,children:`选择清空方式`}),(0,K.jsxs)(`button`,{className:`clear-dropdown-item`,onClick:()=>{G.deleteTraces(!1).then(()=>{t([]),P()}),k(!1)},children:[(0,K.jsx)(p,{size:12}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`div`,{className:`clear-dropdown-item-title`,children:`清空当前会话`}),(0,K.jsx)(`div`,{className:`clear-dropdown-item-desc`,children:`仅清内存,文件保留,重启可恢复`})]})]}),(0,K.jsxs)(`button`,{className:`clear-dropdown-item danger`,onClick:()=>{k(!1),b(`永久删除所有文件`,`将永久删除所有 Trace 文件,无法恢复,确认吗?`,()=>{G.deleteTraces(!0).then(()=>{t([]),P()})})},children:[(0,K.jsx)(p,{size:12}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`div`,{className:`clear-dropdown-item-title`,children:`永久删除所有文件`}),(0,K.jsx)(`div`,{className:`clear-dropdown-item-desc`,children:`删除磁盘 JSONL,重启不恢复`})]})]})]})]}),(0,K.jsx)(q,{content:S===`dark`?`浅色模式`:`深色模式`,children:(0,K.jsx)(`button`,{onClick:oe,className:`flex items-center justify-center w-7 h-7 rounded border transition-colors`,style:{borderColor:`var(--border)`,color:`var(--text-tertiary)`},children:S===`dark`?(0,K.jsx)(s,{size:13}):(0,K.jsx)(ie,{size:13})})}),(0,K.jsx)(q,{content:`Provider 与代理设置`,children:(0,K.jsxs)(`button`,{onClick:()=>g(!h),className:`flex items-center gap-1 text-[11px] px-2 py-1 rounded border transition-colors`,style:{borderColor:h?`var(--blue)`:`var(--border)`,color:h?`var(--blue)`:`var(--text-tertiary)`,background:h?`var(--blue-bg)`:`transparent`},children:[(0,K.jsx)(re,{size:12}),` 设置`]})})]})]}),(0,K.jsxs)(`div`,{className:`flex flex-1 overflow-hidden relative`,children:[h&&(0,K.jsx)(`div`,{className:`absolute inset-0 z-20 flex`,style:{background:`rgba(0,0,0,0.15)`},onClick:()=>g(!1),children:(0,K.jsx)(`div`,{className:`ml-auto h-full overflow-auto`,style:{width:`420px`,background:`var(--bg-card)`,borderLeft:`1px solid var(--border)`},onClick:e=>e.stopPropagation(),children:(0,K.jsx)(Pe,{onClose:()=>g(!1)})})}),(0,K.jsxs)(`div`,{className:`flex flex-col flex-shrink-0`,style:{width:`${C}px`,borderRight:`1px solid var(--border)`,background:`var(--bg-card)`},children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b flex-shrink-0`,style:{borderColor:`var(--border)`},children:[(0,K.jsx)(ae,{size:13,style:{color:`var(--text-tertiary)`}}),(0,K.jsx)(`input`,{type:`text`,placeholder:`搜索消息、模型…`,value:u,onChange:e=>d(e.target.value),className:`flex-1 text-xs bg-transparent outline-none`,style:{color:`var(--text)`}}),u&&(0,K.jsx)(`button`,{onClick:()=>d(``),style:{color:`var(--text-tertiary)`},children:(0,K.jsx)(v,{size:11})}),(0,K.jsx)(`div`,{className:`flex items-center gap-1 flex-shrink-0`,children:[`all`,`error`].map(t=>(0,K.jsx)(q,{content:t===`all`?`显示全部请求`:`只看报错的请求`,placement:`bottom`,delay:400,children:(0,K.jsx)(`button`,{onClick:()=>m(t),className:`filter-chip${f===t?` active`:``}`,style:{fontSize:`10px`,padding:`2px 7px`},children:t===`all`?`全部 ${e.length}`:`✕ ${pe}`})},t))})]}),(0,K.jsx)(ue,{traces:fe,activeId:a,onSelect:e=>{c(e)},loading:ee,onDeleteFile:n=>{b(`删除记录文件`,`删除 ${n}?此操作不可恢复。`,async()=>{await G.deleteTraceFile(n).catch(()=>{}),t(e=>e.filter(e=>e.sourceFile!==n)),a&&e.find(e=>e.id===a)?.sourceFile===n&&c(null)})}})]}),(0,K.jsx)(`div`,{className:`resize-handle`,onMouseDown:L,style:{background:`var(--border-light)`}}),(0,K.jsx)(`div`,{className:`flex-1 overflow-auto detail-scroll`,style:{background:`var(--bg)`},children:N?(0,K.jsx)(ge,{trace:N},N.id):(0,K.jsx)(ze,{hasTraces:e.length>0})})]}),(0,K.jsx)(Fe,{open:_.open,title:_.title,message:_.message,confirmText:`确认删除`,danger:!0,onConfirm:()=>{x(),_.onConfirm()},onCancel:x})]})}function ze({hasTraces:e}){let t=window.location.port,r=t?`http://localhost:${t}`:window.location.origin;return e?(0,K.jsx)(`div`,{className:`flex items-center justify-center h-full text-sm`,style:{color:`var(--text-tertiary)`},children:`选择左侧一条请求查看详情`}):(0,K.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-5`,style:{padding:`40px`},children:[(0,K.jsx)(n,{size:28,style:{color:`var(--border)`}}),(0,K.jsxs)(`div`,{style:{textAlign:`center`},children:[(0,K.jsx)(`div`,{style:{fontSize:`15px`,fontWeight:600,color:`var(--text)`,marginBottom:`6px`},children:`等待第一条请求…`}),(0,K.jsx)(`div`,{style:{fontSize:`12px`,color:`var(--text-tertiary)`,lineHeight:1.7},children:`设置以下环境变量,所有兼容 OpenAI 接口的工具都会被自动拦截`})]}),(0,K.jsxs)(`div`,{style:{background:`var(--bg-code)`,border:`1px solid var(--border)`,borderRadius:`8px`,padding:`14px 18px`,fontFamily:`var(--mono)`,fontSize:`13px`,lineHeight:2,minWidth:`340px`},children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{style:{color:`var(--amber)`},children:`export `}),(0,K.jsx)(`span`,{style:{color:`var(--blue)`},children:`OPENAI_BASE_URL`}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`=`}),(0,K.jsxs)(`span`,{style:{color:`var(--green)`},children:[`"`,r,`/v1"`]})]}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`span`,{style:{color:`var(--amber)`},children:`export `}),(0,K.jsx)(`span`,{style:{color:`var(--blue)`},children:`OPENAI_API_KEY`}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`},children:`=`}),(0,K.jsx)(`span`,{style:{color:`var(--green)`},children:`"any-key"`}),(0,K.jsx)(`span`,{style:{color:`var(--text-tertiary)`,fontStyle:`italic`,fontSize:`11px`},children:` # 代理不验证 key`})]})]}),(0,K.jsxs)(`div`,{style:{fontSize:`11px`,color:`var(--text-tertiary)`,lineHeight:1.7,textAlign:`center`,maxWidth:`320px`},children:[`上游 API 地址在 `,(0,K.jsx)(`span`,{style:{color:`var(--blue)`},children:`设置`}),` 中配置。 记录内容包括流式输出、工具调用与思考过程。`]})]})}H.createRoot(document.getElementById(`root`)).render((0,K.jsx)(V.StrictMode,{children:(0,K.jsx)(Re,{})}));