@hsupu/copilot-api 0.7.20 → 0.7.22
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/config.example.yaml +82 -52
- package/dist/main.mjs +543 -403
- package/dist/main.mjs.map +1 -1
- package/package.json +1 -1
- package/ui/history-v3/dist/assets/index-CaOzq3V0.js +3 -0
- package/ui/history-v3/dist/assets/{index-CMA0Arxs.css → index-Dfh3zN1X.css} +1 -1
- package/ui/history-v3/dist/index.html +2 -2
- package/ui/history-v3/dist/assets/index-DS5mAk0y.js +0 -3
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{r as _,f as w,o as ie,g as ae,d as C,h as u,i as D,j as g,k as K,l as r,t as m,F as P,m as Q,u as c,p as _e,q as s,e as L,c as h,s as R,v as H,x as J,y as W,z as Y,A as E,a as ge,B as we,C as Ce,n as le,D as at,T as Oe,E as ot,G as lt,H as rt}from"./vue-CJ6HbDRX.js";import{c as it,h as ut,P as pe}from"./vendor-BGG3lVOP.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))o(i);new MutationObserver(i=>{for(const n of i)if(n.type==="childList")for(const l of n.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&o(l)}).observe(document,{childList:!0,subtree:!0});function a(i){const n={};return i.integrity&&(n.integrity=i.integrity),i.referrerPolicy&&(n.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?n.credentials="include":i.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function o(i){if(i.ep)return;i.ep=!0;const n=a(i);fetch(i.href,n)}})();const Le="/history/api";class ct extends Error{constructor(t,a){super(a),this.status=t,this.name="ApiError"}}async function ne(e,t){const a=await fetch(Le+e,{headers:{"Content-Type":"application/json"},...t});if(!a.ok){const o=await a.text().catch(()=>"Unknown error");throw new ct(a.status,`${a.status}: ${o}`)}return a.json()}const ce={async fetchEntries(e={}){const t=new URLSearchParams;e.page&&t.set("page",String(e.page)),e.limit&&t.set("limit",String(e.limit)),e.model&&t.set("model",e.model),e.endpoint&&t.set("endpoint",e.endpoint),e.success!==void 0&&t.set("success",String(e.success)),e.from&&t.set("from",String(e.from)),e.to&&t.set("to",String(e.to)),e.search&&t.set("search",e.search),e.sessionId&&t.set("sessionId",e.sessionId);const a=t.toString();return ne("/entries"+(a?"?"+a:""))},async fetchEntry(e){return ne("/entries/"+e)},async deleteEntries(){await ne("/entries",{method:"DELETE"})},async fetchSessions(){return ne("/sessions")},async fetchSession(e){return ne("/sessions/"+e)},async deleteSession(e){await ne("/sessions/"+e,{method:"DELETE"})},async fetchStats(){return ne("/stats")},getExportUrl(e){return Le+"/export?format="+e}};class dt{constructor(t){this.options=t}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 a=`${location.protocol==="https:"?"wss:":"ws:"}//${location.host}/history/ws`;try{this.ws=new WebSocket(a)}catch{this.scheduleReconnect();return}this.ws.addEventListener("open",()=>{this.reconnectDelay=1e3,this.options.onStatusChange(!0)}),this.ws.addEventListener("close",()=>{this.options.onStatusChange(!1),this.intentionalClose||this.scheduleReconnect()}),this.ws.addEventListener("error",()=>{}),this.ws.addEventListener("message",o=>{try{const i=JSON.parse(o.data);this.handleMessage(i)}catch{}})}handleMessage(t){switch(t.type){case"entry_added":{this.options.onEntryAdded(t.data);break}case"entry_updated":{this.options.onEntryUpdated(t.data);break}case"stats_updated":{this.options.onStatsUpdated(t.data);break}case"connected":{this.options.onConnected(t.data.clientCount);break}case"history_cleared":{this.options.onHistoryCleared();break}case"session_deleted":{this.options.onSessionDeleted(t.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 vt=0;const me=_([]);function $e(){function e(t,a="info",o=3e3){const i=vt++;me.value.push({id:i,text:t,type:a}),setTimeout(()=>{me.value=me.value.filter(n=>n.id!==i)},o)}return{messages:me,show:e}}function mt(){const{show:e}=$e(),t=_([]),a=_(null),o=_([]),i=_(null),n=_(""),l=_(null),f=_(null),v=_(null),y=_(1),k=_(1),d=_(0),b=20,$=_(!1),M=_(null),N=_(!1),z=_(""),j=_(""),te=_(""),F=_(!0),se=_(null),X=_(!1),V=w(()=>a.value!==null),O=w(()=>a.value?t.value.findIndex(S=>S.id===a.value?.id):-1);let B=null;async function p(){$.value=!0,M.value=null;try{const S=await ce.fetchEntries({page:y.value,limit:b,endpoint:l.value,success:f.value===null?void 0:f.value==="true",search:n.value||void 0,sessionId:v.value||void 0});t.value=S.entries,k.value=S.totalPages,d.value=S.total,a.value===null&&t.value.length>0&&await q(t.value[0].id)}catch(S){const U=S instanceof Error?S.message:"Failed to load entries";M.value=U,e(U,"error")}finally{$.value=!1}}async function x(){try{i.value=await ce.fetchStats()}catch{}}async function T(){try{const S=await ce.fetchSessions();o.value=S.sessions}catch{}}async function q(S){try{const U=await ce.fetchEntry(S);a.value=U}catch(U){const Z=U instanceof Error?U.message:"Failed to load entry";e(Z,"error")}}function ke(S){const U=O.value;if(t.value.length===0)return;let Z;U===-1?Z=0:S==="next"?Z=Math.min(U+1,t.value.length-1):Z=Math.max(U-1,0);const Te=t.value[Z];Te&&q(Te.id)}function Je(){a.value=null}async function We(){try{await ce.deleteEntries(),t.value=[],a.value=null,i.value=null,d.value=0,k.value=1,y.value=1,e("History cleared","success"),await x()}catch(S){const U=S instanceof Error?S.message:"Failed to clear history";e(U,"error")}}async function ve(){const S=a.value?.id;await Promise.all([p(),x(),T()]),S&&await q(S)}function Ke(S){S<1||S>k.value||(y.value=S,p())}function Qe(S){v.value=S,y.value=1,p()}function Ge(S){l.value=S,y.value=1,p()}function Ye(S){f.value=S,y.value=1,p()}function Xe(S){n.value=S,y.value=1,p()}function Ze(S){y.value===1&&(t.value.unshift(S),t.value.length>b&&t.value.pop(),d.value++,k.value=Math.ceil(d.value/b))}function et(S){const U=t.value.findIndex(Z=>Z.id===S.id);U!==-1&&(t.value[U]=S),a.value?.id===S.id&&q(S.id)}function tt(S){i.value=S}function st(){ve(),B=new dt({onEntryAdded:Ze,onEntryUpdated:et,onStatsUpdated:tt,onConnected:()=>{},onHistoryCleared:()=>{ve()},onSessionDeleted:()=>{ve()},onStatusChange:S=>{N.value=S}}),B.connect()}function nt(){B?.disconnect(),B=null}return{entries:t,selectedEntry:a,sessions:o,stats:i,searchQuery:n,filterEndpoint:l,filterSuccess:f,selectedSessionId:v,page:y,totalPages:k,total:d,loading:$,error:M,wsConnected:N,detailSearch:z,detailFilterRole:j,detailFilterType:te,aggregateTools:F,detailViewMode:se,showOnlyRewritten:X,hasSelection:V,selectedIndex:O,fetchEntries:p,fetchStats:x,fetchSessions:T,selectEntry:q,selectAdjacentEntry:ke,clearSelection:Je,clearAll:We,refresh:ve,setPage:Ke,setSessionFilter:Qe,setEndpointFilter:Ge,setSuccessFilter:Ye,setSearch:Xe,init:st,destroy:nt}}function xe(e){return e?typeof e=="string"?e:Array.isArray(e)?e.map(t=>t.type==="text"&&"text"in t?t.text:t.type==="thinking"&&"thinking"in t?t.thinking:t.type==="tool_use"&&"name"in t?`[Tool: ${String(t.name)}]`:t.type==="tool_result"?"[Tool Result]":"").filter(Boolean).join(" "):"":""}function Me(e){return"previewText"in e?e.responseSuccess===void 0?"pending":e.responseSuccess?"success":"error":e.response?e.response.success?"success":"error":"pending"}function pt(e){function t(a){const o=a.target;if(o.tagName==="INPUT"||o.tagName==="TEXTAREA"||o.tagName==="SELECT"){a.key==="Escape"&&(o.blur(),e.onEscape());return}switch(a.key){case"ArrowUp":case"k":{a.preventDefault(),e.onNavigate("prev");break}case"ArrowDown":case"j":{a.preventDefault(),e.onNavigate("next");break}case"/":{a.preventDefault(),e.onSearch();break}case"Escape":{if(document.querySelector(".modal-overlay"))break;const n=document.querySelector(".export-menu");if(n&&n.style.display!=="none")break;e.onEscape();break}}}ie(()=>{document.addEventListener("keydown",t)}),ae(()=>{document.removeEventListener("keydown",t)})}function oe(){function e(l){const f=new Date(l),v=String(f.getHours()).padStart(2,"0"),y=String(f.getMinutes()).padStart(2,"0"),k=String(f.getSeconds()).padStart(2,"0");return`${v}:${y}:${k}`}function t(l){const f=new Date(l),v=new Date;if(f.toDateString()===v.toDateString())return e(l);const y=f.getFullYear(),k=String(f.getMonth()+1).padStart(2,"0"),d=String(f.getDate()).padStart(2,"0");return`${y}-${k}-${d} ${e(l)}`}function a(l){return l==null?"-":l>=1e6?(l/1e6).toFixed(1)+"M":l>=1e3?(l/1e3).toFixed(1)+"K":l.toString()}function o(l){return l?l<1e3?`${l}ms`:`${(l/1e3).toFixed(1)}s`:"-"}function i(l){return l?l.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',"""):""}function n(l,f){if(!f||!l)return i(l);const v=i(l),y=f.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),k=new RegExp("("+i(y)+")","gi");return v.replace(k,'<mark class="search-highlight">$1</mark>')}return{formatTime:e,formatDate:t,formatNumber:a,formatDuration:o,escapeHtml:i,highlightSearch:n}}const ft=["disabled"],yt={key:0,class:"spinner"},gt=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,a)=>(r(),u("button",{class:D(["base-btn",["btn-"+e.variant,"btn-size-"+e.size,{"btn-loading":e.loading}]]),disabled:e.disabled||e.loading,onClick:a[0]||(a[0]=o=>t.$emit("click",o))},[e.loading?(r(),u("span",yt)):g("",!0),K(t.$slots,"default",{},void 0)],10,ft))}}),I=(e,t)=>{const a=e.__vccOpts||e;for(const[o,i]of t)a[o]=i;return a},fe=I(gt,[["__scopeId","data-v-5d391870"]]),ht=["value"],wt={key:0,value:""},bt=["value"],kt=C({__name:"BaseSelect",props:{modelValue:{},options:{},placeholder:{}},emits:["update:modelValue"],setup(e){return(t,a)=>(r(),u("select",{class:"base-select",value:e.modelValue??"",onChange:a[0]||(a[0]=o=>t.$emit("update:modelValue",o.target.value||null))},[e.placeholder?(r(),u("option",wt,m(e.placeholder),1)):g("",!0),(r(!0),u(P,null,Q(e.options,o=>(r(),u("option",{key:o.value,value:o.value},m(o.label),9,bt))),128))],40,ht))}}),re=I(kt,[["__scopeId","data-v-1a8e761a"]]),xt=["width","height","innerHTML"],_t=C({__name:"IconSvg",props:{name:{},size:{default:14}},setup(e){const o={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(i,n)=>(r(),u("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:c(o)},null,8,xt))}}),A=I(_t,[["__scopeId","data-v-ae6caa74"]]),$t=C({__name:"StatusDot",props:{status:{},size:{default:8}},setup(e){return(t,a)=>(r(),u("span",{class:D(["status-dot","status-"+e.status]),style:_e({width:e.size+"px",height:e.size+"px"})},null,6))}}),De=I($t,[["__scopeId","data-v-f0facb12"]]),St={class:"app-header"},Rt={class:"header-left"},Tt={class:"header-right"},Ct={class:"ws-label"},Mt={class:"export-menu"},It=C({__name:"AppHeader",setup(e){const t=Y("historyStore"),{formatDate:a}=oe(),o=_(!1),i=w(()=>t.sessions.value.map(b=>({value:b.id,label:`${a(b.startTime)} (${b.requestCount} reqs)`}))),n=_(!1),l=_();function f(b){location.href=`/history/api/export?format=${b}`,n.value=!1}function v(b){l.value&&!l.value.contains(b.target)&&(n.value=!1)}function y(b){b.key==="Escape"&&n.value&&(n.value=!1,b.stopPropagation())}ie(()=>{document.addEventListener("click",v),document.addEventListener("keydown",y)}),ae(()=>{document.removeEventListener("click",v),document.removeEventListener("keydown",y)});async function k(){confirm("Clear all history? This cannot be undone.")&&await t.clearAll()}async function d(){o.value=!0;try{await t.refresh()}finally{o.value=!1}}return(b,$)=>(r(),u("header",St,[s("div",Rt,[$[4]||($[4]=s("h1",{class:"header-title"},[L("History "),s("span",{class:"version-tag"},"V3")],-1)),h(re,{"model-value":c(t).selectedSessionId.value,options:i.value,placeholder:"All Sessions","onUpdate:modelValue":$[0]||($[0]=M=>c(t).setSessionFilter(M))},null,8,["model-value","options"])]),s("div",Tt,[h(De,{status:c(t).wsConnected.value?"success":"error",size:6},null,8,["status"]),s("span",Ct,m(c(t).wsConnected.value?"Live":"Offline"),1),h(fe,{variant:"ghost",disabled:o.value,onClick:d},{default:R(()=>[h(A,{name:"refresh",size:13,class:D({spinning:o.value})},null,8,["class"]),L(" "+m(o.value?"Refreshing...":"Refresh"),1)]),_:1},8,["disabled"]),s("div",{ref_key:"exportRef",ref:l,class:"export-dropdown"},[h(fe,{variant:"ghost",onClick:$[1]||($[1]=H(M=>n.value=!n.value,["stop"]))},{default:R(()=>[h(A,{name:"download",size:13}),$[5]||($[5]=L(" Export ",-1))]),_:1}),J(s("div",Mt,[s("button",{class:"export-item",onClick:$[2]||($[2]=M=>f("json"))},"Export JSON"),s("button",{class:"export-item",onClick:$[3]||($[3]=M=>f("csv"))},"Export CSV")],512),[[W,n.value]])],512),h(fe,{variant:"danger",onClick:k},{default:R(()=>[h(A,{name:"trash",size:13}),$[6]||($[6]=L(" Clear ",-1))]),_:1})])]))}}),Et=I(It,[["__scopeId","data-v-ba112819"]]),Bt={key:0,class:"stats-bar"},Ot={class:"stat-item"},Lt={class:"stat-value"},Dt={class:"stat-item stat-success"},Nt={class:"stat-value"},Vt={class:"stat-item stat-error"},At={class:"stat-value"},qt={class:"stat-item"},zt={class:"stat-value"},Ut={class:"stat-item"},Pt={class:"stat-value"},jt=C({__name:"StatsBar",setup(e){const t=Y("historyStore"),{formatNumber:a}=oe();return(o,i)=>c(t).stats.value?(r(),u("div",Bt,[s("div",Ot,[s("span",Lt,m(c(a)(c(t).stats.value.totalRequests)),1),i[0]||(i[0]=s("span",{class:"stat-label"},"Requests",-1))]),s("div",Dt,[s("span",Nt,m(c(a)(c(t).stats.value.successfulRequests)),1),i[1]||(i[1]=s("span",{class:"stat-label"},"Success",-1))]),s("div",Vt,[s("span",At,m(c(a)(c(t).stats.value.failedRequests)),1),i[2]||(i[2]=s("span",{class:"stat-label"},"Failed",-1))]),s("div",qt,[s("span",zt,m(c(a)(c(t).stats.value.totalInputTokens)),1),i[3]||(i[3]=s("span",{class:"stat-label"},"In Tokens",-1))]),s("div",Ut,[s("span",Pt,m(c(a)(c(t).stats.value.totalOutputTokens)),1),i[4]||(i[4]=s("span",{class:"stat-label"},"Out Tokens",-1))])])):g("",!0)}}),Ft=I(jt,[["__scopeId","data-v-7ebe7ed2"]]),Ht={class:"split-right"},Jt=C({__name:"SplitPane",props:{defaultLeftWidth:{default:320},minLeftWidth:{default:240},maxLeftWidth:{default:500}},setup(e){const t=_(parseInt(localStorage.getItem("history-v3-split-width")||"0")||320),a=_(!1);function o(l){l.preventDefault(),a.value=!0,document.addEventListener("mousemove",i),document.addEventListener("mouseup",n)}function i(l){if(!a.value)return;const f=Math.max(240,Math.min(500,l.clientX));t.value=f}function n(){a.value=!1,localStorage.setItem("history-v3-split-width",String(t.value)),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",n)}return ie(()=>{const l=parseInt(localStorage.getItem("history-v3-split-width")||"0");l>0&&(t.value=l)}),ae(()=>{document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",n)}),(l,f)=>(r(),u("div",{class:D(["split-pane",{dragging:a.value}])},[s("div",{class:"split-left",style:_e({width:t.value+"px"})},[K(l.$slots,"left",{},void 0)],4),s("div",{class:"split-handle",onMousedown:o},null,32),s("div",Ht,[K(l.$slots,"right",{},void 0)])],2))}}),Wt=I(Jt,[["__scopeId","data-v-77cb6608"]]),Kt=["value","placeholder"],Qt=C({__name:"BaseInput",props:{modelValue:{},placeholder:{},icon:{}},emits:["update:modelValue"],setup(e,{expose:t}){const a=_();function o(){a.value?.focus()}return t({focus:o}),(i,n)=>(r(),u("div",{class:D(["base-input",{"has-icon":e.icon}])},[e.icon?(r(),E(A,{key:0,name:e.icon,size:13,class:"input-icon"},null,8,["name"])):g("",!0),s("input",{ref_key:"inputRef",ref:a,type:"text",value:e.modelValue,placeholder:e.placeholder,onInput:n[0]||(n[0]=l=>i.$emit("update:modelValue",l.target.value))},null,40,Kt)],2))}}),Ne=I(Qt,[["__scopeId","data-v-77e6d433"]]),Gt=C({__name:"BaseBadge",props:{color:{default:"default"}},setup(e){return(t,a)=>(r(),u("span",{class:D(["base-badge","badge-"+e.color])},[K(t.$slots,"default",{},void 0)],2))}}),G=I(Gt,[["__scopeId","data-v-226d8817"]]),Yt={class:"item-header"},Xt={class:"item-time"},Zt=["href","title"],es=["title"],ts={class:"item-meta"},ss={key:1,class:"item-tokens"},ns={key:2,class:"item-duration"},as=["title"],os=C({__name:"RequestItem",props:{entry:{},selected:{type:Boolean}},emits:["select"],setup(e){const{formatDate:t,formatNumber:a,formatDuration:o}=oe();return(i,n)=>(r(),u("div",{class:D(["request-item",{selected:e.selected,["status-"+c(Me)(e.entry)]:!0}]),onClick:n[1]||(n[1]=l=>i.$emit("select",e.entry.id))},[s("div",Yt,[h(De,{status:c(Me)(e.entry)},null,8,["status"]),s("span",Xt,m(c(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:n[0]||(n[0]=H(()=>{},["stop"]))},m(e.entry.id),9,Zt),s("span",{class:"item-model",title:e.entry.responseModel||e.entry.requestModel||void 0},m(e.entry.responseModel||e.entry.requestModel||"-"),9,es)]),s("div",ts,[h(G,{color:e.entry.endpoint==="anthropic-messages"?"purple":e.entry.endpoint==="openai-responses"?"green":"cyan"},{default:R(()=>[L(m(e.entry.endpoint),1)]),_:1},8,["color"]),e.entry.stream?(r(),E(G,{key:0,color:"primary"},{default:R(()=>[...n[2]||(n[2]=[L("stream",-1)])]),_:1})):g("",!0),e.entry.usage?(r(),u("span",ss,m(c(a)(e.entry.usage.input_tokens))+" in / "+m(c(a)(e.entry.usage.output_tokens))+" out ",1)):g("",!0),e.entry.durationMs?(r(),u("span",ns," · "+m(c(o)(e.entry.durationMs)),1)):g("",!0)]),s("div",{class:"item-preview",title:e.entry.previewText||void 0},m(e.entry.previewText),9,as)],2))}}),ls=I(os,[["__scopeId","data-v-0c9ef106"]]),rs={key:0,class:"list-pagination"},is=["disabled"],us={key:0,class:"page-ellipsis"},cs=["onClick"],ds=["disabled"],vs=C({__name:"ListPagination",setup(e){const t=Y("historyStore"),a=w(()=>{const o=t.page.value,i=t.totalPages.value;if(i<=7)return Array.from({length:i},(v,y)=>y+1);const n=[];n.push(1),o>3&&n.push("...");const l=Math.max(2,o-1),f=Math.min(i-1,o+1);for(let v=l;v<=f;v++)n.push(v);return o<i-2&&n.push("..."),n.push(i),n});return(o,i)=>c(t).totalPages.value>1?(r(),u("div",rs,[s("button",{class:"page-btn nav-btn",disabled:c(t).page.value<=1,onClick:i[0]||(i[0]=n=>c(t).setPage(c(t).page.value-1))}," « ",8,is),(r(!0),u(P,null,Q(a.value,(n,l)=>(r(),u(P,{key:l},[n==="..."?(r(),u("span",us,"...")):(r(),u("button",{key:1,class:D(["page-btn",{active:n===c(t).page.value}]),onClick:f=>c(t).setPage(n)},m(n),11,cs))],64))),128)),s("button",{class:"page-btn nav-btn",disabled:c(t).page.value>=c(t).totalPages.value,onClick:i[1]||(i[1]=n=>c(t).setPage(c(t).page.value+1))}," » ",8,ds)])):g("",!0)}}),ms=I(vs,[["__scopeId","data-v-c52e0777"]]),ps={class:"request-list"},fs={class:"list-controls"},ys={key:0,class:"search-count"},gs={class:"list-filters"},hs={class:"list-body"},ws={key:0,class:"list-empty"},bs={key:1,class:"list-empty"},ks=C({__name:"RequestList",setup(e,{expose:t}){const a=Y("historyStore"),o=_("");let i=null;const n=_();ge(o,y=>{i&&clearTimeout(i),i=setTimeout(()=>{a.setSearch(y)},300)});const l=[{value:"anthropic-messages",label:"Anthropic Messages"},{value:"openai-chat-completions",label:"OpenAI Chat Completions"},{value:"openai-responses",label:"OpenAI Responses"}],f=[{value:"true",label:"Success"},{value:"false",label:"Failed"}];function v(){n.value?.focus()}return t({focusSearch:v}),(y,k)=>(r(),u("div",ps,[s("div",fs,[h(Ne,{ref_key:"searchInputRef",ref:n,modelValue:o.value,"onUpdate:modelValue":k[0]||(k[0]=d=>o.value=d),placeholder:"Search...",icon:"search"},null,8,["modelValue"]),o.value&&c(a).total.value>0?(r(),u("span",ys,m(c(a).total.value)+" hit"+m(c(a).total.value!==1?"s":""),1)):g("",!0),s("div",gs,[h(re,{"model-value":c(a).filterEndpoint.value,options:l,placeholder:"Endpoint","onUpdate:modelValue":k[1]||(k[1]=d=>c(a).setEndpointFilter(d))},null,8,["model-value"]),h(re,{"model-value":c(a).filterSuccess.value,options:f,placeholder:"Status","onUpdate:modelValue":k[2]||(k[2]=d=>c(a).setSuccessFilter(d))},null,8,["model-value"])])]),s("div",hs,[c(a).loading.value&&c(a).entries.value.length===0?(r(),u("div",ws," Loading... ")):c(a).entries.value.length===0?(r(),u("div",bs,[...k[4]||(k[4]=[L(" No requests found ",-1),s("p",{class:"empty-subtitle"},"Try adjusting your filters",-1)])])):(r(!0),u(P,{key:2},Q(c(a).entries.value,d=>(r(),E(ls,{key:d.id,entry:d,selected:c(a).selectedEntry.value?.id===d.id,onSelect:k[3]||(k[3]=b=>c(a).selectEntry(b))},null,8,["entry","selected"]))),128))]),h(ms)]))}}),xs=I(ks,[["__scopeId","data-v-28ea6559"]]);function Ve(e){return e.type==="text"}function _s(e){return e.type==="thinking"}function $s(e){return e.type==="redacted_thinking"}function Ae(e){return e.type==="tool_use"}function qe(e){return e.type==="tool_result"}function Ss(e){return e.type==="image"}function Rs(e){if(e.role==="tool"&&e.tool_call_id){const a=typeof e.content=="string"?e.content:JSON.stringify(e.content);return[{type:"tool_result",tool_use_id:e.tool_call_id,content:a}]}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 a of e.tool_calls){let o={};try{o=JSON.parse(a.function.arguments)}catch{o={_raw:a.function.arguments}}t.push({type:"tool_use",id:a.id,name:a.function.name,input:o})}return t}const ze=Symbol("contentContext");function Ts(e){we(ze,e)}function de(){const e=Y(ze);if(!e)throw new Error("useContentContext() called outside of ContentContext provider");return e}function Cs(e){const t=w(()=>{const d=e.value;if(!d?.pipelineInfo?.truncation)return-1;const b=d.pipelineInfo.truncation.removedMessageCount;if(!b)return-1;const $=d.pipelineInfo.messageMapping;return $&&$.length>0?$[0]:b}),a=w(()=>{const d=new Map,b=e.value;if(!b?.pipelineInfo?.rewrittenMessages||!b.pipelineInfo.messageMapping)return d;const{rewrittenMessages:$,messageMapping:M}=b.pipelineInfo;for(let N=0;N<M.length;N++){const z=M[N],j=$[N];j&&d.set(z,j)}return d}),o=w(()=>{const d=new Set,b=e.value;if(!b?.pipelineInfo?.rewrittenMessages)return d;const $=b.request.messages??[];for(const[M,N]of a.value){const z=$[M];z&&z.content!==N.content&&JSON.stringify(z.content)!==JSON.stringify(N.content)&&d.add(M)}return d}),i=w(()=>{const d=e.value;return d?.pipelineInfo?o.value.size>0||!!d.pipelineInfo.rewrittenSystem:!1}),n=w(()=>{const d=e.value;if(!d?.pipelineInfo?.rewrittenSystem)return!1;const b=d.request.system,$=d.pipelineInfo.rewrittenSystem;return!b||!$?!!$:JSON.stringify(b)!==JSON.stringify($)}),l=w(()=>{const d=o.value.size,b=n.value,$=t.value>=0,M=$?t.value:0;return{msgCount:d,sysRewritten:b,truncated:$,truncatedCount:M}}),f=w(()=>[...o.value].sort((d,b)=>d-b));function v(d){return a.value.get(d)??null}function y(d){return o.value.has(d)}function k(d){const b=t.value;return b<0?!1:d<b}return{truncationPoint:t,hasRewrites:i,isSystemRewritten:n,rewriteSummary:l,rewrittenIndices:o,rewrittenIndexList:f,getRewrittenMessage:v,isMessageRewritten:y,isMessageTruncated:k}}const Ue=Symbol("rawModal");function Ms(){const e=_(!1),t=Ce(null),a=Ce(null),o=_("");function i(n,l,f){t.value=n,a.value=f??null,o.value=l,e.value=!0}return we(Ue,{openRawModal:i}),{visible:e,data:t,rewrittenData:a,title:o,openRawModal:i}}function be(){const e=Y(Ue);if(!e)throw new Error("useRawModal() called outside of RawModal provider");return e}const Pe=Symbol("sharedResizeObserver");function Is(){const e=new Map,t=new Set;let a=null;const o=new ResizeObserver(f=>{for(const v of f)t.add(v.target);a===null&&(a=requestAnimationFrame(()=>{a=null;for(const v of t)e.get(v)?.();t.clear()}))});function i(f,v){e.set(f,v),o.observe(f)}function n(f){e.delete(f),o.unobserve(f)}ae(()=>{o.disconnect(),e.clear(),t.clear(),a!==null&&cancelAnimationFrame(a)});const l={observe:i,unobserve:n};return we(Pe,l),l}function je(){const e=Y(Pe);if(!e)throw new Error("useSharedResizeObserver() called outside of provider");return e}const Es={class:"base-checkbox"},Bs=["checked"],Os={key:0,class:"checkbox-label"},Ls=C({__name:"BaseCheckbox",props:{modelValue:{type:Boolean},label:{}},emits:["update:modelValue"],setup(e){return(t,a)=>(r(),u("label",Es,[s("input",{type:"checkbox",checked:e.modelValue,onChange:a[0]||(a[0]=o=>t.$emit("update:modelValue",o.target.checked))},null,40,Bs),e.label?(r(),u("span",Os,m(e.label),1)):g("",!0)]))}}),Ie=I(Ls,[["__scopeId","data-v-b169bfe7"]]),Ds={class:"detail-toolbar"},Ns={class:"toolbar-row"},Vs={key:0,class:"toolbar-row rewrite-row"},As={class:"rewrite-stats"},qs={key:0,class:"rewrite-stat"},zs={key:1,class:"rewrite-stat"},Us={key:2,class:"rewrite-stat rewrite-stat-truncated"},Ps={class:"rewrite-controls"},js={key:0,class:"rewrite-nav"},Fs={class:"nav-label"},Hs=C({__name:"DetailToolbar",props:{hasRewrites:{type:Boolean},rewriteSummary:{},rewrittenIndexList:{}},emits:["export"],setup(e){const t=Y("historyStore"),a=e,o=[{value:"system",label:"System"},{value:"user",label:"User"},{value:"assistant",label:"Assistant"},{value:"tool",label:"Tool"}],i=[{value:"text",label:"Text"},{value:"tool_use",label:"Tool Use"},{value:"tool_result",label:"Tool Result"},{value:"thinking",label:"Thinking"},{value:"image",label:"Image"}],n=[{value:"original",label:"All Original"},{value:"rewritten",label:"All Rewritten"},{value:"diff",label:"All Diff"}],l=_(-1);function f(k){t.detailViewMode.value=k}function v(k){const d=document.querySelector(`[data-msg-index="${k}"]`);d&&(d.scrollIntoView({behavior:"smooth",block:"center"}),d.classList.remove("highlight-flash"),d.offsetWidth,d.classList.add("highlight-flash"))}function y(k){const d=a.rewrittenIndexList;d.length!==0&&(k==="next"?l.value=l.value<d.length-1?l.value+1:0:l.value=l.value>0?l.value-1:d.length-1,v(d[l.value]))}return(k,d)=>(r(),u("div",Ds,[h(Ne,{"model-value":c(t).detailSearch.value,placeholder:"Search in messages...",icon:"search","onUpdate:modelValue":d[0]||(d[0]=b=>c(t).detailSearch.value=b)},null,8,["model-value"]),s("div",Ns,[h(re,{"model-value":c(t).detailFilterRole.value||null,options:o,placeholder:"Role","onUpdate:modelValue":d[1]||(d[1]=b=>c(t).detailFilterRole.value=b??"")},null,8,["model-value"]),h(re,{"model-value":c(t).detailFilterType.value||null,options:i,placeholder:"Type","onUpdate:modelValue":d[2]||(d[2]=b=>c(t).detailFilterType.value=b??"")},null,8,["model-value"]),h(Ie,{"model-value":c(t).aggregateTools.value,label:"Aggregate Tools","onUpdate:modelValue":d[3]||(d[3]=b=>c(t).aggregateTools.value=b)},null,8,["model-value"]),h(fe,{variant:"ghost",onClick:d[4]||(d[4]=b=>k.$emit("export"))},{default:R(()=>[h(A,{name:"download",size:13}),d[9]||(d[9]=L(" Export ",-1))]),_:1})]),e.hasRewrites?(r(),u("div",Vs,[s("div",As,[d[10]||(d[10]=s("span",{class:"rewrite-label"},"Rewrites:",-1)),e.rewriteSummary.msgCount>0?(r(),u("span",qs,m(e.rewriteSummary.msgCount)+" msg"+m(e.rewriteSummary.msgCount>1?"s":""),1)):g("",!0),e.rewriteSummary.sysRewritten?(r(),u("span",zs,"system")):g("",!0),e.rewriteSummary.truncated?(r(),u("span",Us,m(e.rewriteSummary.truncatedCount)+" truncated ",1)):g("",!0)]),s("div",Ps,[h(re,{"model-value":c(t).detailViewMode.value,options:n,placeholder:"Per-message","onUpdate:modelValue":d[5]||(d[5]=b=>f(b))},null,8,["model-value"]),h(Ie,{"model-value":c(t).showOnlyRewritten.value,label:"Only Rewritten","onUpdate:modelValue":d[6]||(d[6]=b=>c(t).showOnlyRewritten.value=b)},null,8,["model-value"]),e.rewriteSummary.msgCount>0?(r(),u("div",js,[s("button",{class:"nav-btn",title:"Previous rewritten message",onClick:d[7]||(d[7]=b=>y("prev"))},[h(A,{name:"chevron-up",size:10})]),s("span",Fs,m(l.value>=0?l.value+1:"–")+"/"+m(e.rewrittenIndexList.length),1),s("button",{class:"nav-btn",title:"Next rewritten message",onClick:d[8]||(d[8]=b=>y("next"))},[h(A,{name:"chevron-down",size:10})])])):g("",!0)])])):g("",!0)]))}}),Js=I(Hs,[["__scopeId","data-v-3ed4a3af"]]),Ws={class:"section-title"},Ks={key:0,class:"section-badge"},Qs={class:"section-body"},Gs=C({__name:"SectionBlock",props:{title:{},defaultCollapsed:{type:Boolean},badge:{},rawData:{},rewrittenRawData:{},rawTitle:{default:"Raw"}},setup(e){const t=e,{openRawModal:a}=be(),o=_(t.defaultCollapsed??!1);function i(){o.value=!o.value}function n(l){l.stopPropagation(),t.rawData!==void 0&&a(t.rawData,t.rawTitle,t.rewrittenRawData)}return(l,f)=>(r(),u("div",{class:D(["section-block",{collapsed:o.value}])},[s("div",{class:"section-header",onClick:i},[h(A,{name:o.value?"chevron-right":"chevron-down",size:12,class:"section-chevron"},null,8,["name"]),s("span",Ws,m(e.title),1),e.badge?(r(),u("span",Ks,m(e.badge),1)):g("",!0),e.rawData!==void 0?(r(),u("button",{key:1,class:"section-raw-btn",title:"View raw JSON",onClick:n},[h(A,{name:"code",size:10}),f[0]||(f[0]=L(" Raw ",-1))])):g("",!0)]),J(s("div",Qs,[K(l.$slots,"default",{},void 0)],512),[[W,!o.value]])],2))}}),ye=I(Gs,[["__scopeId","data-v-6d33a6f9"]]),Ys={class:"sse-timeline"},Xs={class:"sse-offset"},Zs={key:0,class:"sse-summary"},en=C({__name:"SseEventsSection",props:{events:{}},setup(e){const t=e;function a(l){return l<1e3?`+${l}ms`:`+${(l/1e3).toFixed(1)}s`}function o(l){const f=l.data;switch(l.type){case"message_start":{const v=f.message;return v?.model?`model=${v.model}`:""}case"content_block_start":{const v=f.content_block,y=[`index=${f.index}`];return v?.type&&y.push(`type=${v.type}`),v?.name&&y.push(`name=${v.name}`),y.join(" ")}case"content_block_stop":return`index=${f.index}`;case"message_delta":{const v=f.delta,y=[];v?.stop_reason&&y.push(`stop=${v.stop_reason}`);const k=f.usage;return k?.output_tokens&&y.push(`out=${k.output_tokens}`),y.join(" ")}case"error":{const v=f.error;return v?.message?String(v.message).slice(0,80):""}default:return""}}function i(l){switch(l){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 n=w(()=>`${t.events.length} events`);return(l,f)=>(r(),E(ye,{title:"SSE Events",badge:n.value,"default-collapsed":!0,"raw-data":e.events,"raw-title":"Raw — SSE Events"},{default:R(()=>[s("div",Ys,[(r(!0),u(P,null,Q(e.events,(v,y)=>(r(),u("div",{key:y,class:"sse-event"},[s("span",Xs,m(a(v.offsetMs)),1),s("span",{class:D(["sse-type","sse-type-"+i(v.type)])},m(v.type),3),o(v)?(r(),u("span",Zs,m(o(v)),1)):g("",!0)]))),128))])]),_:1},8,["badge","raw-data"]))}}),tn=I(en,[["__scopeId","data-v-2edf43f6"]]),sn={class:"meta-grid"},nn={class:"meta-row"},an={class:"meta-value"},on={class:"meta-row"},ln={class:"meta-value"},rn={class:"meta-row"},un={class:"meta-value"},cn={class:"meta-row"},dn={class:"meta-value"},vn={key:0,class:"meta-row"},mn={class:"meta-value"},pn={key:1,class:"meta-row"},fn={class:"meta-value"},yn={key:2,class:"meta-row"},gn={class:"meta-value"},hn={key:3,class:"meta-row"},wn={class:"meta-value"},bn={key:4,class:"meta-section"},kn={class:"meta-row"},xn={class:"meta-value mono"},_n={class:"meta-row"},$n={class:"meta-value mono"},Sn={key:0,class:"meta-row"},Rn={class:"meta-value mono"},Tn={key:1,class:"meta-row"},Cn={class:"meta-value mono"},Mn={key:5,class:"meta-row meta-error"},In={class:"meta-value error-text"},En={key:6,class:"meta-row"},Bn={class:"meta-value"},On={key:7,class:"meta-section"},Ln={class:"meta-row"},Dn={class:"meta-value"},Nn={class:"meta-row"},Vn={class:"meta-value mono"},An={key:8,class:"meta-section"},qn={key:0,class:"meta-row"},zn={class:"meta-value"},Un={key:1,class:"meta-row"},Pn={class:"meta-value"},jn={key:9,class:"meta-section"},Fn={key:0,class:"meta-row"},Hn={class:"meta-label meta-label--attempt"},Jn={key:1,class:"meta-row"},Wn={class:"meta-value"},Kn={key:2,class:"meta-row"},Qn={class:"meta-value"},Gn={key:3,class:"meta-row"},Yn={class:"meta-value"},Xn={key:4,class:"meta-row"},Zn={class:"meta-value"},ea={key:5,class:"meta-row"},ta={class:"meta-value"},sa=C({__name:"MetaInfo",props:{entry:{}},setup(e){const{formatNumber:t,formatDuration:a,formatDate:o}=oe();return(i,n)=>(r(),u("div",sn,[s("div",nn,[n[0]||(n[0]=s("span",{class:"meta-label"},"Time",-1)),s("span",an,m(c(o)(e.entry.timestamp)),1)]),s("div",on,[n[1]||(n[1]=s("span",{class:"meta-label"},"Model",-1)),s("span",ln,m(e.entry.response?.model||e.entry.request.model||"-"),1)]),s("div",rn,[n[2]||(n[2]=s("span",{class:"meta-label"},"Endpoint",-1)),s("span",un,[h(G,{color:e.entry.endpoint==="anthropic-messages"?"purple":e.entry.endpoint==="openai-responses"?"green":"cyan"},{default:R(()=>[L(m(e.entry.endpoint),1)]),_:1},8,["color"])])]),s("div",cn,[n[3]||(n[3]=s("span",{class:"meta-label"},"Stream",-1)),s("span",dn,m(e.entry.request.stream===!0?"Yes":"No"),1)]),e.entry.request.max_tokens?(r(),u("div",vn,[n[4]||(n[4]=s("span",{class:"meta-label"},"Max Tokens",-1)),s("span",mn,m(c(t)(e.entry.request.max_tokens)),1)])):g("",!0),e.entry.request.temperature!==void 0?(r(),u("div",pn,[n[5]||(n[5]=s("span",{class:"meta-label"},"Temperature",-1)),s("span",fn,m(e.entry.request.temperature),1)])):g("",!0),e.entry.durationMs?(r(),u("div",yn,[n[6]||(n[6]=s("span",{class:"meta-label"},"Duration",-1)),s("span",gn,m(c(a)(e.entry.durationMs)),1)])):g("",!0),e.entry.response?.stop_reason?(r(),u("div",hn,[n[7]||(n[7]=s("span",{class:"meta-label"},"Stop Reason",-1)),s("span",wn,m(e.entry.response.stop_reason),1)])):g("",!0),e.entry.response?.usage?(r(),u("div",bn,[n[12]||(n[12]=s("div",{class:"meta-section-title"},"Token Usage",-1)),s("div",kn,[n[8]||(n[8]=s("span",{class:"meta-label"},"Input",-1)),s("span",xn,m(c(t)(e.entry.response.usage.input_tokens)),1)]),s("div",_n,[n[9]||(n[9]=s("span",{class:"meta-label"},"Output",-1)),s("span",$n,m(c(t)(e.entry.response.usage.output_tokens)),1)]),e.entry.response?.usage?.cache_read_input_tokens?(r(),u("div",Sn,[n[10]||(n[10]=s("span",{class:"meta-label"},"Cache Read",-1)),s("span",Rn,m(c(t)(e.entry.response.usage.cache_read_input_tokens)),1)])):g("",!0),e.entry.response?.usage?.cache_creation_input_tokens?(r(),u("div",Tn,[n[11]||(n[11]=s("span",{class:"meta-label"},"Cache Create",-1)),s("span",Cn,m(c(t)(e.entry.response.usage.cache_creation_input_tokens)),1)])):g("",!0)])):g("",!0),e.entry.response?.error?(r(),u("div",Mn,[n[13]||(n[13]=s("span",{class:"meta-label"},"Error",-1)),s("span",In,m(e.entry.response.error),1)])):g("",!0),e.entry.request.tools?.length?(r(),u("div",En,[n[14]||(n[14]=s("span",{class:"meta-label"},"Tools",-1)),s("span",Bn,m(e.entry.request.tools.length)+" defined",1)])):g("",!0),e.entry.pipelineInfo?.truncation?(r(),u("div",On,[n[17]||(n[17]=s("div",{class:"meta-section-title"},"Truncation",-1)),s("div",Ln,[n[15]||(n[15]=s("span",{class:"meta-label"},"Removed",-1)),s("span",Dn,m(e.entry.pipelineInfo.truncation.removedMessageCount)+" messages",1)]),s("div",Nn,[n[16]||(n[16]=s("span",{class:"meta-label"},"Tokens",-1)),s("span",Vn,m(c(t)(e.entry.pipelineInfo.truncation.originalTokens))+" → "+m(c(t)(e.entry.pipelineInfo.truncation.compactedTokens)),1)])])):g("",!0),e.entry.pipelineInfo?.preprocessing&&(e.entry.pipelineInfo.preprocessing.strippedReadTagCount>0||e.entry.pipelineInfo.preprocessing.dedupedToolCallCount>0)?(r(),u("div",An,[n[20]||(n[20]=s("div",{class:"meta-section-title"},"Preprocessing",-1)),e.entry.pipelineInfo.preprocessing.strippedReadTagCount?(r(),u("div",qn,[n[18]||(n[18]=s("span",{class:"meta-label"},"Read tag strip",-1)),s("span",zn,m(e.entry.pipelineInfo.preprocessing.strippedReadTagCount)+" tags",1)])):g("",!0),e.entry.pipelineInfo.preprocessing.dedupedToolCallCount?(r(),u("div",Un,[n[19]||(n[19]=s("span",{class:"meta-label"},"Dedup tool calls",-1)),s("span",Pn,m(e.entry.pipelineInfo.preprocessing.dedupedToolCallCount)+" pairs",1)])):g("",!0)])):g("",!0),e.entry.pipelineInfo?.sanitization?.length?(r(),u("div",jn,[n[26]||(n[26]=s("div",{class:"meta-section-title"},"Sanitization",-1)),(r(!0),u(P,null,Q(e.entry.pipelineInfo.sanitization,(l,f)=>(r(),u(P,{key:f},[e.entry.pipelineInfo.sanitization.length>1?(r(),u("div",Fn,[s("span",Hn,"Attempt "+m(f+1),1)])):g("",!0),l.totalBlocksRemoved?(r(),u("div",Jn,[n[21]||(n[21]=s("span",{class:"meta-label"},"Blocks Removed",-1)),s("span",Wn,m(l.totalBlocksRemoved)+" total",1)])):g("",!0),l.orphanedToolUseCount?(r(),u("div",Kn,[n[22]||(n[22]=s("span",{class:"meta-label"},"Orphan tool_use",-1)),s("span",Qn,m(l.orphanedToolUseCount),1)])):g("",!0),l.orphanedToolResultCount?(r(),u("div",Gn,[n[23]||(n[23]=s("span",{class:"meta-label"},"Orphan tool_result",-1)),s("span",Yn,m(l.orphanedToolResultCount),1)])):g("",!0),l.emptyTextBlocksRemoved?(r(),u("div",Xn,[n[24]||(n[24]=s("span",{class:"meta-label"},"Empty text",-1)),s("span",Zn,m(l.emptyTextBlocksRemoved),1)])):g("",!0),l.systemReminderRemovals?(r(),u("div",ea,[n[25]||(n[25]=s("span",{class:"meta-label"},"Reminders",-1)),s("span",ta,m(l.systemReminderRemovals)+" tags filtered",1)])):g("",!0)],64))),128))])):g("",!0)]))}}),na=I(sa,[["__scopeId","data-v-9ef0d543"]]),aa={class:"truncation-divider"},oa={class:"divider-content"},la={class:"divider-text"},ra={class:"divider-detail"},ia=C({__name:"TruncationDivider",props:{truncation:{}},setup(e){const{formatNumber:t,formatDuration:a}=oe();return(o,i)=>(r(),u("div",aa,[i[1]||(i[1]=s("div",{class:"divider-line"},null,-1)),s("div",oa,[i[0]||(i[0]=s("span",{class:"divider-icon"},"✂",-1)),s("span",la,m(e.truncation.removedMessageCount)+" messages truncated ",1),s("span",ra,m(c(t)(e.truncation.originalTokens))+" → "+m(c(t)(e.truncation.compactedTokens))+" tokens ("+m(c(a)(e.truncation.processingTimeMs))+") ",1)]),i[2]||(i[2]=s("div",{class:"divider-line"},null,-1))]))}}),ua=I(ia,[["__scopeId","data-v-9cfada0f"]]);function Se(){const{show:e}=$e();async function t(a,o="Copied!"){try{await navigator.clipboard.writeText(a),e(o,"success")}catch{e("Copy failed","error")}}return{copy:t}}const ca={class:"line-number-pre"},da={class:"line-no"},va=["innerHTML"],ma=C({__name:"LineNumberPre",props:{html:{}},setup(e){const t=e,a=w(()=>t.html.split(`
|
|
2
|
-
`));return(o,i)=>(r(),u("div",ca,[(r(!0),u(P,null,Q(a.value,(n,l)=>(r(),u("div",{key:l,class:"line"},[s("span",da,m(l+1),1),s("span",{class:"line-content",innerHTML:n||""},null,8,va)]))),128))]))}}),he=I(ma,[["__scopeId","data-v-a98c3fb0"]]),pa=["innerHTML"],fa=C({__name:"DiffView",props:{oldText:{},newText:{},outputFormat:{default:"side-by-side"}},setup(e){const t=e,a=w(()=>{try{const o=it("original","rewritten",t.oldText,t.newText);return ut(o,{outputFormat:t.outputFormat,drawFileList:!1,matching:"lines"})}catch{return"<pre>Diff generation failed</pre>"}});return(o,i)=>(r(),u("div",{class:"diff-view",innerHTML:a.value},null,8,pa))}}),Fe=I(fa,[["__scopeId","data-v-1175ff40"]]),ya={class:"system-header-left"},ga={class:"collapse-icon"},ha=["title"],wa={class:"system-header-right"},ba={key:0,class:"cache-label"},ka=C({__name:"SystemMessage",props:{system:{},rewrittenSystem:{},searchQuery:{},globalViewMode:{}},setup(e){const t=e,{highlightSearch:a,escapeHtml:o}=oe(),{copy:i}=Se(),{openRawModal:n}=be(),l=_(!1),f=_(!1),v=_(null),y=w(()=>v.value?v.value:t.globalViewMode&&z.value?t.globalViewMode:"original"),k=w(()=>v.value!==null);function d(B){v.value=B}function b(){v.value=null}function $(B){return typeof B=="string"?B:Array.isArray(B)?B.map(p=>p.text).join(`
|
|
3
|
-
`):""}const M=w(()=>$(t.system)),N=w(()=>t.rewrittenSystem?$(t.rewrittenSystem):""),z=w(()=>!!t.rewrittenSystem),j=w(()=>y.value==="rewritten"&&z.value?N.value:M.value),te=w(()=>t.searchQuery?a(j.value,t.searchQuery):o(j.value)),F=w(()=>{const B=M.value;return B.length>80?B.slice(0,80)+"...":B}),se=w(()=>typeof t.system=="string"?[{type:"text",text:t.system}]:t.system),X=w(()=>typeof t.system=="string"?!1:t.system.some(B=>B.cache_control)),V=w(()=>({system:t.system})),O=w(()=>t.rewrittenSystem?{system:t.rewrittenSystem}:null);return(B,p)=>(r(),u("div",{class:D(["system-message",{collapsed:l.value}])},[s("div",{class:"system-header",onClick:p[9]||(p[9]=x=>l.value=!l.value)},[s("div",ya,[s("span",ga,m(l.value?"▸":"▾"),1),h(G,{color:"purple"},{default:R(()=>[...p[10]||(p[10]=[L("system",-1)])]),_:1}),X.value?(r(),E(G,{key:0,color:"warning"},{default:R(()=>[...p[11]||(p[11]=[L("cached",-1)])]),_:1})):g("",!0),z.value?(r(),E(G,{key:1,color:"warning"},{default:R(()=>[...p[12]||(p[12]=[L("rewritten",-1)])]),_:1})):g("",!0),l.value?(r(),u("span",{key:2,class:"collapsed-summary",title:F.value},m(F.value),9,ha)):g("",!0)]),s("div",wa,[z.value&&!l.value?(r(),u("div",{key:0,class:"view-toggle",onClick:p[4]||(p[4]=H(()=>{},["stop"]))},[s("button",{class:D({active:y.value==="original"}),onClick:p[0]||(p[0]=x=>d("original"))},"Original",2),s("button",{class:D({active:y.value==="rewritten"}),onClick:p[1]||(p[1]=x=>d("rewritten"))},"Rewritten",2),s("button",{class:D({active:y.value==="diff"}),onClick:p[2]||(p[2]=x=>d("diff"))},"Diff",2),k.value?(r(),u("button",{key:0,class:"reset-btn",title:"Reset to global view mode",onClick:p[3]||(p[3]=x=>b())},"×")):g("",!0)])):g("",!0),l.value?g("",!0):J((r(),u("button",{key:1,class:"action-btn",onClick:p[5]||(p[5]=H(x=>f.value=!f.value,["stop"]))},[h(A,{name:"expand",size:10}),p[13]||(p[13]=L(" Expand ",-1))],512)),[[W,!f.value]]),!l.value&&f.value?(r(),u("button",{key:2,class:"action-btn",onClick:p[6]||(p[6]=H(x=>f.value=!1,["stop"]))},[h(A,{name:"contract",size:10}),p[14]||(p[14]=L(" Collapse ",-1))])):g("",!0),s("button",{class:"action-btn",title:"Copy",onClick:p[7]||(p[7]=H(x=>c(i)(j.value),["stop"]))},[h(A,{name:"copy",size:10}),p[15]||(p[15]=L(" Copy ",-1))]),s("button",{class:"action-btn",title:"View raw JSON",onClick:p[8]||(p[8]=H(x=>c(n)(V.value,"Raw — system",O.value),["stop"]))},[h(A,{name:"code",size:10}),p[16]||(p[16]=L(" Raw ",-1))])])]),J(s("div",{class:D(["system-body",{"body-expanded":f.value}])},[y.value==="diff"&&z.value?(r(),E(Fe,{key:0,"old-text":M.value,"new-text":N.value},null,8,["old-text","new-text"])):y.value==="original"&&typeof e.system!="string"?(r(!0),u(P,{key:1},Q(se.value,(x,T)=>(r(),u("div",{key:T,class:"system-block-item"},[x.cache_control?(r(),u("div",ba,"[cache: "+m(x.cache_control.type)+"]",1)):g("",!0),h(he,{html:e.searchQuery?c(a)(x.text,e.searchQuery):c(o)(x.text)},null,8,["html"])]))),128)):(r(),E(he,{key:2,html:te.value},null,8,["html"]))],2),[[W,!l.value]])],2))}}),xa=I(ka,[["__scopeId","data-v-eac28575"]]),_a=["id"],$a={class:"content-block-header-left"},Sa={class:"collapse-icon"},Ra=["title"],Ta={class:"content-block-header-right"},Ca=["title"],Ma=C({__name:"ContentBlockWrapper",props:{label:{},labelColor:{default:"text-muted"},summary:{default:""},blockId:{},copyText:{},rawData:{},rawTitle:{default:"Raw"}},setup(e){const t=e,{copy:a}=Se(),{openRawModal:o}=be(),i=je(),n=_(!1),l=_(!1),f=_(!1),v=_();function y(){n.value=!n.value}function k(M){M.stopPropagation(),l.value=!l.value}function d(M){M.stopPropagation(),t.copyText&&a(t.copyText)}function b(M){M.stopPropagation(),t.rawData!==void 0&&o(t.rawData,t.rawTitle)}function $(){v.value&&(f.value=v.value.scrollHeight>208)}return ie(()=>{v.value&&(i.observe(v.value,$),le($))}),ae(()=>{v.value&&i.unobserve(v.value)}),(M,N)=>(r(),u("div",{class:"content-block",id:e.blockId},[s("div",{class:"content-block-header",onClick:y},[s("div",$a,[s("span",Sa,m(n.value?"▸":"▾"),1),s("span",{class:D(["content-type-label","label-"+e.labelColor])},m(e.label),3),K(M.$slots,"header-extra",{},void 0),n.value&&e.summary?(r(),u("span",{key:0,class:"collapsed-summary",title:e.summary},m(e.summary),9,Ra)):g("",!0)]),s("div",Ta,[!n.value&&f.value?(r(),u("button",{key:0,class:"action-btn",title:l.value?"Collapse":"Expand",onClick:k},[h(A,{name:l.value?"contract":"expand",size:10},null,8,["name"]),L(" "+m(l.value?"Collapse":"Expand"),1)],8,Ca)):g("",!0),e.copyText?(r(),u("button",{key:1,class:"action-btn",title:"Copy",onClick:d},[h(A,{name:"copy",size:10}),N[0]||(N[0]=L(" Copy ",-1))])):g("",!0),e.rawData!==void 0?(r(),u("button",{key:2,class:"action-btn",title:"View raw JSON",onClick:b},[h(A,{name:"code",size:10}),N[1]||(N[1]=L(" Raw ",-1))])):g("",!0)])]),J(s("div",{ref_key:"bodyRef",ref:v,class:D(["content-block-body",{"body-collapsed":!l.value}])},[K(M.$slots,"default",{},void 0)],2),[[W,!n.value]])],8,_a))}}),ue=I(Ma,[["__scopeId","data-v-0742d16c"]]);function Re(e,t){const{highlightSearch:a,escapeHtml:o}=oe();return{displayHtml:w(()=>{const n=typeof e=="function"?e():c(e),l=typeof t=="function"?t():c(t);return l?a(n,l):o(n)})}}const Ia=C({__name:"TextBlock",props:{text:{}},setup(e){const t=e,{searchQuery:a}=de(),o=w(()=>t.text.length>60?t.text.slice(0,60)+"...":t.text),{displayHtml:i}=Re(()=>t.text,a);return(n,l)=>(r(),E(ue,{label:"TEXT","label-color":"text-muted",summary:o.value,"copy-text":e.text,"raw-data":{type:"text",text:e.text},"raw-title":"Raw — text"},{default:R(()=>[h(he,{html:c(i)},null,8,["html"])]),_:1},8,["summary","copy-text","raw-data"]))}}),Ea={key:0,class:"redacted-label"},Ba=["innerHTML"],Oa=C({__name:"ThinkingBlock",props:{text:{},redacted:{type:Boolean,default:!1}},setup(e){const t=e,{searchQuery:a}=de(),o=w(()=>t.redacted?"[redacted]":t.text.length>60?t.text.slice(0,60)+"...":t.text),{displayHtml:i}=Re(()=>t.text,a),n=w(()=>t.redacted?"<em>[Thinking content redacted]</em>":i.value);return(l,f)=>(r(),E(ue,{label:"THINKING","label-color":"purple",summary:o.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:D({redacted:e.redacted})},{"header-extra":R(()=>[e.redacted?(r(),u("span",Ea,"REDACTED")):g("",!0)]),default:R(()=>[s("pre",{class:"thinking-text",innerHTML:n.value},null,8,Ba)]),_:1},8,["summary","copy-text","raw-data","class"]))}}),Ee=I(Oa,[["__scopeId","data-v-7878f7b8"]]),La={class:"image-media-type"},Da=["src"],Na=C({__name:"ImageBlock",props:{mediaType:{},data:{}},setup(e){return(t,a)=>(r(),E(ue,{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":R(()=>[s("span",La,m(e.mediaType),1)]),default:R(()=>[s("img",{src:"data:"+e.mediaType+";base64,"+e.data,alt:"Image content",class:"image-content"},null,8,Da)]),_:1},8,["summary","raw-data"]))}}),Va=I(Na,[["__scopeId","data-v-7e48d486"]]),Aa=["id"],qa={key:0,class:"result-tool-name"},za={class:"result-tool-id"},Ua={key:1,class:"result-error-badge"},Pa={key:0,class:"result-tool-name"},ja={class:"result-tool-id"},Fa={key:1,class:"result-error-badge"},Ha={key:0,class:"tool-jump"},Ja=C({__name:"ToolResultBlock",props:{block:{},toolName:{},embedded:{type:Boolean}},setup(e){const t=e,{searchQuery:a,aggregateTools:o,scrollToCall:i}=de(),n=w(()=>o.value&&!t.embedded),l=w(()=>t.block.is_error===!0),f=w(()=>{const k=t.block.content;return typeof k=="string"?k:Array.isArray(k)?xe(k):""}),v=w(()=>t.toolName?t.toolName:"for "+t.block.tool_use_id.slice(0,8)),{displayHtml:y}=Re(f,a);return(k,d)=>(r(),u(P,null,[J(s("div",{class:"aggregated-stub",id:n.value?"tool-result-"+e.block.tool_use_id:void 0},[s("span",{class:D(["stub-label",l.value?"label-error":"label-success"])},"TOOL RESULT",2),e.toolName?(r(),u("span",qa,m(e.toolName),1)):g("",!0),s("span",za,m(e.block.tool_use_id),1),l.value?(r(),u("span",Ua,"ERROR")):g("",!0),s("a",{class:"jump-link",onClick:d[0]||(d[0]=H(b=>c(i)(e.block.tool_use_id),["prevent"]))}," ← Jump to call ")],8,Aa),[[W,n.value]]),J(h(ue,{label:"TOOL RESULT","label-color":l.value?"error":"success",summary:v.value,"block-id":"tool-result-"+e.block.tool_use_id,"copy-text":f.value,"raw-data":e.block,"raw-title":"Raw — tool_result"+(e.toolName?": "+e.toolName:"")},{"header-extra":R(()=>[e.toolName?(r(),u("span",Pa,m(e.toolName),1)):g("",!0),s("span",ja,"for "+m(e.block.tool_use_id),1),l.value?(r(),u("span",Fa,"ERROR")):g("",!0)]),default:R(()=>[h(he,{html:c(y)},null,8,["html"]),e.embedded?g("",!0):(r(),u("div",Ha,[s("a",{class:"jump-link",onClick:d[1]||(d[1]=H(b=>c(i)(e.block.tool_use_id),["prevent"]))}," ← Jump to call ")]))]),_:1},8,["label-color","summary","block-id","copy-text","raw-data","raw-title"]),[[W,!n.value]])],64))}}),He=I(Ja,[["__scopeId","data-v-ef1fc34e"]]),Wa={class:"tool-name"},Ka={class:"tool-id"},Qa={key:1,class:"tool-input"},Ga={class:"tool-aggregate-result"},Ya={class:"tool-jump"},Xa=C({__name:"ToolUseBlock",props:{block:{}},setup(e){const t=e,{aggregateTools:a,toolResultMap:o,scrollToResult:i}=de(),n=w(()=>{try{return JSON.stringify(t.block.input,null,2)}catch{return String(t.block.input)}}),l=w(()=>t.block.input!==null&&typeof t.block.input=="object"),f=w(()=>o.value?o.value[t.block.id]??null:null),v=w(()=>!!f.value);return(y,k)=>(r(),E(ue,{label:"TOOL USE","label-color":"cyan",summary:e.block.name,"block-id":"tool-use-"+e.block.id,"copy-text":n.value,"raw-data":e.block,"raw-title":"Raw — tool_use: "+e.block.name},{"header-extra":R(()=>[s("span",Wa,m(e.block.name),1),s("span",Ka,m(e.block.id),1)]),default:R(()=>[l.value?(r(),E(c(pe),{key:0,data:e.block.input,deep:3,"show-icon":!0,"show-line-number":!0,"collapsed-on-click-brackets":!0},null,8,["data"])):(r(),u("pre",Qa,m(n.value),1)),v.value?(r(),u(P,{key:2},[J(s("div",Ga,[h(He,{block:f.value,"tool-name":e.block.name,embedded:!0},null,8,["block","tool-name"])],512),[[W,c(a)]]),J(s("div",Ya,[s("a",{class:"jump-link",onClick:k[0]||(k[0]=H(d=>c(i)(e.block.id),["prevent"]))}," → Jump to result ")],512),[[W,!c(a)]])],64)):g("",!0)]),_:1},8,["summary","block-id","copy-text","raw-data","raw-title"]))}}),Za=I(Xa,[["__scopeId","data-v-040cd916"]]),eo={class:"generic-content"},to=C({__name:"GenericBlock",props:{block:{}},setup(e){const t=e,a=w(()=>(t.block.type||"UNKNOWN").toUpperCase()),o=w(()=>{try{return JSON.stringify(t.block,null,2)}catch{return String(t.block)}});return(i,n)=>(r(),E(ue,{label:a.value,"label-color":"text-muted",summary:e.block.type||"unknown","raw-data":e.block,"raw-title":"Raw — "+(e.block.type||"unknown")},{default:R(()=>[s("pre",eo,m(o.value),1)]),_:1},8,["label","summary","raw-data","raw-title"]))}}),so=I(to,[["__scopeId","data-v-f03251db"]]),no={key:0,class:"error-boundary"},ao={class:"error-label"},oo={class:"error-message"},lo=C({__name:"ErrorBoundary",props:{label:{}},setup(e){const t=_(null);return at(a=>(t.value=a,console.error("[ErrorBoundary]",a),!1)),(a,o)=>t.value?(r(),u("div",no,[o[0]||(o[0]=s("span",{class:"error-icon"},"!",-1)),s("span",ao,m(e.label||"Render error"),1),s("span",oo,m(t.value.message),1)])):K(a.$slots,"default",{key:1},void 0)}}),ee=I(lo,[["__scopeId","data-v-c8494337"]]),ro={class:"content-renderer"},io=C({__name:"ContentRenderer",props:{content:{},message:{}},setup(e){const t=e,{filterType:a,toolUseNameMap:o}=de(),i=w(()=>t.message?Rs(t.message):typeof t.content=="string"?[{type:"text",text:t.content}]:Array.isArray(t.content)?t.content:[]),n=w(()=>{let l=i.value;return a.value&&(l=l.filter(f=>f.type===a.value)),l});return(l,f)=>(r(),u("div",ro,[(r(!0),u(P,null,Q(n.value,(v,y)=>(r(),E(ee,{key:y,label:v.type+" block"},{default:R(()=>[c(Ve)(v)?(r(),E(Ia,{key:0,text:v.text},null,8,["text"])):c(_s)(v)?(r(),E(Ee,{key:1,text:v.thinking},null,8,["text"])):c($s)(v)?(r(),E(Ee,{key:2,text:"",redacted:!0})):c(Ss)(v)&&v.source.type==="base64"?(r(),E(Va,{key:3,"media-type":v.source.media_type,data:v.source.data},null,8,["media-type","data"])):c(Ae)(v)?(r(),E(Za,{key:4,block:v},null,8,["block"])):c(qe)(v)?(r(),E(He,{key:5,block:v,"tool-name":c(o)[v.tool_use_id]},null,8,["block","tool-name"])):(r(),E(so,{key:6,block:v},null,8,["block"]))]),_:2},1032,["label"]))),128))]))}}),uo=I(io,[["__scopeId","data-v-ab1a6c3a"]]),co=["data-msg-index"],vo={class:"msg-header-left"},mo={class:"collapse-icon"},po={class:"msg-index"},fo=["title"],yo={class:"msg-header-right"},go=["title"],ho=C({__name:"MessageBlock",props:{message:{},index:{},isTruncated:{type:Boolean,default:!1},isRewritten:{type:Boolean,default:!1},rewrittenMessage:{},globalViewMode:{}},setup(e){const t=e,a=_(!1),o=_(!1),i=_(!1),n=_(),{openRawModal:l}=be(),f=je(),v=_(null),y=w(()=>v.value?v.value:t.globalViewMode&&t.isRewritten&&t.rewrittenMessage?t.globalViewMode:"original"),k=w(()=>v.value!==null);function d(V){v.value=V}function b(){v.value=null}const $=w(()=>{switch(t.message.role){case"user":return"primary";case"assistant":return"success";case"system":return"purple";case"tool":return"cyan";default:return"default"}}),M=w(()=>{const V=t.message.content;if(typeof V=="string")return V.length>80?V.slice(0,80)+"...":V;if(!Array.isArray(V)||V.length===0)return"";const O=V[0];if(V.length===1&&Ve(O)){const p=O.text;return p.length>80?p.slice(0,80)+"...":p}const B={};for(const p of V)B[p.type]=(B[p.type]||0)+1;return Object.entries(B).map(([p,x])=>`${x} ${p}`).join(", ")}),N=w(()=>xe(t.message.content)),z=w(()=>t.rewrittenMessage?xe(t.rewrittenMessage.content):""),j=w(()=>y.value==="rewritten"&&t.rewrittenMessage?t.rewrittenMessage.content??"":t.message.content??""),te=w(()=>y.value==="rewritten"&&t.rewrittenMessage?t.rewrittenMessage:t.message);function F(){n.value&&!o.value&&(i.value=n.value.scrollHeight>n.value.clientHeight+10)}function se(V){V.stopPropagation(),o.value=!o.value,o.value||le(F)}function X(V){V.stopPropagation(),l(t.message,`Raw — ${t.message.role} #${t.index+1}`,t.isRewritten?t.rewrittenMessage:void 0)}return ie(()=>{le(()=>{F(),n.value&&f.observe(n.value,F)})}),ae(()=>{n.value&&f.unobserve(n.value)}),ge(()=>t.message,()=>{o.value=!1,le(F)}),(V,O)=>(r(),u("div",{class:D(["message-block",{truncated:e.isTruncated,collapsed:a.value,"is-rewritten":e.isRewritten}]),"data-msg-index":e.index},[s("div",{class:"msg-header",onClick:O[7]||(O[7]=B=>a.value=!a.value)},[s("div",vo,[s("span",mo,m(a.value?"▸":"▾"),1),h(G,{color:$.value},{default:R(()=>[L(m(e.message.role),1)]),_:1},8,["color"]),s("span",po,"#"+m(e.index+1),1),e.isRewritten?(r(),E(G,{key:0,color:"warning"},{default:R(()=>[...O[8]||(O[8]=[L("rewritten",-1)])]),_:1})):g("",!0),e.isTruncated?(r(),E(G,{key:1,color:"error"},{default:R(()=>[...O[9]||(O[9]=[L("truncated",-1)])]),_:1})):g("",!0),a.value&&M.value?(r(),u("span",{key:2,class:"collapsed-summary",title:M.value},m(M.value),9,fo)):g("",!0)]),s("div",yo,[e.isRewritten&&e.rewrittenMessage?(r(),u("div",{key:0,class:"view-toggle",onClick:O[4]||(O[4]=H(()=>{},["stop"]))},[s("button",{class:D({active:y.value==="original"}),onClick:O[0]||(O[0]=B=>d("original"))},"Original",2),s("button",{class:D({active:y.value==="rewritten"}),onClick:O[1]||(O[1]=B=>d("rewritten"))},"Rewritten",2),s("button",{class:D({active:y.value==="diff"}),onClick:O[2]||(O[2]=B=>d("diff"))},"Diff",2),k.value?(r(),u("button",{key:0,class:"reset-btn",title:"Reset to global view mode",onClick:O[3]||(O[3]=B=>b())},"×")):g("",!0)])):g("",!0),s("button",{class:"action-btn",title:"View raw JSON",onClick:O[5]||(O[5]=B=>X(B))},[h(A,{name:"code",size:10}),O[10]||(O[10]=L(" Raw ",-1))]),i.value&&!a.value?(r(),u("button",{key:1,class:"action-btn",onClick:O[6]||(O[6]=B=>se(B)),title:o.value?"Collapse content":"Show full content"},[h(A,{name:o.value?"contract":"expand",size:10},null,8,["name"]),L(" "+m(o.value?"Collapse":"Expand"),1)],8,go)):g("",!0)])]),J(s("div",{ref_key:"bodyRef",ref:n,class:D(["msg-body",{"body-limited":i.value&&!o.value}])},[y.value==="diff"&&e.isRewritten?(r(),E(Fe,{key:0,"old-text":N.value,"new-text":z.value},null,8,["old-text","new-text"])):(r(),E(uo,{key:1,content:j.value,message:te.value},null,8,["content","message"]))],2),[[W,!a.value]])],10,co))}}),Be=I(ho,[["__scopeId","data-v-2faca0f0"]]),wo={class:"modal-header"},bo={class:"modal-title"},ko={class:"modal-header-actions"},xo={class:"modal-body"},_o=C({__name:"BaseModal",props:{visible:{type:Boolean},title:{},width:{},height:{}},emits:["update:visible"],setup(e,{emit:t}){const a=t;function o(){a("update:visible",!1)}function i(l){l.target.classList.contains("modal-overlay")&&o()}function n(l){l.key==="Escape"&&(l.stopPropagation(),o())}return(l,f)=>(r(),E(Oe,{to:"body"},[h(ot,{name:"fade"},{default:R(()=>[e.visible?(r(),u("div",{key:0,class:"modal-overlay",onClick:i,onKeydown:n},[s("div",{class:"modal-content",style:_e({width:e.width||"80vw",height:e.height})},[s("div",wo,[s("h3",bo,m(e.title),1),s("div",ko,[K(l.$slots,"header-actions",{},void 0,!0),s("button",{class:"modal-close",onClick:o},[h(A,{name:"close",size:16})])])]),s("div",xo,[K(l.$slots,"default",{},void 0,!0)])],4)],32)):g("",!0)]),_:3})]))}}),$o=I(_o,[["__scopeId","data-v-c68c542d"]]),So={key:0,class:"json-split"},Ro={class:"json-pane"},To={class:"pane-header"},Co={class:"json-viewer"},Mo={class:"json-pane"},Io={class:"pane-header"},Eo={class:"json-viewer"},Bo={key:1,class:"json-viewer"},Oo=C({__name:"RawJsonModal",props:{visible:{type:Boolean},title:{},data:{},rewrittenData:{}},emits:["update:visible"],setup(e){const t=e,{copy:a}=Se(),o=w(()=>t.rewrittenData!=null),i=w(()=>{try{return JSON.stringify(t.data,null,2)}catch{return String(t.data)}}),n=w(()=>{if(!t.rewrittenData)return"";try{return JSON.stringify(t.rewrittenData,null,2)}catch{return String(t.rewrittenData)}});function l(){a(i.value)}function f(){a(n.value)}return(v,y)=>(r(),E($o,{visible:e.visible,title:e.title,width:"95vw",height:"95vh","onUpdate:visible":y[0]||(y[0]=k=>v.$emit("update:visible",k))},{"header-actions":R(()=>[o.value?g("",!0):(r(),u("button",{key:0,class:"raw-copy-btn",title:"Copy JSON",onClick:l},[h(A,{name:"copy",size:12}),y[1]||(y[1]=L(" Copy ",-1))]))]),default:R(()=>[o.value?(r(),u("div",So,[s("div",Ro,[s("div",To,[y[3]||(y[3]=s("span",{class:"pane-label"},"Original",-1)),s("button",{class:"raw-copy-btn",title:"Copy original JSON",onClick:l},[h(A,{name:"copy",size:12}),y[2]||(y[2]=L(" Copy ",-1))])]),s("div",Co,[h(c(pe),{data:e.data,deep:5,"show-line-number":!0,"show-icon":!0,"show-length":!0,"collapsed-on-click-brackets":!0},null,8,["data"])])]),y[6]||(y[6]=s("div",{class:"pane-divider"},null,-1)),s("div",Mo,[s("div",Io,[y[5]||(y[5]=s("span",{class:"pane-label pane-label-rewritten"},"Rewritten",-1)),s("button",{class:"raw-copy-btn",title:"Copy rewritten JSON",onClick:f},[h(A,{name:"copy",size:12}),y[4]||(y[4]=L(" Copy ",-1))])]),s("div",Eo,[h(c(pe),{data:e.rewrittenData,deep:5,"show-line-number":!0,"show-icon":!0,"show-length":!0,"collapsed-on-click-brackets":!0},null,8,["data"])])])])):(r(),u("div",Bo,[h(c(pe),{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"]))}}),Lo=I(Oo,[["__scopeId","data-v-7a023d58"]]),Do={class:"detail-panel"},No={key:0,class:"detail-empty"},Vo={class:"messages-list"},Ao={key:0,class:"response-error"},qo={class:"error-text"},zo=C({__name:"DetailPanel",setup(e){const t=Y("historyStore"),a=_(),o=w(()=>t.selectedEntry.value),{visible:i,data:n,rewrittenData:l,title:f}=Ms();Is();const{truncationPoint:v,hasRewrites:y,rewriteSummary:k,rewrittenIndexList:d,getRewrittenMessage:b,isMessageRewritten:$,isMessageTruncated:M}=Cs(o),N=w(()=>{const p={},x={};if(!o.value)return{resultMap:p,nameMap:x};for(const T of o.value.request.messages??[]){if(Array.isArray(T.content))for(const q of T.content)qe(q)&&(p[q.tool_use_id]=q),Ae(q)&&(x[q.id]=q.name);if(T.tool_calls)for(const q of T.tool_calls)x[q.id]=q.function.name;T.role==="tool"&&T.tool_call_id&&(p[T.tool_call_id]={type:"tool_result",tool_use_id:T.tool_call_id,content:typeof T.content=="string"?T.content:JSON.stringify(T.content)})}return{resultMap:p,nameMap:x}});Ts({searchQuery:w(()=>t.detailSearch.value),filterType:w(()=>t.detailFilterType.value),aggregateTools:w(()=>t.aggregateTools.value),toolResultMap:w(()=>N.value.resultMap),toolUseNameMap:w(()=>N.value.nameMap),scrollToResult:V,scrollToCall:O});const z=w(()=>{if(!o.value)return[];let x=(o.value.request.messages??[]).map((T,q)=>({msg:T,originalIndex:q}));return t.detailFilterRole.value&&(x=x.filter(({msg:T})=>T.role===t.detailFilterRole.value)),t.showOnlyRewritten.value&&(x=x.filter(({originalIndex:T})=>$(T))),x}),j=w(()=>o.value?.response?.content?o.value.response.content:null),te=w(()=>o.value?`${(o.value.request.messages??[]).length} messages`:""),F=w(()=>{if(!o.value?.pipelineInfo)return;const p=o.value.pipelineInfo;if(!(!p.rewrittenMessages&&!p.rewrittenSystem))return{...o.value.request,...p.rewrittenMessages&&{messages:p.rewrittenMessages},...p.rewrittenSystem!==void 0&&{system:p.rewrittenSystem}}});function se(p,x){return typeof p.content=="string"?!!(x==="text"||x==="tool_use"&&p.tool_calls?.length):Array.isArray(p.content)?p.content.some(T=>T.type===x):!1}function X(p){p.classList.remove("highlight-flash"),p.offsetWidth,p.classList.add("highlight-flash")}function V(p){const x=document.getElementById("tool-result-"+p);x&&(x.scrollIntoView({behavior:"smooth",block:"center"}),X(x))}function O(p){const x=document.getElementById("tool-use-"+p);x&&(x.scrollIntoView({behavior:"smooth",block:"center"}),X(x))}ge(()=>t.detailSearch.value,p=>{p&&le(()=>{setTimeout(()=>{const x=document.querySelector(".search-highlight");x&&x.scrollIntoView({behavior:"smooth",block:"center"})},50)})}),ge(o,p=>{p&&le(()=>{a.value&&a.value.scrollTo(0,a.value.scrollHeight)})});function B(){if(!o.value)return;const p=JSON.stringify(o.value,null,2),x=new Blob([p],{type:"application/json"}),T=URL.createObjectURL(x),q=document.createElement("a");q.href=T;const ke=o.value.request.model||"unknown";q.download=`${o.value.id}_${ke}.json`,q.click(),URL.revokeObjectURL(T)}return(p,x)=>(r(),u("div",Do,[c(t).hasSelection.value?o.value?(r(),u(P,{key:1},[h(Js,{"has-rewrites":c(y),"rewrite-summary":c(k),"rewritten-index-list":c(d),onExport:B},null,8,["has-rewrites","rewrite-summary","rewritten-index-list"]),s("div",{ref_key:"detailBodyRef",ref:a,class:"detail-body"},[h(ye,{title:"Request",badge:te.value,"raw-data":o.value.request,"rewritten-raw-data":F.value,"raw-title":"Raw — Request"},{default:R(()=>[h(ee,{label:"System prompt"},{default:R(()=>[o.value.request.system?(r(),E(xa,{key:0,system:o.value.request.system,"rewritten-system":o.value.pipelineInfo?.rewrittenSystem,"search-query":c(t).detailSearch.value,"global-view-mode":c(t).detailViewMode.value},null,8,["system","rewritten-system","search-query","global-view-mode"])):g("",!0)]),_:1}),s("div",Vo,[(r(!0),u(P,null,Q(z.value,T=>(r(),u(P,{key:T.originalIndex},[o.value.pipelineInfo?.truncation&&T.originalIndex===c(v)?(r(),E(ua,{key:0,truncation:o.value.pipelineInfo.truncation},null,8,["truncation"])):g("",!0),h(ee,{label:"Message #"+T.originalIndex},{default:R(()=>[J(h(Be,{message:T.msg,index:T.originalIndex,"is-truncated":c(M)(T.originalIndex),"is-rewritten":c($)(T.originalIndex),"rewritten-message":c(b)(T.originalIndex),"global-view-mode":c(t).detailViewMode.value},null,8,["message","index","is-truncated","is-rewritten","rewritten-message","global-view-mode"]),[[W,!c(t).detailFilterType.value||se(T.msg,c(t).detailFilterType.value)]])]),_:2},1032,["label"])],64))),128))])]),_:1},8,["badge","raw-data","rewritten-raw-data"]),j.value||o.value.response?.error?(r(),E(ye,{key:0,title:"Response",badge:j.value?"1 message":"","raw-data":o.value.response,"raw-title":"Raw — Response"},{default:R(()=>[o.value.response?.error?(r(),u("div",Ao,[x[2]||(x[2]=s("span",{class:"error-label"},"Error",-1)),s("span",qo,m(o.value.response.error),1)])):g("",!0),h(ee,{label:"Response message"},{default:R(()=>[j.value?(r(),E(Be,{key:0,message:j.value,index:0},null,8,["message"])):g("",!0)]),_:1})]),_:1},8,["badge","raw-data"])):g("",!0),h(ee,{label:"SSE events"},{default:R(()=>[o.value.sseEvents?.length?(r(),E(tn,{key:0,events:o.value.sseEvents},null,8,["events"])):g("",!0)]),_:1}),h(ye,{title:"Meta","raw-data":o.value,"raw-title":"Raw — Full Entry"},{default:R(()=>[h(ee,{label:"Meta info"},{default:R(()=>[h(na,{entry:o.value},null,8,["entry"])]),_:1})]),_:1},8,["raw-data"])],512)],64)):g("",!0):(r(),u("div",No,[...x[1]||(x[1]=[s("p",null,"Select a request to view details",-1),s("p",{class:"detail-hint"},"Use ↑↓ or j/k to navigate, / to search",-1)])])),h(Lo,{visible:c(i),title:c(f),data:c(n),"rewritten-data":c(l),"onUpdate:visible":x[0]||(x[0]=T=>i.value=T)},null,8,["visible","title","data","rewritten-data"])]))}}),Uo=I(zo,[["__scopeId","data-v-8b37c646"]]),Po={class:"toast-container"},jo=C({__name:"BaseToast",setup(e){const{messages:t}=$e();return(a,o)=>(r(),E(Oe,{to:"body"},[s("div",Po,[h(lt,{name:"slide-up"},{default:R(()=>[(r(!0),u(P,null,Q(c(t),i=>(r(),u("div",{key:i.id,class:D(["toast-item","toast-"+i.type])},m(i.text),3))),128))]),_:1})])]))}}),Fo=I(jo,[["__scopeId","data-v-75e1dc4a"]]),Ho={class:"app"},Jo=C({__name:"App",setup(e){const t=mt();we("historyStore",t);const a=_();return pt({onNavigate:o=>t.selectAdjacentEntry(o),onSearch:()=>a.value?.focusSearch(),onEscape:()=>t.clearSelection()}),ie(()=>t.init()),ae(()=>t.destroy()),(o,i)=>(r(),u("div",Ho,[h(Et),h(Ft),h(Wt,null,{left:R(()=>[h(ee,{label:"Request list"},{default:R(()=>[h(xs,{ref_key:"requestListRef",ref:a},null,512)]),_:1})]),right:R(()=>[h(ee,{label:"Detail panel"},{default:R(()=>[h(Uo)]),_:1})]),_:1}),h(Fo)]))}}),Wo=I(Jo,[["__scopeId","data-v-3cb8f8ee"]]),Ko=rt(Wo);Ko.mount("#app");
|