@hsupu/copilot-api 0.8.0 → 0.8.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +172 -110
- package/README.zh.md +39 -0
- package/config.example.yaml +341 -0
- package/dist/dist-8vhX0s4a.mjs +429 -0
- package/dist/dist-8vhX0s4a.mjs.map +1 -0
- package/dist/main.mjs +11372 -0
- package/dist/main.mjs.map +1 -0
- package/package.json +39 -26
- package/ui/history-v3/dist/assets/DashboardPage-B1uByGH4.js +1 -0
- package/ui/history-v3/dist/assets/DashboardPage-CabImjCg.css +1 -0
- package/ui/history-v3/dist/assets/HistoryPage-CcuFI_7q.js +3 -0
- package/ui/history-v3/dist/assets/HistoryPage-MBmz_wrp.css +1 -0
- package/ui/history-v3/dist/assets/LogsPage-CTboGme2.js +1 -0
- package/ui/history-v3/dist/assets/LogsPage-DnfMvMyI.css +1 -0
- package/ui/history-v3/dist/assets/ModelsPage-BCijEIH1.css +1 -0
- package/ui/history-v3/dist/assets/ModelsPage-B_sjc_hg.js +1 -0
- package/ui/history-v3/dist/assets/ProgressBar-BQxTnwIj.js +1 -0
- package/ui/history-v3/dist/assets/ProgressBar-B_0VSeE9.css +1 -0
- package/ui/history-v3/dist/assets/UsagePage-Nx_clyfV.css +1 -0
- package/ui/history-v3/dist/assets/UsagePage-Nxy64EGo.js +1 -0
- package/ui/history-v3/dist/assets/index-D5HcAJB-.css +1 -0
- package/ui/history-v3/dist/assets/index-DOp9l2lW.js +2 -0
- package/ui/history-v3/dist/assets/useFormatters-BBIZmSf2.js +1 -0
- package/ui/history-v3/dist/assets/vendor-BJ2Uq5vY.js +125 -0
- package/ui/history-v3/dist/assets/vue-CYcm9SLm.js +1 -0
- package/ui/history-v3/dist/index.html +14 -0
- package/dist/main.js +0 -4571
- package/dist/main.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hsupu/copilot-api",
|
|
3
|
-
"version": "0.8.
|
|
4
|
-
"description": "Turn GitHub Copilot into OpenAI/Anthropic API compatible server.
|
|
3
|
+
"version": "0.8.1-beta.1",
|
|
4
|
+
"description": "Turn GitHub Copilot into OpenAI/Anthropic API compatible server.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"proxy",
|
|
7
7
|
"github-copilot",
|
|
@@ -17,14 +17,18 @@
|
|
|
17
17
|
"author": "hsupu",
|
|
18
18
|
"type": "module",
|
|
19
19
|
"bin": {
|
|
20
|
-
"copilot-api": "
|
|
20
|
+
"copilot-api": "dist/main.mjs"
|
|
21
21
|
},
|
|
22
22
|
"files": [
|
|
23
|
-
"dist"
|
|
23
|
+
"dist",
|
|
24
|
+
"ui/history-v3/dist",
|
|
25
|
+
"config.example.yaml"
|
|
24
26
|
],
|
|
25
27
|
"scripts": {
|
|
26
|
-
"build": "npx tsdown",
|
|
28
|
+
"build": "npm run build:ui && npx tsdown",
|
|
29
|
+
"build:ui": "cd ui/history-v3 && bun install && bun run build",
|
|
27
30
|
"dev": "bun run --watch ./src/main.ts",
|
|
31
|
+
"dev:ui": "cd ui/history-v3 && bun run dev",
|
|
28
32
|
"knip": "knip-bun",
|
|
29
33
|
"lint": "eslint --cache",
|
|
30
34
|
"lint:all": "eslint --cache .",
|
|
@@ -32,41 +36,50 @@
|
|
|
32
36
|
"prepare": "npm run build && (command -v bun >/dev/null 2>&1 && simple-git-hooks || true)",
|
|
33
37
|
"release": "bumpp && npm publish --access public",
|
|
34
38
|
"start": "NODE_ENV=production bun run ./src/main.ts",
|
|
39
|
+
"test": "bun test tests/unit/",
|
|
40
|
+
"test:all": "bun test tests/",
|
|
41
|
+
"test:ci": "bun test tests/unit/ tests/component/ tests/contract/ tests/integration/",
|
|
42
|
+
"test:component": "bun test tests/component/",
|
|
43
|
+
"test:contract": "bun test tests/contract/",
|
|
44
|
+
"test:e2e": "bun test tests/e2e/",
|
|
45
|
+
"test:integration": "bun test tests/integration/",
|
|
46
|
+
"test:ui": "cd ui/history-v3 && bun test tests/",
|
|
35
47
|
"typecheck": "tsc"
|
|
36
48
|
},
|
|
37
49
|
"simple-git-hooks": {
|
|
38
50
|
"pre-commit": "bun x lint-staged"
|
|
39
51
|
},
|
|
40
52
|
"lint-staged": {
|
|
41
|
-
"
|
|
53
|
+
"*.{ts,js,mjs,cjs}": "bun run lint"
|
|
42
54
|
},
|
|
43
55
|
"dependencies": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
56
|
+
"@hono/node-ws": "^1.3.0",
|
|
57
|
+
"citty": "^0.2.1",
|
|
46
58
|
"consola": "^3.4.2",
|
|
47
|
-
"fetch-event-stream": "^0.1.
|
|
48
|
-
"gpt-tokenizer": "^3.0
|
|
49
|
-
"hono": "^4.
|
|
50
|
-
"
|
|
51
|
-
"proxy-from-env": "^
|
|
52
|
-
"
|
|
53
|
-
"srvx": "^0.8.9",
|
|
59
|
+
"fetch-event-stream": "^0.1.6",
|
|
60
|
+
"gpt-tokenizer": "^3.4.0",
|
|
61
|
+
"hono": "^4.12.3",
|
|
62
|
+
"picocolors": "^1.1.1",
|
|
63
|
+
"proxy-from-env": "^2.0.0",
|
|
64
|
+
"socks": "^2.8.7",
|
|
54
65
|
"tiny-invariant": "^1.3.3",
|
|
55
|
-
"undici": "^7.
|
|
56
|
-
"
|
|
66
|
+
"undici": "^7.22.0",
|
|
67
|
+
"yaml": "^2.8.2"
|
|
57
68
|
},
|
|
58
69
|
"devDependencies": {
|
|
70
|
+
"@anthropic-ai/sdk": "^0.78.0",
|
|
59
71
|
"@echristian/eslint-config": "^0.0.54",
|
|
60
|
-
"@types/bun": "^1.
|
|
72
|
+
"@types/bun": "^1.3.9",
|
|
61
73
|
"@types/proxy-from-env": "^1.0.4",
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"prettier-plugin-packagejson": "^
|
|
74
|
+
"bumpp": "^10.4.1",
|
|
75
|
+
"eslint": "^9.39.3",
|
|
76
|
+
"knip": "^5.85.0",
|
|
77
|
+
"lint-staged": "^16.2.7",
|
|
78
|
+
"openai": "^6.25.0",
|
|
79
|
+
"prettier-plugin-packagejson": "^3.0.0",
|
|
68
80
|
"simple-git-hooks": "^2.13.1",
|
|
69
|
-
"tsdown": "^0.
|
|
70
|
-
"typescript": "^5.9.3"
|
|
81
|
+
"tsdown": "^0.20.3",
|
|
82
|
+
"typescript": "^5.9.3",
|
|
83
|
+
"vue": "^3.5.29"
|
|
71
84
|
}
|
|
72
85
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as M,D as m,P as B}from"./ProgressBar-BQxTnwIj.js";import{a as q,_ as L}from"./index-DOp9l2lW.js";import{u as T}from"./useFormatters-BBIZmSf2.js";import{d as E,g as t,l as e,q as d,c,p as _,o as a,i as N,t as l,D as r,F as S,m as C,f as p}from"./vue-CYcm9SLm.js";const P={class:"dashboard-page"},$={key:0,class:"dashboard-loading"},H={key:1,class:"dashboard-grid"},I={class:"kv-list"},A={class:"kv-row"},V={class:"kv-row"},z={class:"kv-value"},F={key:0,class:"kv-row"},j={class:"kv-value"},O={key:0,class:"kv-list"},Q={key:0,class:"kv-row"},J={class:"kv-value"},R={key:1,class:"kv-row"},G={class:"kv-value"},K={key:2,class:"kv-row"},W={class:"kv-value"},X={key:1,class:"card-empty"},Y={key:0,class:"quota-list"},Z={class:"quota-header"},ss={class:"quota-label"},es={class:"quota-numbers"},ts={key:1,class:"card-empty"},as={key:0,class:"kv-list"},os={key:0,class:"kv-row"},ls={key:1,class:"kv-row"},is={class:"kv-value"},ns={key:1,class:"card-empty"},us={key:0,class:"kv-list"},rs={key:0,class:"kv-row"},vs={class:"kv-value"},ds={key:1,class:"kv-row"},cs={class:"kv-value"},ks={key:2,class:"kv-row"},ps={class:"kv-value"},ms={key:3,class:"kv-row"},_s={class:"kv-value"},hs={key:1,class:"card-empty"},ys={key:0,class:"kv-list config-list"},fs={class:"kv-key"},gs={class:"kv-value mono"},bs={key:1,class:"card-empty"},ws=E({__name:"DashboardPage",setup(xs){const{formatNumber:f}=T(),{data:i,loading:U}=M(()=>q.fetchStatus(),5e3),{data:g}=M(()=>q.fetchConfig(),3e4),D=p(()=>{if(!i.value)return"-";const u=i.value.uptimeMs;if(!u)return"-";const s=Math.floor(u/1e3),o=Math.floor(s/3600),h=Math.floor(s%3600/60),y=s%60;return o>0?`${o}h ${h}m ${y}s`:h>0?`${h}m ${y}s`:`${y}s`}),k=p(()=>i.value?.auth?i.value.auth:null),b=p(()=>i.value?.quota?i.value.quota:null),v=p(()=>i.value?.rateLimiter?i.value.rateLimiter:null),n=p(()=>i.value?.memory?i.value.memory:null),w=p(()=>g.value?Object.entries(g.value).map(([u,s])=>({key:u,value:typeof s=="object"?JSON.stringify(s):String(s)})):[]),x=p(()=>{if(!b.value)return[];const u=[],s=b.value;if(s.premiumInteractions){const o=s.premiumInteractions;u.push({label:"Premium Interactions",used:o.used??0,limit:o.limit??0})}if(s.chat){const o=s.chat;u.push({label:"Chat",used:o.used??0,limit:o.limit??0})}if(s.completions){const o=s.completions;u.push({label:"Completions",used:o.used??0,limit:o.limit??0})}return u});return(u,s)=>(a(),t("div",P,[s[12]||(s[12]=e("div",{class:"dashboard-header"},[e("h2",{class:"dashboard-title"},"Dashboard")],-1)),d(U)&&!d(i)?(a(),t("div",$," Loading server status... ")):(a(),t("div",H,[c(m,{title:"Status"},{default:_(()=>[e("div",I,[e("div",A,[s[0]||(s[0]=e("span",{class:"kv-key"},"Health",-1)),e("span",{class:N(["kv-value",d(i)?.healthy?"text-success":"text-error"])},l(d(i)?.healthy?"Healthy":"Unhealthy"),3)]),e("div",V,[s[1]||(s[1]=e("span",{class:"kv-key"},"Uptime",-1)),e("span",z,l(D.value),1)]),d(i)?.version?(a(),t("div",F,[s[2]||(s[2]=e("span",{class:"kv-key"},"Version",-1)),e("span",j,l(d(i).version),1)])):r("",!0)])]),_:1}),c(m,{title:"Authentication"},{default:_(()=>[k.value?(a(),t("div",O,[k.value.accountType?(a(),t("div",Q,[s[3]||(s[3]=e("span",{class:"kv-key"},"Account",-1)),e("span",J,l(k.value.accountType),1)])):r("",!0),k.value.tokenSource?(a(),t("div",R,[s[4]||(s[4]=e("span",{class:"kv-key"},"Source",-1)),e("span",G,l(k.value.tokenSource),1)])):r("",!0),k.value.expiresAt?(a(),t("div",K,[s[5]||(s[5]=e("span",{class:"kv-key"},"Expires",-1)),e("span",W,l(k.value.expiresAt),1)])):r("",!0)])):(a(),t("div",X,"No auth info available"))]),_:1}),c(m,{title:"Quota"},{default:_(()=>[x.value.length>0?(a(),t("div",Y,[(a(!0),t(S,null,C(x.value,o=>(a(),t("div",{key:o.label,class:"quota-item"},[e("div",Z,[e("span",ss,l(o.label),1),e("span",es,l(d(f)(o.used))+" / "+l(d(f)(o.limit)),1)]),c(B,{value:o.used,max:o.limit},null,8,["value","max"])]))),128))])):(a(),t("div",ts,"No quota data"))]),_:1}),c(m,{title:"Rate Limiter"},{default:_(()=>[v.value?(a(),t("div",as,[v.value.mode?(a(),t("div",os,[s[6]||(s[6]=e("span",{class:"kv-key"},"Mode",-1)),e("span",{class:N(["kv-value",{"text-success":v.value.mode==="normal","text-warning":v.value.mode==="recovering","text-error":v.value.mode==="rate-limited"}])},l(v.value.mode),3)])):r("",!0),v.value.queueSize!==void 0?(a(),t("div",ls,[s[7]||(s[7]=e("span",{class:"kv-key"},"Queue",-1)),e("span",is,l(v.value.queueSize),1)])):r("",!0)])):(a(),t("div",ns,"No rate limiter info"))]),_:1}),c(m,{title:"Memory"},{default:_(()=>[n.value?(a(),t("div",us,[n.value.heapUsedMB!==void 0?(a(),t("div",rs,[s[8]||(s[8]=e("span",{class:"kv-key"},"Heap Used",-1)),e("span",vs,l(n.value.heapUsedMB)+" MB",1)])):r("",!0),n.value.heapTotalMB!==void 0?(a(),t("div",ds,[s[9]||(s[9]=e("span",{class:"kv-key"},"Heap Total",-1)),e("span",cs,l(n.value.heapTotalMB)+" MB",1)])):r("",!0),n.value.heapUsedMB!==void 0&&n.value.heapTotalMB!==void 0?(a(),t("div",ks,[s[10]||(s[10]=e("span",{class:"kv-key"},"Usage",-1)),e("span",ps,[c(B,{value:Number(n.value.heapUsedMB),max:Number(n.value.heapTotalMB),label:"heap"},null,8,["value","max"])])])):r("",!0),n.value.historyEntries!==void 0?(a(),t("div",ms,[s[11]||(s[11]=e("span",{class:"kv-key"},"History Entries",-1)),e("span",_s,l(n.value.historyEntries),1)])):r("",!0)])):(a(),t("div",hs,"No memory info"))]),_:1}),c(m,{title:"Configuration"},{default:_(()=>[w.value.length>0?(a(),t("div",ys,[(a(!0),t(S,null,C(w.value,o=>(a(),t("div",{key:o.key,class:"kv-row"},[e("span",fs,l(o.key),1),e("span",gs,l(o.value),1)]))),128))])):(a(),t("div",bs,"No config available"))]),_:1})]))]))}}),Ss=L(ws,[["__scopeId","data-v-7165ad1b"]]);export{Ss as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.dashboard-page[data-v-7165ad1b]{display:flex;flex-direction:column;flex:1;overflow-y:auto}.dashboard-header[data-v-7165ad1b]{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-sm) var(--spacing-lg);border-bottom:1px solid var(--border-light);flex-shrink:0}.dashboard-title[data-v-7165ad1b]{font-size:var(--font-size-lg);font-weight:600;color:var(--text)}.dashboard-loading[data-v-7165ad1b]{display:flex;align-items:center;justify-content:center;flex:1;color:var(--text-dim);font-size:var(--font-size-sm)}.dashboard-grid[data-v-7165ad1b]{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:var(--spacing-lg);padding:var(--spacing-lg)}.kv-list[data-v-7165ad1b]{display:flex;flex-direction:column;gap:var(--spacing-xs)}.kv-row[data-v-7165ad1b]{display:flex;align-items:baseline;gap:var(--spacing-sm)}.kv-key[data-v-7165ad1b]{font-size:var(--font-size-xs);color:var(--text-dim);min-width:100px;flex-shrink:0}.kv-value[data-v-7165ad1b]{font-size:var(--font-size-xs);color:var(--text)}.kv-value.mono[data-v-7165ad1b]{font-family:var(--font-mono);word-break:break-all}.text-success[data-v-7165ad1b]{color:var(--success)}.text-error[data-v-7165ad1b]{color:var(--error)}.text-warning[data-v-7165ad1b]{color:var(--warning)}.card-empty[data-v-7165ad1b]{font-size:var(--font-size-xs);color:var(--text-dim);padding:var(--spacing-sm) 0}.quota-list[data-v-7165ad1b]{display:flex;flex-direction:column;gap:var(--spacing-md)}.quota-item[data-v-7165ad1b]{display:flex;flex-direction:column;gap:var(--spacing-xs)}.quota-header[data-v-7165ad1b]{display:flex;justify-content:space-between;align-items:baseline}.quota-label[data-v-7165ad1b]{font-size:var(--font-size-xs);color:var(--text-muted)}.quota-numbers[data-v-7165ad1b]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.config-list[data-v-7165ad1b]{max-height:300px;overflow-y:auto}@media(max-width:768px){.dashboard-grid[data-v-7165ad1b]{grid-template-columns:1fr}}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{x as le,y as se,d as C,o,g as i,i as L,D as v,E as P,t as c,F as A,m as F,q as u,j as W,l as s,e as E,c as y,p as $,G as j,H as U,I as J,r as O,f as h,h as pe,s as T,a as ce,z as fe,J as he,n as ee,K as De,v as Ne,L as Ve}from"./vue-CYcm9SLm.js";import{u as X}from"./useFormatters-BBIZmSf2.js";import{_ as S,S as xe,g as we,u as ze,e as me}from"./index-DOp9l2lW.js";import{c as Ae,h as He,P as ie}from"./vendor-BJ2Uq5vY.js";function je(e){function t(l){const n=l.target;if(n.tagName==="INPUT"||n.tagName==="TEXTAREA"||n.tagName==="SELECT"){l.key==="Escape"&&(n.blur(),e.onEscape());return}switch(l.key){case"ArrowUp":case"k":{l.preventDefault(),e.onNavigate("prev");break}case"ArrowDown":case"j":{l.preventDefault(),e.onNavigate("next");break}case"/":{l.preventDefault(),e.onSearch();break}case"Escape":{if(document.querySelector(".modal-overlay"))break;const a=document.querySelector(".export-menu");if(a&&a.style.display!=="none")break;e.onEscape();break}}}le(()=>{document.addEventListener("keydown",t)}),se(()=>{document.removeEventListener("keydown",t)})}const Ue=["disabled"],Je={key:0,class:"spinner"},Pe=C({__name:"BaseButton",props:{variant:{default:"default"},size:{default:"sm"},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["click"],setup(e){return(t,l)=>(o(),i("button",{class:L(["base-btn",["btn-"+e.variant,"btn-size-"+e.size,{"btn-loading":e.loading}]]),disabled:e.disabled||e.loading,onClick:l[0]||(l[0]=n=>t.$emit("click",n))},[e.loading?(o(),i("span",Je)):v("",!0),P(t.$slots,"default",{},void 0)],10,Ue))}}),ue=S(Pe,[["__scopeId","data-v-5d391870"]]),Fe=["value"],We={key:0,value:""},Ke=["value"],Qe=C({__name:"BaseSelect",props:{modelValue:{},options:{},placeholder:{}},emits:["update:modelValue"],setup(e){return(t,l)=>(o(),i("select",{class:"base-select",value:e.modelValue??"",onChange:l[0]||(l[0]=n=>t.$emit("update:modelValue",n.target.value||null))},[e.placeholder?(o(),i("option",We,c(e.placeholder),1)):v("",!0),(o(!0),i(A,null,F(e.options,n=>(o(),i("option",{key:n.value,value:n.value},c(n.label),9,Ke))),128))],40,Fe))}}),te=S(Qe,[["__scopeId","data-v-1a8e761a"]]),Ge=["width","height","innerHTML"],Xe=C({__name:"IconSvg",props:{name:{},size:{default:14}},setup(e){const n={search:'<path d="M221.09 64a157.09 157.09 0 10157.09 157.09A157.1 157.1 0 00221.09 64z"/><path d="M338.29 338.29L448 448"/>',refresh:'<path d="M320 146s24.36-12-64-12a160 160 0 10160 160" /><polyline points="256 58 336 138 256 218"/>',download:'<path d="M336 176h40a40 40 0 0140 40v208a40 40 0 01-40 40H136a40 40 0 01-40-40V216a40 40 0 0140-40h40"/><polyline points="176 272 256 352 336 272"/><line x1="256" y1="48" x2="256" y2="336"/>',trash:'<path d="M112 112l20 320c.95 18.49 14.4 32 32 32h184c17.67 0 30.87-13.51 32-32l20-320"/><line x1="80" y1="112" x2="432" y2="112"/><path d="M192 112V72h0a23.93 23.93 0 0124-24h80a23.93 23.93 0 0124 24h0v40" stroke-linecap="round"/>',close:'<path d="M368 368L144 144"/><path d="M368 144L144 368"/>',expand:'<polyline points="432 368 432 432 368 432"/><line x1="432" y1="432" x2="336" y2="336"/><polyline points="80 144 80 80 144 80"/><line x1="80" y1="80" x2="176" y2="176"/><polyline points="368 80 432 80 432 144"/><line x1="432" y1="80" x2="336" y2="176"/><polyline points="144 432 80 432 80 368"/><line x1="80" y1="432" x2="176" y2="336"/>',contract:'<polyline points="336 368 336 432 400 432"/><line x1="336" y1="432" x2="432" y2="336"/><polyline points="176 144 176 80 112 80"/><line x1="176" y1="80" x2="80" y2="176"/><polyline points="400 80 336 80 336 144"/><line x1="336" y1="80" x2="432" y2="176"/><polyline points="112 432 176 432 176 368"/><line x1="176" y1="432" x2="80" y2="336"/>',copy:'<rect x="128" y="128" width="336" height="336" rx="57" ry="57"/><path d="M383.5 128l.5-24a56.16 56.16 0 00-56-56H112a64.19 64.19 0 00-64 64v216a56.16 56.16 0 0056 56h24" stroke-linecap="round"/>',code:'<path d="M160 368L32 256l128-112"/><path d="M352 368l128-112-128-112"/><path d="M304 96l-96 320"/>',"chevron-down":'<polyline points="112 184 256 328 400 184"/>',"chevron-up":'<polyline points="112 328 256 184 400 328"/>',"chevron-right":'<polyline points="184 112 328 256 184 400"/>'}[e.name]||"";return(f,a)=>(o(),i("svg",{class:"icon-svg",width:e.size,height:e.size,viewBox:"0 0 512 512",fill:"none",stroke:"currentColor","stroke-width":"32","stroke-linecap":"round","stroke-linejoin":"round",innerHTML:u(n)},null,8,Ge))}}),q=S(Xe,[["__scopeId","data-v-ae6caa74"]]),Ye={class:"app-header"},Ze={class:"header-left"},et={class:"header-right"},tt={class:"ws-label"},st={class:"export-menu"},nt=C({__name:"AppHeader",setup(e){const t=W("historyStore"),{formatDate:l}=X(),n=O(!1),f=h(()=>t.sessions.value.map(w=>({value:w.id,label:`${l(w.startTime)} (${w.requestCount} reqs)`}))),a=O(!1),r=O();function g(w){location.href=`/history/api/export?format=${w}`,a.value=!1}function m(w){r.value&&!r.value.contains(w.target)&&(a.value=!1)}function b(w){w.key==="Escape"&&a.value&&(a.value=!1,w.stopPropagation())}le(()=>{document.addEventListener("click",m),document.addEventListener("keydown",b)}),se(()=>{document.removeEventListener("click",m),document.removeEventListener("keydown",b)});async function _(){confirm("Clear all history? This cannot be undone.")&&await t.clearAll()}async function d(){n.value=!0;try{await t.refresh()}finally{n.value=!1}}return(w,x)=>(o(),i("header",Ye,[s("div",Ze,[x[4]||(x[4]=s("h1",{class:"header-title"},[E("History "),s("span",{class:"version-tag"},"V3")],-1)),y(te,{"model-value":u(t).selectedSessionId.value,options:f.value,placeholder:"All Sessions","onUpdate:modelValue":x[0]||(x[0]=M=>u(t).setSessionFilter(M))},null,8,["model-value","options"])]),s("div",et,[y(xe,{status:u(t).wsConnected.value?"success":"error",size:6},null,8,["status"]),s("span",tt,c(u(t).wsConnected.value?"Live":"Offline"),1),y(ue,{variant:"ghost",disabled:n.value,onClick:d},{default:$(()=>[y(q,{name:"refresh",size:13,class:L({spinning:n.value})},null,8,["class"]),E(" "+c(n.value?"Refreshing...":"Refresh"),1)]),_:1},8,["disabled"]),s("div",{ref_key:"exportRef",ref:r,class:"export-dropdown"},[y(ue,{variant:"ghost",onClick:x[1]||(x[1]=j(M=>a.value=!a.value,["stop"]))},{default:$(()=>[y(q,{name:"download",size:13}),x[5]||(x[5]=E(" Export ",-1))]),_:1}),U(s("div",st,[s("button",{class:"export-item",onClick:x[2]||(x[2]=M=>g("json"))},"Export JSON"),s("button",{class:"export-item",onClick:x[3]||(x[3]=M=>g("csv"))},"Export CSV")],512),[[J,a.value]])],512),y(ue,{variant:"danger",onClick:_},{default:$(()=>[y(q,{name:"trash",size:13}),x[6]||(x[6]=E(" Clear ",-1))]),_:1})])]))}}),at=S(nt,[["__scopeId","data-v-ba112819"]]),ot={key:0,class:"stats-bar"},lt={class:"stat-item"},rt={class:"stat-value"},it={class:"stat-item stat-success"},ut={class:"stat-value"},ct={class:"stat-item stat-error"},dt={class:"stat-value"},vt={class:"stat-item"},mt={class:"stat-value"},pt={class:"stat-item"},ft={class:"stat-value"},yt={key:0,class:"stat-item"},gt={class:"stat-value"},ht=C({__name:"StatsBar",setup(e){const t=W("historyStore"),{formatNumber:l,formatDuration:n}=X();return(f,a)=>u(t).stats.value?(o(),i("div",ot,[s("div",lt,[s("span",rt,c(u(l)(u(t).stats.value.totalRequests)),1),a[0]||(a[0]=s("span",{class:"stat-label"},"Requests",-1))]),s("div",it,[s("span",ut,c(u(l)(u(t).stats.value.successfulRequests)),1),a[1]||(a[1]=s("span",{class:"stat-label"},"Success",-1))]),s("div",ct,[s("span",dt,c(u(l)(u(t).stats.value.failedRequests)),1),a[2]||(a[2]=s("span",{class:"stat-label"},"Failed",-1))]),s("div",vt,[s("span",mt,c(u(l)(u(t).stats.value.totalInputTokens)),1),a[3]||(a[3]=s("span",{class:"stat-label"},"In Tokens",-1))]),s("div",pt,[s("span",ft,c(u(l)(u(t).stats.value.totalOutputTokens)),1),a[4]||(a[4]=s("span",{class:"stat-label"},"Out Tokens",-1))]),u(t).stats.value.averageDurationMs?(o(),i("div",yt,[s("span",gt,c(u(n)(u(t).stats.value.averageDurationMs)),1),a[5]||(a[5]=s("span",{class:"stat-label"},"Avg Duration",-1))])):v("",!0)])):v("",!0)}}),wt=S(ht,[["__scopeId","data-v-ea9ddd3f"]]),bt={class:"split-right"},kt=C({__name:"SplitPane",props:{defaultLeftWidth:{default:320},minLeftWidth:{default:240},maxLeftWidth:{default:500}},setup(e){const t=O(parseInt(localStorage.getItem("history-v3-split-width")||"0")||320),l=O(!1);function n(r){r.preventDefault(),l.value=!0,document.addEventListener("mousemove",f),document.addEventListener("mouseup",a)}function f(r){if(!l.value)return;const g=Math.max(240,Math.min(500,r.clientX));t.value=g}function a(){l.value=!1,localStorage.setItem("history-v3-split-width",String(t.value)),document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",a)}return le(()=>{const r=parseInt(localStorage.getItem("history-v3-split-width")||"0");r>0&&(t.value=r)}),se(()=>{document.removeEventListener("mousemove",f),document.removeEventListener("mouseup",a)}),(r,g)=>(o(),i("div",{class:L(["split-pane",{dragging:l.value}])},[s("div",{class:"split-left",style:pe({width:t.value+"px"})},[P(r.$slots,"left",{},void 0)],4),s("div",{class:"split-handle",onMousedown:n},null,32),s("div",bt,[P(r.$slots,"right",{},void 0)])],2))}}),_t=S(kt,[["__scopeId","data-v-77cb6608"]]),$t=["value","placeholder"],xt=C({__name:"BaseInput",props:{modelValue:{},placeholder:{},icon:{}},emits:["update:modelValue"],setup(e,{expose:t}){const l=O();function n(){l.value?.focus()}return t({focus:n}),(f,a)=>(o(),i("div",{class:L(["base-input",{"has-icon":e.icon}])},[e.icon?(o(),T(q,{key:0,name:e.icon,size:13,class:"input-icon"},null,8,["name"])):v("",!0),s("input",{ref_key:"inputRef",ref:l,type:"text",value:e.modelValue,placeholder:e.placeholder,onInput:a[0]||(a[0]=r=>f.$emit("update:modelValue",r.target.value))},null,40,$t)],2))}}),Re=S(xt,[["__scopeId","data-v-77e6d433"]]),Rt=C({__name:"BaseBadge",props:{color:{default:"default"}},setup(e){return(t,l)=>(o(),i("span",{class:L(["base-badge","badge-"+e.color])},[P(t.$slots,"default",{},void 0)],2))}}),Q=S(Rt,[["__scopeId","data-v-226d8817"]]),Tt={class:"item-header"},Ct={class:"item-time"},St=["href","title"],Mt=["title"],It={class:"item-meta"},Et={key:1,class:"item-tokens"},Bt={key:2,class:"item-duration"},Ot=["title"],Lt=C({__name:"RequestItem",props:{entry:{},selected:{type:Boolean}},emits:["select"],setup(e){const{formatDate:t,formatNumber:l,formatDuration:n}=X();return(f,a)=>(o(),i("div",{class:L(["request-item",{selected:e.selected,["status-"+u(we)(e.entry)]:!0}]),onClick:a[1]||(a[1]=r=>f.$emit("select",e.entry.id))},[s("div",Tt,[y(xe,{status:u(we)(e.entry)},null,8,["status"]),s("span",Ct,c(u(t)(e.entry.timestamp)),1),s("a",{class:"item-id",href:"/history/api/entries/"+e.entry.id,target:"_blank",title:"/history/api/entries/"+e.entry.id,onClick:a[0]||(a[0]=j(()=>{},["stop"]))},c(e.entry.id),9,St),s("span",{class:"item-model",title:e.entry.responseModel||e.entry.requestModel||void 0},c(e.entry.responseModel||e.entry.requestModel||"-"),9,Mt)]),s("div",It,[y(Q,{color:e.entry.endpoint==="anthropic-messages"?"purple":e.entry.endpoint==="openai-responses"?"green":"cyan"},{default:$(()=>[E(c(e.entry.endpoint),1)]),_:1},8,["color"]),e.entry.stream?(o(),T(Q,{key:0,color:"primary"},{default:$(()=>[...a[2]||(a[2]=[E("stream",-1)])]),_:1})):v("",!0),e.entry.usage?(o(),i("span",Et,c(u(l)(e.entry.usage.input_tokens))+" in / "+c(u(l)(e.entry.usage.output_tokens))+" out ",1)):v("",!0),e.entry.durationMs?(o(),i("span",Bt," · "+c(u(n)(e.entry.durationMs)),1)):v("",!0)]),s("div",{class:"item-preview",title:e.entry.previewText||void 0},c(e.entry.previewText),9,Ot)],2))}}),qt=S(Lt,[["__scopeId","data-v-0c9ef106"]]),Dt={key:0,class:"list-pagination"},Nt=["disabled"],Vt={class:"page-info"},zt=["disabled"],At=C({__name:"ListPagination",setup(e){const t=W("historyStore");return(l,n)=>u(t).total.value>0?(o(),i("div",Dt,[s("button",{class:"page-btn nav-btn",disabled:!u(t).prevCursor.value,onClick:n[0]||(n[0]=f=>u(t).loadPrev())}," Previous ",8,Nt),s("span",Vt,c(u(t).entries.value.length)+" of "+c(u(t).total.value),1),s("button",{class:"page-btn nav-btn",disabled:!u(t).nextCursor.value,onClick:n[1]||(n[1]=f=>u(t).loadNext())}," Next ",8,zt)])):v("",!0)}}),Ht=S(At,[["__scopeId","data-v-76dfa3e6"]]),jt={class:"request-list"},Ut={class:"list-controls"},Jt={key:0,class:"search-count"},Pt={class:"list-filters"},Ft={class:"list-body"},Wt={key:0,class:"list-empty"},Kt={key:1,class:"list-empty"},Qt=C({__name:"RequestList",setup(e,{expose:t}){const l=W("historyStore"),n=O("");let f=null;const a=O();ce(n,b=>{f&&clearTimeout(f),f=setTimeout(()=>{l.setSearch(b)},300)});const r=[{value:"anthropic-messages",label:"Anthropic Messages"},{value:"openai-chat-completions",label:"OpenAI Chat Completions"},{value:"openai-responses",label:"OpenAI Responses"}],g=[{value:"true",label:"Success"},{value:"false",label:"Failed"}];function m(){a.value?.focus()}return t({focusSearch:m}),(b,_)=>(o(),i("div",jt,[s("div",Ut,[y(Re,{ref_key:"searchInputRef",ref:a,modelValue:n.value,"onUpdate:modelValue":_[0]||(_[0]=d=>n.value=d),placeholder:"Search...",icon:"search"},null,8,["modelValue"]),n.value&&u(l).total.value>0?(o(),i("span",Jt,c(u(l).total.value)+" hit"+c(u(l).total.value!==1?"s":""),1)):v("",!0),s("div",Pt,[y(te,{"model-value":u(l).filterEndpoint.value,options:r,placeholder:"Endpoint","onUpdate:modelValue":_[1]||(_[1]=d=>u(l).setEndpointFilter(d))},null,8,["model-value"]),y(te,{"model-value":u(l).filterSuccess.value,options:g,placeholder:"Status","onUpdate:modelValue":_[2]||(_[2]=d=>u(l).setSuccessFilter(d))},null,8,["model-value"])])]),s("div",Ft,[u(l).loading.value&&u(l).entries.value.length===0?(o(),i("div",Wt," Loading... ")):u(l).entries.value.length===0?(o(),i("div",Kt,[..._[4]||(_[4]=[E(" No requests found ",-1),s("p",{class:"empty-subtitle"},"Try adjusting your filters",-1)])])):(o(!0),i(A,{key:2},F(u(l).entries.value,d=>(o(),T(qt,{key:d.id,entry:d,selected:u(l).selectedEntry.value?.id===d.id,onSelect:_[3]||(_[3]=w=>u(l).selectEntry(w))},null,8,["entry","selected"]))),128))]),y(Ht)]))}}),Gt=S(Qt,[["__scopeId","data-v-28ea6559"]]);function Te(e){return e.type==="text"}function Xt(e){return e.type==="thinking"}function Yt(e){return e.type==="redacted_thinking"}function Ce(e){return e.type==="tool_use"}function Se(e){return e.type==="tool_result"}function Zt(e){return e.type==="image"}function es(e){if(e.role==="tool"&&e.tool_call_id){const l=typeof e.content=="string"?e.content:JSON.stringify(e.content);return[{type:"tool_result",tool_use_id:e.tool_call_id,content:l}]}const t=[];if(typeof e.content=="string"?e.content&&t.push({type:"text",text:e.content}):Array.isArray(e.content)&&t.push(...e.content),e.tool_calls)for(const l of e.tool_calls){let n={};try{n=JSON.parse(l.function.arguments)}catch{n={_raw:l.function.arguments}}t.push({type:"tool_use",id:l.id,name:l.function.name,input:n})}return t}const Me=Symbol("contentContext");function ts(e){fe(Me,e)}function re(){const e=W(Me);if(!e)throw new Error("useContentContext() called outside of ContentContext provider");return e}function ss(e){const t=h(()=>{const d=e.value;if(!d?.pipelineInfo?.truncation)return-1;const w=d.pipelineInfo.truncation.removedMessageCount;if(!w)return-1;const x=d.pipelineInfo.messageMapping;return x&&x.length>0?x[0]:w}),l=h(()=>{const d=new Map,w=e.value;if(!w?.effectiveRequest?.messages||!w.pipelineInfo?.messageMapping)return d;const x=w.effectiveRequest.messages,M=w.pipelineInfo.messageMapping;for(let D=0;D<M.length;D++){const V=M[D],H=x[D];H&&d.set(V,H)}return d}),n=h(()=>{const d=new Set,w=e.value;if(!w?.effectiveRequest?.messages)return d;const x=w.request.messages??[];for(const[M,D]of l.value){const V=x[M];V&&V.content!==D.content&&JSON.stringify(V.content)!==JSON.stringify(D.content)&&d.add(M)}return d}),f=h(()=>{const d=e.value;return d?.effectiveRequest?n.value.size>0||!!d.effectiveRequest.system:!1}),a=h(()=>{const d=e.value;if(!d?.effectiveRequest?.system)return!1;const w=d.request.system,x=d.effectiveRequest.system;return!w||!x?!!x:JSON.stringify(w)!==JSON.stringify(x)}),r=h(()=>{const d=n.value.size,w=a.value,x=t.value>=0,M=x?t.value:0;return{msgCount:d,sysRewritten:w,truncated:x,truncatedCount:M}}),g=h(()=>[...n.value].sort((d,w)=>d-w));function m(d){return l.value.get(d)??null}function b(d){return n.value.has(d)}function _(d){const w=t.value;return w<0?!1:d<w}return{truncationPoint:t,hasRewrites:f,isSystemRewritten:a,rewriteSummary:r,rewrittenIndices:n,rewrittenIndexList:g,getRewrittenMessage:m,isMessageRewritten:b,isMessageTruncated:_}}const Ie=Symbol("rawModal");function ns(){const e=O(!1),t=he(null),l=he(null),n=O("");function f(a,r,g){t.value=a,l.value=g??null,n.value=r,e.value=!0}return fe(Ie,{openRawModal:f}),{visible:e,data:t,rewrittenData:l,title:n,openRawModal:f}}function ve(){const e=W(Ie);if(!e)throw new Error("useRawModal() called outside of RawModal provider");return e}const Ee=Symbol("sharedResizeObserver");function as(){const e=new Map,t=new Set;let l=null;const n=new ResizeObserver(g=>{for(const m of g)t.add(m.target);l===null&&(l=requestAnimationFrame(()=>{l=null;for(const m of t)e.get(m)?.();t.clear()}))});function f(g,m){e.set(g,m),n.observe(g)}function a(g){e.delete(g),n.unobserve(g)}se(()=>{n.disconnect(),e.clear(),t.clear(),l!==null&&cancelAnimationFrame(l)});const r={observe:f,unobserve:a};return fe(Ee,r),r}function Be(){const e=W(Ee);if(!e)throw new Error("useSharedResizeObserver() called outside of provider");return e}const os={class:"base-checkbox"},ls=["checked"],rs={key:0,class:"checkbox-label"},is=C({__name:"BaseCheckbox",props:{modelValue:{type:Boolean},label:{}},emits:["update:modelValue"],setup(e){return(t,l)=>(o(),i("label",os,[s("input",{type:"checkbox",checked:e.modelValue,onChange:l[0]||(l[0]=n=>t.$emit("update:modelValue",n.target.checked))},null,40,ls),e.label?(o(),i("span",rs,c(e.label),1)):v("",!0)]))}}),be=S(is,[["__scopeId","data-v-b169bfe7"]]),us={class:"detail-toolbar"},cs={class:"toolbar-row"},ds={key:0,class:"toolbar-row rewrite-row"},vs={class:"rewrite-stats"},ms={key:0,class:"rewrite-stat"},ps={key:1,class:"rewrite-stat"},fs={key:2,class:"rewrite-stat rewrite-stat-truncated"},ys={class:"rewrite-controls"},gs={key:0,class:"rewrite-nav"},hs={class:"nav-label"},ws=C({__name:"DetailToolbar",props:{hasRewrites:{type:Boolean},rewriteSummary:{},rewrittenIndexList:{}},emits:["export"],setup(e){const t=W("historyStore"),l=e,n=[{value:"system",label:"System"},{value:"user",label:"User"},{value:"assistant",label:"Assistant"},{value:"tool",label:"Tool"}],f=[{value:"text",label:"Text"},{value:"tool_use",label:"Tool Use"},{value:"tool_result",label:"Tool Result"},{value:"thinking",label:"Thinking"},{value:"image",label:"Image"}],a=[{value:"original",label:"All Original"},{value:"rewritten",label:"All Rewritten"},{value:"diff",label:"All Diff"}],r=O(-1);function g(_){t.detailViewMode.value=_}function m(_){const d=document.querySelector(`[data-msg-index="${_}"]`);d&&(d.scrollIntoView({behavior:"smooth",block:"center"}),d.classList.remove("highlight-flash"),d.offsetWidth,d.classList.add("highlight-flash"))}function b(_){const d=l.rewrittenIndexList;d.length!==0&&(_==="next"?r.value=r.value<d.length-1?r.value+1:0:r.value=r.value>0?r.value-1:d.length-1,m(d[r.value]))}return(_,d)=>(o(),i("div",us,[y(Re,{"model-value":u(t).detailSearch.value,placeholder:"Search in messages...",icon:"search","onUpdate:modelValue":d[0]||(d[0]=w=>u(t).detailSearch.value=w)},null,8,["model-value"]),s("div",cs,[y(te,{"model-value":u(t).detailFilterRole.value||null,options:n,placeholder:"Role","onUpdate:modelValue":d[1]||(d[1]=w=>u(t).detailFilterRole.value=w??"")},null,8,["model-value"]),y(te,{"model-value":u(t).detailFilterType.value||null,options:f,placeholder:"Type","onUpdate:modelValue":d[2]||(d[2]=w=>u(t).detailFilterType.value=w??"")},null,8,["model-value"]),y(be,{"model-value":u(t).aggregateTools.value,label:"Aggregate Tools","onUpdate:modelValue":d[3]||(d[3]=w=>u(t).aggregateTools.value=w)},null,8,["model-value"]),y(ue,{variant:"ghost",onClick:d[4]||(d[4]=w=>_.$emit("export"))},{default:$(()=>[y(q,{name:"download",size:13}),d[9]||(d[9]=E(" Export ",-1))]),_:1})]),e.hasRewrites?(o(),i("div",ds,[s("div",vs,[d[10]||(d[10]=s("span",{class:"rewrite-label"},"Rewrites:",-1)),e.rewriteSummary.msgCount>0?(o(),i("span",ms,c(e.rewriteSummary.msgCount)+" msg"+c(e.rewriteSummary.msgCount>1?"s":""),1)):v("",!0),e.rewriteSummary.sysRewritten?(o(),i("span",ps,"system")):v("",!0),e.rewriteSummary.truncated?(o(),i("span",fs,c(e.rewriteSummary.truncatedCount)+" truncated ",1)):v("",!0)]),s("div",ys,[y(te,{"model-value":u(t).detailViewMode.value,options:a,placeholder:"Per-message","onUpdate:modelValue":d[5]||(d[5]=w=>g(w))},null,8,["model-value"]),y(be,{"model-value":u(t).showOnlyRewritten.value,label:"Only Rewritten","onUpdate:modelValue":d[6]||(d[6]=w=>u(t).showOnlyRewritten.value=w)},null,8,["model-value"]),e.rewriteSummary.msgCount>0?(o(),i("div",gs,[s("button",{class:"nav-btn",title:"Previous rewritten message",onClick:d[7]||(d[7]=w=>b("prev"))},[y(q,{name:"chevron-up",size:10})]),s("span",hs,c(r.value>=0?r.value+1:"–")+"/"+c(e.rewrittenIndexList.length),1),s("button",{class:"nav-btn",title:"Next rewritten message",onClick:d[8]||(d[8]=w=>b("next"))},[y(q,{name:"chevron-down",size:10})])])):v("",!0)])])):v("",!0)]))}}),bs=S(ws,[["__scopeId","data-v-3ed4a3af"]]),ks={class:"section-title"},_s={key:0,class:"section-badge"},$s={class:"section-body"},xs=C({__name:"SectionBlock",props:{title:{},defaultCollapsed:{type:Boolean},badge:{},rawData:{},rewrittenRawData:{},rawTitle:{default:"Raw"}},setup(e){const t=e,{openRawModal:l}=ve(),n=O(t.defaultCollapsed??!1);function f(){n.value=!n.value}function a(r){r.stopPropagation(),t.rawData!==void 0&&l(t.rawData,t.rawTitle,t.rewrittenRawData)}return(r,g)=>(o(),i("div",{class:L(["section-block",{collapsed:n.value}])},[s("div",{class:"section-header",onClick:f},[y(q,{name:n.value?"chevron-right":"chevron-down",size:12,class:"section-chevron"},null,8,["name"]),s("span",ks,c(e.title),1),e.badge?(o(),i("span",_s,c(e.badge),1)):v("",!0),e.rawData!==void 0?(o(),i("button",{key:1,class:"section-raw-btn",title:"View raw JSON",onClick:a},[y(q,{name:"code",size:10}),g[0]||(g[0]=E(" Raw ",-1))])):v("",!0)]),U(s("div",$s,[P(r.$slots,"default",{},void 0)],512),[[J,!n.value]])],2))}}),Y=S(xs,[["__scopeId","data-v-6d33a6f9"]]),Rs={class:"sse-timeline"},Ts={class:"sse-offset"},Cs={key:0,class:"sse-summary"},Ss=C({__name:"SseEventsSection",props:{events:{}},setup(e){const t=e;function l(r){return r<1e3?`+${r}ms`:`+${(r/1e3).toFixed(1)}s`}function n(r){const g=r.data;switch(r.type){case"message_start":{const m=g.message;return m?.model?`model=${m.model}`:""}case"content_block_start":{const m=g.content_block,b=[`index=${g.index}`];return m?.type&&b.push(`type=${m.type}`),m?.name&&b.push(`name=${m.name}`),b.join(" ")}case"content_block_stop":return`index=${g.index}`;case"message_delta":{const m=g.delta,b=[];m?.stop_reason&&b.push(`stop=${m.stop_reason}`);const _=g.usage;return _?.output_tokens&&b.push(`out=${_.output_tokens}`),b.join(" ")}case"error":{const m=g.error;return m?.message?String(m.message).slice(0,80):""}default:return""}}function f(r){switch(r){case"message_start":return"green";case"message_delta":return"blue";case"message_stop":return"dim";case"content_block_start":return"cyan";case"content_block_stop":return"dim";case"error":return"red";default:return"default"}}const a=h(()=>`${t.events.length} events`);return(r,g)=>(o(),T(Y,{title:"SSE Events",badge:a.value,"default-collapsed":!0,"raw-data":e.events,"raw-title":"Raw — SSE Events"},{default:$(()=>[s("div",Rs,[(o(!0),i(A,null,F(e.events,(m,b)=>(o(),i("div",{key:b,class:"sse-event"},[s("span",Ts,c(l(m.offsetMs)),1),s("span",{class:L(["sse-type","sse-type-"+f(m.type)])},c(m.type),3),n(m)?(o(),i("span",Cs,c(n(m)),1)):v("",!0)]))),128))])]),_:1},8,["badge","raw-data"]))}}),Ms=S(Ss,[["__scopeId","data-v-2edf43f6"]]),Is={class:"meta-grid"},Es={class:"meta-row"},Bs={class:"meta-value"},Os={class:"meta-row"},Ls={class:"meta-value"},qs={class:"meta-row"},Ds={class:"meta-value"},Ns={key:0,class:"meta-row"},Vs={class:"meta-row"},zs={class:"meta-value"},As={key:1,class:"meta-row"},Hs={class:"meta-value"},js={key:2,class:"meta-row"},Us={class:"meta-value"},Js={key:3,class:"meta-row"},Ps={class:"meta-value"},Fs={key:4,class:"meta-row"},Ws={class:"meta-value"},Ks={key:5,class:"meta-section"},Qs={class:"meta-row"},Gs={class:"meta-value mono"},Xs={class:"meta-row"},Ys={class:"meta-value mono"},Zs={key:0,class:"meta-row"},en={class:"meta-value mono"},tn={key:1,class:"meta-row"},sn={class:"meta-value mono"},nn={key:6,class:"meta-row meta-error"},an={class:"meta-value error-text"},on={key:7,class:"meta-section"},ln={class:"raw-body"},rn={key:8,class:"meta-row"},un={class:"meta-value"},cn={key:9,class:"meta-section"},dn={class:"meta-row"},vn={class:"meta-value"},mn={class:"meta-row"},pn={class:"meta-value mono"},fn={key:10,class:"meta-section"},yn={key:0,class:"meta-row"},gn={class:"meta-value"},hn={key:1,class:"meta-row"},wn={class:"meta-value"},bn={key:11,class:"meta-section"},kn={key:0,class:"meta-row"},_n={class:"meta-label meta-label--attempt"},$n={key:1,class:"meta-row"},xn={class:"meta-value"},Rn={key:2,class:"meta-row"},Tn={class:"meta-value"},Cn={key:3,class:"meta-row"},Sn={class:"meta-value"},Mn={key:4,class:"meta-row"},In={class:"meta-value"},En={key:5,class:"meta-row"},Bn={class:"meta-value"},On=C({__name:"MetaInfo",props:{entry:{}},setup(e){const{formatNumber:t,formatDuration:l,formatDate:n}=X();return(f,a)=>(o(),i("div",Is,[s("div",Es,[a[0]||(a[0]=s("span",{class:"meta-label"},"Time",-1)),s("span",Bs,c(u(n)(e.entry.timestamp)),1)]),s("div",Os,[a[1]||(a[1]=s("span",{class:"meta-label"},"Model",-1)),s("span",Ls,c(e.entry.response?.model||e.entry.request.model||"-"),1)]),s("div",qs,[a[2]||(a[2]=s("span",{class:"meta-label"},"Endpoint",-1)),s("span",Ds,[y(Q,{color:e.entry.endpoint==="anthropic-messages"?"purple":e.entry.endpoint==="openai-responses"?"green":"cyan"},{default:$(()=>[E(c(e.entry.endpoint),1)]),_:1},8,["color"])])]),e.entry.response?.status?(o(),i("div",Ns,[a[3]||(a[3]=s("span",{class:"meta-label"},"HTTP Status",-1)),s("span",{class:L(["meta-value",{"text-error":e.entry.response.status>=400,"text-success":e.entry.response.status<300}])},c(e.entry.response.status),3)])):v("",!0),s("div",Vs,[a[4]||(a[4]=s("span",{class:"meta-label"},"Stream",-1)),s("span",zs,c(e.entry.request.stream===!0?"Yes":"No"),1)]),e.entry.request.max_tokens?(o(),i("div",As,[a[5]||(a[5]=s("span",{class:"meta-label"},"Max Tokens",-1)),s("span",Hs,c(u(t)(e.entry.request.max_tokens)),1)])):v("",!0),e.entry.request.temperature!==void 0?(o(),i("div",js,[a[6]||(a[6]=s("span",{class:"meta-label"},"Temperature",-1)),s("span",Us,c(e.entry.request.temperature),1)])):v("",!0),e.entry.durationMs?(o(),i("div",Js,[a[7]||(a[7]=s("span",{class:"meta-label"},"Duration",-1)),s("span",Ps,c(u(l)(e.entry.durationMs)),1)])):v("",!0),e.entry.response?.stop_reason?(o(),i("div",Fs,[a[8]||(a[8]=s("span",{class:"meta-label"},"Stop Reason",-1)),s("span",Ws,c(e.entry.response.stop_reason),1)])):v("",!0),e.entry.response?.usage?(o(),i("div",Ks,[a[13]||(a[13]=s("div",{class:"meta-section-title"},"Token Usage",-1)),s("div",Qs,[a[9]||(a[9]=s("span",{class:"meta-label"},"Input",-1)),s("span",Gs,c(u(t)(e.entry.response.usage.input_tokens)),1)]),s("div",Xs,[a[10]||(a[10]=s("span",{class:"meta-label"},"Output",-1)),s("span",Ys,c(u(t)(e.entry.response.usage.output_tokens)),1)]),e.entry.response?.usage?.cache_read_input_tokens?(o(),i("div",Zs,[a[11]||(a[11]=s("span",{class:"meta-label"},"Cache Read",-1)),s("span",en,c(u(t)(e.entry.response.usage.cache_read_input_tokens)),1)])):v("",!0),e.entry.response?.usage?.cache_creation_input_tokens?(o(),i("div",tn,[a[12]||(a[12]=s("span",{class:"meta-label"},"Cache Create",-1)),s("span",sn,c(u(t)(e.entry.response.usage.cache_creation_input_tokens)),1)])):v("",!0)])):v("",!0),e.entry.response?.error?(o(),i("div",nn,[a[14]||(a[14]=s("span",{class:"meta-label"},"Error",-1)),s("span",an,c(e.entry.response.error),1)])):v("",!0),e.entry.response?.error&&e.entry.response?.rawBody?(o(),i("div",on,[a[15]||(a[15]=s("div",{class:"meta-section-title"},"Raw Response Body",-1)),s("pre",ln,c(e.entry.response.rawBody),1)])):v("",!0),e.entry.request.tools?.length?(o(),i("div",rn,[a[16]||(a[16]=s("span",{class:"meta-label"},"Tools",-1)),s("span",un,c(e.entry.request.tools.length)+" defined",1)])):v("",!0),e.entry.pipelineInfo?.truncation?(o(),i("div",cn,[a[19]||(a[19]=s("div",{class:"meta-section-title"},"Truncation",-1)),s("div",dn,[a[17]||(a[17]=s("span",{class:"meta-label"},"Removed",-1)),s("span",vn,c(e.entry.pipelineInfo.truncation.removedMessageCount)+" messages",1)]),s("div",mn,[a[18]||(a[18]=s("span",{class:"meta-label"},"Tokens",-1)),s("span",pn,c(u(t)(e.entry.pipelineInfo.truncation.originalTokens))+" -> "+c(u(t)(e.entry.pipelineInfo.truncation.compactedTokens)),1)])])):v("",!0),e.entry.pipelineInfo?.preprocessing&&(e.entry.pipelineInfo.preprocessing.strippedReadTagCount>0||e.entry.pipelineInfo.preprocessing.dedupedToolCallCount>0)?(o(),i("div",fn,[a[22]||(a[22]=s("div",{class:"meta-section-title"},"Preprocessing",-1)),e.entry.pipelineInfo.preprocessing.strippedReadTagCount?(o(),i("div",yn,[a[20]||(a[20]=s("span",{class:"meta-label"},"Read tag strip",-1)),s("span",gn,c(e.entry.pipelineInfo.preprocessing.strippedReadTagCount)+" tags",1)])):v("",!0),e.entry.pipelineInfo.preprocessing.dedupedToolCallCount?(o(),i("div",hn,[a[21]||(a[21]=s("span",{class:"meta-label"},"Dedup tool calls",-1)),s("span",wn,c(e.entry.pipelineInfo.preprocessing.dedupedToolCallCount)+" pairs",1)])):v("",!0)])):v("",!0),e.entry.pipelineInfo?.sanitization?.length?(o(),i("div",bn,[a[28]||(a[28]=s("div",{class:"meta-section-title"},"Sanitization",-1)),(o(!0),i(A,null,F(e.entry.pipelineInfo.sanitization,(r,g)=>(o(),i(A,{key:g},[e.entry.pipelineInfo.sanitization.length>1?(o(),i("div",kn,[s("span",_n,"Attempt "+c(g+1),1)])):v("",!0),r.totalBlocksRemoved?(o(),i("div",$n,[a[23]||(a[23]=s("span",{class:"meta-label"},"Blocks Removed",-1)),s("span",xn,c(r.totalBlocksRemoved)+" total",1)])):v("",!0),r.orphanedToolUseCount?(o(),i("div",Rn,[a[24]||(a[24]=s("span",{class:"meta-label"},"Orphan tool_use",-1)),s("span",Tn,c(r.orphanedToolUseCount),1)])):v("",!0),r.orphanedToolResultCount?(o(),i("div",Cn,[a[25]||(a[25]=s("span",{class:"meta-label"},"Orphan tool_result",-1)),s("span",Sn,c(r.orphanedToolResultCount),1)])):v("",!0),r.emptyTextBlocksRemoved?(o(),i("div",Mn,[a[26]||(a[26]=s("span",{class:"meta-label"},"Empty text",-1)),s("span",In,c(r.emptyTextBlocksRemoved),1)])):v("",!0),r.systemReminderRemovals?(o(),i("div",En,[a[27]||(a[27]=s("span",{class:"meta-label"},"Reminders",-1)),s("span",Bn,c(r.systemReminderRemovals)+" tags filtered",1)])):v("",!0)],64))),128))])):v("",!0)]))}}),Ln=S(On,[["__scopeId","data-v-726393af"]]),qn={class:"truncation-divider"},Dn={class:"divider-content"},Nn={class:"divider-text"},Vn={class:"divider-detail"},zn=C({__name:"TruncationDivider",props:{truncation:{}},setup(e){const{formatNumber:t,formatDuration:l}=X();return(n,f)=>(o(),i("div",qn,[f[1]||(f[1]=s("div",{class:"divider-line"},null,-1)),s("div",Dn,[f[0]||(f[0]=s("span",{class:"divider-icon"},"✂",-1)),s("span",Nn,c(e.truncation.removedMessageCount)+" messages truncated ",1),s("span",Vn,c(u(t)(e.truncation.originalTokens))+" → "+c(u(t)(e.truncation.compactedTokens))+" tokens ("+c(u(l)(e.truncation.processingTimeMs))+") ",1)]),f[2]||(f[2]=s("div",{class:"divider-line"},null,-1))]))}}),An=S(zn,[["__scopeId","data-v-9cfada0f"]]),Hn={class:"attempts-timeline"},jn={class:"timeline-title"},Un={class:"timeline-track"},Jn={class:"node-info"},Pn={class:"node-header"},Fn={class:"node-index"},Wn={key:0,class:"node-strategy"},Kn={class:"node-duration"},Qn={key:0,class:"node-error"},Gn={key:1,class:"node-truncation"},Xn={key:2,class:"node-meta"},Yn=C({__name:"AttemptsTimeline",props:{attempts:{}},setup(e){const{formatDuration:t,formatNumber:l}=X();function n(f){return f.error?"var(--error)":"var(--success)"}return(f,a)=>(o(),i("div",Hn,[s("div",jn,"Retry Timeline ("+c(e.attempts.length)+" attempts)",1),s("div",Un,[(o(!0),i(A,null,F(e.attempts,r=>(o(),i("div",{key:r.index,class:"timeline-node"},[s("div",{class:"node-dot",style:pe({background:n(r)})},null,4),s("div",Jn,[s("div",Pn,[s("span",Fn,"#"+c(r.index+1),1),r.strategy?(o(),i("span",Wn,c(r.strategy),1)):v("",!0),s("span",Kn,c(u(t)(r.durationMs)),1)]),r.error?(o(),i("div",Qn,c(r.error),1)):v("",!0),r.truncation?.wasTruncated?(o(),i("div",Gn," Truncated: "+c(u(l)(r.truncation.originalTokens))+" -> "+c(u(l)(r.truncation.compactedTokens))+" tokens, "+c(r.truncation.removedMessageCount)+" msg removed ",1)):v("",!0),r.effectiveMessageCount?(o(),i("div",Xn,c(r.effectiveMessageCount)+" messages ",1)):v("",!0)])]))),128))])]))}}),Zn=S(Yn,[["__scopeId","data-v-0724a3cd"]]),ea={class:"headers-section"},ta={class:"toggle-icon"},sa={class:"header-count"},na={key:0,class:"headers-grid"},aa={class:"header-name"},oa={class:"header-value"},la=C({__name:"HeadersSection",props:{headers:{},title:{}},setup(e){const t=O(!0);return(l,n)=>(o(),i("div",ea,[s("button",{class:"headers-toggle",onClick:n[0]||(n[0]=f=>t.value=!t.value)},[s("span",ta,c(t.value?"+":"-"),1),E(" "+c(e.title)+" ",1),s("span",sa,"("+c(Object.keys(e.headers).length)+")",1)]),t.value?v("",!0):(o(),i("div",na,[(o(!0),i(A,null,F(e.headers,(f,a)=>(o(),i("div",{key:String(a),class:"header-row"},[s("span",aa,c(a),1),s("span",oa,c(f),1)]))),128))]))]))}}),ke=S(la,[["__scopeId","data-v-717c90af"]]);function ye(){const{show:e}=ze();async function t(l,n="Copied!"){try{await navigator.clipboard.writeText(l),e(n,"success")}catch{e("Copy failed","error")}}return{copy:t}}const ra={class:"line-number-pre"},ia={class:"line-no"},ua=["innerHTML"],ca=C({__name:"LineNumberPre",props:{html:{}},setup(e){const t=e,l=h(()=>t.html.split(`
|
|
2
|
+
`));return(n,f)=>(o(),i("div",ra,[(o(!0),i(A,null,F(l.value,(a,r)=>(o(),i("div",{key:r,class:"line"},[s("span",ia,c(r+1),1),s("span",{class:"line-content",innerHTML:a||""},null,8,ua)]))),128))]))}}),de=S(ca,[["__scopeId","data-v-a98c3fb0"]]),da=["innerHTML"],va=C({__name:"DiffView",props:{oldText:{},newText:{},outputFormat:{default:"side-by-side"}},setup(e){const t=e,l=h(()=>{try{const n=Ae("original","rewritten",t.oldText,t.newText);return He(n,{outputFormat:t.outputFormat,drawFileList:!1,matching:"lines"})}catch{return"<pre>Diff generation failed</pre>"}});return(n,f)=>(o(),i("div",{class:"diff-view",innerHTML:l.value},null,8,da))}}),Oe=S(va,[["__scopeId","data-v-1175ff40"]]),ma={class:"system-header-left"},pa={class:"collapse-icon"},fa=["title"],ya={class:"system-header-right"},ga={key:0,class:"cache-label"},ha=C({__name:"SystemMessage",props:{system:{},rewrittenSystem:{},searchQuery:{},globalViewMode:{}},setup(e){const t=e,{highlightSearch:l,escapeHtml:n}=X(),{copy:f}=ye(),{openRawModal:a}=ve(),r=O(!1),g=O(!1),m=O(null),b=h(()=>m.value?m.value:t.globalViewMode&&V.value?t.globalViewMode:"original"),_=h(()=>m.value!==null);function d(B){m.value=B}function w(){m.value=null}function x(B){return typeof B=="string"?B:Array.isArray(B)?B.map(p=>p.text).join(`
|
|
3
|
+
`):""}const M=h(()=>x(t.system)),D=h(()=>t.rewrittenSystem?x(t.rewrittenSystem):""),V=h(()=>!!t.rewrittenSystem),H=h(()=>b.value==="rewritten"&&V.value?D.value:M.value),ae=h(()=>t.searchQuery?l(H.value,t.searchQuery):n(H.value)),K=h(()=>{const B=M.value;return B.length>80?B.slice(0,80)+"...":B}),oe=h(()=>typeof t.system=="string"?[{type:"text",text:t.system}]:t.system),Z=h(()=>typeof t.system=="string"?!1:t.system.some(B=>B.cache_control)),N=h(()=>({system:t.system})),I=h(()=>t.rewrittenSystem?{system:t.rewrittenSystem}:null);return(B,p)=>(o(),i("div",{class:L(["system-message",{collapsed:r.value}])},[s("div",{class:"system-header",onClick:p[9]||(p[9]=k=>r.value=!r.value)},[s("div",ma,[s("span",pa,c(r.value?"▸":"▾"),1),y(Q,{color:"purple"},{default:$(()=>[...p[10]||(p[10]=[E("system",-1)])]),_:1}),Z.value?(o(),T(Q,{key:0,color:"warning"},{default:$(()=>[...p[11]||(p[11]=[E("cached",-1)])]),_:1})):v("",!0),V.value?(o(),T(Q,{key:1,color:"warning"},{default:$(()=>[...p[12]||(p[12]=[E("rewritten",-1)])]),_:1})):v("",!0),r.value?(o(),i("span",{key:2,class:"collapsed-summary",title:K.value},c(K.value),9,fa)):v("",!0)]),s("div",ya,[V.value&&!r.value?(o(),i("div",{key:0,class:"view-toggle",onClick:p[4]||(p[4]=j(()=>{},["stop"]))},[s("button",{class:L({active:b.value==="original"}),onClick:p[0]||(p[0]=k=>d("original"))},"Original",2),s("button",{class:L({active:b.value==="rewritten"}),onClick:p[1]||(p[1]=k=>d("rewritten"))},"Rewritten",2),s("button",{class:L({active:b.value==="diff"}),onClick:p[2]||(p[2]=k=>d("diff"))},"Diff",2),_.value?(o(),i("button",{key:0,class:"reset-btn",title:"Reset to global view mode",onClick:p[3]||(p[3]=k=>w())},"×")):v("",!0)])):v("",!0),r.value?v("",!0):U((o(),i("button",{key:1,class:"action-btn",onClick:p[5]||(p[5]=j(k=>g.value=!g.value,["stop"]))},[y(q,{name:"expand",size:10}),p[13]||(p[13]=E(" Expand ",-1))],512)),[[J,!g.value]]),!r.value&&g.value?(o(),i("button",{key:2,class:"action-btn",onClick:p[6]||(p[6]=j(k=>g.value=!1,["stop"]))},[y(q,{name:"contract",size:10}),p[14]||(p[14]=E(" Collapse ",-1))])):v("",!0),s("button",{class:"action-btn",title:"Copy",onClick:p[7]||(p[7]=j(k=>u(f)(H.value),["stop"]))},[y(q,{name:"copy",size:10}),p[15]||(p[15]=E(" Copy ",-1))]),s("button",{class:"action-btn",title:"View raw JSON",onClick:p[8]||(p[8]=j(k=>u(a)(N.value,"Raw — system",I.value),["stop"]))},[y(q,{name:"code",size:10}),p[16]||(p[16]=E(" Raw ",-1))])])]),U(s("div",{class:L(["system-body",{"body-expanded":g.value}])},[b.value==="diff"&&V.value?(o(),T(Oe,{key:0,"old-text":M.value,"new-text":D.value},null,8,["old-text","new-text"])):b.value==="original"&&typeof e.system!="string"?(o(!0),i(A,{key:1},F(oe.value,(k,R)=>(o(),i("div",{key:R,class:"system-block-item"},[k.cache_control?(o(),i("div",ga,"[cache: "+c(k.cache_control.type)+"]",1)):v("",!0),y(de,{html:e.searchQuery?u(l)(k.text,e.searchQuery):u(n)(k.text)},null,8,["html"])]))),128)):(o(),T(de,{key:2,html:ae.value},null,8,["html"]))],2),[[J,!r.value]])],2))}}),wa=S(ha,[["__scopeId","data-v-eac28575"]]),ba=["id"],ka={class:"content-block-header-left"},_a={class:"collapse-icon"},$a=["title"],xa={class:"content-block-header-right"},Ra=["title"],Ta=C({__name:"ContentBlockWrapper",props:{label:{},labelColor:{default:"text-muted"},summary:{default:""},blockId:{},copyText:{},rawData:{},rawTitle:{default:"Raw"}},setup(e){const t=e,{copy:l}=ye(),{openRawModal:n}=ve(),f=Be(),a=O(!1),r=O(!1),g=O(!1),m=O();function b(){a.value=!a.value}function _(M){M.stopPropagation(),r.value=!r.value}function d(M){M.stopPropagation(),t.copyText&&l(t.copyText)}function w(M){M.stopPropagation(),t.rawData!==void 0&&n(t.rawData,t.rawTitle)}function x(){m.value&&(g.value=m.value.scrollHeight>208)}return le(()=>{m.value&&(f.observe(m.value,x),ee(x))}),se(()=>{m.value&&f.unobserve(m.value)}),(M,D)=>(o(),i("div",{class:"content-block",id:e.blockId},[s("div",{class:"content-block-header",onClick:b},[s("div",ka,[s("span",_a,c(a.value?"▸":"▾"),1),s("span",{class:L(["content-type-label","label-"+e.labelColor])},c(e.label),3),P(M.$slots,"header-extra",{},void 0),a.value&&e.summary?(o(),i("span",{key:0,class:"collapsed-summary",title:e.summary},c(e.summary),9,$a)):v("",!0)]),s("div",xa,[!a.value&&g.value?(o(),i("button",{key:0,class:"action-btn",title:r.value?"Collapse":"Expand",onClick:_},[y(q,{name:r.value?"contract":"expand",size:10},null,8,["name"]),E(" "+c(r.value?"Collapse":"Expand"),1)],8,Ra)):v("",!0),e.copyText?(o(),i("button",{key:1,class:"action-btn",title:"Copy",onClick:d},[y(q,{name:"copy",size:10}),D[0]||(D[0]=E(" Copy ",-1))])):v("",!0),e.rawData!==void 0?(o(),i("button",{key:2,class:"action-btn",title:"View raw JSON",onClick:w},[y(q,{name:"code",size:10}),D[1]||(D[1]=E(" Raw ",-1))])):v("",!0)])]),U(s("div",{ref_key:"bodyRef",ref:m,class:L(["content-block-body",{"body-collapsed":!r.value}])},[P(M.$slots,"default",{},void 0)],2),[[J,!a.value]])],8,ba))}}),ne=S(Ta,[["__scopeId","data-v-0742d16c"]]);function ge(e,t){const{highlightSearch:l,escapeHtml:n}=X();return{displayHtml:h(()=>{const a=typeof e=="function"?e():u(e),r=typeof t=="function"?t():u(t);return r?l(a,r):n(a)})}}const Ca=C({__name:"TextBlock",props:{text:{}},setup(e){const t=e,{searchQuery:l}=re(),n=h(()=>t.text.length>60?t.text.slice(0,60)+"...":t.text),{displayHtml:f}=ge(()=>t.text,l);return(a,r)=>(o(),T(ne,{label:"TEXT","label-color":"text-muted",summary:n.value,"copy-text":e.text,"raw-data":{type:"text",text:e.text},"raw-title":"Raw — text"},{default:$(()=>[y(de,{html:u(f)},null,8,["html"])]),_:1},8,["summary","copy-text","raw-data"]))}}),Sa={key:0,class:"redacted-label"},Ma=["innerHTML"],Ia=C({__name:"ThinkingBlock",props:{text:{},redacted:{type:Boolean,default:!1}},setup(e){const t=e,{searchQuery:l}=re(),n=h(()=>t.redacted?"[redacted]":t.text.length>60?t.text.slice(0,60)+"...":t.text),{displayHtml:f}=ge(()=>t.text,l),a=h(()=>t.redacted?"<em>[Thinking content redacted]</em>":f.value);return(r,g)=>(o(),T(ne,{label:"THINKING","label-color":"purple",summary:n.value,"copy-text":e.redacted?void 0:e.text,"raw-data":e.redacted?void 0:{type:"thinking",thinking:e.text},"raw-title":"Raw — thinking",class:L({redacted:e.redacted})},{"header-extra":$(()=>[e.redacted?(o(),i("span",Sa,"REDACTED")):v("",!0)]),default:$(()=>[s("pre",{class:"thinking-text",innerHTML:a.value},null,8,Ma)]),_:1},8,["summary","copy-text","raw-data","class"]))}}),_e=S(Ia,[["__scopeId","data-v-7878f7b8"]]),Ea={class:"image-media-type"},Ba=["src"],Oa=C({__name:"ImageBlock",props:{mediaType:{},data:{}},setup(e){return(t,l)=>(o(),T(ne,{label:"IMAGE","label-color":"pink",summary:e.mediaType,"raw-data":{type:"image",source:{type:"base64",media_type:e.mediaType}},"raw-title":"Raw — image"},{"header-extra":$(()=>[s("span",Ea,c(e.mediaType),1)]),default:$(()=>[s("img",{src:"data:"+e.mediaType+";base64,"+e.data,alt:"Image content",class:"image-content"},null,8,Ba)]),_:1},8,["summary","raw-data"]))}}),La=S(Oa,[["__scopeId","data-v-7e48d486"]]),qa=["id"],Da={key:0,class:"result-tool-name"},Na={class:"result-tool-id"},Va={key:1,class:"result-error-badge"},za={key:0,class:"result-tool-name"},Aa={class:"result-tool-id"},Ha={key:1,class:"result-error-badge"},ja={key:0,class:"tool-jump"},Ua=C({__name:"ToolResultBlock",props:{block:{},toolName:{},embedded:{type:Boolean}},setup(e){const t=e,{searchQuery:l,aggregateTools:n,scrollToCall:f}=re(),a=h(()=>n.value&&!t.embedded),r=h(()=>t.block.is_error===!0),g=h(()=>{const _=t.block.content;return typeof _=="string"?_:Array.isArray(_)?me(_):""}),m=h(()=>t.toolName?t.toolName:"for "+t.block.tool_use_id.slice(0,8)),{displayHtml:b}=ge(g,l);return(_,d)=>(o(),i(A,null,[U(s("div",{class:"aggregated-stub",id:a.value?"tool-result-"+e.block.tool_use_id:void 0},[s("span",{class:L(["stub-label",r.value?"label-error":"label-success"])},"TOOL RESULT",2),e.toolName?(o(),i("span",Da,c(e.toolName),1)):v("",!0),s("span",Na,c(e.block.tool_use_id),1),r.value?(o(),i("span",Va,"ERROR")):v("",!0),s("a",{class:"jump-link",onClick:d[0]||(d[0]=j(w=>u(f)(e.block.tool_use_id),["prevent"]))}," ← Jump to call ")],8,qa),[[J,a.value]]),U(y(ne,{label:"TOOL RESULT","label-color":r.value?"error":"success",summary:m.value,"block-id":"tool-result-"+e.block.tool_use_id,"copy-text":g.value,"raw-data":e.block,"raw-title":"Raw — tool_result"+(e.toolName?": "+e.toolName:"")},{"header-extra":$(()=>[e.toolName?(o(),i("span",za,c(e.toolName),1)):v("",!0),s("span",Aa,"for "+c(e.block.tool_use_id),1),r.value?(o(),i("span",Ha,"ERROR")):v("",!0)]),default:$(()=>[y(de,{html:u(b)},null,8,["html"]),e.embedded?v("",!0):(o(),i("div",ja,[s("a",{class:"jump-link",onClick:d[1]||(d[1]=j(w=>u(f)(e.block.tool_use_id),["prevent"]))}," ← Jump to call ")]))]),_:1},8,["label-color","summary","block-id","copy-text","raw-data","raw-title"]),[[J,!a.value]])],64))}}),Le=S(Ua,[["__scopeId","data-v-ef1fc34e"]]),Ja={class:"tool-name"},Pa={class:"tool-id"},Fa={key:1,class:"tool-input"},Wa={class:"tool-aggregate-result"},Ka={class:"tool-jump"},Qa=C({__name:"ToolUseBlock",props:{block:{}},setup(e){const t=e,{aggregateTools:l,toolResultMap:n,scrollToResult:f}=re(),a=h(()=>{try{return JSON.stringify(t.block.input,null,2)}catch{return String(t.block.input)}}),r=h(()=>t.block.input!==null&&typeof t.block.input=="object"),g=h(()=>n.value?n.value[t.block.id]??null:null),m=h(()=>!!g.value);return(b,_)=>(o(),T(ne,{label:"TOOL USE","label-color":"cyan",summary:e.block.name,"block-id":"tool-use-"+e.block.id,"copy-text":a.value,"raw-data":e.block,"raw-title":"Raw — tool_use: "+e.block.name},{"header-extra":$(()=>[s("span",Ja,c(e.block.name),1),s("span",Pa,c(e.block.id),1)]),default:$(()=>[r.value?(o(),T(u(ie),{key:0,data:e.block.input,deep:3,"show-icon":!0,"show-line-number":!0,"collapsed-on-click-brackets":!0},null,8,["data"])):(o(),i("pre",Fa,c(a.value),1)),m.value?(o(),i(A,{key:2},[U(s("div",Wa,[y(Le,{block:g.value,"tool-name":e.block.name,embedded:!0},null,8,["block","tool-name"])],512),[[J,u(l)]]),U(s("div",Ka,[s("a",{class:"jump-link",onClick:_[0]||(_[0]=j(d=>u(f)(e.block.id),["prevent"]))}," → Jump to result ")],512),[[J,!u(l)]])],64)):v("",!0)]),_:1},8,["summary","block-id","copy-text","raw-data","raw-title"]))}}),Ga=S(Qa,[["__scopeId","data-v-040cd916"]]),Xa={class:"generic-content"},Ya=C({__name:"GenericBlock",props:{block:{}},setup(e){const t=e,l=h(()=>(t.block.type||"UNKNOWN").toUpperCase()),n=h(()=>{try{return JSON.stringify(t.block,null,2)}catch{return String(t.block)}});return(f,a)=>(o(),T(ne,{label:l.value,"label-color":"text-muted",summary:e.block.type||"unknown","raw-data":e.block,"raw-title":"Raw — "+(e.block.type||"unknown")},{default:$(()=>[s("pre",Xa,c(n.value),1)]),_:1},8,["label","summary","raw-data","raw-title"]))}}),Za=S(Ya,[["__scopeId","data-v-f03251db"]]),eo={key:0,class:"error-boundary"},to={class:"error-label"},so={class:"error-message"},no=C({__name:"ErrorBoundary",props:{label:{}},setup(e){const t=O(null);return De(l=>(t.value=l,console.error("[ErrorBoundary]",l),!1)),(l,n)=>t.value?(o(),i("div",eo,[n[0]||(n[0]=s("span",{class:"error-icon"},"!",-1)),s("span",to,c(e.label||"Render error"),1),s("span",so,c(t.value.message),1)])):P(l.$slots,"default",{key:1},void 0)}}),G=S(no,[["__scopeId","data-v-c8494337"]]),ao={class:"content-renderer"},oo=C({__name:"ContentRenderer",props:{content:{},message:{}},setup(e){const t=e,{filterType:l,toolUseNameMap:n}=re(),f=h(()=>t.message?es(t.message):typeof t.content=="string"?[{type:"text",text:t.content}]:Array.isArray(t.content)?t.content:[]),a=h(()=>{let r=f.value;return l.value&&(r=r.filter(g=>g.type===l.value)),r});return(r,g)=>(o(),i("div",ao,[(o(!0),i(A,null,F(a.value,(m,b)=>(o(),T(G,{key:b,label:m.type+" block"},{default:$(()=>[u(Te)(m)?(o(),T(Ca,{key:0,text:m.text},null,8,["text"])):u(Xt)(m)?(o(),T(_e,{key:1,text:m.thinking},null,8,["text"])):u(Yt)(m)?(o(),T(_e,{key:2,text:"",redacted:!0})):u(Zt)(m)&&m.source.type==="base64"?(o(),T(La,{key:3,"media-type":m.source.media_type,data:m.source.data},null,8,["media-type","data"])):u(Ce)(m)?(o(),T(Ga,{key:4,block:m},null,8,["block"])):u(Se)(m)?(o(),T(Le,{key:5,block:m,"tool-name":u(n)[m.tool_use_id]},null,8,["block","tool-name"])):(o(),T(Za,{key:6,block:m},null,8,["block"]))]),_:2},1032,["label"]))),128))]))}}),lo=S(oo,[["__scopeId","data-v-ab1a6c3a"]]),ro=["data-msg-index"],io={class:"msg-header-left"},uo={class:"collapse-icon"},co={class:"msg-index"},vo=["title"],mo={class:"msg-header-right"},po=["title"],fo=C({__name:"MessageBlock",props:{message:{},index:{},isTruncated:{type:Boolean,default:!1},isRewritten:{type:Boolean,default:!1},rewrittenMessage:{},globalViewMode:{}},setup(e){const t=e,l=O(!1),n=O(!1),f=O(!1),a=O(),{openRawModal:r}=ve(),g=Be(),m=O(null),b=h(()=>m.value?m.value:t.globalViewMode&&t.isRewritten&&t.rewrittenMessage?t.globalViewMode:"original"),_=h(()=>m.value!==null);function d(N){m.value=N}function w(){m.value=null}const x=h(()=>{switch(t.message.role){case"user":return"primary";case"assistant":return"success";case"system":return"purple";case"tool":return"cyan";default:return"default"}}),M=h(()=>{const N=t.message.content;if(typeof N=="string")return N.length>80?N.slice(0,80)+"...":N;if(!Array.isArray(N)||N.length===0)return"";const I=N[0];if(N.length===1&&Te(I)){const p=I.text;return p.length>80?p.slice(0,80)+"...":p}const B={};for(const p of N)B[p.type]=(B[p.type]||0)+1;return Object.entries(B).map(([p,k])=>`${k} ${p}`).join(", ")}),D=h(()=>me(t.message.content)),V=h(()=>t.rewrittenMessage?me(t.rewrittenMessage.content):""),H=h(()=>b.value==="rewritten"&&t.rewrittenMessage?t.rewrittenMessage.content??"":t.message.content??""),ae=h(()=>b.value==="rewritten"&&t.rewrittenMessage?t.rewrittenMessage:t.message);function K(){a.value&&!n.value&&(f.value=a.value.scrollHeight>a.value.clientHeight+10)}function oe(N){N.stopPropagation(),n.value=!n.value,n.value||ee(K)}function Z(N){N.stopPropagation(),r(t.message,`Raw — ${t.message.role} #${t.index+1}`,t.isRewritten?t.rewrittenMessage:void 0)}return le(()=>{ee(()=>{K(),a.value&&g.observe(a.value,K)})}),se(()=>{a.value&&g.unobserve(a.value)}),ce(()=>t.message,()=>{n.value=!1,ee(K)}),(N,I)=>(o(),i("div",{class:L(["message-block",{truncated:e.isTruncated,collapsed:l.value,"is-rewritten":e.isRewritten}]),"data-msg-index":e.index},[s("div",{class:"msg-header",onClick:I[7]||(I[7]=B=>l.value=!l.value)},[s("div",io,[s("span",uo,c(l.value?"▸":"▾"),1),y(Q,{color:x.value},{default:$(()=>[E(c(e.message.role),1)]),_:1},8,["color"]),s("span",co,"#"+c(e.index+1),1),e.isRewritten?(o(),T(Q,{key:0,color:"warning"},{default:$(()=>[...I[8]||(I[8]=[E("rewritten",-1)])]),_:1})):v("",!0),e.isTruncated?(o(),T(Q,{key:1,color:"error"},{default:$(()=>[...I[9]||(I[9]=[E("truncated",-1)])]),_:1})):v("",!0),l.value&&M.value?(o(),i("span",{key:2,class:"collapsed-summary",title:M.value},c(M.value),9,vo)):v("",!0)]),s("div",mo,[e.isRewritten&&e.rewrittenMessage?(o(),i("div",{key:0,class:"view-toggle",onClick:I[4]||(I[4]=j(()=>{},["stop"]))},[s("button",{class:L({active:b.value==="original"}),onClick:I[0]||(I[0]=B=>d("original"))},"Original",2),s("button",{class:L({active:b.value==="rewritten"}),onClick:I[1]||(I[1]=B=>d("rewritten"))},"Rewritten",2),s("button",{class:L({active:b.value==="diff"}),onClick:I[2]||(I[2]=B=>d("diff"))},"Diff",2),_.value?(o(),i("button",{key:0,class:"reset-btn",title:"Reset to global view mode",onClick:I[3]||(I[3]=B=>w())},"×")):v("",!0)])):v("",!0),s("button",{class:"action-btn",title:"View raw JSON",onClick:I[5]||(I[5]=B=>Z(B))},[y(q,{name:"code",size:10}),I[10]||(I[10]=E(" Raw ",-1))]),f.value&&!l.value?(o(),i("button",{key:1,class:"action-btn",onClick:I[6]||(I[6]=B=>oe(B)),title:n.value?"Collapse content":"Show full content"},[y(q,{name:n.value?"contract":"expand",size:10},null,8,["name"]),E(" "+c(n.value?"Collapse":"Expand"),1)],8,po)):v("",!0)])]),U(s("div",{ref_key:"bodyRef",ref:a,class:L(["msg-body",{"body-limited":f.value&&!n.value}])},[b.value==="diff"&&e.isRewritten?(o(),T(Oe,{key:0,"old-text":D.value,"new-text":V.value},null,8,["old-text","new-text"])):(o(),T(lo,{key:1,content:H.value,message:ae.value},null,8,["content","message"]))],2),[[J,!l.value]])],10,ro))}}),$e=S(fo,[["__scopeId","data-v-2faca0f0"]]),yo={class:"modal-header"},go={class:"modal-title"},ho={class:"modal-header-actions"},wo={class:"modal-body"},bo=C({__name:"BaseModal",props:{visible:{type:Boolean},title:{},width:{},height:{}},emits:["update:visible"],setup(e,{emit:t}){const l=t;function n(){l("update:visible",!1)}function f(r){r.target.classList.contains("modal-overlay")&&n()}function a(r){r.key==="Escape"&&(r.stopPropagation(),n())}return(r,g)=>(o(),T(Ne,{to:"body"},[y(Ve,{name:"fade"},{default:$(()=>[e.visible?(o(),i("div",{key:0,class:"modal-overlay",onClick:f,onKeydown:a},[s("div",{class:"modal-content",style:pe({width:e.width||"80vw",height:e.height})},[s("div",yo,[s("h3",go,c(e.title),1),s("div",ho,[P(r.$slots,"header-actions",{},void 0,!0),s("button",{class:"modal-close",onClick:n},[y(q,{name:"close",size:16})])])]),s("div",wo,[P(r.$slots,"default",{},void 0,!0)])],4)],32)):v("",!0)]),_:3})]))}}),ko=S(bo,[["__scopeId","data-v-c68c542d"]]),_o={key:0,class:"json-split"},$o={class:"json-pane"},xo={class:"pane-header"},Ro={class:"json-viewer"},To={class:"json-pane"},Co={class:"pane-header"},So={class:"json-viewer"},Mo={key:1,class:"json-viewer"},Io=C({__name:"RawJsonModal",props:{visible:{type:Boolean},title:{},data:{},rewrittenData:{}},emits:["update:visible"],setup(e){const t=e,{copy:l}=ye(),n=h(()=>t.rewrittenData!=null),f=h(()=>{try{return JSON.stringify(t.data,null,2)}catch{return String(t.data)}}),a=h(()=>{if(!t.rewrittenData)return"";try{return JSON.stringify(t.rewrittenData,null,2)}catch{return String(t.rewrittenData)}});function r(){l(f.value)}function g(){l(a.value)}return(m,b)=>(o(),T(ko,{visible:e.visible,title:e.title,width:"95vw",height:"95vh","onUpdate:visible":b[0]||(b[0]=_=>m.$emit("update:visible",_))},{"header-actions":$(()=>[n.value?v("",!0):(o(),i("button",{key:0,class:"raw-copy-btn",title:"Copy JSON",onClick:r},[y(q,{name:"copy",size:12}),b[1]||(b[1]=E(" Copy ",-1))]))]),default:$(()=>[n.value?(o(),i("div",_o,[s("div",$o,[s("div",xo,[b[3]||(b[3]=s("span",{class:"pane-label"},"Original",-1)),s("button",{class:"raw-copy-btn",title:"Copy original JSON",onClick:r},[y(q,{name:"copy",size:12}),b[2]||(b[2]=E(" Copy ",-1))])]),s("div",Ro,[y(u(ie),{data:e.data,deep:5,"show-line-number":!0,"show-icon":!0,"show-length":!0,"collapsed-on-click-brackets":!0},null,8,["data"])])]),b[6]||(b[6]=s("div",{class:"pane-divider"},null,-1)),s("div",To,[s("div",Co,[b[5]||(b[5]=s("span",{class:"pane-label pane-label-rewritten"},"Rewritten",-1)),s("button",{class:"raw-copy-btn",title:"Copy rewritten JSON",onClick:g},[y(q,{name:"copy",size:12}),b[4]||(b[4]=E(" Copy ",-1))])]),s("div",So,[y(u(ie),{data:e.rewrittenData,deep:5,"show-line-number":!0,"show-icon":!0,"show-length":!0,"collapsed-on-click-brackets":!0},null,8,["data"])])])])):(o(),i("div",Mo,[y(u(ie),{data:e.data,deep:5,"show-line-number":!0,"show-icon":!0,"show-length":!0,"collapsed-on-click-brackets":!0},null,8,["data"])]))]),_:1},8,["visible","title"]))}}),Eo=S(Io,[["__scopeId","data-v-7a023d58"]]),Bo={class:"detail-panel"},Oo={key:0,class:"detail-empty"},Lo={class:"messages-list"},qo={key:0,class:"response-error"},Do={class:"error-text"},No=C({__name:"DetailPanel",setup(e){const t=W("historyStore"),l=O(),n=h(()=>t.selectedEntry.value),{visible:f,data:a,rewrittenData:r,title:g}=ns();as();const{truncationPoint:m,hasRewrites:b,rewriteSummary:_,rewrittenIndexList:d,getRewrittenMessage:w,isMessageRewritten:x,isMessageTruncated:M}=ss(n),D=h(()=>{const p={},k={};if(!n.value)return{resultMap:p,nameMap:k};for(const R of n.value.request.messages??[]){if(Array.isArray(R.content))for(const z of R.content)Se(z)&&(p[z.tool_use_id]=z),Ce(z)&&(k[z.id]=z.name);if(R.tool_calls)for(const z of R.tool_calls)k[z.id]=z.function.name;R.role==="tool"&&R.tool_call_id&&(p[R.tool_call_id]={type:"tool_result",tool_use_id:R.tool_call_id,content:typeof R.content=="string"?R.content:JSON.stringify(R.content)})}return{resultMap:p,nameMap:k}});ts({searchQuery:h(()=>t.detailSearch.value),filterType:h(()=>t.detailFilterType.value),aggregateTools:h(()=>t.aggregateTools.value),toolResultMap:h(()=>D.value.resultMap),toolUseNameMap:h(()=>D.value.nameMap),scrollToResult:N,scrollToCall:I});const V=h(()=>{if(!n.value)return[];let k=(n.value.request.messages??[]).map((R,z)=>({msg:R,originalIndex:z}));return t.detailFilterRole.value&&(k=k.filter(({msg:R})=>R.role===t.detailFilterRole.value)),t.showOnlyRewritten.value&&(k=k.filter(({originalIndex:R})=>x(R))),k}),H=h(()=>n.value?.response?.content?n.value.response.content:null),ae=h(()=>n.value?`${(n.value.request.messages??[]).length} messages`:""),K=h(()=>{if(!n.value?.effectiveRequest)return;const p=n.value.effectiveRequest;if(!(!p.messages&&!p.system))return{...n.value.request,...p.messages&&{messages:p.messages},...p.system!==void 0&&{system:p.system}}});function oe(p,k){return typeof p.content=="string"?!!(k==="text"||k==="tool_use"&&p.tool_calls?.length):Array.isArray(p.content)?p.content.some(R=>R.type===k):!1}function Z(p){p.classList.remove("highlight-flash"),p.offsetWidth,p.classList.add("highlight-flash")}function N(p){const k=document.getElementById("tool-result-"+p);k&&(k.scrollIntoView({behavior:"smooth",block:"center"}),Z(k))}function I(p){const k=document.getElementById("tool-use-"+p);k&&(k.scrollIntoView({behavior:"smooth",block:"center"}),Z(k))}ce(()=>t.detailSearch.value,p=>{p&&ee(()=>{setTimeout(()=>{const k=document.querySelector(".search-highlight");k&&k.scrollIntoView({behavior:"smooth",block:"center"})},50)})}),ce(n,p=>{p&&ee(()=>{l.value&&l.value.scrollTo(0,l.value.scrollHeight)})});function B(){if(!n.value)return;const p=JSON.stringify(n.value,null,2),k=new Blob([p],{type:"application/json"}),R=URL.createObjectURL(k),z=document.createElement("a");z.href=R;const qe=n.value.request.model||"unknown";z.download=`${n.value.id}_${qe}.json`,z.click(),URL.revokeObjectURL(R)}return(p,k)=>(o(),i("div",Bo,[u(t).hasSelection.value?n.value?(o(),i(A,{key:1},[y(bs,{"has-rewrites":u(b),"rewrite-summary":u(_),"rewritten-index-list":u(d),onExport:B},null,8,["has-rewrites","rewrite-summary","rewritten-index-list"]),s("div",{ref_key:"detailBodyRef",ref:l,class:"detail-body"},[y(Y,{title:"Request",badge:ae.value,"raw-data":n.value.request,"rewritten-raw-data":K.value,"raw-title":"Raw -- Request"},{default:$(()=>[y(G,{label:"System prompt"},{default:$(()=>[n.value.request.system?(o(),T(wa,{key:0,system:n.value.request.system,"rewritten-system":n.value.effectiveRequest?.system,"search-query":u(t).detailSearch.value,"global-view-mode":u(t).detailViewMode.value},null,8,["system","rewritten-system","search-query","global-view-mode"])):v("",!0)]),_:1}),s("div",Lo,[(o(!0),i(A,null,F(V.value,R=>(o(),i(A,{key:R.originalIndex},[n.value.pipelineInfo?.truncation&&R.originalIndex===u(m)?(o(),T(An,{key:0,truncation:n.value.pipelineInfo.truncation},null,8,["truncation"])):v("",!0),y(G,{label:"Message #"+R.originalIndex},{default:$(()=>[U(y($e,{message:R.msg,index:R.originalIndex,"is-truncated":u(M)(R.originalIndex),"is-rewritten":u(x)(R.originalIndex),"rewritten-message":u(w)(R.originalIndex),"global-view-mode":u(t).detailViewMode.value},null,8,["message","index","is-truncated","is-rewritten","rewritten-message","global-view-mode"]),[[J,!u(t).detailFilterType.value||oe(R.msg,u(t).detailFilterType.value)]])]),_:2},1032,["label"])],64))),128))])]),_:1},8,["badge","raw-data","rewritten-raw-data"]),H.value||n.value.response?.error?(o(),T(Y,{key:0,title:"Response",badge:H.value?"1 message":"","raw-data":n.value.response,"raw-title":"Raw -- Response"},{default:$(()=>[n.value.response?.error?(o(),i("div",qo,[k[2]||(k[2]=s("span",{class:"error-label"},"Error",-1)),s("span",Do,c(n.value.response.error),1)])):v("",!0),y(G,{label:"Response message"},{default:$(()=>[H.value?(o(),T($e,{key:0,message:H.value,index:0},null,8,["message"])):v("",!0)]),_:1})]),_:1},8,["badge","raw-data"])):v("",!0),y(G,{label:"SSE events"},{default:$(()=>[n.value.sseEvents?.length?(o(),T(Ms,{key:0,events:n.value.sseEvents},null,8,["events"])):v("",!0)]),_:1}),n.value.wireRequest?.headers?(o(),T(Y,{key:1,title:"Wire Request Headers","default-collapsed":""},{default:$(()=>[y(ke,{headers:n.value.wireRequest.headers,title:"Outbound Headers"},null,8,["headers"])]),_:1})):v("",!0),n.value.response?.headers?(o(),T(Y,{key:2,title:"Response Headers","default-collapsed":""},{default:$(()=>[y(ke,{headers:n.value.response.headers,title:"Upstream Response Headers"},null,8,["headers"])]),_:1})):v("",!0),n.value.attempts&&n.value.attempts.length>1?(o(),T(Y,{key:3,title:"Retry Timeline"},{default:$(()=>[y(Zn,{attempts:n.value.attempts},null,8,["attempts"])]),_:1})):v("",!0),y(Y,{title:"Meta","raw-data":n.value,"raw-title":"Raw -- Full Entry"},{default:$(()=>[y(G,{label:"Meta info"},{default:$(()=>[y(Ln,{entry:n.value},null,8,["entry"])]),_:1})]),_:1},8,["raw-data"])],512)],64)):v("",!0):(o(),i("div",Oo,[...k[1]||(k[1]=[s("p",null,"Select a request to view details",-1),s("p",{class:"detail-hint"},"Use up/down or j/k to navigate, / to search",-1)])])),y(Eo,{visible:u(f),title:u(g),data:u(a),"rewritten-data":u(r),"onUpdate:visible":k[0]||(k[0]=R=>f.value=R)},null,8,["visible","title","data","rewritten-data"])]))}}),Vo=S(No,[["__scopeId","data-v-a96c547e"]]),zo={class:"history-page"},Ao=C({__name:"HistoryPage",setup(e){const t=W("historyStore"),l=O();return je({onNavigate:n=>t.selectAdjacentEntry(n),onSearch:()=>l.value?.focusSearch(),onEscape:()=>t.clearSelection()}),(n,f)=>(o(),i("div",zo,[y(at),y(wt),y(_t,null,{left:$(()=>[y(G,{label:"Request list"},{default:$(()=>[y(Gt,{ref_key:"requestListRef",ref:l},null,512)]),_:1})]),right:$(()=>[y(G,{label:"Detail panel"},{default:$(()=>[y(Vo)]),_:1})]),_:1})]))}}),Po=S(Ao,[["__scopeId","data-v-59f15299"]]);export{Po as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.base-btn[data-v-5d391870]{display:inline-flex;align-items:center;gap:var(--spacing-xs);border-radius:var(--border-radius-sm);font-weight:500;white-space:nowrap;transition:all var(--transition-fast);border:1px solid var(--border);line-height:1}.base-btn[data-v-5d391870]:disabled{opacity:.5;cursor:not-allowed}.btn-size-sm[data-v-5d391870]{padding:4px 8px;font-size:var(--font-size-xs)}.btn-size-md[data-v-5d391870]{padding:6px 12px;font-size:var(--font-size-sm)}.btn-default[data-v-5d391870]{background:var(--bg-tertiary);color:var(--text)}.btn-default[data-v-5d391870]:hover:not(:disabled){background:var(--bg-hover)}.btn-primary[data-v-5d391870]{background:var(--primary);color:var(--primary-contrast);border-color:var(--primary)}.btn-primary[data-v-5d391870]:hover:not(:disabled){opacity:.9}.btn-danger[data-v-5d391870]{background:transparent;color:var(--error);border-color:var(--error)}.btn-danger[data-v-5d391870]:hover:not(:disabled){background:var(--error-muted)}.btn-ghost[data-v-5d391870]{background:transparent;border-color:transparent;color:var(--text-muted)}.btn-ghost[data-v-5d391870]:hover:not(:disabled){color:var(--text);background:var(--bg-tertiary)}.spinner[data-v-5d391870]{width:12px;height:12px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin-5d391870 .6s linear infinite}@keyframes spin-5d391870{to{transform:rotate(360deg)}}.base-select[data-v-1a8e761a]{background:var(--bg-tertiary);color:var(--text);border:1px solid var(--border);border-radius:var(--border-radius-sm);padding:4px 8px;font-size:var(--font-size-xs);cursor:pointer;outline:none;min-width:80px;appearance:auto}.base-select[data-v-1a8e761a]:focus{border-color:var(--primary)}.base-select[data-v-1a8e761a]:hover{border-color:var(--text-dim)}.icon-svg[data-v-ae6caa74]{display:inline-block;vertical-align:middle;flex-shrink:0}.app-header[data-v-ba112819]{height:var(--header-height);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);background:var(--bg-secondary);border-bottom:1px solid var(--border);flex-shrink:0}.header-left[data-v-ba112819]{display:flex;align-items:center;gap:var(--spacing-md)}.header-title[data-v-ba112819]{font-size:var(--font-size-lg);font-weight:600;color:var(--text)}.version-tag[data-v-ba112819]{font-size:var(--font-size-xs);font-weight:500;color:var(--text-dim);vertical-align:super}.header-right[data-v-ba112819]{display:flex;align-items:center;gap:var(--spacing-sm)}.ws-label[data-v-ba112819]{font-size:var(--font-size-xs);color:var(--text-dim);margin-right:var(--spacing-sm)}.export-dropdown[data-v-ba112819]{position:relative}.export-menu[data-v-ba112819]{position:absolute;top:100%;right:0;margin-top:4px;background:var(--bg-tertiary);border:1px solid var(--border);min-width:120px;z-index:100;box-shadow:var(--shadow-md)}.export-item[data-v-ba112819]{display:block;width:100%;padding:8px 12px;text-align:left;font-size:var(--font-size-sm);color:var(--text);background:transparent}.export-item[data-v-ba112819]:hover{background:var(--bg-hover)}@keyframes spin-ba112819{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.spinning[data-v-ba112819]{animation:spin-ba112819 1s linear infinite}@media(max-width:768px){.app-header[data-v-ba112819]{flex-wrap:wrap;height:auto;padding:var(--spacing-sm) var(--spacing-md);gap:var(--spacing-sm)}}.stats-bar[data-v-ea9ddd3f]{height:var(--stats-height);display:flex;align-items:center;gap:var(--spacing-lg);padding:0 var(--spacing-lg);background:var(--bg);border-bottom:1px solid var(--border-light);flex-shrink:0;font-size:var(--font-size-xs)}.stat-item[data-v-ea9ddd3f]{display:flex;align-items:center;gap:var(--spacing-xs)}.stat-value[data-v-ea9ddd3f]{font-weight:600;color:var(--text);font-family:var(--font-mono)}.stat-label[data-v-ea9ddd3f]{color:var(--text-dim)}.stat-success .stat-value[data-v-ea9ddd3f]{color:var(--success)}.stat-error .stat-value[data-v-ea9ddd3f]{color:var(--error)}@media(max-width:768px){.stats-bar[data-v-ea9ddd3f]{flex-wrap:wrap;height:auto;padding:var(--spacing-xs) var(--spacing-md);gap:var(--spacing-sm) var(--spacing-md)}}.split-pane[data-v-77cb6608]{display:flex;flex:1;overflow:hidden}.split-pane.dragging[data-v-77cb6608]{-webkit-user-select:none;user-select:none;cursor:col-resize}.split-left[data-v-77cb6608]{flex-shrink:0;overflow:hidden;display:flex;flex-direction:column}.split-handle[data-v-77cb6608]{width:4px;background:var(--border);cursor:col-resize;flex-shrink:0;transition:background var(--transition-fast)}.split-handle[data-v-77cb6608]:hover,.dragging .split-handle[data-v-77cb6608]{background:var(--primary)}.split-right[data-v-77cb6608]{flex:1;overflow:hidden;display:flex;flex-direction:column}@media(max-width:768px){.split-pane[data-v-77cb6608]{flex-direction:column}.split-left[data-v-77cb6608]{width:100%!important;height:40%;border-bottom:1px solid var(--border)}.split-handle[data-v-77cb6608]{display:none}.split-right[data-v-77cb6608]{height:60%}}.base-input[data-v-77e6d433]{position:relative;display:flex;align-items:center}.base-input input[data-v-77e6d433]{width:100%;background:var(--bg-tertiary);border:1px solid var(--border);border-radius:var(--border-radius-sm);padding:4px 8px;font-size:var(--font-size-xs);color:var(--text);outline:none}.base-input input[data-v-77e6d433]:focus{border-color:var(--primary)}.base-input input[data-v-77e6d433]::placeholder{color:var(--text-dim)}.has-icon input[data-v-77e6d433]{padding-left:26px}.input-icon[data-v-77e6d433]{position:absolute;left:8px;color:var(--text-dim);pointer-events:none}.base-badge[data-v-226d8817]{display:inline-flex;align-items:center;padding:1px 6px;border-radius:0;font-size:var(--font-size-xs);font-weight:500;white-space:nowrap;line-height:1.2}.badge-default[data-v-226d8817]{background:var(--bg-tertiary);color:var(--text-muted)}.badge-primary[data-v-226d8817]{background:var(--primary-muted);color:var(--primary)}.badge-success[data-v-226d8817]{background:var(--success-muted);color:var(--success)}.badge-error[data-v-226d8817]{background:var(--error-muted);color:var(--error)}.badge-warning[data-v-226d8817]{background:var(--warning-muted);color:var(--warning)}.badge-purple[data-v-226d8817]{background:var(--purple-muted);color:var(--purple)}.badge-cyan[data-v-226d8817]{background:var(--cyan-muted);color:var(--cyan)}.badge-pink[data-v-226d8817]{background:var(--pink-muted);color:var(--pink)}.badge-green[data-v-226d8817]{background:var(--success-muted);color:var(--success)}.request-item[data-v-0c9ef106]{padding:var(--spacing-sm) var(--spacing-md);border-bottom:1px solid var(--border-light);cursor:pointer;border-left:3px solid transparent;transition:all var(--transition-fast)}.request-item[data-v-0c9ef106]:hover{background:var(--bg-hover)}.request-item.selected[data-v-0c9ef106]{background:var(--bg-selected);border-left-color:var(--primary)}.item-header[data-v-0c9ef106]{display:flex;align-items:center;gap:var(--spacing-sm);margin-bottom:2px}.item-time[data-v-0c9ef106]{font-size:var(--font-size-xs);color:var(--text-muted);font-family:var(--font-mono)}.item-id[data-v-0c9ef106]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono);opacity:.7;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100px;text-decoration:none}.item-id[data-v-0c9ef106]:hover{opacity:1;text-decoration:underline}.item-model[data-v-0c9ef106]{font-size:var(--font-size-xs);color:var(--text);font-weight:500;margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:120px}.item-meta[data-v-0c9ef106]{display:flex;align-items:center;gap:var(--spacing-xs);margin-bottom:2px}.item-tokens[data-v-0c9ef106]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono);margin-left:auto}.item-duration[data-v-0c9ef106]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.item-preview[data-v-0c9ef106]{font-size:var(--font-size-xs);color:var(--text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-pagination[data-v-76dfa3e6]{display:flex;align-items:center;justify-content:center;gap:var(--spacing-md);padding:var(--spacing-sm);border-top:1px solid var(--border-light);flex-shrink:0}.page-btn[data-v-76dfa3e6]{font-size:var(--font-size-xs);color:var(--primary);padding:var(--spacing-xs) var(--spacing-md);background:transparent;cursor:pointer}.page-btn[data-v-76dfa3e6]:hover:not(:disabled){background:var(--primary-muted)}.page-btn[data-v-76dfa3e6]:disabled{color:var(--text-dim);cursor:not-allowed}.page-info[data-v-76dfa3e6]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.request-list[data-v-28ea6559]{display:flex;flex-direction:column;height:100%;background:var(--bg-secondary)}.list-controls[data-v-28ea6559]{padding:var(--spacing-sm);border-bottom:1px solid var(--border-light);display:flex;flex-direction:column;gap:var(--spacing-xs);flex-shrink:0}.list-filters[data-v-28ea6559]{display:flex;gap:var(--spacing-xs)}.list-body[data-v-28ea6559]{flex:1;overflow-y:auto}.list-empty[data-v-28ea6559]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--text-dim);font-size:var(--font-size-sm)}.empty-subtitle[data-v-28ea6559]{font-size:var(--font-size-xs);color:var(--text-dim);opacity:.6;margin-top:var(--spacing-xs)}.search-count[data-v-28ea6559]{font-size:var(--font-size-xs);color:var(--text-dim);padding-left:var(--spacing-xs)}.base-checkbox[data-v-b169bfe7]{display:inline-flex;align-items:center;gap:var(--spacing-xs);cursor:pointer;font-size:var(--font-size-xs);color:var(--text-muted);-webkit-user-select:none;user-select:none}.base-checkbox input[type=checkbox][data-v-b169bfe7]{appearance:none;width:14px;height:14px;border:1px solid var(--border);border-radius:0;background:var(--bg-tertiary);cursor:pointer;position:relative;flex-shrink:0}.base-checkbox input[type=checkbox][data-v-b169bfe7]:checked{background:var(--primary);border-color:var(--primary)}.base-checkbox input[type=checkbox][data-v-b169bfe7]:checked:after{content:"";position:absolute;left:4px;top:1px;width:4px;height:8px;border:solid var(--primary-contrast);border-width:0 2px 2px 0;transform:rotate(45deg)}.checkbox-label[data-v-b169bfe7]{white-space:nowrap}.detail-toolbar[data-v-3ed4a3af]{display:flex;flex-direction:column;gap:var(--spacing-xs);padding:var(--spacing-sm);border-bottom:1px solid var(--border-light);flex-shrink:0;background:var(--bg-secondary)}.toolbar-row[data-v-3ed4a3af]{display:flex;align-items:center;gap:var(--spacing-sm);flex-wrap:wrap}.rewrite-row[data-v-3ed4a3af]{padding-top:var(--spacing-xs);border-top:1px solid var(--border-light);justify-content:space-between}.rewrite-stats[data-v-3ed4a3af]{display:flex;align-items:center;gap:var(--spacing-xs)}.rewrite-label[data-v-3ed4a3af]{font-size:var(--font-size-xs);color:var(--warning);font-weight:600}.rewrite-stat[data-v-3ed4a3af]{font-size:var(--font-size-xs);color:var(--text-muted);padding:1px 6px;background:var(--warning-muted);border-radius:3px}.rewrite-stat-truncated[data-v-3ed4a3af]{background:var(--error-muted);color:var(--error)}.rewrite-controls[data-v-3ed4a3af]{display:flex;align-items:center;gap:var(--spacing-sm)}.rewrite-nav[data-v-3ed4a3af]{display:flex;align-items:center;gap:2px}.nav-btn[data-v-3ed4a3af]{display:flex;align-items:center;justify-content:center;width:20px;height:20px;padding:0;color:var(--text-dim);background:var(--bg-tertiary);border:1px solid var(--border-light)}.nav-btn[data-v-3ed4a3af]:hover{color:var(--text);background:var(--bg-hover)}.nav-label[data-v-3ed4a3af]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono);min-width:32px;text-align:center}.section-block[data-v-6d33a6f9]{border:1px solid var(--border-light);margin-bottom:var(--spacing-sm);overflow:hidden}.section-header[data-v-6d33a6f9]{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);background:var(--bg-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none}.section-header[data-v-6d33a6f9]:hover{background:var(--bg-hover)}.section-chevron[data-v-6d33a6f9]{color:var(--text-dim);flex-shrink:0}.section-title[data-v-6d33a6f9]{font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted)}.section-badge[data-v-6d33a6f9]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.section-raw-btn[data-v-6d33a6f9]{display:flex;align-items:center;gap:4px;font-size:var(--font-size-xs);color:var(--text-dim);padding:2px 6px;background:transparent;margin-left:auto}.section-raw-btn[data-v-6d33a6f9]:hover{color:var(--text);background:var(--bg-hover)}.section-body[data-v-6d33a6f9]{padding:var(--spacing-sm)}.sse-timeline[data-v-2edf43f6]{font-family:var(--font-mono);font-size:var(--font-size-xs)}.sse-event[data-v-2edf43f6]{display:flex;align-items:baseline;gap:var(--spacing-sm);padding:2px 0;border-bottom:1px solid var(--border-light)}.sse-event[data-v-2edf43f6]:last-child{border-bottom:none}.sse-offset[data-v-2edf43f6]{flex-shrink:0;width:64px;text-align:right;color:var(--text-dim)}.sse-type[data-v-2edf43f6]{flex-shrink:0;min-width:160px;font-weight:500}.sse-type-green[data-v-2edf43f6]{color:var(--success)}.sse-type-blue[data-v-2edf43f6]{color:var(--info)}.sse-type-cyan[data-v-2edf43f6]{color:var(--primary)}.sse-type-red[data-v-2edf43f6]{color:var(--error)}.sse-type-dim[data-v-2edf43f6]{color:var(--text-dim)}.sse-type-default[data-v-2edf43f6]{color:var(--text)}.sse-summary[data-v-2edf43f6]{color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.meta-grid[data-v-726393af]{display:flex;flex-direction:column;gap:4px}.meta-row[data-v-726393af]{display:flex;align-items:baseline;gap:var(--spacing-sm);padding:2px 0}.meta-label[data-v-726393af]{font-size:var(--font-size-xs);color:var(--text-dim);min-width:90px;flex-shrink:0}.meta-label--attempt[data-v-726393af]{font-weight:600;color:var(--text-muted)}.meta-value[data-v-726393af]{font-size:var(--font-size-xs);color:var(--text)}.meta-value.mono[data-v-726393af]{font-family:var(--font-mono)}.text-success[data-v-726393af]{color:var(--success)}.text-error[data-v-726393af]{color:var(--error)}.meta-section[data-v-726393af]{margin-top:var(--spacing-xs);padding-top:var(--spacing-xs);border-top:1px solid var(--border-light)}.meta-section .meta-row[data-v-726393af]{display:flex;align-items:baseline;gap:var(--spacing-md);padding:2px 0}.meta-section-title[data-v-726393af]{font-size:var(--font-size-xs);font-weight:600;color:var(--text-muted);margin-bottom:var(--spacing-xs)}.error-text[data-v-726393af]{color:var(--error)}.raw-body[data-v-726393af]{font-family:var(--font-mono);font-size:10px;color:var(--text-muted);background:var(--bg-tertiary);padding:var(--spacing-sm);white-space:pre-wrap;word-break:break-all;max-height:200px;overflow-y:auto}.truncation-divider[data-v-9cfada0f]{display:flex;align-items:center;gap:var(--spacing-sm);margin:var(--spacing-md) 0}.divider-line[data-v-9cfada0f]{flex:1;height:1px;background:var(--error);opacity:.4;border-style:dashed}.divider-content[data-v-9cfada0f]{display:flex;align-items:center;gap:var(--spacing-xs);flex-shrink:0}.divider-icon[data-v-9cfada0f]{font-size:var(--font-size-sm)}.divider-text[data-v-9cfada0f]{font-size:var(--font-size-xs);color:var(--error);font-weight:500}.divider-detail[data-v-9cfada0f]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.attempts-timeline[data-v-0724a3cd]{display:flex;flex-direction:column;gap:var(--spacing-sm)}.timeline-title[data-v-0724a3cd]{font-size:var(--font-size-xs);font-weight:600;color:var(--text-muted)}.timeline-track[data-v-0724a3cd]{display:flex;flex-direction:column;gap:var(--spacing-sm);padding-left:var(--spacing-sm);border-left:2px solid var(--border)}.timeline-node[data-v-0724a3cd]{display:flex;gap:var(--spacing-sm);align-items:flex-start;position:relative}.node-dot[data-v-0724a3cd]{width:10px;height:10px;border-radius:50%;flex-shrink:0;margin-top:2px;margin-left:-7px}.node-info[data-v-0724a3cd]{display:flex;flex-direction:column;gap:2px;flex:1}.node-header[data-v-0724a3cd]{display:flex;align-items:baseline;gap:var(--spacing-sm)}.node-index[data-v-0724a3cd]{font-size:var(--font-size-xs);font-weight:600;color:var(--text)}.node-strategy[data-v-0724a3cd]{font-size:10px;padding:0 4px;background:var(--primary-muted);color:var(--primary)}.node-duration[data-v-0724a3cd]{font-size:10px;color:var(--text-dim);font-family:var(--font-mono)}.node-error[data-v-0724a3cd]{font-size:10px;color:var(--error);word-break:break-word}.node-truncation[data-v-0724a3cd]{font-size:10px;color:var(--warning)}.node-meta[data-v-0724a3cd]{font-size:10px;color:var(--text-dim)}.headers-section[data-v-717c90af]{display:flex;flex-direction:column}.headers-toggle[data-v-717c90af]{display:flex;align-items:center;gap:var(--spacing-xs);font-size:var(--font-size-xs);color:var(--text-muted);padding:var(--spacing-xs) 0;background:none;cursor:pointer;text-align:left}.headers-toggle[data-v-717c90af]:hover{color:var(--text)}.toggle-icon[data-v-717c90af]{font-family:var(--font-mono);width:12px;text-align:center;font-weight:600}.header-count[data-v-717c90af]{color:var(--text-dim)}.headers-grid[data-v-717c90af]{display:flex;flex-direction:column;margin-top:var(--spacing-xs)}.header-row[data-v-717c90af]{display:flex;gap:var(--spacing-sm);padding:2px 0;font-size:10px;border-bottom:1px solid var(--border-light)}.header-name[data-v-717c90af]{flex:0 0 200px;color:var(--text-dim);font-family:var(--font-mono);word-break:break-all}.header-value[data-v-717c90af]{flex:1;color:var(--text-muted);font-family:var(--font-mono);word-break:break-all}.line-number-pre[data-v-a98c3fb0]{font-family:var(--font-mono);font-size:var(--font-size-sm);line-height:1.6;overflow-x:auto}.line[data-v-a98c3fb0]{display:flex;white-space:pre-wrap;word-wrap:break-word}.line[data-v-a98c3fb0]:hover{background:var(--bg-hover)}.line-no[data-v-a98c3fb0]{flex-shrink:0;width:3.5em;padding-right:1em;text-align:right;color:var(--text-dim);-webkit-user-select:none;user-select:none;opacity:.5}.line-content[data-v-a98c3fb0]{flex:1;min-width:0;color:var(--text)}[data-v-a98c3fb0] .search-highlight{background:var(--warning);color:var(--bg);padding:0 2px}.diff-view[data-v-1175ff40]{overflow-x:auto;font-size:var(--font-size-sm)}.system-message[data-v-eac28575]{border:1px solid rgba(163,113,247,.3);overflow:hidden;margin-bottom:var(--spacing-sm)}.system-header[data-v-eac28575]{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-xs) var(--spacing-sm);background:var(--purple-muted);cursor:pointer;-webkit-user-select:none;user-select:none}.system-header[data-v-eac28575]:hover{background:#a371f733}.system-header-left[data-v-eac28575]{display:flex;align-items:center;gap:var(--spacing-xs);min-width:0;overflow:hidden}.collapse-icon[data-v-eac28575]{font-size:10px;color:var(--text-dim);width:10px;flex-shrink:0}.collapsed-summary[data-v-eac28575]{font-size:var(--font-size-xs);color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.system-header-right[data-v-eac28575]{display:flex;align-items:center;gap:8px;flex-shrink:0}.view-toggle[data-v-eac28575]{display:flex;gap:1px;background:var(--bg);overflow:hidden}.view-toggle button[data-v-eac28575]{font-size:var(--font-size-xs);padding:2px 8px;color:var(--text-muted);background:var(--bg-secondary)}.view-toggle button[data-v-eac28575]:hover{color:var(--text)}.view-toggle button.active[data-v-eac28575]{color:var(--primary);background:var(--primary-muted)}.reset-btn[data-v-eac28575]{font-size:var(--font-size-sm);padding:2px 6px;color:var(--text-dim);background:var(--bg-secondary);line-height:1}.reset-btn[data-v-eac28575]:hover{color:var(--error)}.action-btn[data-v-eac28575]{display:flex;align-items:center;gap:4px;font-size:var(--font-size-xs);color:var(--text-dim);padding:2px 6px;background:transparent}.action-btn[data-v-eac28575]:hover{color:var(--text);background:var(--bg-hover)}.system-body[data-v-eac28575]{padding:var(--spacing-sm);max-height:400px;overflow-y:auto}.system-body.body-expanded[data-v-eac28575]{max-height:none}.system-block-item[data-v-eac28575]{margin-bottom:var(--spacing-sm)}.system-block-item[data-v-eac28575]:last-child{margin-bottom:0}.cache-label[data-v-eac28575]{font-size:var(--font-size-xs);color:var(--warning);font-style:italic;margin-bottom:2px}.content-block[data-v-0742d16c]{border:1px solid var(--border)}.content-block-header[data-v-0742d16c]{display:flex;align-items:baseline;justify-content:space-between;padding:var(--spacing-xs) var(--spacing-sm);background:var(--bg-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none}.content-block-header[data-v-0742d16c]:hover{background:var(--bg-hover)}.content-block-header-left[data-v-0742d16c]{display:flex;align-items:baseline;gap:var(--spacing-sm);min-width:0;overflow:hidden}.content-block-header-right[data-v-0742d16c]{display:flex;align-items:center;gap:8px;flex-shrink:0}.collapse-icon[data-v-0742d16c]{font-size:10px;color:var(--text-dim);width:10px;flex-shrink:0}.content-type-label[data-v-0742d16c]{font-size:var(--font-size-xs);font-weight:600;letter-spacing:.5px;flex-shrink:0}.label-text[data-v-0742d16c]{color:var(--text-muted)}.label-cyan[data-v-0742d16c]{color:var(--cyan)}.label-success[data-v-0742d16c]{color:var(--success)}.label-error[data-v-0742d16c]{color:var(--error)}.label-purple[data-v-0742d16c]{color:var(--purple)}.label-pink[data-v-0742d16c]{color:var(--pink)}.label-warning[data-v-0742d16c]{color:var(--warning)}.label-text-muted[data-v-0742d16c]{color:var(--text-muted)}.collapsed-summary[data-v-0742d16c]{font-size:var(--font-size-xs);color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-btn[data-v-0742d16c]{display:flex;align-items:center;gap:4px;font-size:var(--font-size-xs);color:var(--text-dim);padding:2px 6px;background:transparent}.action-btn[data-v-0742d16c]:hover{color:var(--text);background:var(--bg-hover)}.content-block-body[data-v-0742d16c]{padding:var(--spacing-sm)}.body-collapsed[data-v-0742d16c]{max-height:200px;overflow-y:auto}.redacted[data-v-7878f7b8]{opacity:.6}.redacted-label[data-v-7878f7b8]{font-size:var(--font-size-xs);color:var(--text-dim);font-style:italic}.thinking-text[data-v-7878f7b8]{font-size:var(--font-size-sm);color:var(--text);white-space:pre-wrap;word-wrap:break-word;line-height:1.6}[data-v-7878f7b8] .search-highlight{background:var(--warning);color:var(--bg);padding:0 2px}[data-v-7878f7b8] .content-block{border-color:#a371f74d}[data-v-7878f7b8] .content-block-header{background:var(--purple-muted)}.image-media-type[data-v-7e48d486]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.image-content[data-v-7e48d486]{max-width:100%;max-height:400px;border:1px solid var(--border)}.aggregated-stub[data-v-ef1fc34e]{display:flex;align-items:center;gap:8px;padding:var(--spacing-xs) var(--spacing-sm);background:var(--bg-tertiary);border:1px solid var(--border);font-size:var(--font-size-xs)}.stub-label[data-v-ef1fc34e]{font-weight:600;letter-spacing:.5px;flex-shrink:0}.label-success[data-v-ef1fc34e]{color:var(--success)}.label-error[data-v-ef1fc34e]{color:var(--error)}.result-tool-name[data-v-ef1fc34e]{font-size:var(--font-size-xs);color:var(--text-muted);font-family:var(--font-mono)}.result-tool-id[data-v-ef1fc34e]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.result-error-badge[data-v-ef1fc34e]{font-size:var(--font-size-xs);font-weight:600;color:var(--error)}.tool-jump[data-v-ef1fc34e]{padding-top:var(--spacing-xs);border-top:1px solid var(--border-light);margin-top:var(--spacing-sm);margin-left:calc(-1 * var(--spacing-sm));margin-right:calc(-1 * var(--spacing-sm));margin-bottom:calc(-1 * var(--spacing-sm));padding-left:var(--spacing-sm);padding-bottom:var(--spacing-xs)}.jump-link[data-v-ef1fc34e]{font-size:var(--font-size-xs);color:var(--primary);cursor:pointer}.jump-link[data-v-ef1fc34e]:hover{text-decoration:underline}.vjs-tree-brackets{cursor:pointer}.vjs-tree-brackets:hover{color:#1890ff}.vjs-check-controller{position:absolute;left:0}.vjs-check-controller.is-checked .vjs-check-controller-inner{background-color:#1890ff;border-color:#0076e4}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-checkbox:after{transform:rotate(45deg) scaleY(1)}.vjs-check-controller.is-checked .vjs-check-controller-inner.is-radio:after{transform:translate(-50%,-50%) scale(1)}.vjs-check-controller .vjs-check-controller-inner{display:inline-block;position:relative;border:1px solid #bfcbd9;border-radius:2px;vertical-align:middle;box-sizing:border-box;width:16px;height:16px;background-color:#fff;z-index:1;cursor:pointer;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.vjs-check-controller .vjs-check-controller-inner:after{box-sizing:content-box;content:"";border:2px solid #fff;border-left:0;border-top:0;height:8px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);width:4px;transition:transform .15s cubic-bezier(.71,-.46,.88,.6) .05s;transform-origin:center}.vjs-check-controller .vjs-check-controller-inner.is-radio{border-radius:100%}.vjs-check-controller .vjs-check-controller-inner.is-radio:after{border-radius:100%;height:4px;background-color:#fff;left:50%;top:50%}.vjs-check-controller .vjs-check-controller-original{opacity:0;outline:none;position:absolute;z-index:-1;inset:0;margin:0}.vjs-carets{position:absolute;right:0;cursor:pointer}.vjs-carets svg{transition:transform .3s}.vjs-carets:hover{color:#1890ff}.vjs-carets-close{transform:rotate(-90deg)}.vjs-tree-node{display:flex;position:relative;line-height:20px}.vjs-tree-node.has-carets{padding-left:15px}.vjs-tree-node.has-carets.has-selector,.vjs-tree-node.has-selector{padding-left:30px}.vjs-tree-node.is-highlight,.vjs-tree-node:hover{background-color:#e6f7ff;border-radius:4px}.vjs-tree-node.is-highlight .vjs-tree-node-actions,.vjs-tree-node:hover .vjs-tree-node-actions{display:block}.vjs-tree-node .vjs-indent{display:flex;position:relative}.vjs-tree-node .vjs-indent-unit.has-line{border-left:1px dashed #bfcbd9}.vjs-tree-node .vjs-tree-node-actions{display:none;position:absolute;right:0;top:0;padding:0 4px;background-color:#e6f7ff;border-radius:4px}.vjs-tree-node .vjs-tree-node-actions .vjs-tree-node-actions-item{cursor:pointer}.vjs-tree-node .vjs-tree-node-actions .vjs-tree-node-actions-item:hover{color:#1890ff}.vjs-tree-node.dark.is-highlight,.vjs-tree-node.dark .vjs-tree-node-actions,.vjs-tree-node.dark:hover{background-color:#2e4558}.vjs-node-index{position:absolute;right:100%;margin-right:4px;-webkit-user-select:none;user-select:none}.vjs-colon{white-space:pre}.vjs-comment{color:#bfcbd9}.vjs-key{white-space:nowrap}.vjs-value{word-break:break-word}.vjs-tree-node.dynamic-height .vjs-value{white-space:pre-wrap}.vjs-value-null,.vjs-value-undefined{color:#d55fde}.vjs-value-boolean,.vjs-value-number{color:#1d8ce0}.vjs-value-string{color:#13ce66}.vjs-tree{font-family:Monaco,Menlo,Consolas,Bitstream Vera Sans Mono,monospace;font-size:14px;text-align:left}.vjs-tree.is-virtual{overflow:auto}.vjs-tree.is-virtual .vjs-tree-node{white-space:nowrap}.tool-name[data-v-040cd916]{font-size:var(--font-size-sm);color:var(--primary);font-weight:600;font-family:var(--font-mono)}.tool-id[data-v-040cd916]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.tool-input[data-v-040cd916]{font-size:var(--font-size-sm);color:var(--text)}.tool-aggregate-result[data-v-040cd916]{border-top:1px solid var(--border);margin-top:var(--spacing-sm)}.tool-jump[data-v-040cd916]{padding-top:var(--spacing-xs);border-top:1px solid var(--border-light);margin-top:var(--spacing-sm);margin-left:calc(-1 * var(--spacing-sm));margin-right:calc(-1 * var(--spacing-sm));margin-bottom:calc(-1 * var(--spacing-sm));padding-left:var(--spacing-sm);padding-bottom:var(--spacing-xs)}.jump-link[data-v-040cd916]{font-size:var(--font-size-xs);color:var(--primary);cursor:pointer}.jump-link[data-v-040cd916]:hover{text-decoration:underline}.generic-content[data-v-f03251db]{font-size:var(--font-size-sm);color:var(--text-muted)}.error-boundary[data-v-c8494337]{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-md);background:var(--error-muted);border:1px solid var(--error);font-size:var(--font-size-sm);color:var(--error);font-family:var(--font-mono)}.error-icon[data-v-c8494337]{display:flex;align-items:center;justify-content:center;width:18px;height:18px;border:1px solid var(--error);font-weight:700;font-size:var(--font-size-xs);flex-shrink:0}.error-label[data-v-c8494337]{font-weight:600;flex-shrink:0}.error-message[data-v-c8494337]{color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.content-renderer[data-v-ab1a6c3a]{display:flex;flex-direction:column;gap:var(--spacing-sm)}.message-block[data-v-2faca0f0]{border:1px solid var(--border-light);overflow:hidden}.message-block.truncated[data-v-2faca0f0]{border-color:var(--error);opacity:.7;text-decoration:line-through}.msg-header[data-v-2faca0f0]{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:var(--bg-tertiary);cursor:pointer;-webkit-user-select:none;user-select:none}.msg-header[data-v-2faca0f0]:hover{background:var(--bg-hover)}.msg-header-left[data-v-2faca0f0]{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden}.msg-header-right[data-v-2faca0f0]{display:flex;align-items:center;gap:8px;flex-shrink:0}.collapse-icon[data-v-2faca0f0]{font-size:10px;color:var(--text-dim);width:10px;flex-shrink:0}.msg-index[data-v-2faca0f0]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}.collapsed-summary[data-v-2faca0f0]{font-size:var(--font-size-xs);color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.view-toggle[data-v-2faca0f0]{display:flex;gap:1px;background:var(--bg);overflow:hidden}.view-toggle button[data-v-2faca0f0]{font-size:var(--font-size-xs);padding:2px 8px;color:var(--text-muted);background:var(--bg-secondary)}.view-toggle button[data-v-2faca0f0]:hover{color:var(--text)}.view-toggle button.active[data-v-2faca0f0]{color:var(--primary);background:var(--primary-muted)}.reset-btn[data-v-2faca0f0]{font-size:var(--font-size-sm);padding:2px 6px;color:var(--text-dim);background:var(--bg-secondary);line-height:1}.reset-btn[data-v-2faca0f0]:hover{color:var(--error)}.message-block.is-rewritten[data-v-2faca0f0]{border-left:2px solid var(--warning)}.action-btn[data-v-2faca0f0]{display:flex;align-items:center;gap:4px;font-size:var(--font-size-xs);color:var(--text-dim);padding:2px 6px;background:transparent}.action-btn[data-v-2faca0f0]:hover{color:var(--text);background:var(--bg-hover)}.msg-body[data-v-2faca0f0]{padding:var(--spacing-sm)}.msg-body.body-limited[data-v-2faca0f0]{max-height:200px;overflow-y:auto}.modal-overlay[data-v-c68c542d]{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:1000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal-content[data-v-c68c542d]{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--border-radius);box-shadow:var(--shadow-lg);max-height:95vh;display:flex;flex-direction:column}.modal-header[data-v-c68c542d]{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md) var(--spacing-lg);border-bottom:1px solid var(--border);flex-shrink:0}.modal-title[data-v-c68c542d]{font-size:var(--font-size-lg);font-weight:600;color:var(--text)}.modal-header-actions[data-v-c68c542d]{display:flex;align-items:center;gap:var(--spacing-sm)}.modal-close[data-v-c68c542d]{color:var(--text-muted);padding:var(--spacing-xs);border-radius:var(--border-radius-sm);transition:all var(--transition-fast)}.modal-close[data-v-c68c542d]:hover{color:var(--text);background:var(--bg-tertiary)}.modal-body[data-v-c68c542d]{padding:var(--spacing-lg);overflow-y:auto;flex:1}.raw-copy-btn[data-v-7a023d58]{display:flex;align-items:center;gap:4px;font-size:var(--font-size-xs);color:var(--text-dim);padding:4px 8px;background:transparent}.raw-copy-btn[data-v-7a023d58]:hover{color:var(--text);background:var(--bg-hover)}.json-viewer[data-v-7a023d58]{overflow:auto}.json-split[data-v-7a023d58]{display:flex;height:100%;overflow:hidden}.json-pane[data-v-7a023d58]{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}.json-pane .json-viewer[data-v-7a023d58]{flex:1;overflow:auto}.pane-divider[data-v-7a023d58]{width:1px;background:var(--border-light);flex-shrink:0}.pane-header[data-v-7a023d58]{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-xs) var(--spacing-sm);border-bottom:1px solid var(--border-light);background:var(--bg-tertiary);flex-shrink:0}.pane-label[data-v-7a023d58]{font-size:var(--font-size-xs);font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--text-muted)}.pane-label-rewritten[data-v-7a023d58]{color:var(--warning)}.detail-panel[data-v-a96c547e]{display:flex;flex-direction:column;height:100%;background:var(--bg)}.detail-empty[data-v-a96c547e]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--text-dim);gap:var(--spacing-xs)}.detail-hint[data-v-a96c547e]{font-size:var(--font-size-xs);opacity:.6}.detail-body[data-v-a96c547e]{flex:1;overflow-y:auto;padding:var(--spacing-sm)}.messages-list[data-v-a96c547e]{display:flex;flex-direction:column;gap:var(--spacing-sm)}.response-error[data-v-a96c547e]{background:var(--error-muted);border:1px solid var(--error);padding:var(--spacing-sm);margin-bottom:var(--spacing-sm);display:flex;align-items:baseline;gap:var(--spacing-sm)}.error-label[data-v-a96c547e]{font-size:var(--font-size-xs);font-weight:600;color:var(--error);letter-spacing:.5px}.error-text[data-v-a96c547e]{font-size:var(--font-size-sm);color:var(--error);white-space:pre-wrap;word-wrap:break-word}.headers-section-wrap[data-v-a96c547e]{display:flex;flex-direction:column;gap:var(--spacing-md)}.headers-group[data-v-a96c547e]{display:flex;flex-direction:column;gap:var(--spacing-xs)}.headers-group-title[data-v-a96c547e]{font-size:var(--font-size-xs);font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;padding-bottom:var(--spacing-xs);border-bottom:1px solid var(--border)}.headers-grid[data-v-a96c547e]{display:flex;flex-direction:column}.header-row[data-v-a96c547e]{display:flex;gap:var(--spacing-sm);padding:2px 0;font-size:var(--font-size-xs);border-bottom:1px solid var(--border-light)}.header-name[data-v-a96c547e]{flex:0 0 220px;color:var(--text-dim);font-family:var(--font-mono);word-break:break-all}.header-value[data-v-a96c547e]{flex:1;color:var(--text);font-family:var(--font-mono);word-break:break-all}.history-page[data-v-59f15299]{display:flex;flex-direction:column;flex:1;overflow:hidden}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as E,W as b,_ as L}from"./index-DOp9l2lW.js";import{x,y as I,r as h,d as M,g as r,l as s,t as c,q as d,F as N,m as y,f as D,o as u,i as v}from"./vue-CYcm9SLm.js";import{u as P}from"./useFormatters-BBIZmSf2.js";const T=200;function U(){const n=h([]),a=h(!0),_=h(!1);let i=null;function p(e){n.value=[e,...n.value].slice(0,T)}function g(e){n.value=n.value.map(f=>f.id===e.id?e:f)}async function m(){a.value=!0;try{const e=await E.fetchEntries({limit:100});n.value=e.entries}catch{}finally{a.value=!1}}return x(()=>{m(),i=new b({onEntryAdded:p,onEntryUpdated:g,onStatsUpdated:e=>{},onConnected:()=>{},onHistoryCleared:()=>{n.value=[]},onSessionDeleted:()=>{},onStatusChange:e=>{_.value=e}}),i.connect()}),I(()=>{i?.disconnect(),i=null}),{entries:n,loading:a,wsConnected:_}}const A={class:"logs-page"},B={class:"logs-header"},F={class:"logs-count"},R={key:0,class:"logs-empty"},q={key:1,class:"logs-empty"},W={key:2,class:"logs-table-wrap"},$={class:"logs-table"},z={class:"col-status"},H={class:"col-time"},O={class:"col-code"},V={class:"col-model"},X={class:"col-duration"},j={class:"col-tokens"},G={class:"col-preview"},J=M({__name:"LogsPage",setup(n){const{entries:a,loading:_}=U(),{formatTime:i,formatNumber:p,formatDuration:g}=P();function m(t){return t.responseSuccess===void 0?"pending":t.responseSuccess?"success":"error"}function e(t){return t.responseSuccess===void 0?"-":t.responseSuccess?"ok":"err"}function f(t){return t.responseSuccess===void 0?"...":t.responseSuccess?"200":"ERR"}function S(t){return t.responseModel||t.requestModel||"-"}function k(t){return t.usage?`${p(t.usage.input_tokens)}/${p(t.usage.output_tokens)}`:"-"}function w(t){const l=t.previewText||"";return l.length<=60?l:l.slice(0,57)+"..."}const C=D(()=>a.value);return(t,l)=>(u(),r("div",A,[s("div",B,[l[0]||(l[0]=s("h2",{class:"logs-title"},"Live Logs",-1)),s("span",F,c(d(a).length)+" entries",1)]),d(_)&&d(a).length===0?(u(),r("div",R," Loading... ")):d(a).length===0?(u(),r("div",q," No log entries yet ")):(u(),r("div",W,[s("table",$,[l[1]||(l[1]=s("thead",null,[s("tr",null,[s("th",{class:"col-status"},"St"),s("th",{class:"col-time"},"Time"),s("th",{class:"col-code"},"Code"),s("th",{class:"col-model"},"Model"),s("th",{class:"col-duration"},"Dur"),s("th",{class:"col-tokens"},"In/Out"),s("th",{class:"col-preview"},"Preview")])],-1)),s("tbody",null,[(u(!0),r(N,null,y(C.value,o=>(u(),r("tr",{key:o.id,class:v(["log-row","row-"+m(o)])},[s("td",z,[s("span",{class:v(["status-symbol","st-"+m(o)])},c(e(o)),3)]),s("td",H,c(d(i)(o.timestamp)),1),s("td",O,c(f(o)),1),s("td",V,c(S(o)),1),s("td",X,c(d(g)(o.durationMs)),1),s("td",j,c(k(o)),1),s("td",G,c(w(o)),1)],2))),128))])])]))]))}}),Z=L(J,[["__scopeId","data-v-53a780d1"]]);export{Z as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.logs-page[data-v-53a780d1]{display:flex;flex-direction:column;flex:1;overflow:hidden}.logs-header[data-v-53a780d1]{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-sm) var(--spacing-lg);border-bottom:1px solid var(--border-light);flex-shrink:0}.logs-title[data-v-53a780d1]{font-size:var(--font-size-lg);font-weight:600;color:var(--text)}.logs-count[data-v-53a780d1]{font-size:var(--font-size-xs);color:var(--text-dim)}.logs-empty[data-v-53a780d1]{display:flex;align-items:center;justify-content:center;flex:1;color:var(--text-dim);font-size:var(--font-size-sm)}.logs-table-wrap[data-v-53a780d1]{flex:1;overflow-y:auto}.logs-table[data-v-53a780d1]{width:100%;border-collapse:collapse;font-family:var(--font-mono);font-size:var(--font-size-xs)}.logs-table th[data-v-53a780d1]{position:sticky;top:0;background:var(--bg-secondary);color:var(--text-dim);font-weight:600;text-align:left;padding:var(--spacing-xs) var(--spacing-sm);border-bottom:1px solid var(--border);white-space:nowrap}.logs-table td[data-v-53a780d1]{padding:3px var(--spacing-sm);white-space:nowrap;color:var(--text-muted);border-bottom:1px solid var(--border-light)}.log-row[data-v-53a780d1]:hover{background:var(--bg-hover)}.col-status[data-v-53a780d1]{width:30px;text-align:center}.col-time[data-v-53a780d1]{width:70px}.col-code[data-v-53a780d1]{width:40px}.col-model[data-v-53a780d1]{width:180px;overflow:hidden;text-overflow:ellipsis}.col-duration[data-v-53a780d1]{width:60px;text-align:right}.col-tokens[data-v-53a780d1]{width:90px;text-align:right}.col-preview[data-v-53a780d1]{overflow:hidden;text-overflow:ellipsis;max-width:0}.status-symbol[data-v-53a780d1]{font-weight:600}.st-success[data-v-53a780d1]{color:var(--success)}.st-error[data-v-53a780d1]{color:var(--error)}.st-pending[data-v-53a780d1]{color:var(--warning)}.row-error td[data-v-53a780d1]{color:var(--error);opacity:.8}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.models-page[data-v-144376f7]{display:flex;flex-direction:column;flex:1;overflow-y:auto}.models-header[data-v-144376f7]{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-sm) var(--spacing-lg);border-bottom:1px solid var(--border-light);flex-shrink:0}.models-title[data-v-144376f7]{font-size:var(--font-size-lg);font-weight:600;color:var(--text)}.models-count[data-v-144376f7]{font-size:var(--font-size-xs);color:var(--text-dim)}.models-toolbar[data-v-144376f7]{display:flex;gap:var(--spacing-sm);padding:var(--spacing-sm) var(--spacing-lg);border-bottom:1px solid var(--border-light);flex-shrink:0}.search-input[data-v-144376f7],.vendor-select[data-v-144376f7]{font-size:var(--font-size-sm);padding:var(--spacing-xs) var(--spacing-sm);background:var(--bg-tertiary);border:1px solid var(--border);color:var(--text);outline:none}.search-input[data-v-144376f7]{flex:1}.search-input[data-v-144376f7]:focus,.vendor-select[data-v-144376f7]:focus{border-color:var(--primary)}.models-empty[data-v-144376f7]{display:flex;align-items:center;justify-content:center;flex:1;color:var(--text-dim);font-size:var(--font-size-sm)}.models-grid[data-v-144376f7]{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--spacing-md);padding:var(--spacing-lg)}.model-card[data-v-144376f7]{background:var(--bg-secondary);border:1px solid var(--border);padding:var(--spacing-md);cursor:pointer;transition:border-color var(--transition-fast);display:flex;flex-direction:column;gap:var(--spacing-sm)}.model-card[data-v-144376f7]:hover,.model-card.expanded[data-v-144376f7]{border-color:var(--primary)}.card-header[data-v-144376f7]{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--spacing-sm)}.model-id[data-v-144376f7]{font-size:var(--font-size-sm);font-weight:600;color:var(--text);font-family:var(--font-mono);word-break:break-all}.card-badges[data-v-144376f7]{display:flex;gap:var(--spacing-xs);flex-shrink:0}.badge[data-v-144376f7]{font-size:10px;padding:1px 6px;font-weight:500}.badge-purple[data-v-144376f7]{background:var(--purple-muted);color:var(--purple)}.badge-cyan[data-v-144376f7]{background:var(--cyan-muted);color:var(--cyan)}.badge-success[data-v-144376f7]{background:var(--success-muted);color:var(--success)}.badge-warning[data-v-144376f7]{background:var(--warning-muted);color:var(--warning)}.card-stats[data-v-144376f7]{display:flex;gap:var(--spacing-md)}.stat[data-v-144376f7]{display:flex;flex-direction:column;gap:1px}.stat-label[data-v-144376f7]{font-size:10px;color:var(--text-dim)}.stat-value[data-v-144376f7]{font-size:var(--font-size-xs);color:var(--text-muted);font-family:var(--font-mono)}.card-capabilities[data-v-144376f7]{display:flex;flex-wrap:wrap;gap:var(--spacing-xs)}.cap-tag[data-v-144376f7]{font-size:10px;padding:1px 5px;background:var(--primary-muted);color:var(--primary)}.card-endpoints[data-v-144376f7]{display:flex;flex-wrap:wrap;gap:var(--spacing-xs)}.endpoint-tag[data-v-144376f7]{font-size:10px;padding:1px 5px;background:var(--bg-tertiary);color:var(--text-dim)}.card-detail[data-v-144376f7]{margin-top:var(--spacing-xs);border-top:1px solid var(--border-light);padding-top:var(--spacing-sm)}.detail-json pre[data-v-144376f7]{font-family:var(--font-mono);font-size:10px;color:var(--text-muted);white-space:pre-wrap;word-break:break-all;max-height:300px;overflow-y:auto}@media(max-width:768px){.models-grid[data-v-144376f7]{grid-template-columns:1fr}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as C,x as N,g as a,l as n,t as l,H as h,M as S,N as F,F as v,m as _,r as d,f as k,o,i as x,D as i}from"./vue-CYcm9SLm.js";import{a as L,_ as V}from"./index-DOp9l2lW.js";const B={class:"models-page"},D={class:"models-header"},A={class:"models-count"},E={class:"models-toolbar"},I=["value"],O={key:0,class:"models-empty"},P={key:1,class:"models-empty"},U={key:2,class:"models-grid"},j=["onClick"],q={class:"card-header"},z={class:"model-id"},H={class:"card-badges"},J={key:1,class:"badge badge-warning"},K={class:"card-stats"},Q={key:0,class:"stat"},T={class:"stat-value"},$={key:1,class:"stat"},G={class:"stat-value"},R={key:2,class:"stat"},W={class:"stat-value"},X={key:0,class:"card-capabilities"},Y={key:1,class:"card-endpoints"},Z={key:2,class:"card-detail"},ee={class:"detail-json"},se=C({__name:"ModelsPage",setup(te){const f=d([]),g=d(!0),u=d(""),c=d(null);N(async()=>{try{const s=await L.fetchModels(!0);f.value=s.data??[]}catch{}finally{g.value=!1}});const b=k(()=>{const s=new Set;for(const t of f.value)t.vendor&&s.add(t.vendor);return Array.from(s).sort()}),m=k(()=>{let s=f.value;if(c.value&&(s=s.filter(t=>t.vendor===c.value)),u.value){const t=u.value.toLowerCase();s=s.filter(e=>e.id.toLowerCase().includes(t))}return s}),p=d(null);function w(s){p.value=p.value===s?null:s}function M(s){return s?{anthropic:"purple",openai:"cyan",google:"success",meta:"warning"}[s.toLowerCase()]??"cyan":"cyan"}function y(s){return s?s>=1e6?(s/1e6).toFixed(0)+"M":s>=1e3?(s/1e3).toFixed(0)+"K":String(s):"-"}return(s,t)=>(o(),a("div",B,[n("div",D,[t[2]||(t[2]=n("h2",{class:"models-title"},"Models",-1)),n("span",A,l(m.value.length)+" models",1)]),n("div",E,[h(n("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>u.value=e),class:"search-input",type:"text",placeholder:"Search models..."},null,512),[[S,u.value]]),h(n("select",{"onUpdate:modelValue":t[1]||(t[1]=e=>c.value=e),class:"vendor-select"},[t[3]||(t[3]=n("option",{value:null},"All vendors",-1)),(o(!0),a(v,null,_(b.value,e=>(o(),a("option",{key:e,value:e},l(e),9,I))),128))],512),[[F,c.value]])]),g.value?(o(),a("div",O,"Loading models...")):m.value.length===0?(o(),a("div",P,"No models found")):(o(),a("div",U,[(o(!0),a(v,null,_(m.value,e=>(o(),a("div",{key:e.id,class:x(["model-card",{expanded:p.value===e.id}]),onClick:r=>w(e.id)},[n("div",q,[n("span",z,l(e.id),1),n("div",H,[e.vendor?(o(),a("span",{key:0,class:x(["badge","badge-"+M(e.vendor)])},l(e.vendor),3)):i("",!0),e.premium?(o(),a("span",J,"premium")):i("",!0)])]),n("div",K,[e.context_window?(o(),a("div",Q,[t[4]||(t[4]=n("span",{class:"stat-label"},"Context",-1)),n("span",T,l(y(e.context_window)),1)])):i("",!0),e.max_output_tokens?(o(),a("div",$,[t[5]||(t[5]=n("span",{class:"stat-label"},"Max Output",-1)),n("span",G,l(y(e.max_output_tokens)),1)])):i("",!0),e.multiplier!==void 0?(o(),a("div",R,[t[6]||(t[6]=n("span",{class:"stat-label"},"Multiplier",-1)),n("span",W,l(e.multiplier)+"x",1)])):i("",!0)]),e.capabilities?.length?(o(),a("div",X,[(o(!0),a(v,null,_(e.capabilities,r=>(o(),a("span",{key:r,class:"cap-tag"},l(r),1))),128))])):i("",!0),e.endpoints?.length?(o(),a("div",Y,[(o(!0),a(v,null,_(e.endpoints,r=>(o(),a("span",{key:r,class:"endpoint-tag"},l(r),1))),128))])):i("",!0),p.value===e.id?(o(),a("div",Z,[n("div",ee,[n("pre",null,l(JSON.stringify(e,null,2)),1)])])):i("",!0)],10,j))),128))]))]))}}),ne=V(se,[["__scopeId","data-v-144376f7"]]);export{ne as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{x as p,y as g,r as i,d as _,g as d,l as c,t as f,E as h,o as v,h as b,D as y,f as u}from"./vue-CYcm9SLm.js";import{_ as m}from"./index-DOp9l2lW.js";function S(a,e){const t=i(null),r=i(!0),s=i(null);let o=null;async function n(){try{const l=await a();t.value=l,s.value=null}catch(l){s.value=l instanceof Error?l.message:"Failed to fetch"}finally{r.value=!1}}return p(()=>{n(),o=setInterval(()=>{n()},e)}),g(()=>{o&&(clearInterval(o),o=null)}),{data:t,loading:r,error:s,refresh:n}}const x={class:"data-card"},k={class:"card-title"},B={class:"card-content"},C=_({__name:"DataCard",props:{title:{}},setup(a){return(e,t)=>(v(),d("div",x,[c("div",k,f(a.title),1),c("div",B,[h(e.$slots,"default",{},void 0)])]))}}),M=m(C,[["__scopeId","data-v-eb29d157"]]),D={class:"progress-bar-wrap"},$={class:"progress-track"},w={key:0,class:"progress-label"},I=_({__name:"ProgressBar",props:{value:{},max:{},label:{default:void 0},color:{default:void 0}},setup(a){const e=a,t=u(()=>e.max<=0?0:Math.min(e.value/e.max*100,100)),r=u(()=>100-t.value),s=u(()=>e.color?e.color:r.value>50?"var(--success)":r.value>20?"var(--warning)":"var(--error)");return(o,n)=>(v(),d("div",D,[c("div",$,[c("div",{class:"progress-fill",style:b({width:t.value+"%",background:s.value})},null,4)]),a.label?(v(),d("span",w,f(a.label),1)):y("",!0)]))}}),N=m(I,[["__scopeId","data-v-fab03801"]]);export{M as D,N as P,S as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.data-card[data-v-eb29d157]{background:var(--bg-secondary);border:1px solid var(--border);padding:var(--spacing-lg);display:flex;flex-direction:column;gap:var(--spacing-md)}.card-title[data-v-eb29d157]{font-size:var(--font-size-sm);font-weight:600;color:var(--text);padding-bottom:var(--spacing-sm);border-bottom:1px solid var(--border-light)}.card-content[data-v-eb29d157]{display:flex;flex-direction:column}.progress-bar-wrap[data-v-fab03801]{display:flex;align-items:center;gap:var(--spacing-xs);width:100%}.progress-track[data-v-fab03801]{flex:1;height:8px;background:var(--bg-tertiary);overflow:hidden}.progress-fill[data-v-fab03801]{height:100%;transition:width var(--transition-normal)}.progress-label[data-v-fab03801]{font-size:10px;color:var(--text-dim);flex-shrink:0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.horizontal-bars[data-v-99c8b40d]{display:flex;flex-direction:column;gap:var(--spacing-xs)}.hbar-row[data-v-99c8b40d]{display:flex;align-items:center;gap:var(--spacing-sm)}.hbar-label[data-v-99c8b40d]{font-size:var(--font-size-xs);color:var(--text-muted);min-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;font-family:var(--font-mono)}.hbar-track[data-v-99c8b40d]{flex:1;height:8px;background:var(--bg-tertiary);overflow:hidden}.hbar-fill[data-v-99c8b40d]{height:100%;background:var(--primary);min-width:2px;transition:width var(--transition-normal)}.hbar-count[data-v-99c8b40d]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono);min-width:30px;text-align:right;flex-shrink:0}.usage-page[data-v-90874a73]{display:flex;flex-direction:column;flex:1;overflow-y:auto}.usage-header[data-v-90874a73]{display:flex;align-items:center;gap:var(--spacing-md);padding:var(--spacing-sm) var(--spacing-lg);border-bottom:1px solid var(--border-light);flex-shrink:0}.usage-title[data-v-90874a73]{font-size:var(--font-size-lg);font-weight:600;color:var(--text)}.usage-content[data-v-90874a73]{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:var(--spacing-lg);padding:var(--spacing-lg)}.kv-list[data-v-90874a73]{display:flex;flex-direction:column;gap:var(--spacing-xs)}.kv-row[data-v-90874a73]{display:flex;align-items:baseline;gap:var(--spacing-sm)}.kv-key[data-v-90874a73]{font-size:var(--font-size-xs);color:var(--text-dim);min-width:100px;flex-shrink:0}.kv-value[data-v-90874a73]{font-size:var(--font-size-xs);color:var(--text)}.kv-value.mono[data-v-90874a73]{font-family:var(--font-mono)}.card-empty[data-v-90874a73]{font-size:var(--font-size-xs);color:var(--text-dim);padding:var(--spacing-sm) 0}.quota-list[data-v-90874a73]{display:flex;flex-direction:column;gap:var(--spacing-md)}.quota-item[data-v-90874a73]{display:flex;flex-direction:column;gap:var(--spacing-xs)}.quota-header[data-v-90874a73]{display:flex;justify-content:space-between;align-items:baseline}.quota-label[data-v-90874a73]{font-size:var(--font-size-xs);color:var(--text-muted)}.quota-numbers[data-v-90874a73]{font-size:var(--font-size-xs);color:var(--text-dim);font-family:var(--font-mono)}@media(max-width:768px){.usage-content[data-v-90874a73]{grid-template-columns:1fr}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as N,D as h,P as x}from"./ProgressBar-BQxTnwIj.js";import{_ as D,a as B}from"./index-DOp9l2lW.js";import{u as P}from"./useFormatters-BBIZmSf2.js";import{d as w,o as e,g as o,F as T,m as I,l as s,t as l,h as C,f as v,c as _,p as f,D as q,q as m,s as S,j as $}from"./vue-CYcm9SLm.js";const j={class:"horizontal-bars"},z={class:"hbar-label"},O={class:"hbar-track"},F={class:"hbar-count"},U=w({__name:"HorizontalBar",props:{data:{}},setup(y){const k=y,d=v(()=>{const u=Object.entries(k.data);if(u.length===0)return[];const c=u.reduce((n,[,i])=>n+i,0);return u.sort((n,i)=>i[1]-n[1]).map(([n,i])=>({label:n,count:i,percent:c>0?i/c*100:0}))});return(u,c)=>(e(),o("div",j,[(e(!0),o(T,null,I(d.value,n=>(e(),o("div",{key:n.label,class:"hbar-row"},[s("span",z,l(n.label),1),s("div",O,[s("div",{class:"hbar-fill",style:C({width:n.percent+"%"})},null,4)]),s("span",F,l(n.count),1)]))),128))]))}}),V=D(U,[["__scopeId","data-v-99c8b40d"]]),H={class:"usage-page"},A={class:"usage-content"},E={key:0,class:"kv-list"},L={key:0,class:"kv-row"},M={class:"kv-value"},Q={key:1,class:"kv-row"},R={class:"kv-value"},G={key:1,class:"card-empty"},J={key:0,class:"quota-list"},K={class:"quota-header"},W={class:"quota-label"},X={class:"quota-numbers"},Y={key:1,class:"card-empty"},Z={key:0,class:"kv-list"},ss={class:"kv-row"},ts={class:"kv-value mono"},es={class:"kv-row"},as={class:"kv-value mono"},os={class:"kv-row"},ns={class:"kv-value mono"},ls={key:1,class:"card-empty"},us={key:1,class:"card-empty"},is=w({__name:"UsagePage",setup(y){const k=$("historyStore"),{formatNumber:d}=P(),{data:u}=N(()=>B.fetchStatus(),1e4),c=v(()=>u.value?.quota?u.value.quota:null),n=v(()=>u.value?.auth?u.value.auth:null),i=v(()=>{if(!c.value)return[];const r=[],t=c.value;if(t.premiumInteractions){const a=t.premiumInteractions;r.push({label:"Premium Interactions",used:a.used??0,limit:a.limit??0})}if(t.chat){const a=t.chat;r.push({label:"Chat",used:a.used??0,limit:a.limit??0})}if(t.completions){const a=t.completions;r.push({label:"Completions",used:a.used??0,limit:a.limit??0})}return r}),b=v(()=>c.value?.resetDate?String(c.value.resetDate):null),p=v(()=>{const r=k.stats.value;return r?{input:r.totalInputTokens,output:r.totalOutputTokens}:null}),g=v(()=>k.stats.value?.modelDistribution??{});return(r,t)=>(e(),o("div",H,[t[5]||(t[5]=s("div",{class:"usage-header"},[s("h2",{class:"usage-title"},"Usage")],-1)),s("div",A,[_(h,{title:"Account"},{default:f(()=>[n.value?(e(),o("div",E,[n.value.accountType?(e(),o("div",L,[t[0]||(t[0]=s("span",{class:"kv-key"},"Plan",-1)),s("span",M,l(n.value.accountType),1)])):q("",!0),b.value?(e(),o("div",Q,[t[1]||(t[1]=s("span",{class:"kv-key"},"Reset Date",-1)),s("span",R,l(b.value),1)])):q("",!0)])):(e(),o("div",G,"No account info"))]),_:1}),_(h,{title:"Quota"},{default:f(()=>[i.value.length>0?(e(),o("div",J,[(e(!0),o(T,null,I(i.value,a=>(e(),o("div",{key:a.label,class:"quota-item"},[s("div",K,[s("span",W,l(a.label),1),s("span",X,l(m(d)(a.used))+" / "+l(m(d)(a.limit)),1)]),_(x,{value:a.used,max:a.limit},null,8,["value","max"])]))),128))])):(e(),o("div",Y,"No quota data available"))]),_:1}),_(h,{title:"Session Tokens"},{default:f(()=>[p.value?(e(),o("div",Z,[s("div",ss,[t[2]||(t[2]=s("span",{class:"kv-key"},"Input Tokens",-1)),s("span",ts,l(m(d)(p.value.input)),1)]),s("div",es,[t[3]||(t[3]=s("span",{class:"kv-key"},"Output Tokens",-1)),s("span",as,l(m(d)(p.value.output)),1)]),s("div",os,[t[4]||(t[4]=s("span",{class:"kv-key"},"Total",-1)),s("span",ns,l(m(d)(p.value.input+p.value.output)),1)])])):(e(),o("div",ls,"No session data"))]),_:1}),_(h,{title:"Model Distribution"},{default:f(()=>[Object.keys(g.value).length>0?(e(),S(V,{key:0,data:g.value},null,8,["data"])):(e(),o("div",us,"No model data"))]),_:1})])]))}}),ps=D(is,[["__scopeId","data-v-90874a73"]]);export{ps as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.status-dot[data-v-f0facb12]{display:inline-block;border-radius:50%;flex-shrink:0}.status-success[data-v-f0facb12]{background:var(--success);box-shadow:0 0 4px var(--success)}.status-error[data-v-f0facb12]{background:var(--error);box-shadow:0 0 4px var(--error)}.status-pending[data-v-f0facb12]{background:var(--warning);box-shadow:0 0 4px var(--warning);animation:pulse-f0facb12 1.5s ease-in-out infinite}@keyframes pulse-f0facb12{0%,to{opacity:1}50%{opacity:.4}}.navbar[data-v-6275bbea]{height:var(--header-height);display:flex;align-items:center;justify-content:space-between;padding:0 var(--spacing-lg);background:var(--bg-secondary);border-bottom:1px solid var(--border);flex-shrink:0}.navbar-left[data-v-6275bbea]{display:flex;align-items:center}.navbar-brand[data-v-6275bbea]{font-size:var(--font-size-lg);font-weight:600;color:var(--text);letter-spacing:-.3px}.navbar-center[data-v-6275bbea]{display:flex;align-items:center;gap:var(--spacing-xs)}.nav-link[data-v-6275bbea]{font-size:var(--font-size-sm);color:var(--text-muted);padding:var(--spacing-xs) var(--spacing-md);text-decoration:none;transition:color var(--transition-fast),background var(--transition-fast)}.nav-link[data-v-6275bbea]:hover{color:var(--text);background:var(--bg-hover)}.nav-link.active[data-v-6275bbea]{color:var(--primary);font-weight:600}.navbar-right[data-v-6275bbea]{display:flex;align-items:center;gap:var(--spacing-xs)}.ws-label[data-v-6275bbea]{font-size:var(--font-size-xs);color:var(--text-dim)}@media(max-width:768px){.navbar[data-v-6275bbea]{flex-wrap:wrap;height:auto;padding:var(--spacing-sm) var(--spacing-md);gap:var(--spacing-sm)}.navbar-center[data-v-6275bbea]{order:3;width:100%;justify-content:center}}.toast-container[data-v-75e1dc4a]{position:fixed;bottom:16px;right:16px;z-index:2000;display:flex;flex-direction:column;gap:8px;pointer-events:none}.toast-item[data-v-75e1dc4a]{padding:8px 16px;border-radius:var(--border-radius);font-size:var(--font-size-sm);box-shadow:var(--shadow-md);pointer-events:auto;max-width:320px}.toast-info[data-v-75e1dc4a]{background:var(--bg-tertiary);color:var(--text);border:1px solid var(--border)}.toast-success[data-v-75e1dc4a]{background:var(--success-muted);color:var(--success);border:1px solid var(--success)}.toast-error[data-v-75e1dc4a]{background:var(--error-muted);color:var(--error);border:1px solid var(--error)}.app[data-v-7310db53]{display:flex;flex-direction:column;height:100vh;overflow:hidden}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%;overflow:hidden}ul,ol{list-style:none}a{text-decoration:none;color:inherit}button{border:none;background:none;cursor:pointer;font:inherit;color:inherit}input,select,textarea{font:inherit;color:inherit}img{max-width:100%;display:block}:root{--bg: #0d1117;--bg-secondary: #161b22;--bg-tertiary: #21262d;--bg-hover: #30363d;--bg-selected: #1f2a37;--text: #e6edf3;--text-muted: #8b949e;--text-dim: #6e7681;--border: #30363d;--border-light: #21262d;--primary: #58a6ff;--primary-muted: rgba(88, 166, 255, .15);--success: #3fb950;--success-muted: rgba(63, 185, 80, .15);--error: #f85149;--error-muted: rgba(248, 81, 73, .15);--warning: #d29922;--warning-muted: rgba(210, 153, 34, .15);--purple: #a371f7;--purple-muted: rgba(163, 113, 247, .15);--cyan: #39c5cf;--cyan-muted: rgba(57, 197, 207, .15);--pink: #db61a2;--pink-muted: rgba(219, 97, 162, .15);--primary-contrast: #ffffff;--spacing-xs: 4px;--spacing-sm: 8px;--spacing-md: 12px;--spacing-lg: 16px;--spacing-xl: 24px;--font-mono: "SF Mono", Monaco, "Courier New", monospace;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;--font-size-xs: 11px;--font-size-sm: 12px;--font-size-md: 13px;--font-size-lg: 14px;--header-height: 48px;--stats-height: 36px;--border-radius: 0;--border-radius-sm: 0;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .4);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .5);--transition-fast: .15s ease;--transition-normal: .2s ease}@media(prefers-color-scheme:light){:root{--bg: #ffffff;--bg-secondary: #f6f8fa;--bg-tertiary: #eaeef2;--bg-hover: #d0d7de;--bg-selected: #ddf4ff;--text: #1f2328;--text-muted: #656d76;--text-dim: #8c959f;--border: #d0d7de;--border-light: #eaeef2;--primary: #0969da;--primary-muted: rgba(9, 105, 218, .1);--success: #1a7f37;--success-muted: rgba(26, 127, 55, .1);--error: #cf222e;--error-muted: rgba(207, 34, 46, .1);--warning: #9a6700;--warning-muted: rgba(154, 103, 0, .1);--purple: #8250df;--purple-muted: rgba(130, 80, 223, .1);--cyan: #0598bc;--cyan-muted: rgba(5, 152, 188, .1);--pink: #bf3989;--pink-muted: rgba(191, 57, 137, .1);--primary-contrast: #ffffff;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .08);--shadow-md: 0 4px 12px rgba(0, 0, 0, .12);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .16)}}body{font-family:var(--font-sans);font-size:var(--font-size-md);color:var(--text);background:var(--bg);line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#app{height:100vh;display:flex;flex-direction:column;overflow:hidden}code,pre{font-family:var(--font-mono);font-size:var(--font-size-sm)}pre{white-space:pre-wrap;word-wrap:break-word}::selection{background:var(--primary-muted);color:var(--text)}@keyframes highlight-flash{0%,to{border-color:var(--border)}25%,75%{border-color:var(--primary)}}.highlight-flash{animation:highlight-flash .4s ease-in-out 2}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--bg-hover);border-radius:0}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}*{scrollbar-width:thin;scrollbar-color:var(--bg-hover) transparent}.fade-enter-active,.fade-leave-active{transition:opacity var(--transition-normal)}.fade-enter-from,.fade-leave-to{opacity:0}.slide-down-enter-active,.slide-down-leave-active{transition:all var(--transition-normal)}.slide-down-enter-from,.slide-down-leave-to{opacity:0;transform:translateY(-8px)}.slide-up-enter-active,.slide-up-leave-active{transition:all .3s ease}.slide-up-enter-from{opacity:0;transform:translateY(16px)}.slide-up-leave-to{opacity:0;transform:translateY(-8px)}.collapse-enter-active,.collapse-leave-active{transition:all var(--transition-normal);overflow:hidden}.collapse-enter-from,.collapse-leave-to{max-height:0;opacity:0}@keyframes highlight-flash{0%,to{border-color:var(--border)}25%,75%{border-color:var(--primary)}50%{border-color:var(--primary);box-shadow:0 0 8px #58a6ff4d}}.highlight-flash{animation:highlight-flash 1s ease}.d2h-wrapper{font-family:var(--font-mono);font-size:var(--font-size-sm)}.d2h-file-wrapper{border:1px solid var(--border);border-radius:var(--border-radius);margin-bottom:var(--spacing-sm);background:var(--bg-secondary)}.d2h-file-header{display:none}.d2h-diff-table{font-size:var(--font-size-sm)}.d2h-code-line-ctn{background:var(--bg-secondary);color:var(--text)}.d2h-code-side-line{background:var(--bg-secondary)}.d2h-code-line-prefix{color:var(--text-dim)}.d2h-ins{background:var(--success-muted)!important;border-color:var(--success)!important}.d2h-ins .d2h-code-line-ctn,.d2h-code-side-line.d2h-ins{background:var(--success-muted)!important}.d2h-del{background:var(--error-muted)!important;border-color:var(--error)!important}.d2h-del .d2h-code-line-ctn,.d2h-code-side-line.d2h-del{background:var(--error-muted)!important}.d2h-ins .d2h-code-line-ctn ins{background:#3fb9504d;text-decoration:none}.d2h-del .d2h-code-line-ctn del{background:#f851494d;text-decoration:none}.d2h-code-linenumber,.d2h-code-side-linenumber{background:var(--bg-tertiary);color:var(--text-dim);border-right:1px solid var(--border)}.d2h-info{background:var(--primary-muted);color:var(--text-muted);border-bottom:1px solid var(--border)}.vjs-tree{font-family:SF Mono,Monaco,Courier New,monospace;font-size:12px;background:#0d1117!important;color:#e6edf3!important}.vjs-tree-node:hover{background:#30363d!important}.vjs-key{color:#39c5cf!important}.vjs-value-string{color:#3fb950!important}.vjs-value-number{color:#d29922!important}.vjs-value-boolean{color:#a371f7!important}.vjs-value-null{color:#6e7681!important}.vjs-tree__brackets{color:#8b949e!important}.vjs-tree__brackets:hover{color:#58a6ff!important;cursor:pointer}.vjs-tree__content.has-line{border-left:1px solid #21262d!important}.vjs-tree__indent--line-number{color:#6e7681!important;border-right:1px solid #21262d!important;padding-right:8px!important;margin-right:4px!important}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HistoryPage-CcuFI_7q.js","assets/vue-CYcm9SLm.js","assets/useFormatters-BBIZmSf2.js","assets/vendor-BJ2Uq5vY.js","assets/HistoryPage-MBmz_wrp.css","assets/LogsPage-CTboGme2.js","assets/LogsPage-DnfMvMyI.css","assets/DashboardPage-B1uByGH4.js","assets/ProgressBar-BQxTnwIj.js","assets/ProgressBar-B_0VSeE9.css","assets/DashboardPage-CabImjCg.css","assets/ModelsPage-B_sjc_hg.js","assets/ModelsPage-BCijEIH1.css","assets/UsagePage-Nxy64EGo.js","assets/UsagePage-Nx_clyfV.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as a,f as z,d as R,o as g,g as C,h as Ee,i as F,j as Se,u as Ce,k as W,l as E,F as J,m as G,c as S,p as K,e as xe,t as B,q as M,s as Te,T as be,v as Le,x as Ae,y as ke,z as Ie,A as De,B as Pe,C as Re}from"./vue-CYcm9SLm.js";(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))i(n);new MutationObserver(n=>{for(const r of n)if(r.type==="childList")for(const l of r.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&i(l)}).observe(document,{childList:!0,subtree:!0});function s(n){const r={};return n.integrity&&(r.integrity=n.integrity),n.referrerPolicy&&(r.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?r.credentials="include":n.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(n){if(n.ep)return;n.ep=!0;const r=s(n);fetch(n.href,r)}})();const Q="/history/api";class X extends Error{constructor(e,s){super(s),this.status=e,this.name="ApiError"}}async function _(t,e){const s=await fetch(Q+t,{headers:{"Content-Type":"application/json"},...e});if(!s.ok){const i=await s.text().catch(()=>"Unknown error");throw new X(s.status,`${s.status}: ${i}`)}return s.json()}async function $(t,e){const s=await fetch(t,{headers:{"Content-Type":"application/json"},...e});if(!s.ok){const i=await s.text().catch(()=>"Unknown error");throw new X(s.status,`${s.status}: ${i}`)}return s.json()}const b={async fetchEntries(t={}){const e=new URLSearchParams;t.cursor&&e.set("cursor",t.cursor),t.limit&&e.set("limit",String(t.limit)),t.direction&&e.set("direction",t.direction),t.model&&e.set("model",t.model),t.endpoint&&e.set("endpoint",t.endpoint),t.success!==void 0&&e.set("success",String(t.success)),t.from&&e.set("from",String(t.from)),t.to&&e.set("to",String(t.to)),t.search&&e.set("search",t.search),t.sessionId&&e.set("sessionId",t.sessionId);const s=e.toString();return _("/entries"+(s?"?"+s:""))},async fetchEntry(t){return _("/entries/"+t)},async deleteEntries(){await _("/entries",{method:"DELETE"})},async fetchSessions(){return _("/sessions")},async fetchSession(t){return _("/sessions/"+t)},async deleteSession(t){await _("/sessions/"+t,{method:"DELETE"})},async fetchStats(){return _("/stats")},getExportUrl(t){return Q+"/export?format="+t},async fetchStatus(){return $("/api/status")},async fetchConfig(){return $("/api/config")},async fetchLogs(t=100){return _("/entries?limit="+t)},async fetchModels(t=!1){return $("/models"+(t?"?detail=true":""))}};class Oe{constructor(e){this.options=e}ws=null;reconnectTimer=null;reconnectDelay=1e3;maxReconnectDelay=3e4;intentionalClose=!1;connect(){this.intentionalClose=!1,this.createConnection()}disconnect(){this.intentionalClose=!0,this.reconnectTimer&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null),this.ws&&(this.ws.close(),this.ws=null),this.options.onStatusChange(!1)}get isConnected(){return this.ws?.readyState===WebSocket.OPEN}createConnection(){const s=`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/ws`;try{this.ws=new WebSocket(s)}catch{this.scheduleReconnect();return}this.ws.addEventListener("open",()=>{this.reconnectDelay=1e3,this.options.onStatusChange(!0),this.ws?.send(JSON.stringify({type:"subscribe",topics:["history"]}))}),this.ws.addEventListener("close",()=>{this.options.onStatusChange(!1),this.intentionalClose||this.scheduleReconnect()}),this.ws.addEventListener("error",()=>{}),this.ws.addEventListener("message",i=>{try{const n=JSON.parse(i.data);this.handleMessage(n)}catch{}})}handleMessage(e){switch(e.type){case"entry_added":{this.options.onEntryAdded(e.data);break}case"entry_updated":{this.options.onEntryUpdated(e.data);break}case"stats_updated":{this.options.onStatsUpdated(e.data);break}case"connected":{this.options.onConnected(e.data.clientCount);break}case"history_cleared":{this.options.onHistoryCleared();break}case"session_deleted":{this.options.onSessionDeleted(e.data.sessionId);break}}}scheduleReconnect(){this.reconnectTimer||(this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.createConnection()},this.reconnectDelay),this.reconnectDelay=Math.min(this.reconnectDelay*2,this.maxReconnectDelay))}}let Ne=0;const P=a([]);function Y(){function t(e,s="info",i=3e3){const n=Ne++;P.value.push({id:n,text:e,type:s}),setTimeout(()=>{P.value=P.value.filter(r=>r.id!==n)},i)}return{messages:P,show:t}}function Ue(){const{show:t}=Y(),e=a([]),s=a(null),i=a([]),n=a(null),r=a(""),l=a(null),d=a(null),v=a(null),u=a(null),h=a(null),m=a(0),p=a(!1),A=20,x=a(!1),N=a(null),j=a(!1),ee=a(""),te=a(""),se=a(""),ne=a(!0),oe=a(null),re=a(!1),ae=z(()=>s.value!==null),q=z(()=>s.value?e.value.findIndex(o=>o.id===s.value?.id):-1);let k=null;async function y(o,f){x.value=!0,N.value=null;try{const c=await b.fetchEntries({cursor:o,direction:f,limit:A,endpoint:l.value,success:d.value===null?void 0:d.value==="true",search:r.value||void 0,sessionId:v.value||void 0});e.value=c.entries,u.value=c.nextCursor,h.value=c.prevCursor,m.value=c.total,p.value=c.nextCursor!==null,s.value===null&&e.value.length>0&&await T(e.value[0].id)}catch(c){const w=c instanceof Error?c.message:"Failed to load entries";N.value=w,t(w,"error")}finally{x.value=!1}}async function U(){try{n.value=await b.fetchStats()}catch{}}async function V(){try{const o=await b.fetchSessions();i.value=o.sessions}catch{}}async function T(o){try{const f=await b.fetchEntry(o);s.value=f}catch(f){const c=f instanceof Error?f.message:"Failed to load entry";t(c,"error")}}function ie(o){const f=q.value;if(e.value.length===0)return;let c;f===-1?c=0:o==="next"?c=Math.min(f+1,e.value.length-1):c=Math.max(f-1,0);const w=e.value[c];w&&T(w.id)}function ce(){s.value=null}async function le(){try{await b.deleteEntries(),e.value=[],s.value=null,n.value=null,m.value=0,u.value=null,h.value=null,p.value=!1,t("History cleared","success"),await U()}catch(o){const f=o instanceof Error?o.message:"Failed to clear history";t(f,"error")}}async function I(){const o=s.value?.id;await Promise.all([y(),U(),V()]),o&&await T(o)}function ue(){u.value&&y(u.value,"older")}function de(){h.value&&y(h.value,"newer")}function D(){u.value=null,h.value=null}function fe(o){v.value=o,D(),y()}function he(o){l.value=o,D(),y()}function pe(o){d.value=o,D(),y()}function ve(o){r.value=o,D(),y()}function me(o){h.value===null&&(e.value=[o,...e.value.slice(0,A-1)],m.value++)}function ye(o){const f=e.value.findIndex(c=>c.id===o.id);f!==-1&&(e.value=e.value.map((c,w)=>w===f?o:c)),s.value?.id===o.id&&T(o.id)}function _e(o){n.value=o}function we(){I(),k=new Oe({onEntryAdded:me,onEntryUpdated:ye,onStatsUpdated:_e,onConnected:()=>{},onHistoryCleared:()=>{I()},onSessionDeleted:()=>{I()},onStatusChange:o=>{j.value=o}}),k.connect()}function ge(){k?.disconnect(),k=null}return{entries:e,selectedEntry:s,sessions:i,stats:n,searchQuery:r,filterEndpoint:l,filterSuccess:d,selectedSessionId:v,nextCursor:u,prevCursor:h,total:m,hasMore:p,loading:x,error:N,wsConnected:j,detailSearch:ee,detailFilterRole:te,detailFilterType:se,aggregateTools:ne,detailViewMode:oe,showOnlyRewritten:re,hasSelection:ae,selectedIndex:q,fetchEntries:y,fetchStats:U,fetchSessions:V,selectEntry:T,selectAdjacentEntry:ie,clearSelection:ce,clearAll:le,refresh:I,loadNext:ue,loadPrev:de,setSessionFilter:fe,setEndpointFilter:he,setSuccessFilter:pe,setSearch:ve,init:we,destroy:ge}}function tt(t){return t?typeof t=="string"?t:Array.isArray(t)?t.map(e=>e.type==="text"&&"text"in e?e.text:e.type==="thinking"&&"thinking"in e?e.thinking:e.type==="tool_use"&&"name"in e?`[Tool: ${String(e.name)}]`:e.type==="tool_result"?"[Tool Result]":"").filter(Boolean).join(" "):"":""}function st(t){return"previewText"in t?t.responseSuccess===void 0?"pending":t.responseSuccess?"success":"error":t.response?t.response.success?"success":"error":"pending"}const $e=R({__name:"StatusDot",props:{status:{},size:{default:8}},setup(t){return(e,s)=>(g(),C("span",{class:F(["status-dot","status-"+t.status]),style:Ee({width:t.size+"px",height:t.size+"px"})},null,6))}}),O=(t,e)=>{const s=t.__vccOpts||t;for(const[i,n]of e)s[i]=n;return s},Be=O($e,[["__scopeId","data-v-f0facb12"]]),Me={class:"navbar"},Fe={class:"navbar-center"},je={class:"navbar-right"},qe={class:"ws-label"},Ve=R({__name:"NavBar",setup(t){const e=Se("historyStore"),s=Ce(),i=[{to:"/history",label:"History"},{to:"/logs",label:"Logs"},{to:"/dashboard",label:"Dashboard"},{to:"/models",label:"Models"},{to:"/usage",label:"Usage"}];function n(r){return s.path===r}return(r,l)=>{const d=W("router-link");return g(),C("nav",Me,[l[0]||(l[0]=E("div",{class:"navbar-left"},[E("span",{class:"navbar-brand"},"copilot-api")],-1)),E("div",Fe,[(g(),C(J,null,G(i,v=>S(d,{key:v.to,to:v.to,class:F(["nav-link",{active:n(v.to)}])},{default:K(()=>[xe(B(v.label),1)]),_:2},1032,["to","class"])),64))]),E("div",je,[S(Be,{status:M(e).wsConnected.value?"success":"error",size:6},null,8,["status"]),E("span",qe,B(M(e).wsConnected.value?"Live":"Offline"),1)])])}}}),ze=O(Ve,[["__scopeId","data-v-6275bbea"]]),He={class:"toast-container"},We=R({__name:"BaseToast",setup(t){const{messages:e}=Y();return(s,i)=>(g(),Te(Le,{to:"body"},[E("div",He,[S(be,{name:"slide-up"},{default:K(()=>[(g(!0),C(J,null,G(M(e),n=>(g(),C("div",{key:n.id,class:F(["toast-item","toast-"+n.type])},B(n.text),3))),128))]),_:1})])]))}}),Je=O(We,[["__scopeId","data-v-75e1dc4a"]]),Ge={class:"app"},Ke=R({__name:"App",setup(t){const e=Ue();return Ie("historyStore",e),Ae(()=>e.init()),ke(()=>e.destroy()),(s,i)=>{const n=W("router-view");return g(),C("div",Ge,[S(ze),S(n),S(Je)])}}}),Qe=O(Ke,[["__scopeId","data-v-7310db53"]]),Xe="modulepreload",Ye=function(t){return"/history/v3/"+t},H={},L=function(e,s,i){let n=Promise.resolve();if(s&&s.length>0){let v=function(u){return Promise.all(u.map(h=>Promise.resolve(h).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),d=l?.nonce||l?.getAttribute("nonce");n=v(s.map(u=>{if(u=Ye(u),u in H)return;H[u]=!0;const h=u.endsWith(".css"),m=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${m}`))return;const p=document.createElement("link");if(p.rel=h?"stylesheet":Xe,h||(p.as="script"),p.crossOrigin="",p.href=u,d&&p.setAttribute("nonce",d),document.head.appendChild(p),h)return new Promise((A,x)=>{p.addEventListener("load",A),p.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${u}`)))})}))}function r(l){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=l,window.dispatchEvent(d),!d.defaultPrevented)throw l}return n.then(l=>{for(const d of l||[])d.status==="rejected"&&r(d.reason);return e().catch(r)})},Ze=De({history:Pe("/history/v3/"),routes:[{path:"/",redirect:"/history"},{path:"/history",name:"history",component:()=>L(()=>import("./HistoryPage-CcuFI_7q.js"),__vite__mapDeps([0,1,2,3,4]))},{path:"/logs",name:"logs",component:()=>L(()=>import("./LogsPage-CTboGme2.js"),__vite__mapDeps([5,1,2,6]))},{path:"/dashboard",name:"dashboard",component:()=>L(()=>import("./DashboardPage-B1uByGH4.js"),__vite__mapDeps([7,8,1,9,2,10]))},{path:"/models",name:"models",component:()=>L(()=>import("./ModelsPage-B_sjc_hg.js"),__vite__mapDeps([11,1,12]))},{path:"/usage",name:"usage",component:()=>L(()=>import("./UsagePage-Nxy64EGo.js"),__vite__mapDeps([13,8,1,9,2,14]))}]}),Z=Re(Qe);Z.use(Ze);Z.mount("#app");export{Be as S,Oe as W,O as _,b as a,tt as e,st as g,Y as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function f(){function i(t){const e=new Date(t),r=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0");return`${r}:${n}:${a}`}function c(t){const e=new Date(t),r=new Date;if(e.toDateString()===r.toDateString())return i(t);const n=e.getFullYear(),a=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${n}-${a}-${s} ${i(t)}`}function u(t){return t==null?"-":t>=1e6?(t/1e6).toFixed(1)+"M":t>=1e3?(t/1e3).toFixed(1)+"K":t.toString()}function l(t){return t?t<1e3?`${t}ms`:`${(t/1e3).toFixed(1)}s`:"-"}function o(t){return t?t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',"""):""}function g(t,e){if(!e||!t)return o(t);const r=o(t),n=e.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),a=new RegExp("("+o(n)+")","gi");return r.replace(a,'<mark class="search-highlight">$1</mark>')}return{formatTime:i,formatDate:c,formatNumber:u,formatDuration:l,escapeHtml:o,highlightSearch:g}}export{f as u};
|