spiracha 1.1.0 → 1.1.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/AGENTS.md +3 -0
- package/README.md +14 -0
- package/apps/ui/dist/client/assets/{analytics-BjYaHqXk.js → analytics-CqWZmyV6.js} +1 -1
- package/apps/ui/dist/client/assets/{checkbox-wPoGG3of.js → checkbox-DXM4lkJq.js} +1 -1
- package/apps/ui/dist/client/assets/{data-table-6yDgAdtf.js → data-table-DnPYMPCD.js} +1 -1
- package/apps/ui/dist/client/assets/{delete-confirm-dialog-DJUAk7ha.js → delete-confirm-dialog-CcZaRX33.js} +1 -1
- package/apps/ui/dist/client/assets/{download-BhWd-Pm5.js → download-DOwxk-cG.js} +1 -1
- package/apps/ui/dist/client/assets/{es2015-BlyMI4CF.js → es2015-Bm0kEzx2.js} +1 -1
- package/apps/ui/dist/client/assets/{formatters-BxjZwWSE.js → formatters-C12LmYaa.js} +1 -1
- package/apps/ui/dist/client/assets/{index-T01rPkb4.js → index-DdJ7ahIt.js} +3 -3
- package/apps/ui/dist/client/assets/{input-B3YN8gzg.js → input-CEsI7EpI.js} +1 -1
- package/apps/ui/dist/client/assets/{metric-card-BWW7TWER.js → metric-card-9jwBF7rG.js} +1 -1
- package/apps/ui/dist/client/assets/{page-header-BZ8Gnxgs.js → page-header-Dr_h1CVv.js} +1 -1
- package/apps/ui/dist/client/assets/projects._project-uyNGnpjH.js +1 -0
- package/apps/ui/dist/client/assets/{projects._project-EfBhCHPY.js → projects._project-zoM8d2nH.js} +1 -1
- package/apps/ui/dist/client/assets/projects.index-D1CWVN-O.js +1 -0
- package/apps/ui/dist/client/assets/{projects.index-DzEZ4pAJ.js → projects.index-DukMuny6.js} +1 -1
- package/apps/ui/dist/client/assets/{routes-CWCCZykE.js → routes-Gr2Wwh83.js} +1 -1
- package/apps/ui/dist/client/assets/{select-DLXGsyZ4.js → select-CFim44gT.js} +1 -1
- package/apps/ui/dist/client/assets/{settings-b0Xthfae.js → settings-DqhyDxo2.js} +1 -1
- package/apps/ui/dist/client/assets/styles-CMrP9Jb4.css +1 -0
- package/apps/ui/dist/client/assets/{threads._threadId-CgtoCqTb.js → threads._threadId-DT75NiBa.js} +1 -1
- package/apps/ui/dist/client/assets/{threads._threadId-DBiDb38K.js → threads._threadId-Df5VXIuZ.js} +3 -3
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-C0V305Nt.js +99 -0
- package/apps/ui/dist/server/assets/{analytics-Br_fZB6a.js → analytics-BMxW_bZL.js} +1 -1
- package/apps/ui/dist/server/assets/{codex-server-Cqh0hb93.js → codex-server-BFZq2Y2O.js} +129 -62
- package/apps/ui/dist/server/assets/{download-CzHmFWGk.js → download-C5rkk_Bo.js} +3 -0
- package/apps/ui/dist/server/assets/formatters-FJaGZgJk.js +91 -0
- package/apps/ui/dist/server/assets/model-label-B1NWGc65.js +13 -0
- package/apps/ui/dist/server/assets/{path-transforms-DD1e7rhY.js → path-transforms-DL2IwtYd.js} +1 -1
- package/apps/ui/dist/server/assets/{projects._project-DdVSdfPe.js → projects._project-CJ7l0ynC.js} +1 -1
- package/apps/ui/dist/server/assets/{projects._project-Bwf6iJC-.js → projects._project-CcJLp_A8.js} +5 -3
- package/apps/ui/dist/server/assets/{projects.index-DKeVeqUZ.js → projects.index-srtogpuF.js} +2 -1
- package/apps/ui/dist/server/assets/{router-ve2Hrl2Y.js → router-C_w-haH6.js} +6 -6
- package/apps/ui/dist/server/assets/{routes-BJyx5OmO.js → routes-BhbxvJE7.js} +1 -1
- package/apps/ui/dist/server/assets/{routes-pkOwjjYc.js → routes-CPe-ppmC.js} +3 -2
- package/apps/ui/dist/server/assets/{start-BAvbjjfs.js → start-HeKLHD9b.js} +1 -1
- package/apps/ui/dist/server/assets/{threads._threadId-D3PYZIwl.js → threads._threadId-Ba7vv6-K.js} +1 -1
- package/apps/ui/dist/server/assets/{threads._threadId-D3xaWM86.js → threads._threadId-euyNckhj.js} +31 -9
- package/apps/ui/dist/server/server.js +15 -15
- package/package.json +7 -1
- package/src/export-chats.ts +3 -4
- package/src/lib/claude-exporter.ts +1 -1
- package/src/lib/codex-browser-db.ts +146 -59
- package/src/lib/codex-browser-export.ts +13 -2
- package/src/lib/codex-exporter-cli.ts +1 -1
- package/src/lib/codex-exporter-db.ts +19 -20
- package/src/lib/codex-exporter-transcript.ts +38 -25
- package/src/lib/interactive-cli.ts +6 -13
- package/src/lib/model-label.ts +24 -0
- package/src/lib/path-transforms.ts +1 -0
- package/src/lib/shared.ts +2 -24
- package/src/lib/sqlite-retry.ts +15 -1
- package/src/spiracha.ts +3 -4
- package/apps/ui/dist/client/assets/projects._project-B7XcpoLt.js +0 -1
- package/apps/ui/dist/client/assets/projects.index-4vfIwLjw.js +0 -1
- package/apps/ui/dist/client/assets/styles-8Wtc8YJw.css +0 -1
- package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-BjsXNYgm.js +0 -99
- package/apps/ui/dist/server/assets/formatters-B6o5pTY9.js +0 -72
package/apps/ui/dist/client/assets/{threads._threadId-DBiDb38K.js → threads._threadId-Df5VXIuZ.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{a as e,c as t,i as n,l as r,n as i,r as a,s as o,t as s,u as c}from"./formatters-BxjZwWSE.js";import{f as l,i as u,n as d,p as f,r as p,t as m}from"./delete-confirm-dialog-DJUAk7ha.js";import{r as h,t as g}from"./checkbox-wPoGG3of.js";import{a as _,n as v,r as y,t as b}from"./download-BhWd-Pm5.js";import{a as x}from"./es2015-BlyMI4CF.js";import{A as S,D as C,E as w,G as T,H as E,I as D,M as O,O as k,P as A,V as j,W as M,c as N,d as P,dt as F,ft as I,g as L,h as ee,l as te,lt as ne,mt as re,n as ie,p as ae,pt as oe,ut as se}from"./index-T01rPkb4.js";import{t as R}from"./metric-card-BWW7TWER.js";import{t as ce}from"./page-header-BZ8Gnxgs.js";function le(e,t){return r(e,c,t)}var z=M(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),B=re(oe(),1),V=F(),H=`Tabs`,[ue,de]=O(H,[u]),fe=u(),[pe,U]=ue(H),me=B.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:i,defaultValue:a,orientation:o=`horizontal`,dir:s,activationMode:c=`automatic`,...l}=e,u=x(s),[d,f]=k({prop:r,onChange:i,defaultProp:a??``,caller:H});return(0,V.jsx)(pe,{scope:n,baseId:w(),value:d,onValueChange:f,orientation:o,dir:u,activationMode:c,children:(0,V.jsx)(A.div,{dir:u,"data-orientation":o,...l,ref:t})})});me.displayName=H;var he=`TabsList`,ge=B.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0,...i}=e,a=U(he,n),o=fe(n);return(0,V.jsx)(p,{asChild:!0,...o,orientation:a.orientation,dir:a.dir,loop:r,children:(0,V.jsx)(A.div,{role:`tablist`,"aria-orientation":a.orientation,...i,ref:t})})});ge.displayName=he;var _e=`TabsTrigger`,ve=B.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:i=!1,...a}=e,o=U(_e,n),s=fe(n),c=xe(o.baseId,r),l=Se(o.baseId,r),u=r===o.value;return(0,V.jsx)(d,{asChild:!0,...s,focusable:!i,active:u,children:(0,V.jsx)(A.button,{type:`button`,role:`tab`,"aria-selected":u,"aria-controls":l,"data-state":u?`active`:`inactive`,"data-disabled":i?``:void 0,disabled:i,id:c,...a,ref:t,onMouseDown:S(e.onMouseDown,e=>{!i&&e.button===0&&e.ctrlKey===!1?o.onValueChange(r):e.preventDefault()}),onKeyDown:S(e.onKeyDown,e=>{[` `,`Enter`].includes(e.key)&&o.onValueChange(r)}),onFocus:S(e.onFocus,()=>{let e=o.activationMode!==`manual`;!u&&!i&&e&&o.onValueChange(r)})})})});ve.displayName=_e;var ye=`TabsContent`,be=B.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:i,children:a,...o}=e,s=U(ye,n),c=xe(s.baseId,r),l=Se(s.baseId,r),u=r===s.value,d=B.useRef(u);return B.useEffect(()=>{let e=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,V.jsx)(C,{present:i||u,children:({present:n})=>(0,V.jsx)(A.div,{"data-state":u?`active`:`inactive`,"data-orientation":s.orientation,role:`tabpanel`,"aria-labelledby":c,hidden:!n,id:l,tabIndex:0,...o,ref:t,style:{...e.style,animationDuration:d.current?`0s`:void 0},children:n&&a})})});be.displayName=ye;function xe(e,t){return`${e}-trigger-${t}`}function Se(e,t){return`${e}-content-${t}`}var Ce=me,we=ge,Te=ve,Ee=be;function W({title:e,value:t}){return(0,V.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,V.jsx)(`h3`,{className:`font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]`,children:e}),(0,V.jsx)(`pre`,{className:`mt-4 overflow-x-auto rounded-2xl border border-[var(--border)] bg-[var(--code-background)] p-4 text-[var(--code-foreground)] text-xs leading-5`,children:JSON.stringify(t,null,2)})]})}function G({items:e,title:t}){return(0,V.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,V.jsx)(`h3`,{className:`font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]`,children:t}),(0,V.jsx)(`dl`,{className:`mt-4 space-y-3`,children:e.map(e=>(0,V.jsxs)(`div`,{className:`grid gap-1 sm:grid-cols-[11rem_1fr] sm:items-start`,children:[(0,V.jsx)(`dt`,{className:`font-medium text-[var(--muted-foreground)] text-xs uppercase tracking-[0.14em]`,children:e.label}),(0,V.jsx)(`dd`,{className:`min-w-0 text-sm leading-6`,children:e.value})]},e.label))})]})}var De=re(I(),1);function Oe(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&a<e){let e=r[a];if(!e){let i=t[a*2];e=r[a]={index:a,key:n(a),start:i,size:t[a*2+1],end:i+t[a*2+1],lane:0}}return e}}if(i===`length`)return e}return Reflect.get(r,i,a)}})}function K(e,t,n){let r=n.initialDeps??[],i,a=!0;function o(){let o=e();return o.length!==r.length||o.some((e,t)=>r[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function ke(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var Ae=(e,t)=>Math.abs(e-t)<1.01,je=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},q,Me=()=>{if(q!==void 0)return q;if(typeof navigator>`u`)return q=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return q=!0;let e=navigator.maxTouchPoints;return q=navigator.platform===`MacIntel`&&e!==void 0&&e>0},Ne=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},Pe=e=>e,Fe=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e<n;e++)r[e]=t+e;return r},Ie=(e,t)=>{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(Ne(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(Ne(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},J={passive:!0},Le=typeof window>`u`?!0:`onscrollend`in window,Re=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&Le,o=0,s=a?null:je(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,J),a&&r.addEventListener(`scrollend`,u,J),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},ze=(e,t)=>Re(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),Be=(e,t,n)=>{if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},Ve=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},He=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:Pe,rangeExtractor:Fe,onChange:()=>{},measureElement:Be,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}this.options=t},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=K(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset()<e?`forward`:`backward`:null,this.scrollOffset=e,this.isScrolling=t,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),`addEventListener`in this.scrollElement){let e=this.scrollElement,t=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!Me()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,J),e.addEventListener(`touchend`,n,J),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.end<a.end&&n.set(t.lane,!0),n.size===this.options.lanes)break}return r.size===this.options.lanes?Array.from(r.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=K(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=K(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let l=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length<a){let e=new Float64Array(a);o&&l>0&&e.set(o.subarray(0,l*2)),o=e,this._flatMeasurements=o}let s;if(l===0)s=t+n;else{let e=l-1;s=o[e*2]+o[e*2+1]+i}for(let t=l;t<e;t++){let e=r(t),n=c.get(e),a=typeof n==`number`?n:this.options.estimateSize(t);o[t*2]=s,o[t*2+1]=a,s+=a+i}let u=Oe(e,o,r);return this.measurementsCache=u,u}let u=this.measurementsCache.slice(0,l),d=Array(a).fill(void 0);for(let e=0;e<l;e++){let t=u[e];t&&(d[t.lane]=e)}for(let i=l;i<e;i++){let e=r(i),a=this.laneAssignments.get(i),s,l,f=o===`estimate`||c.has(e);if(a!==void 0&&this.options.lanes>1){s=a;let e=d[s],r=e===void 0?void 0:u[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?u[i-1]:this.getFurthestMeasurement(u,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&f&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;u[i]={index:i,start:l,size:m,end:h,key:e,lane:s},d[s]=i}return this.measurementsCache=u,u},{key:!1,debug:()=>this.options.debug}),this.calculateRange=K(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>this.range=e.length>0&&t>0?We({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:r===1&&this._flatMeasurements!=null?this._flatMeasurements:null}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=K(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);o!==0&&(this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r<this.getScrollOffset()+this.scrollAdjustments&&this.scrollDirection!==`backward`:this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[e]??{index:e,key:i,start:r,size:n,end:r+n,lane:0},o,this))&&(Me()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=o:this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0})),(this.pendingMin===null||e<this.pendingMin)&&(this.pendingMin=e),this.itemSizeCache.set(i,t),this.itemSizeCacheVersion++,this.notify(!1))},this.getVirtualItems=K(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;r<i;r++){let i=t[e[r]];n.push(i)}return n},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return ke(t[Ue(0,t.length-1,r?e=>n[e*2]:e=>ke(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t),i=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:i,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:`start`,behavior:t,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&Ae(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},Ue=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(a<r)e=i+1;else if(a>r)t=i-1;else return i}return e>0?e-1:0};function We({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:i}){let a=e.length-1,o=i?e=>i[e*2]:t=>e[t].start,s=i?e=>i[e*2]+i[e*2+1]:t=>e[t].end;if(e.length<=r)return{startIndex:0,endIndex:a};let c=Ue(0,a,o,n),l=c;if(r===1)for(;l<a&&s(l)<n+t;)l++;else if(r>1){let i=Array(r).fill(0);for(;l<a&&i.some(e=>e<n+t);){let t=e[l];i[t.lane]=t.end,l++}let o=Array(r).fill(n+t);for(;c>=0&&o.some(e=>e>=n);){let t=e[c];o[t.lane]=t.start,c--}c=Math.max(0,c-c%r),l=Math.min(a,l+(r-1-l%r))}return{startIndex:c,endIndex:l}}var Y=typeof document<`u`?B.useLayoutEffect:B.useEffect;function Ge({useFlushSync:e=!0,...t}){let n=B.useReducer(e=>e+1,0)[1],r={...t,onChange:(r,i)=>{var a;e&&i?(0,De.flushSync)(n):n(),(a=t.onChange)==null||a.call(t,r,i)}},[i]=B.useState(()=>new He(r));return i.setOptions(r),Y(()=>i._didMount(),[]),Y(()=>i._willUpdate()),i}function Ke(e){return Ge({observeElementRect:Ie,observeElementOffset:ze,scrollToFn:Ve,...e})}var qe=j(`inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3`,{defaultVariants:{variant:`default`},variants:{variant:{default:`bg-primary text-primary-foreground [a&]:hover:bg-primary/90`,destructive:`bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90`,ghost:`[a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,link:`text-primary underline-offset-4 [a&]:hover:underline`,outline:`border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,secondary:`bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`}}});function X({className:e,variant:t=`default`,asChild:n=!1,...r}){return(0,V.jsx)(n?D:`span`,{"data-slot":`badge`,"data-variant":t,className:E(qe({variant:t}),e),...r})}var Je=e=>e.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`),Ye=e=>{let t=e.trim(),n=[t,t.replaceAll(`\\`,`/`),t.replaceAll(`/`,`\\`)].filter(Boolean);return[...new Set(n)].sort((e,t)=>t.length-e.length)},Xe=(e,t)=>{let n=e;for(let e of Ye(t)){let t=Je(e);n=n.replace(RegExp(`${t}(?<separator>[\\\\/])`,`gu`),``),n=n.replace(RegExp(`${t}(?=$|[^A-Za-z0-9._-])`,`gu`),`.`)}return n},Ze=e=>e.replace(/\/Users\/[^/\\]+(?=\/|$)/gu,`~`).replace(/[A-Za-z]:[\\/]+Users[\\/]+[^\\/]+(?=[\\/]|$)/gu,`~`),Qe=(e,t)=>{let n=e;return t.convertToProjectRoot&&t.projectPath&&(n=Xe(n,t.projectPath)),t.redactUsername&&(n=Ze(n)),n},$e=(e,t,n)=>Qe(e,{...t,projectPath:n}),et=e=>e.kind===`message`&&e.role===`assistant`&&e.phase===`commentary`,tt=(e,t,n,r)=>et(e)&&!r?!1:e.kind===`message`?!e.isHiddenByDefault||n:e.kind===`tool_call`||e.kind===`tool_output`?t:n,nt=e=>e.kind===`message`&&e.role===`assistant`?`border-[var(--accent)]/40 bg-[var(--panel)]`:e.kind===`message`&&e.role===`user`?`border-[var(--border)] bg-[var(--panel-secondary)]`:e.kind===`tool_call`||e.kind===`tool_output`?`border-[var(--border)] bg-[var(--code-background)]`:`border-[var(--border)] bg-[var(--panel-secondary)]/80`,rt=(t,n)=>{let r=e(t.model??n);return t.variant===`agent_message`?t.role===`assistant`?r:`Assistant update`:t.role===`assistant`?r:`User`},it=e=>{switch(e.kind){case`tool_call`:return`Tool call: ${e.name}`;case`tool_output`:return`Tool output`;case`task_started`:return`Task started`;case`task_complete`:return`Task complete`;case`token_count`:return`Token update`;case`reasoning`:return`Reasoning`;case`web_search`:return`Web search`}},Z=(e,t)=>e.kind===`message`?rt(e,t):it(e),at=async e=>{if(typeof navigator<`u`&&navigator.clipboard)try{return await navigator.clipboard.writeText(e),!0}catch{}return!1},ot=(e,t)=>{switch(e.kind){case`message`:return t(e.text||`No text content`);case`tool_call`:return[e.command??e.name,e.workdir].filter(e=>!!e).map(t).join(`
|
|
1
|
+
import{a as e,c as t,i as n,l as r,n as i,r as a,s as o,t as s,u as c}from"./formatters-C12LmYaa.js";import{f as l,i as u,n as d,p as f,r as p,t as m}from"./delete-confirm-dialog-CcZaRX33.js";import{r as h,t as g}from"./checkbox-DXM4lkJq.js";import{a as _,n as v,r as y,t as b}from"./download-DOwxk-cG.js";import{a as x}from"./es2015-Bm0kEzx2.js";import{A as S,D as C,E as w,G as T,H as E,I as D,M as O,O as k,P as A,V as j,W as M,c as N,d as P,dt as F,ft as I,g as L,h as ee,l as te,lt as ne,mt as re,n as ie,p as ae,pt as oe,ut as se}from"./index-DdJ7ahIt.js";import{t as R}from"./metric-card-9jwBF7rG.js";import{t as ce}from"./page-header-Dr_h1CVv.js";function le(e,t){return r(e,c,t)}var z=M(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),B=re(oe(),1),V=F(),H=`Tabs`,[ue,de]=O(H,[u]),fe=u(),[pe,U]=ue(H),me=B.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:i,defaultValue:a,orientation:o=`horizontal`,dir:s,activationMode:c=`automatic`,...l}=e,u=x(s),[d,f]=k({prop:r,onChange:i,defaultProp:a??``,caller:H});return(0,V.jsx)(pe,{scope:n,baseId:w(),value:d,onValueChange:f,orientation:o,dir:u,activationMode:c,children:(0,V.jsx)(A.div,{dir:u,"data-orientation":o,...l,ref:t})})});me.displayName=H;var he=`TabsList`,ge=B.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0,...i}=e,a=U(he,n),o=fe(n);return(0,V.jsx)(p,{asChild:!0,...o,orientation:a.orientation,dir:a.dir,loop:r,children:(0,V.jsx)(A.div,{role:`tablist`,"aria-orientation":a.orientation,...i,ref:t})})});ge.displayName=he;var _e=`TabsTrigger`,ve=B.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:i=!1,...a}=e,o=U(_e,n),s=fe(n),c=xe(o.baseId,r),l=Se(o.baseId,r),u=r===o.value;return(0,V.jsx)(d,{asChild:!0,...s,focusable:!i,active:u,children:(0,V.jsx)(A.button,{type:`button`,role:`tab`,"aria-selected":u,"aria-controls":l,"data-state":u?`active`:`inactive`,"data-disabled":i?``:void 0,disabled:i,id:c,...a,ref:t,onMouseDown:S(e.onMouseDown,e=>{!i&&e.button===0&&e.ctrlKey===!1?o.onValueChange(r):e.preventDefault()}),onKeyDown:S(e.onKeyDown,e=>{[` `,`Enter`].includes(e.key)&&o.onValueChange(r)}),onFocus:S(e.onFocus,()=>{let e=o.activationMode!==`manual`;!u&&!i&&e&&o.onValueChange(r)})})})});ve.displayName=_e;var ye=`TabsContent`,be=B.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:i,children:a,...o}=e,s=U(ye,n),c=xe(s.baseId,r),l=Se(s.baseId,r),u=r===s.value,d=B.useRef(u);return B.useEffect(()=>{let e=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,V.jsx)(C,{present:i||u,children:({present:n})=>(0,V.jsx)(A.div,{"data-state":u?`active`:`inactive`,"data-orientation":s.orientation,role:`tabpanel`,"aria-labelledby":c,hidden:!n,id:l,tabIndex:0,...o,ref:t,style:{...e.style,animationDuration:d.current?`0s`:void 0},children:n&&a})})});be.displayName=ye;function xe(e,t){return`${e}-trigger-${t}`}function Se(e,t){return`${e}-content-${t}`}var Ce=me,we=ge,Te=ve,Ee=be;function W({title:e,value:t}){return(0,V.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,V.jsx)(`h3`,{className:`font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]`,children:e}),(0,V.jsx)(`pre`,{className:`mt-4 overflow-x-auto rounded-2xl border border-[var(--border)] bg-[var(--code-background)] p-4 text-[var(--code-foreground)] text-xs leading-5`,children:JSON.stringify(t,null,2)})]})}function G({items:e,title:t}){return(0,V.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,V.jsx)(`h3`,{className:`font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]`,children:t}),(0,V.jsx)(`dl`,{className:`mt-4 space-y-3`,children:e.map(e=>(0,V.jsxs)(`div`,{className:`grid gap-1 sm:grid-cols-[11rem_1fr] sm:items-start`,children:[(0,V.jsx)(`dt`,{className:`font-medium text-[var(--muted-foreground)] text-xs uppercase tracking-[0.14em]`,children:e.label}),(0,V.jsx)(`dd`,{className:`min-w-0 text-sm leading-6`,children:e.value})]},e.label))})]})}var De=re(I(),1);function Oe(e,t,n){let r=Array(e);return new Proxy(r,{get(r,i,a){if(typeof i==`string`){let a=i.charCodeAt(0);if(a>=48&&a<=57){let a=+i;if(Number.isInteger(a)&&a>=0&&a<e){let e=r[a];if(!e){let i=t[a*2];e=r[a]={index:a,key:n(a),start:i,size:t[a*2+1],end:i+t[a*2+1],lane:0}}return e}}if(i===`length`)return e}return Reflect.get(r,i,a)}})}function K(e,t,n){let r=n.initialDeps??[],i,a=!0;function o(){let o=e();return o.length!==r.length||o.some((e,t)=>r[t]!==e)?(r=o,i=t(...o),n?.onChange&&!(a&&n.skipInitialOnChange)&&n.onChange(i),a=!1,i):i}return o.updateDeps=e=>{r=e},o}function ke(e,t){if(e===void 0)throw Error(`Unexpected undefined${t?`: ${t}`:``}`);return e}var Ae=(e,t)=>Math.abs(e-t)<1.01,je=(e,t,n)=>{let r;return function(...i){e.clearTimeout(r),r=e.setTimeout(()=>t.apply(this,i),n)}},q,Me=()=>{if(q!==void 0)return q;if(typeof navigator>`u`)return q=!1;if(/iP(hone|od|ad)/.test(navigator.userAgent))return q=!0;let e=navigator.maxTouchPoints;return q=navigator.platform===`MacIntel`&&e!==void 0&&e>0},Ne=e=>{let{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},Pe=e=>e,Fe=e=>{let t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1)-t+1,r=Array(n);for(let e=0;e<n;e++)r[e]=t+e;return r},Ie=(e,t)=>{let n=e.scrollElement;if(!n)return;let r=e.targetWindow;if(!r)return;let i=e=>{let{width:n,height:r}=e;t({width:Math.round(n),height:Math.round(r)})};if(i(Ne(n)),!r.ResizeObserver)return()=>{};let a=new r.ResizeObserver(t=>{let r=()=>{let e=t[0];if(e?.borderBoxSize){let t=e.borderBoxSize[0];if(t){i({width:t.inlineSize,height:t.blockSize});return}}i(Ne(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(r):r()});return a.observe(n,{box:`border-box`}),()=>{a.unobserve(n)}},J={passive:!0},Le=typeof window>`u`?!0:`onscrollend`in window,Re=(e,t,n)=>{let r=e.scrollElement;if(!r)return;let i=e.targetWindow;if(!i)return;let a=e.options.useScrollendEvent&&Le,o=0,s=a?null:je(i,()=>t(o,!1),e.options.isScrollingResetDelay),c=e=>()=>{o=n(r),s?.(),t(o,e)},l=c(!0),u=c(!1);return r.addEventListener(`scroll`,l,J),a&&r.addEventListener(`scrollend`,u,J),()=>{r.removeEventListener(`scroll`,l),a&&r.removeEventListener(`scrollend`,u)}},ze=(e,t)=>Re(e,t,t=>{let{horizontal:n,isRtl:r}=e.options;return n?t.scrollLeft*(r&&-1||1):t.scrollTop}),Be=(e,t,n)=>{if(t?.borderBoxSize){let e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?`inlineSize`:`blockSize`])}return e[n.options.horizontal?`offsetWidth`:`offsetHeight`]},Ve=(e,{adjustments:t=0,behavior:n},r)=>{var i,a;(a=(i=r.scrollElement)?.scrollTo)==null||a.call(i,{[r.options.horizontal?`left`:`top`]:e+t,behavior:n})},He=class{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this._flatMeasurements=null,this.itemSizeCache=new Map,this.itemSizeCacheVersion=0,this.laneAssignments=new Map,this.pendingMin=null,this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this._iosDeferredAdjustment=0,this._iosTouching=!1,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._intendedScrollOffset=null,this.elementsCache=new Map,this.now=()=>{var e;return((e=this.targetWindow?.performance)?.now)?.call(e)??Date.now()},this.observer=(()=>{let e=null,t=()=>e||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{let t=()=>{let t=e.target,n=this.indexFromElement(t);if(!t.isConnected){this.observer.unobserve(t);for(let[e,n]of this.elementsCache)if(n===t){this.elementsCache.delete(e);break}return}this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}));return{disconnect:()=>{var n;(n=t())==null||n.disconnect(),e=null},observe:e=>t()?.observe(e,{box:`border-box`}),unobserve:e=>t()?.unobserve(e)}})(),this.range=null,this.setOptions=e=>{let t={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:Pe,rangeExtractor:Fe,onChange:()=>{},measureElement:Be,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:`data-index`,initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:`estimate`};for(let n in e){let r=e[n];r!==void 0&&(t[n]=r)}this.options=t},this.notify=e=>{var t,n;(n=(t=this.options).onChange)==null||n.call(t,this,e)},this.maybeNotify=K(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{let e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}if(this.scrollElement=e,this.scrollElement&&`ownerDocument`in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=this.scrollElement?.window??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{this._intendedScrollOffset!==null&&Math.abs(e-this._intendedScrollOffset)<1.5&&(e=this._intendedScrollOffset),this._intendedScrollOffset=null,this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset()<e?`forward`:`backward`:null,this.scrollOffset=e,this.isScrolling=t,this._flushIosDeferredIfReady(),this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),`addEventListener`in this.scrollElement){let e=this.scrollElement,t=()=>{this._iosTouching=!0,this._iosJustTouchEnded=!1,this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)},n=()=>{this._iosTouching=!1,!(!Me()||this.targetWindow==null)&&(this._iosJustTouchEnded=!0,this._iosTouchEndTimerId=this.targetWindow.setTimeout(()=>{this._iosJustTouchEnded=!1,this._iosTouchEndTimerId=null,this._flushIosDeferredIfReady()},150))};e.addEventListener(`touchstart`,t,J),e.addEventListener(`touchend`,n,J),this.unsubs.push(()=>{e.removeEventListener(`touchstart`,t),e.removeEventListener(`touchend`,n),this._iosTouchEndTimerId!==null&&this.targetWindow!=null&&(this.targetWindow.clearTimeout(this._iosTouchEndTimerId),this._iosTouchEndTimerId=null)})}this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this._flushIosDeferredIfReady=()=>{if(this._iosDeferredAdjustment===0||this.isScrolling||this._iosTouching||this._iosJustTouchEnded)return;let e=this.getScrollOffset(),t=this.getMaxScrollOffset();if(e<0||e>t)return;let n=this._iosDeferredAdjustment;this._iosDeferredAdjustment=0,this._scrollToOffset(e,{adjustments:this.scrollAdjustments+=n,behavior:void 0})},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?`width`:`height`]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset==`function`?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{let n=new Map,r=new Map;for(let i=t-1;i>=0;i--){let t=e[i];if(n.has(t.lane))continue;let a=r.get(t.lane);if(a==null||t.end>a.end?r.set(t.lane,t):t.end<a.end&&n.set(t.lane,!0),n.size===this.options.lanes)break}return r.size===this.options.lanes?Array.from(r.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=K(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,r,i,a,o)=>(this.prevLanes!==void 0&&this.prevLanes!==a&&(this.lanesChangedFlag=!0),this.prevLanes=a,this.pendingMin=null,{count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o}),{key:!1}),this.getMeasurements=K(()=>[this.getMeasurementOptions(),this.itemSizeCacheVersion],({count:e,paddingStart:t,scrollMargin:n,getItemKey:r,enabled:i,lanes:a,laneAssignmentMode:o},s)=>{let c=this.itemSizeCache;if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(let t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMin=null),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));let l=this.lanesSettling?0:this.pendingMin??0;if(this.pendingMin=null,this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1),a===1){let i=this.options.gap,a=e*2,o=this._flatMeasurements;if(!o||o.length<a){let e=new Float64Array(a);o&&l>0&&e.set(o.subarray(0,l*2)),o=e,this._flatMeasurements=o}let s;if(l===0)s=t+n;else{let e=l-1;s=o[e*2]+o[e*2+1]+i}for(let t=l;t<e;t++){let e=r(t),n=c.get(e),a=typeof n==`number`?n:this.options.estimateSize(t);o[t*2]=s,o[t*2+1]=a,s+=a+i}let u=Oe(e,o,r);return this.measurementsCache=u,u}let u=this.measurementsCache.slice(0,l),d=Array(a).fill(void 0);for(let e=0;e<l;e++){let t=u[e];t&&(d[t.lane]=e)}for(let i=l;i<e;i++){let e=r(i),a=this.laneAssignments.get(i),s,l,f=o===`estimate`||c.has(e);if(a!==void 0&&this.options.lanes>1){s=a;let e=d[s],r=e===void 0?void 0:u[e];l=r?r.end+this.options.gap:t+n}else{let e=this.options.lanes===1?u[i-1]:this.getFurthestMeasurement(u,i);l=e?e.end+this.options.gap:t+n,s=e?e.lane:i%this.options.lanes,this.options.lanes>1&&f&&this.laneAssignments.set(i,s)}let p=c.get(e),m=typeof p==`number`?p:this.options.estimateSize(i),h=l+m;u[i]={index:i,start:l,size:m,end:h,key:e,lane:s},d[s]=i}return this.measurementsCache=u,u},{key:!1,debug:()=>this.options.debug}),this.calculateRange=K(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,r)=>this.range=e.length>0&&t>0?We({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:r===1&&this._flatMeasurements!=null?this._flatMeasurements:null}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=K(()=>{let e=null,t=null,n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,r,i)=>r===null||i===null?[]:e({startIndex:r,endIndex:i,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{let t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{if(!this.scrollState||this.scrollState.behavior!==`smooth`)return!0;let t=this.scrollState.index??this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)?.index;if(t!==void 0&&this.range){let n=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),r=Math.max(0,t-n),i=Math.min(this.options.count-1,t+n);return e>=r&&e<=i}return!0},this.measureElement=e=>{if(!e){this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});return}let t=this.indexFromElement(e),n=this.options.getItemKey(t),r=this.elementsCache.get(n);r!==e&&(r&&this.observer.unobserve(r),this.observer.observe(e),this.elementsCache.set(n,e)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(t)&&this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{if(e<0||e>=this.options.count)return;let n,r,i,a=this._flatMeasurements;if(this.options.lanes===1&&a!==null)i=this.options.getItemKey(e),r=a[e*2],n=a[e*2+1];else{let t=this.measurementsCache[e];if(!t)return;i=t.key,r=t.start,n=t.size}let o=t-(this.itemSizeCache.get(i)??n);o!==0&&(this.scrollState?.behavior!==`smooth`&&(this.shouldAdjustScrollPositionOnItemSizeChange===void 0?r<this.getScrollOffset()+this.scrollAdjustments&&this.scrollDirection!==`backward`:this.shouldAdjustScrollPositionOnItemSizeChange(this.measurementsCache[e]??{index:e,key:i,start:r,size:n,end:r+n,lane:0},o,this))&&(Me()&&(this.isScrolling||this._iosTouching||this._iosJustTouchEnded)?this._iosDeferredAdjustment+=o:this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0})),(this.pendingMin===null||e<this.pendingMin)&&(this.pendingMin=e),this.itemSizeCache.set(i,t),this.itemSizeCacheVersion++,this.notify(!1))},this.getVirtualItems=K(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{let n=[];for(let r=0,i=e.length;r<i;r++){let i=t[e[r]];n.push(i)}return n},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{let t=this.getMeasurements();if(t.length===0)return;let n=this._flatMeasurements,r=this.options.lanes===1&&n!=null;return ke(t[Ue(0,t.length-1,r?e=>n[e*2]:e=>ke(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if(`scrollHeight`in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{let e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;let r=this.getSize(),i=this.getScrollOffset();t===`auto`&&(t=e>=i+r?`end`:`start`),t===`center`?e+=(n-r)/2:t===`end`&&(e-=r);let a=this.getMaxScrollOffset();return Math.max(Math.min(a,e),0)},this.getOffsetForIndex=(e,t=`auto`)=>{e=Math.max(0,Math.min(e,this.options.count-1));let n=this.getSize(),r=this.getScrollOffset(),i=this.measurementsCache[e];if(!i)return;if(t===`auto`)if(i.end>=r+n-this.options.scrollPaddingEnd)t=`end`;else if(i.start<=r+this.options.scrollPaddingStart)t=`start`;else return[r,t];if(t===`end`&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];let a=t===`end`?i.end+this.options.scrollPaddingEnd:i.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(a,t,i.size),t]},this.scrollToOffset=(e,{align:t=`start`,behavior:n=`auto`}={})=>{let r=this.getOffsetForAlignment(e,t),i=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:i,lastTargetOffset:r,stableFrames:0},this._scrollToOffset(r,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t=`auto`,behavior:n=`auto`}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));let r=this.getOffsetForIndex(e,t);if(!r)return;let[i,a]=r,o=this.now();this.scrollState={index:e,align:a,behavior:n,startedAt:o,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t=`auto`}={})=>{let n=this.getScrollOffset()+e,r=this.now();this.scrollState={index:null,align:`start`,behavior:t,startedAt:r,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{let e=this.getMeasurements(),t;if(e.length===0)t=this.options.paddingStart;else if(this.options.lanes===1){let n=e.length-1,r=this._flatMeasurements;t=r==null?e[n]?.end??0:r[n*2]+r[n*2+1]}else{let n=Array(this.options.lanes).fill(null),r=e.length-1;for(;r>=0&&n.some(e=>e===null);){let t=e[r];n[t.lane]===null&&(n[t.lane]=t.end),r--}t=Math.max(...n.filter(e=>e!==null))}return Math.max(t-this.options.scrollMargin+this.options.paddingEnd,0)},this.takeSnapshot=()=>{let e=[];if(this.itemSizeCache.size===0)return e;let t=this.getMeasurements();for(let n of t)n&&this.itemSizeCache.has(n.key)&&e.push({index:n.index,key:n.key,start:n.start,size:n.size,end:n.end,lane:n.lane});return e},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this._intendedScrollOffset=e+(t??0),this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.pendingMin=null,this.itemSizeCache.clear(),this.laneAssignments.clear(),this.itemSizeCacheVersion++,this.notify(!1)},this.setOptions(e)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId??=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}let e=this.scrollState.index==null?void 0:this.getOffsetForIndex(this.scrollState.index,this.scrollState.align),t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&Ae(t,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1){this.getScrollOffset()!==t&&this._scrollToOffset(t,{adjustments:void 0,behavior:`auto`}),this.scrollState=null;return}}else if(this.scrollState.stableFrames=0,n){let e=this.getSize()||600,n=Math.abs(t-this.getScrollOffset()),r=this.scrollState.behavior===`smooth`&&n>e;this.scrollState.lastTargetOffset=t,r||(this.scrollState.behavior=`auto`),this._scrollToOffset(t,{adjustments:void 0,behavior:r?`smooth`:`auto`})}this.scheduleScrollReconcile()}},Ue=(e,t,n,r)=>{for(;e<=t;){let i=(e+t)/2|0,a=n(i);if(a<r)e=i+1;else if(a>r)t=i-1;else return i}return e>0?e-1:0};function We({measurements:e,outerSize:t,scrollOffset:n,lanes:r,flat:i}){let a=e.length-1,o=i?e=>i[e*2]:t=>e[t].start,s=i?e=>i[e*2]+i[e*2+1]:t=>e[t].end;if(e.length<=r)return{startIndex:0,endIndex:a};let c=Ue(0,a,o,n),l=c;if(r===1)for(;l<a&&s(l)<n+t;)l++;else if(r>1){let i=Array(r).fill(0);for(;l<a&&i.some(e=>e<n+t);){let t=e[l];i[t.lane]=t.end,l++}let o=Array(r).fill(n+t);for(;c>=0&&o.some(e=>e>=n);){let t=e[c];o[t.lane]=t.start,c--}c=Math.max(0,c-c%r),l=Math.min(a,l+(r-1-l%r))}return{startIndex:c,endIndex:l}}var Y=typeof document<`u`?B.useLayoutEffect:B.useEffect;function Ge({useFlushSync:e=!0,...t}){let n=B.useReducer(e=>e+1,0)[1],r={...t,onChange:(r,i)=>{var a;e&&i?(0,De.flushSync)(n):n(),(a=t.onChange)==null||a.call(t,r,i)}},[i]=B.useState(()=>new He(r));return i.setOptions(r),Y(()=>i._didMount(),[]),Y(()=>i._willUpdate()),i}function Ke(e){return Ge({observeElementRect:Ie,observeElementOffset:ze,scrollToFn:Ve,...e})}var qe=j(`inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3`,{defaultVariants:{variant:`default`},variants:{variant:{default:`bg-primary text-primary-foreground [a&]:hover:bg-primary/90`,destructive:`bg-destructive text-white focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40 [a&]:hover:bg-destructive/90`,ghost:`[a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,link:`text-primary underline-offset-4 [a&]:hover:underline`,outline:`border-border text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground`,secondary:`bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90`}}});function X({className:e,variant:t=`default`,asChild:n=!1,...r}){return(0,V.jsx)(n?D:`span`,{"data-slot":`badge`,"data-variant":t,className:E(qe({variant:t}),e),...r})}var Je=e=>e.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`),Ye=e=>{let t=e.trim(),n=[t,t.replaceAll(`\\`,`/`),t.replaceAll(`/`,`\\`)].filter(Boolean);return[...new Set(n)].sort((e,t)=>t.length-e.length)},Xe=(e,t)=>{let n=e;for(let e of Ye(t)){let t=Je(e);n=n.replace(RegExp(`${t}(?<separator>[\\\\/])`,`gu`),``),n=n.replace(RegExp(`${t}(?=$|[^A-Za-z0-9._-])`,`gu`),`.`)}return n},Ze=e=>e.replace(/\/home\/[^/\\]+(?=\/|$)/gu,`~`).replace(/\/Users\/[^/\\]+(?=\/|$)/gu,`~`).replace(/[A-Za-z]:[\\/]+Users[\\/]+[^\\/]+(?=[\\/]|$)/gu,`~`),Qe=(e,t)=>{let n=e;return t.convertToProjectRoot&&t.projectPath&&(n=Xe(n,t.projectPath)),t.redactUsername&&(n=Ze(n)),n},$e=(e,t,n)=>Qe(e,{...t,projectPath:n}),et=e=>e.kind===`message`&&e.role===`assistant`&&e.phase===`commentary`,tt=(e,t,n,r)=>et(e)&&!r?!1:e.kind===`message`?!e.isHiddenByDefault||n:e.kind===`tool_call`||e.kind===`tool_output`?t:n,nt=e=>e.kind===`message`&&e.role===`assistant`?`border-[var(--accent)]/40 bg-[var(--panel)]`:e.kind===`message`&&e.role===`user`?`border-[var(--border)] bg-[var(--panel-secondary)]`:e.kind===`tool_call`||e.kind===`tool_output`?`border-[var(--border)] bg-[var(--code-background)]`:`border-[var(--border)] bg-[var(--panel-secondary)]/80`,rt=(t,n)=>{let r=e(t.model??n);return t.variant===`agent_message`?t.role===`assistant`?r:`Assistant update`:t.role===`assistant`?r:`User`},it=e=>{switch(e.kind){case`tool_call`:return`Tool call: ${e.name}`;case`tool_output`:return`Tool output`;case`task_started`:return`Task started`;case`task_complete`:return`Task complete`;case`token_count`:return`Token update`;case`reasoning`:return`Reasoning`;case`web_search`:return`Web search`}},Z=(e,t)=>e.kind===`message`?rt(e,t):it(e),at=async e=>{if(typeof navigator<`u`&&navigator.clipboard)try{return await navigator.clipboard.writeText(e),!0}catch{}return!1},ot=(e,t)=>{switch(e.kind){case`message`:return t(e.text||`No text content`);case`tool_call`:return[e.command??e.name,e.workdir].filter(e=>!!e).map(t).join(`
|
|
2
2
|
|
|
3
3
|
`);case`tool_output`:return t(e.summary||e.outputText||``);case`task_started`:return`Context window: ${e.modelContextWindow??`n/a`}\n\nCollaboration mode: ${e.collaborationModeKind??`n/a`}`;case`task_complete`:return`Duration: ${e.durationMs??`n/a`} ms\n\nFirst token: ${e.timeToFirstTokenMs??`n/a`} ms`;case`token_count`:return JSON.stringify(e.rateLimits,null,2);case`reasoning`:return e.summary.join(` `)||`Reasoning content is not directly available.`;case`web_search`:return[`Phase: ${e.phase}${e.status?` · ${e.status}`:``}`,e.query?t(e.query):null].filter(Boolean).join(`
|
|
4
4
|
|
|
5
|
-
`)}},st=(e,t,n)=>`## ${Z(e,t)}\n\n${ot(e,n)}`,ct=(e,t)=>(0,V.jsx)(`p`,{className:`min-w-0 whitespace-pre-wrap break-words text-sm leading-6 [overflow-wrap:anywhere]`,children:t(e.text||`No text content`)}),lt=(e,t)=>(0,V.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,V.jsx)(`p`,{className:`min-w-0 break-words font-medium [overflow-wrap:anywhere]`,children:t(e.command??e.name)}),e.workdir?(0,V.jsx)(`p`,{className:`font-mono text-[var(--muted-foreground)] text-xs`,children:t(e.workdir)}):null]}),ut=(e,t)=>(0,V.jsx)(`p`,{className:`min-w-0 whitespace-pre-wrap break-words text-sm leading-6 [overflow-wrap:anywhere]`,children:t(e.summary||e.outputText||``)}),dt=e=>(0,V.jsxs)(`div`,{className:`text-[var(--muted-foreground)] text-sm`,children:[`Context window: `,e.modelContextWindow??`n/a`,` · Collaboration mode: `,e.collaborationModeKind??`n/a`]}),ft=e=>(0,V.jsxs)(`div`,{className:`text-[var(--muted-foreground)] text-sm`,children:[`Duration: `,e.durationMs??`n/a`,` ms · First token: `,e.timeToFirstTokenMs??`n/a`,` ms`]}),pt=e=>(0,V.jsx)(`pre`,{className:`overflow-x-auto text-xs leading-5`,children:JSON.stringify(e.rateLimits,null,2)}),mt=e=>(0,V.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,V.jsx)(`p`,{children:e.summary.join(` `)||`Reasoning content is not directly available.`}),e.hasEncryptedContent?(0,V.jsx)(`p`,{className:`text-[var(--muted-foreground)] text-xs`,children:`Encrypted reasoning payload captured.`}):null]}),ht=e=>(0,V.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,V.jsxs)(`p`,{children:[`Phase: `,e.phase,e.status?` · ${e.status}`:``]}),e.query?(0,V.jsx)(`p`,{className:`text-[var(--muted-foreground)]`,children:e.query}):null]}),gt=(e,t)=>{switch(e.kind){case`message`:return ct(e,t);case`tool_call`:return lt(e,t);case`tool_output`:return ut(e,t);case`task_started`:return dt(e);case`task_complete`:return ft(e);case`token_count`:return pt(e);case`reasoning`:return mt(e);case`web_search`:return ht(e)}};function _t({assistantModel:e,copied:t,event:n,isSelected:r,showRawJson:i,transform:o,onCopy:s,onSelectionChange:c}){return(0,V.jsxs)(`article`,{className:E(`min-w-0 overflow-hidden rounded-xl border p-3.5 shadow-[var(--panel-shadow)]`,r&&`ring-2 ring-[var(--accent)]/35`,nt(n)),children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-2`,children:[(0,V.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center gap-2`,children:[(0,V.jsx)(g,{"aria-label":`Select ${Z(n,e)}`,checked:r,onCheckedChange:e=>c(n,e===!0)}),(0,V.jsx)(`h3`,{className:`min-w-0 break-words font-semibold text-sm [overflow-wrap:anywhere]`,children:Z(n,e)}),n.kind===`message`&&n.phase?(0,V.jsx)(X,{variant:`outline`,children:n.phase}):null,n.kind===`message`?null:(0,V.jsx)(X,{variant:`outline`,children:n.kind.replaceAll(`_`,` `)})]}),n.timestamp?(0,V.jsx)(`p`,{className:`shrink-0 text-[var(--muted-foreground)] text-xs`,children:a(n.timestamp)}):null]}),(0,V.jsx)(`div`,{className:`mt-2.5 min-w-0`,children:gt(n,o)}),(0,V.jsx)(`div`,{className:`mt-3 flex justify-end`,children:(0,V.jsx)(L,{"aria-label":`Copy message`,className:`text-[var(--muted-foreground)] hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]`,size:`icon-xs`,variant:`ghost`,onClick:()=>s(n),children:t?(0,V.jsx)(h,{className:`text-[var(--accent)]`}):(0,V.jsx)(z,{})})}),i?(0,V.jsx)(`pre`,{className:`mt-3 overflow-x-auto rounded-lg border border-[var(--border)] bg-[var(--code-background)] p-3 text-[var(--code-foreground)] text-xs leading-5`,children:JSON.stringify(n.raw,null,2)}):null]})}function vt({assistantModel:e,events:t,projectPath:n,showCommentary:r,showExtraEvents:i,showRawJson:a,showToolCalls:o}){let{settings:s}=ee(),c=t.filter(e=>tt(e,o,i,r)),[l,u]=(0,B.useState)([]),[d,f]=(0,B.useState)(!1),[p,m]=(0,B.useState)(null),[_,v]=(0,B.useState)([]),y=(0,B.useRef)(null),b=(0,B.useRef)([]),x=c.length>40,S=e=>e.kind===`tool_call`?`${e.kind}-${e.sequence}-${e.callId??e.timestamp??e.name}`:e.kind===`tool_output`?`${e.kind}-${e.sequence}-${e.callId??e.timestamp??`output`}`:e.kind===`message`?`${e.kind}-${e.sequence}-${e.variant}-${e.timestamp??e.role}`:`${e.kind}-${e.sequence}-${e.timestamp??`event`}`,C=e=>$e(e,s,n),w=c.map(S),T=new Set(w),E=new Set(_),D=Ke({count:x?c.length:0,estimateSize:()=>160,getItemKey:e=>S(c[e])??`event-${e}`,getScrollElement:()=>y.current,measureElement:e=>e.getBoundingClientRect().height,overscan:8});(0,B.useEffect)(()=>()=>{for(let e of b.current)window.clearTimeout(e);b.current=[]},[]);let O=(e,t)=>{let n=window.setTimeout(()=>{b.current=b.current.filter(e=>e!==n),e()},t);b.current.push(n)},k=()=>{m(`Copy failed`),O(()=>{m(e=>e===`Copy failed`?null:e)},1500)},A=_.filter(e=>T.has(e)),j=c.length>0&&A.length===c.length,M=(e,t)=>{let n=S(e);v(e=>t?e.includes(n)?e:[...e,n]:e.filter(e=>e!==n))},N=e=>{v(t=>e?[...new Set([...t.filter(e=>!T.has(e)),...w])]:t.filter(e=>!T.has(e)))},P=async t=>{if(!await at(st(t,e,C))){k();return}let n=S(t);u(e=>[...new Set([...e,n])]),O(()=>{u(e=>e.filter(e=>e!==n))},1500)},F=async()=>{let t=c.filter(e=>A.includes(S(e)));if(t.length!==0){if(!await at(t.map(t=>st(t,e,C)).join(`
|
|
5
|
+
`)}},st=(e,t,n)=>`## ${Z(e,t)}\n\n${ot(e,n)}`,ct=(e,t)=>(0,V.jsx)(`p`,{className:`min-w-0 whitespace-pre-wrap break-words text-sm leading-6 [overflow-wrap:anywhere]`,children:t(e.text||`No text content`)}),lt=(e,t)=>(0,V.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,V.jsx)(`p`,{className:`min-w-0 break-words font-medium [overflow-wrap:anywhere]`,children:t(e.command??e.name)}),e.workdir?(0,V.jsx)(`p`,{className:`font-mono text-[var(--muted-foreground)] text-xs`,children:t(e.workdir)}):null]}),ut=(e,t)=>(0,V.jsx)(`p`,{className:`min-w-0 whitespace-pre-wrap break-words text-sm leading-6 [overflow-wrap:anywhere]`,children:t(e.summary||e.outputText||``)}),dt=e=>(0,V.jsxs)(`div`,{className:`text-[var(--muted-foreground)] text-sm`,children:[`Context window: `,e.modelContextWindow??`n/a`,` · Collaboration mode: `,e.collaborationModeKind??`n/a`]}),ft=e=>(0,V.jsxs)(`div`,{className:`text-[var(--muted-foreground)] text-sm`,children:[`Duration: `,e.durationMs??`n/a`,` ms · First token: `,e.timeToFirstTokenMs??`n/a`,` ms`]}),pt=e=>(0,V.jsx)(`pre`,{className:`overflow-x-auto text-xs leading-5`,children:JSON.stringify(e.rateLimits,null,2)}),mt=e=>(0,V.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,V.jsx)(`p`,{children:e.summary.join(` `)||`Reasoning content is not directly available.`}),e.hasEncryptedContent?(0,V.jsx)(`p`,{className:`text-[var(--muted-foreground)] text-xs`,children:`Encrypted reasoning payload captured.`}):null]}),ht=e=>(0,V.jsxs)(`div`,{className:`space-y-2 text-sm`,children:[(0,V.jsxs)(`p`,{children:[`Phase: `,e.phase,e.status?` · ${e.status}`:``]}),e.query?(0,V.jsx)(`p`,{className:`text-[var(--muted-foreground)]`,children:e.query}):null]}),gt=(e,t)=>{switch(e.kind){case`message`:return ct(e,t);case`tool_call`:return lt(e,t);case`tool_output`:return ut(e,t);case`task_started`:return dt(e);case`task_complete`:return ft(e);case`token_count`:return pt(e);case`reasoning`:return mt(e);case`web_search`:return ht(e)}};function _t({assistantModel:e,copied:t,event:n,isSelected:r,showRawJson:i,transform:o,onCopy:s,onSelectionChange:c}){return(0,V.jsxs)(`article`,{className:E(`min-w-0 overflow-hidden rounded-xl border p-3.5 shadow-[var(--panel-shadow)]`,r&&`ring-2 ring-[var(--accent)]/35`,nt(n)),children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-2`,children:[(0,V.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center gap-2`,children:[(0,V.jsx)(g,{"aria-label":`Select ${Z(n,e)}`,checked:r,onCheckedChange:e=>c(n,e===!0)}),(0,V.jsx)(`h3`,{className:`min-w-0 break-words font-semibold text-sm [overflow-wrap:anywhere]`,children:Z(n,e)}),n.kind===`message`&&n.phase?(0,V.jsx)(X,{variant:`outline`,children:n.phase}):null,n.kind===`message`?null:(0,V.jsx)(X,{variant:`outline`,children:n.kind.replaceAll(`_`,` `)})]}),n.timestamp?(0,V.jsx)(`p`,{className:`shrink-0 text-[var(--muted-foreground)] text-xs`,suppressHydrationWarning:!0,children:a(n.timestamp)}):null]}),(0,V.jsx)(`div`,{className:`mt-2.5 min-w-0`,children:gt(n,o)}),(0,V.jsx)(`div`,{className:`mt-3 flex justify-end`,children:(0,V.jsx)(L,{"aria-label":`Copy message`,className:`text-[var(--muted-foreground)] hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]`,size:`icon-xs`,variant:`ghost`,onClick:()=>s(n),children:t?(0,V.jsx)(h,{className:`text-[var(--accent)]`}):(0,V.jsx)(z,{})})}),i?(0,V.jsx)(`pre`,{className:`mt-3 overflow-x-auto rounded-lg border border-[var(--border)] bg-[var(--code-background)] p-3 text-[var(--code-foreground)] text-xs leading-5`,children:JSON.stringify(n.raw,null,2)}):null]})}function vt({assistantModel:e,events:t,projectPath:n,showCommentary:r,showExtraEvents:i,showRawJson:a,showToolCalls:o}){let{settings:s}=ee(),c=t.filter(e=>tt(e,o,i,r)),[l,u]=(0,B.useState)([]),[d,f]=(0,B.useState)(!1),[p,m]=(0,B.useState)(null),[_,v]=(0,B.useState)([]),y=(0,B.useRef)(null),b=(0,B.useRef)([]),x=c.length>40,S=e=>e.kind===`tool_call`?`${e.kind}-${e.sequence}-${e.callId??e.timestamp??e.name}`:e.kind===`tool_output`?`${e.kind}-${e.sequence}-${e.callId??e.timestamp??`output`}`:e.kind===`message`?`${e.kind}-${e.sequence}-${e.variant}-${e.timestamp??e.role}`:`${e.kind}-${e.sequence}-${e.timestamp??`event`}`,C=e=>$e(e,s,n),w=c.map(S),T=new Set(w),E=new Set(_),D=Ke({count:x?c.length:0,estimateSize:()=>160,getItemKey:e=>S(c[e])??`event-${e}`,getScrollElement:()=>y.current,measureElement:e=>e.getBoundingClientRect().height,overscan:8});(0,B.useEffect)(()=>()=>{for(let e of b.current)window.clearTimeout(e);b.current=[]},[]),(0,B.useEffect)(()=>{v(e=>{let t=e.filter(e=>T.has(e));return t.length===e.length?e:t})},[T]);let O=(e,t)=>{let n=window.setTimeout(()=>{b.current=b.current.filter(e=>e!==n),e()},t);b.current.push(n)},k=()=>{m(`Copy failed`),O(()=>{m(e=>e===`Copy failed`?null:e)},1500)},A=_.filter(e=>T.has(e)),j=c.length>0&&A.length===c.length,M=(e,t)=>{let n=S(e);v(e=>t?e.includes(n)?e:[...e,n]:e.filter(e=>e!==n))},N=e=>{v(t=>e?[...new Set([...t.filter(e=>!T.has(e)),...w])]:t.filter(e=>!T.has(e)))},P=async t=>{if(!await at(st(t,e,C))){k();return}let n=S(t);u(e=>[...new Set([...e,n])]),O(()=>{u(e=>e.filter(e=>e!==n))},1500)},F=async()=>{let t=c.filter(e=>A.includes(S(e)));if(t.length!==0){if(!await at(t.map(t=>st(t,e,C)).join(`
|
|
6
6
|
|
|
7
|
-
`))){k();return}f(!0),O(()=>{f(!1)},1500)}};return x?(0,V.jsxs)(`div`,{ref:y,className:`h-[70vh] overflow-auto rounded-xl border border-[var(--border)] bg-[var(--panel)] p-3`,children:[(0,V.jsxs)(`div`,{className:`sticky top-0 z-10 mb-3 flex items-center justify-between rounded-xl border border-[var(--border)] bg-[var(--panel)]/95 px-3 py-2 backdrop-blur`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(g,{"aria-label":`Select visible messages`,checked:j,onCheckedChange:e=>N(e===!0)}),(0,V.jsxs)(`span`,{className:`text-[var(--muted-foreground)] text-sm`,children:[A.length,` selected`]}),p?(0,V.jsx)(`span`,{className:`text-[var(--destructive)] text-sm`,children:p}):null]}),(0,V.jsxs)(L,{"aria-label":`Copy selected messages`,className:`hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]`,disabled:A.length===0,size:`sm`,variant:`outline`,onClick:()=>void F(),children:[d?(0,V.jsx)(h,{className:`text-[var(--accent)]`}):(0,V.jsx)(z,{}),d?`Copied`:`Copy`]})]}),(0,V.jsx)(`div`,{className:`relative w-full`,style:{height:`${D.getTotalSize()}px`},children:D.getVirtualItems().map(t=>(0,V.jsx)(`div`,{ref:D.measureElement,"data-index":t.index,className:`absolute top-0 left-0 w-full pb-3.5`,style:{transform:`translateY(${t.start}px)`},children:(0,V.jsx)(_t,{assistantModel:e,copied:l.includes(S(c[t.index])),event:c[t.index],isSelected:E.has(S(c[t.index])),showRawJson:a,transform:C,onCopy:e=>void P(e),onSelectionChange:M})},t.key))})]}):(0,V.jsxs)(`div`,{className:`space-y-3.5`,children:[(0,V.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center justify-between rounded-xl border border-[var(--border)] bg-[var(--panel)]/95 px-3 py-2 backdrop-blur`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(g,{"aria-label":`Select visible messages`,checked:j,onCheckedChange:e=>N(e===!0)}),(0,V.jsxs)(`span`,{className:`text-[var(--muted-foreground)] text-sm`,children:[A.length,` selected`]}),p?(0,V.jsx)(`span`,{className:`text-[var(--destructive)] text-sm`,children:p}):null]}),(0,V.jsxs)(L,{"aria-label":`Copy selected messages`,className:`hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]`,disabled:A.length===0,size:`sm`,variant:`outline`,onClick:()=>void F(),children:[d?(0,V.jsx)(h,{className:`text-[var(--accent)]`}):(0,V.jsx)(z,{}),d?`Copied`:`Copy`]})]}),c.map(t=>(0,V.jsx)(_t,{assistantModel:e,copied:l.includes(S(t)),event:t,isSelected:E.has(S(t)),showRawJson:a,transform:C,onCopy:e=>void P(e),onSelectionChange:M},S(t)))]})}function yt({className:e,orientation:t=`horizontal`,...n}){return(0,V.jsx)(Ce,{"data-slot":`tabs`,"data-orientation":t,orientation:t,className:E(`group/tabs flex gap-2 data-[orientation=horizontal]:flex-col`,e),...n})}var bt=j(`group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:min-h-11 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none`,{defaultVariants:{variant:`default`},variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`}}});function xt({className:e,variant:t=`default`,...n}){return(0,V.jsx)(we,{"data-slot":`tabs-list`,"data-variant":t,className:E(bt({variant:t}),e),...n})}function Q({className:e,...t}){return(0,V.jsx)(Te,{"data-slot":`tabs-trigger`,className:E(`relative inline-flex h-auto min-h-9 min-w-0 flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-md border border-transparent px-3 py-2 font-medium text-foreground/60 text-sm transition-all hover:text-foreground focus-visible:border-ring focus-visible:outline-1 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent`,`data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground`,`after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=horizontal]/tabs:after:bottom-[-3px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,e),...t})}function $({className:e,...t}){return(0,V.jsx)(Ee,{"data-slot":`tabs-content`,className:E(`flex-1 outline-none`,e),...t})}var St=e=>[{label:`Thread ID`,value:(0,V.jsx)(`span`,{"data-mono":`true`,children:e.thread.id})},{label:`Project`,value:e.project},{label:`CWD`,value:(0,V.jsx)(`span`,{"data-mono":`true`,children:e.thread.cwd})},{label:`Created`,value:a(e.thread.created_at_ms??e.thread.created_at*1e3)},{label:`Updated`,value:a(e.thread.updated_at_ms??e.thread.updated_at*1e3)},{label:`Session started`,value:a(e.transcript?.sessionMeta.timestamp??null)},{label:`Rollout size`,value:i(e.rollout.fileSizeBytes)},{label:`Archived`,value:s(!!e.thread.archived)},{label:`Archived at`,value:a(e.thread.archived_at?e.thread.archived_at*1e3:null)}],Ct=e=>[{label:`Source`,value:e.thread.source},{label:`Originator`,value:e.transcript?.sessionMeta.originator??`n/a`},{label:`Model provider`,value:e.thread.model_provider},{label:`Reasoning effort`,value:e.thread.reasoning_effort??`n/a`},{label:`CLI version`,value:e.thread.cli_version},{label:`Approval mode`,value:e.thread.approval_mode},{label:`Memory mode`,value:e.thread.memory_mode},{label:`Has user event`,value:s(!!e.thread.has_user_event)}],wt=e=>[{label:`Git branch`,value:e.thread.git_branch??`n/a`},{label:`Git SHA`,value:e.thread.git_sha??`n/a`},{label:`Git remote`,value:e.thread.git_origin_url??`n/a`},{label:`Agent nickname`,value:e.thread.agent_nickname??`n/a`},{label:`Agent role`,value:e.thread.agent_role??`n/a`},{label:`Agent path`,value:e.thread.agent_path??`n/a`}],Tt=e=>{let t=e.relations.parentThreadId?(0,V.jsx)(ne,{className:`text-[var(--accent)]`,params:{threadId:e.relations.parentThreadId},to:`/threads/$threadId`,children:e.relations.parentThreadId}):`n/a`,n=e.relations.childEdges.length>0?(0,V.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.relations.childEdges.map(e=>(0,V.jsx)(ne,{className:`rounded-full border border-[var(--border)] px-3 py-1 text-[var(--accent)] text-xs`,params:{threadId:e.child_thread_id},to:`/threads/$threadId`,children:e.child_thread_id},e.child_thread_id))}):`n/a`;return[{label:`Parent thread`,value:t},{label:`Child threads`,value:n},{label:`First user message`,value:e.thread.first_user_message||`n/a`},{label:`Preview`,value:e.thread.preview||`n/a`}]},Et=e=>e.transcript?[{label:`Event kinds`,value:n([...new Set(e.transcript.events.map(e=>e.kind))])},{label:`Stats scope`,value:e.transcript.statsArePartial?`Preview only`:`Full transcript`},{label:`Tool calls`,value:String(e.transcript.stats.toolCallCount)},{label:`Exec calls`,value:String(e.transcript.stats.execCommandCount)},{label:`Web search events`,value:String(e.transcript.stats.webSearchEventCount)},{label:`Assistant messages`,value:String(e.transcript.stats.assistantMessageCount)},{label:`Commentary updates`,value:String(e.transcript.stats.commentaryCount)}]:e.transcriptState===`missing`?[{label:`Transcript load`,value:`Transcript file missing from disk`},{label:`Rollout path`,value:e.thread.rollout_path},{label:`Preview mode`,value:`Export and transcript browsing are unavailable until the file exists again.`}]:[{label:`Transcript load`,value:`Deferred for oversized rollout`},{label:`Rollout size`,value:i(e.rollout.fileSizeBytes)},{label:`Preview mode`,value:`Load the transcript manually to inspect it.`}];function Dt({rawJsonDisabled:e=!1,showCommentary:t,showExtraEvents:n,showRawJson:r,showToolCalls:i,onShowCommentaryChange:a,onShowExtraEventsChange:o,onShowRawJsonChange:s,onShowToolCallsChange:c}){return(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-4 rounded-xl border border-[var(--border)] bg-[var(--panel)] px-4 py-3 shadow-[var(--panel-shadow)]`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(g,{checked:i,onCheckedChange:e=>c(e===!0)}),(0,V.jsx)(`span`,{children:`Show tool calls`})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(g,{checked:t,onCheckedChange:e=>a(e===!0)}),(0,V.jsx)(`span`,{children:`Show commentary`})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(g,{checked:n,onCheckedChange:e=>o(e===!0)}),(0,V.jsx)(`span`,{children:`Show extra events`})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(g,{checked:r,disabled:e,onCheckedChange:e=>s(e===!0)}),(0,V.jsx)(`span`,{children:`Raw JSON`})]})]})}function Ot({snapshot:e}){return(0,V.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[1.1fr_0.9fr]`,children:[(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(G,{items:St(e),title:`Thread`}),(0,V.jsx)(G,{items:Ct(e),title:`Runtime`}),(0,V.jsx)(G,{items:wt(e),title:`Git and agent`})]}),(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(G,{items:Tt(e),title:`Relations and summary`}),(0,V.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,V.jsx)(`h3`,{className:`font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]`,children:`Available tools`}),(0,V.jsx)(`div`,{className:`mt-4 space-y-3`,children:e.availableTools.map(e=>(0,V.jsxs)(`div`,{className:`rounded-xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3.5`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(`p`,{className:`font-medium font-mono text-sm`,children:e.name}),e.namespace?(0,V.jsx)(X,{variant:`outline`,children:e.namespace}):null]}),(0,V.jsx)(`p`,{className:`mt-1.5 text-[var(--muted-foreground)] text-sm`,children:e.description||`No description.`})]},`${e.name}-${e.namespace??`global`}`))})]}),(0,V.jsx)(G,{items:Et(e),title:`Transcript stats`})]})]})}function kt({snapshot:e}){return e.transcript?(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(W,{title:`Session meta`,value:e.transcript.sessionMeta}),(0,V.jsx)(W,{title:`Turn contexts`,value:e.transcript.turnContexts}),(0,V.jsx)(W,{title:`Sandbox policy`,value:e.thread.sandbox_policy})]}):(0,V.jsx)(`div`,{className:`rounded-xl border border-[var(--border)] bg-[var(--panel)] px-5 py-4 text-sm`,children:e.transcriptState===`missing`?`The rollout JSONL file is missing from disk, so raw transcript payloads are unavailable.`:`Raw transcript payloads are deferred for oversized rollouts. Use Export if you only need the full thread contents, or load the transcript manually from the Transcript tab.`})}function At({fileSizeBytes:e,missing:t,pending:n,onLoad:r}){return(0,V.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,V.jsx)(`h3`,{className:`font-semibold text-base`,children:t?`Transcript file missing`:`This is a very big thread`}),(0,V.jsx)(`p`,{className:`mt-2 text-[var(--muted-foreground)] text-sm leading-6`,children:t?`The rollout JSONL referenced by this thread is no longer present on disk. Export may still work if the file is restored, but transcript browsing is unavailable right now.`:`Spiracha skipped loading the transcript automatically because the rollout file is ${i(e)}. Export still works immediately. If you need to inspect the thread here, load a bounded preview manually.`}),t?null:(0,V.jsx)(`div`,{className:`mt-4`,children:(0,V.jsx)(L,{disabled:n,variant:`outline`,onClick:r,children:n?`Loading preview...`:`Load transcript preview`})})]})}function jt(){let e=se(),n=T(),r=ie.useParams(),i=t(N(r.threadId)).data,{settings:s}=ee(),[c,u]=(0,B.useState)(!i.rollout.shouldDeferTranscriptLoad),[d,p]=(0,B.useState)(!1),[h,g]=(0,B.useState)(!1),[x,S]=(0,B.useState)(!1),[C,w]=(0,B.useState)(!1),[E,D]=(0,B.useState)(!1),[O,k]=(0,B.useState)(!1),A=le({...te(r.threadId),enabled:c&&i.transcript===null}),j=i.transcript??A.data??null,M={...i,transcript:j},F=f({mutationFn:async e=>{console.info(`[spiracha:export-ui] request`,{outputFormat:e.outputFormat,project:i.project,selectedThreadCount:1,selectedThreadIds:[i.thread.id]});let t=await ae({data:{...e,...s,threadId:i.thread.id}});if(console.info(`[spiracha:export-ui] response`,{downloadUrl:t.mode===`download_url`?t.downloadUrl:null,fileName:t.fileName,mode:t.mode,project:i.project,selectedThreadCount:1}),t.mode===`download`){b(t.fileName,t.content,t.mimeType);return}await v(t.fileName,t.downloadUrl)},onError:e=>{console.error(`[spiracha:export-ui] failed`,{error:e instanceof Error?e.message:String(e),project:i.project,selectedThreadCount:1,selectedThreadIds:[i.thread.id]})},onSuccess:async()=>{D(!1)}}),I=f({mutationFn:e=>P({data:{deleteSessionFiles:e.deleteSessionFiles,threadId:i.thread.id}}),onSuccess:async()=>{await Promise.all([n.invalidateQueries({queryKey:[`analytics`]}),n.invalidateQueries({queryKey:[`dashboard`]}),n.invalidateQueries({queryKey:[`project-threads`,i.project]}),n.invalidateQueries({queryKey:[`projects`]})]),e({params:{project:i.project},to:`/projects/$project`})}});return(0,V.jsxs)(`div`,{className:`space-y-5`,children:[(0,V.jsx)(ce,{actions:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(L,{className:`rounded-full`,variant:`outline`,onClick:()=>D(!0),children:[(0,V.jsx)(_,{className:`mr-2 size-4`}),`Export`]}),(0,V.jsxs)(L,{className:`rounded-full border-[var(--destructive)]/20 text-[var(--destructive)]`,variant:`outline`,onClick:()=>k(!0),children:[(0,V.jsx)(l,{className:`mr-2 size-4`}),`Delete`]})]}),eyebrow:i.project,subtitle:i.thread.preview,title:i.thread.title}),(0,V.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,V.jsx)(R,{label:`Model`,value:i.thread.model??`unknown`}),(0,V.jsx)(R,{label:`Tokens`,value:o(i.thread.tokens_used)}),(0,V.jsx)(R,{label:`Updated`,value:a(i.thread.updated_at_ms??i.thread.updated_at*1e3)}),(0,V.jsx)(R,{label:`Thread source`,value:i.thread.thread_source??j?.sessionMeta.threadSource??`n/a`})]}),(0,V.jsxs)(yt,{className:`space-y-4`,defaultValue:`transcript`,children:[(0,V.jsxs)(xt,{className:`grid w-fit min-w-[24rem] grid-cols-3 rounded-full border border-[var(--border)] bg-[var(--panel)] p-1`,children:[(0,V.jsx)(Q,{className:`rounded-full px-5 text-sm`,value:`transcript`,children:`Transcript`}),(0,V.jsx)(Q,{className:`rounded-full px-5 text-sm`,value:`metadata`,children:`Metadata`}),(0,V.jsx)(Q,{className:`rounded-full px-5 text-sm`,value:`raw`,children:`Raw`})]}),(0,V.jsxs)($,{className:`space-y-3`,value:`transcript`,children:[(0,V.jsx)(Dt,{rawJsonDisabled:!j?.rawIncluded,showCommentary:h,showExtraEvents:x,showRawJson:C,showToolCalls:d,onShowCommentaryChange:g,onShowExtraEventsChange:S,onShowRawJsonChange:w,onShowToolCallsChange:p}),j?(0,V.jsx)(vt,{assistantModel:i.thread.model,events:j.events,projectPath:i.thread.cwd,showCommentary:h,showExtraEvents:x,showRawJson:C&&j.rawIncluded,showToolCalls:d}):(0,V.jsx)(At,{fileSizeBytes:i.rollout.fileSizeBytes,missing:i.transcriptState===`missing`,pending:A.isFetching,onLoad:()=>u(!0)}),A.isError?(0,V.jsxs)(`p`,{className:`text-[var(--destructive)] text-sm`,children:[`Failed to load transcript preview:`,` `,A.error instanceof Error?A.error.message:`Unknown error`]}):null]}),(0,V.jsx)($,{value:`metadata`,children:(0,V.jsx)(Ot,{snapshot:M})}),(0,V.jsx)($,{value:`raw`,children:(0,V.jsx)(kt,{snapshot:M})})]}),(0,V.jsx)(m,{confirmLabel:I.isPending?`Deleting...`:`Delete thread`,description:`Delete this thread from the Codex database. Enable Delete Session files if you also want to remove the rollout JSONL from disk.`,open:O,showDeleteSessionFilesOption:!0,title:`Delete this thread from Codex DB?`,onConfirm:({deleteSessionFiles:e})=>I.mutate({deleteSessionFiles:e}),onOpenChange:k}),(0,V.jsx)(y,{open:E,pending:F.isPending,onExport:e=>F.mutate(e),onOpenChange:D})]})}export{jt as component};
|
|
7
|
+
`))){k();return}f(!0),O(()=>{f(!1)},1500)}};return x?(0,V.jsxs)(`div`,{ref:y,className:`h-[70vh] overflow-auto rounded-xl border border-[var(--border)] bg-[var(--panel)] p-3`,children:[(0,V.jsxs)(`div`,{className:`sticky top-0 z-10 mb-3 flex items-center justify-between rounded-xl border border-[var(--border)] bg-[var(--panel)]/95 px-3 py-2 backdrop-blur`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(g,{"aria-label":`Select visible messages`,checked:j,onCheckedChange:e=>N(e===!0)}),(0,V.jsxs)(`span`,{className:`text-[var(--muted-foreground)] text-sm`,children:[A.length,` selected`]}),p?(0,V.jsx)(`span`,{className:`text-[var(--destructive)] text-sm`,children:p}):null]}),(0,V.jsxs)(L,{"aria-label":`Copy selected messages`,className:`hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]`,disabled:A.length===0,size:`sm`,variant:`outline`,onClick:()=>void F(),children:[d?(0,V.jsx)(h,{className:`text-[var(--accent)]`}):(0,V.jsx)(z,{}),d?`Copied`:`Copy`]})]}),(0,V.jsx)(`div`,{className:`relative w-full`,style:{height:`${D.getTotalSize()}px`},children:D.getVirtualItems().map(t=>(0,V.jsx)(`div`,{ref:D.measureElement,"data-index":t.index,className:`absolute top-0 left-0 w-full pb-3.5`,style:{transform:`translateY(${t.start}px)`},children:(0,V.jsx)(_t,{assistantModel:e,copied:l.includes(S(c[t.index])),event:c[t.index],isSelected:E.has(S(c[t.index])),showRawJson:a,transform:C,onCopy:e=>void P(e),onSelectionChange:M})},t.key))})]}):(0,V.jsxs)(`div`,{className:`space-y-3.5`,children:[(0,V.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center justify-between rounded-xl border border-[var(--border)] bg-[var(--panel)]/95 px-3 py-2 backdrop-blur`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(g,{"aria-label":`Select visible messages`,checked:j,onCheckedChange:e=>N(e===!0)}),(0,V.jsxs)(`span`,{className:`text-[var(--muted-foreground)] text-sm`,children:[A.length,` selected`]}),p?(0,V.jsx)(`span`,{className:`text-[var(--destructive)] text-sm`,children:p}):null]}),(0,V.jsxs)(L,{"aria-label":`Copy selected messages`,className:`hover:bg-[var(--panel-secondary)] hover:text-[var(--foreground)]`,disabled:A.length===0,size:`sm`,variant:`outline`,onClick:()=>void F(),children:[d?(0,V.jsx)(h,{className:`text-[var(--accent)]`}):(0,V.jsx)(z,{}),d?`Copied`:`Copy`]})]}),c.map(t=>(0,V.jsx)(_t,{assistantModel:e,copied:l.includes(S(t)),event:t,isSelected:E.has(S(t)),showRawJson:a,transform:C,onCopy:e=>void P(e),onSelectionChange:M},S(t)))]})}function yt({className:e,orientation:t=`horizontal`,...n}){return(0,V.jsx)(Ce,{"data-slot":`tabs`,"data-orientation":t,orientation:t,className:E(`group/tabs flex gap-2 data-[orientation=horizontal]:flex-col`,e),...n})}var bt=j(`group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-[orientation=horizontal]/tabs:min-h-11 group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col data-[variant=line]:rounded-none`,{defaultVariants:{variant:`default`},variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`}}});function xt({className:e,variant:t=`default`,...n}){return(0,V.jsx)(we,{"data-slot":`tabs-list`,"data-variant":t,className:E(bt({variant:t}),e),...n})}function Q({className:e,...t}){return(0,V.jsx)(Te,{"data-slot":`tabs-trigger`,className:E(`relative inline-flex h-auto min-h-9 min-w-0 flex-1 items-center justify-center gap-1.5 whitespace-nowrap rounded-md border border-transparent px-3 py-2 font-medium text-foreground/60 text-sm transition-all hover:text-foreground focus-visible:border-ring focus-visible:outline-1 focus-visible:outline-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none dark:text-muted-foreground dark:hover:text-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:border-transparent dark:group-data-[variant=line]/tabs-list:data-[state=active]:bg-transparent`,`data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 dark:data-[state=active]:text-foreground`,`after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=horizontal]/tabs:after:bottom-[-3px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-[state=active]:after:opacity-100`,e),...t})}function $({className:e,...t}){return(0,V.jsx)(Ee,{"data-slot":`tabs-content`,className:E(`flex-1 outline-none`,e),...t})}var St=e=>[{label:`Thread ID`,value:(0,V.jsx)(`span`,{"data-mono":`true`,children:e.thread.id})},{label:`Project`,value:e.project},{label:`CWD`,value:(0,V.jsx)(`span`,{"data-mono":`true`,children:e.thread.cwd})},{label:`Created`,value:(0,V.jsx)(`span`,{suppressHydrationWarning:!0,children:a(e.thread.created_at_ms??e.thread.created_at*1e3)})},{label:`Updated`,value:(0,V.jsx)(`span`,{suppressHydrationWarning:!0,children:a(e.thread.updated_at_ms??e.thread.updated_at*1e3)})},{label:`Session started`,value:(0,V.jsx)(`span`,{suppressHydrationWarning:!0,children:a(e.transcript?.sessionMeta.timestamp??null)})},{label:`Rollout size`,value:i(e.rollout.fileSizeBytes)},{label:`Archived`,value:s(!!e.thread.archived)},{label:`Archived at`,value:(0,V.jsx)(`span`,{suppressHydrationWarning:!0,children:a(e.thread.archived_at?e.thread.archived_at*1e3:null)})}],Ct=e=>[{label:`Source`,value:e.thread.source},{label:`Originator`,value:e.transcript?.sessionMeta.originator??`n/a`},{label:`Model provider`,value:e.thread.model_provider},{label:`Reasoning effort`,value:e.thread.reasoning_effort??`n/a`},{label:`CLI version`,value:e.thread.cli_version},{label:`Approval mode`,value:e.thread.approval_mode},{label:`Memory mode`,value:e.thread.memory_mode},{label:`Has user event`,value:s(!!e.thread.has_user_event)}],wt=e=>[{label:`Git branch`,value:e.thread.git_branch??`n/a`},{label:`Git SHA`,value:e.thread.git_sha??`n/a`},{label:`Git remote`,value:e.thread.git_origin_url??`n/a`},{label:`Agent nickname`,value:e.thread.agent_nickname??`n/a`},{label:`Agent role`,value:e.thread.agent_role??`n/a`},{label:`Agent path`,value:e.thread.agent_path??`n/a`}],Tt=e=>{let t=e.relations.parentThreadId?(0,V.jsx)(ne,{className:`text-[var(--accent)]`,params:{threadId:e.relations.parentThreadId},to:`/threads/$threadId`,children:e.relations.parentThreadId}):`n/a`,n=e.relations.childEdges.length>0?(0,V.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.relations.childEdges.map(e=>(0,V.jsx)(ne,{className:`rounded-full border border-[var(--border)] px-3 py-1 text-[var(--accent)] text-xs`,params:{threadId:e.child_thread_id},to:`/threads/$threadId`,children:e.child_thread_id},e.child_thread_id))}):`n/a`;return[{label:`Parent thread`,value:t},{label:`Child threads`,value:n},{label:`First user message`,value:e.thread.first_user_message||`n/a`},{label:`Preview`,value:e.thread.preview||`n/a`}]},Et=e=>e.transcript?[{label:`Event kinds`,value:n([...new Set(e.transcript.events.map(e=>e.kind))])},{label:`Stats scope`,value:e.transcript.statsArePartial?`Preview only`:`Full transcript`},{label:`Tool calls`,value:String(e.transcript.stats.toolCallCount)},{label:`Exec calls`,value:String(e.transcript.stats.execCommandCount)},{label:`Web search events`,value:String(e.transcript.stats.webSearchEventCount)},{label:`Assistant messages`,value:String(e.transcript.stats.assistantMessageCount)},{label:`Commentary updates`,value:String(e.transcript.stats.commentaryCount)}]:e.transcriptState===`missing`?[{label:`Transcript load`,value:`Transcript file missing from disk`},{label:`Rollout path`,value:e.thread.rollout_path},{label:`Preview mode`,value:`Export and transcript browsing are unavailable until the file exists again.`}]:[{label:`Transcript load`,value:`Deferred for oversized rollout`},{label:`Rollout size`,value:i(e.rollout.fileSizeBytes)},{label:`Preview mode`,value:`Load the transcript manually to inspect it.`}];function Dt({rawJsonDisabled:e=!1,showCommentary:t,showExtraEvents:n,showRawJson:r,showToolCalls:i,onShowCommentaryChange:a,onShowExtraEventsChange:o,onShowRawJsonChange:s,onShowToolCallsChange:c}){return(0,V.jsxs)(`div`,{className:`flex flex-wrap gap-4 rounded-xl border border-[var(--border)] bg-[var(--panel)] px-4 py-3 shadow-[var(--panel-shadow)]`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(g,{checked:i,onCheckedChange:e=>c(e===!0)}),(0,V.jsx)(`span`,{children:`Show tool calls`})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(g,{checked:t,onCheckedChange:e=>a(e===!0)}),(0,V.jsx)(`span`,{children:`Show commentary`})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(g,{checked:n,onCheckedChange:e=>o(e===!0)}),(0,V.jsx)(`span`,{children:`Show extra events`})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(g,{checked:r,disabled:e,onCheckedChange:e=>s(e===!0)}),(0,V.jsx)(`span`,{children:`Raw JSON`})]})]})}function Ot({snapshot:e}){return(0,V.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[1.1fr_0.9fr]`,children:[(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(G,{items:St(e),title:`Thread`}),(0,V.jsx)(G,{items:Ct(e),title:`Runtime`}),(0,V.jsx)(G,{items:wt(e),title:`Git and agent`})]}),(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(G,{items:Tt(e),title:`Relations and summary`}),(0,V.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,V.jsx)(`h3`,{className:`font-semibold text-[var(--muted-foreground)] text-sm uppercase tracking-[0.18em]`,children:`Available tools`}),(0,V.jsx)(`div`,{className:`mt-4 space-y-3`,children:e.availableTools.map(e=>(0,V.jsxs)(`div`,{className:`rounded-xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3.5`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,V.jsx)(`p`,{className:`font-medium font-mono text-sm`,children:e.name}),e.namespace?(0,V.jsx)(X,{variant:`outline`,children:e.namespace}):null]}),(0,V.jsx)(`p`,{className:`mt-1.5 text-[var(--muted-foreground)] text-sm`,children:e.description||`No description.`})]},`${e.name}-${e.namespace??`global`}`))})]}),(0,V.jsx)(G,{items:Et(e),title:`Transcript stats`})]})]})}function kt({snapshot:e}){return e.transcript?(0,V.jsxs)(`div`,{className:`space-y-4`,children:[(0,V.jsx)(W,{title:`Session meta`,value:e.transcript.sessionMeta}),(0,V.jsx)(W,{title:`Turn contexts`,value:e.transcript.turnContexts}),(0,V.jsx)(W,{title:`Sandbox policy`,value:e.thread.sandbox_policy})]}):(0,V.jsx)(`div`,{className:`rounded-xl border border-[var(--border)] bg-[var(--panel)] px-5 py-4 text-sm`,children:e.transcriptState===`missing`?`The rollout JSONL file is missing from disk, so raw transcript payloads are unavailable.`:`Raw transcript payloads are deferred for oversized rollouts. Use Export if you only need the full thread contents, or load the transcript manually from the Transcript tab.`})}function At({fileSizeBytes:e,missing:t,pending:n,onLoad:r}){return(0,V.jsxs)(`section`,{className:`rounded-[1.6rem] border border-[var(--border)] bg-[var(--panel)] p-5 shadow-[var(--panel-shadow)]`,children:[(0,V.jsx)(`h3`,{className:`font-semibold text-base`,children:t?`Transcript file missing`:`This is a very big thread`}),(0,V.jsx)(`p`,{className:`mt-2 text-[var(--muted-foreground)] text-sm leading-6`,children:t?`The rollout JSONL referenced by this thread is no longer present on disk. Export may still work if the file is restored, but transcript browsing is unavailable right now.`:`Spiracha skipped loading the transcript automatically because the rollout file is ${i(e)}. Export still works immediately. If you need to inspect the thread here, load a bounded preview manually.`}),t?null:(0,V.jsx)(`div`,{className:`mt-4`,children:(0,V.jsx)(L,{disabled:n,variant:`outline`,onClick:r,children:n?`Loading preview...`:`Load transcript preview`})})]})}function jt(){let e=se(),n=T(),r=ie.useParams(),i=t(N(r.threadId)).data,{settings:s}=ee(),[c,u]=(0,B.useState)(!i.rollout.shouldDeferTranscriptLoad),[d,p]=(0,B.useState)(!1),[h,g]=(0,B.useState)(!1),[x,S]=(0,B.useState)(!1),[C,w]=(0,B.useState)(!1),[E,D]=(0,B.useState)(!1),[O,k]=(0,B.useState)(!1),A=le({...te(r.threadId),enabled:c&&i.transcript===null}),j=i.transcript??A.data??null,M={...i,transcript:j},F=f({mutationFn:async e=>{console.info(`[spiracha:export-ui] request`,{outputFormat:e.outputFormat,project:i.project,selectedThreadCount:1,selectedThreadIds:[i.thread.id]});let t=await ae({data:{...e,...s,threadId:i.thread.id}});if(console.info(`[spiracha:export-ui] response`,{downloadUrl:t.mode===`download_url`?t.downloadUrl:null,fileName:t.fileName,mode:t.mode,project:i.project,selectedThreadCount:1}),t.mode===`download`){b(t.fileName,t.content,t.mimeType);return}await v(t.fileName,t.downloadUrl)},onError:e=>{console.error(`[spiracha:export-ui] failed`,{error:e instanceof Error?e.message:String(e),project:i.project,selectedThreadCount:1,selectedThreadIds:[i.thread.id]})},onSuccess:async()=>{D(!1)}}),I=f({mutationFn:e=>P({data:{deleteSessionFiles:e.deleteSessionFiles,threadId:i.thread.id}}),onSuccess:async()=>{await Promise.all([n.invalidateQueries({queryKey:[`analytics`]}),n.invalidateQueries({queryKey:[`dashboard`]}),n.invalidateQueries({queryKey:[`project-threads`,i.project]}),n.invalidateQueries({queryKey:[`projects`]})]),e({params:{project:i.project},to:`/projects/$project`})}});return(0,V.jsxs)(`div`,{className:`space-y-5`,children:[(0,V.jsx)(ce,{actions:(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(L,{className:`rounded-full`,variant:`outline`,onClick:()=>D(!0),children:[(0,V.jsx)(_,{className:`mr-2 size-4`}),`Export`]}),(0,V.jsxs)(L,{className:`rounded-full border-[var(--destructive)]/20 text-[var(--destructive)]`,variant:`outline`,onClick:()=>k(!0),children:[(0,V.jsx)(l,{className:`mr-2 size-4`}),`Delete`]})]}),eyebrow:i.project,subtitle:i.thread.preview,title:i.thread.title}),(0,V.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2 xl:grid-cols-4`,children:[(0,V.jsx)(R,{label:`Model`,value:i.thread.model??`unknown`}),(0,V.jsx)(R,{label:`Tokens`,value:o(i.thread.tokens_used)}),(0,V.jsx)(R,{label:`Updated`,value:(0,V.jsx)(`span`,{suppressHydrationWarning:!0,children:a(i.thread.updated_at_ms??i.thread.updated_at*1e3)})}),(0,V.jsx)(R,{label:`Thread source`,value:i.thread.thread_source??j?.sessionMeta.threadSource??`n/a`})]}),(0,V.jsxs)(yt,{className:`space-y-4`,defaultValue:`transcript`,children:[(0,V.jsxs)(xt,{className:`grid w-fit min-w-[24rem] grid-cols-3 rounded-full border border-[var(--border)] bg-[var(--panel)] p-1`,children:[(0,V.jsx)(Q,{className:`rounded-full px-5 text-sm`,value:`transcript`,children:`Transcript`}),(0,V.jsx)(Q,{className:`rounded-full px-5 text-sm`,value:`metadata`,children:`Metadata`}),(0,V.jsx)(Q,{className:`rounded-full px-5 text-sm`,value:`raw`,children:`Raw`})]}),(0,V.jsxs)($,{className:`space-y-3`,value:`transcript`,children:[(0,V.jsx)(Dt,{rawJsonDisabled:!j?.rawIncluded,showCommentary:h,showExtraEvents:x,showRawJson:C,showToolCalls:d,onShowCommentaryChange:g,onShowExtraEventsChange:S,onShowRawJsonChange:w,onShowToolCallsChange:p}),j?(0,V.jsx)(vt,{assistantModel:i.thread.model,events:j.events,projectPath:i.thread.cwd,showCommentary:h,showExtraEvents:x,showRawJson:C&&j.rawIncluded,showToolCalls:d}):(0,V.jsx)(At,{fileSizeBytes:i.rollout.fileSizeBytes,missing:i.transcriptState===`missing`,pending:A.isFetching,onLoad:()=>u(!0)}),A.isError?(0,V.jsxs)(`p`,{className:`text-[var(--destructive)] text-sm`,children:[`Failed to load transcript preview:`,` `,A.error instanceof Error?A.error.message:`Unknown error`]}):null]}),(0,V.jsx)($,{value:`metadata`,children:(0,V.jsx)(Ot,{snapshot:M})}),(0,V.jsx)($,{value:`raw`,children:(0,V.jsx)(kt,{snapshot:M})})]}),(0,V.jsx)(m,{confirmLabel:I.isPending?`Deleting...`:`Delete thread`,description:`Delete this thread from the Codex database. Enable Delete Session files if you also want to remove the rollout JSONL from disk.`,open:O,showDeleteSessionFilesOption:!0,title:`Delete this thread from Codex DB?`,onConfirm:({deleteSessionFiles:e})=>I.mutate({deleteSessionFiles:e}),onOpenChange:k}),(0,V.jsx)(y,{open:E,pending:F.isPending,onExport:e=>F.mutate(e),onOpenChange:D})]})}export{jt as component};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
//#region \0tanstack-start-manifest:v
|
|
2
|
+
var tsrStartManifest = () => ({
|
|
3
|
+
routes: {
|
|
4
|
+
__root__: {
|
|
5
|
+
filePath: "/Users/rhaq/workspace/spiracha/apps/ui/src/routes/__root.tsx",
|
|
6
|
+
children: [
|
|
7
|
+
"/",
|
|
8
|
+
"/$threadId",
|
|
9
|
+
"/analytics",
|
|
10
|
+
"/settings",
|
|
11
|
+
"/projects/$project",
|
|
12
|
+
"/threads/$threadId",
|
|
13
|
+
"/projects/"
|
|
14
|
+
],
|
|
15
|
+
preloads: ["/assets/index-DdJ7ahIt.js"]
|
|
16
|
+
},
|
|
17
|
+
"/": {
|
|
18
|
+
filePath: "/Users/rhaq/workspace/spiracha/apps/ui/src/routes/index.tsx",
|
|
19
|
+
children: void 0,
|
|
20
|
+
preloads: [
|
|
21
|
+
"/assets/routes-Gr2Wwh83.js",
|
|
22
|
+
"/assets/metric-card-9jwBF7rG.js",
|
|
23
|
+
"/assets/page-header-Dr_h1CVv.js",
|
|
24
|
+
"/assets/formatters-C12LmYaa.js"
|
|
25
|
+
]
|
|
26
|
+
},
|
|
27
|
+
"/$threadId": {
|
|
28
|
+
filePath: "/Users/rhaq/workspace/spiracha/apps/ui/src/routes/$threadId.tsx",
|
|
29
|
+
children: void 0,
|
|
30
|
+
preloads: ["/assets/_threadId-CAIeH5mq.js"]
|
|
31
|
+
},
|
|
32
|
+
"/analytics": {
|
|
33
|
+
filePath: "/Users/rhaq/workspace/spiracha/apps/ui/src/routes/analytics.tsx",
|
|
34
|
+
children: void 0,
|
|
35
|
+
preloads: [
|
|
36
|
+
"/assets/analytics-CqWZmyV6.js",
|
|
37
|
+
"/assets/data-table-DnPYMPCD.js",
|
|
38
|
+
"/assets/metric-card-9jwBF7rG.js",
|
|
39
|
+
"/assets/page-header-Dr_h1CVv.js",
|
|
40
|
+
"/assets/select-CFim44gT.js",
|
|
41
|
+
"/assets/formatters-C12LmYaa.js"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
"/settings": {
|
|
45
|
+
filePath: "/Users/rhaq/workspace/spiracha/apps/ui/src/routes/settings.tsx",
|
|
46
|
+
children: void 0,
|
|
47
|
+
preloads: [
|
|
48
|
+
"/assets/settings-DqhyDxo2.js",
|
|
49
|
+
"/assets/page-header-Dr_h1CVv.js",
|
|
50
|
+
"/assets/checkbox-DXM4lkJq.js"
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
"/projects/$project": {
|
|
54
|
+
filePath: "/Users/rhaq/workspace/spiracha/apps/ui/src/routes/projects.$project.tsx",
|
|
55
|
+
children: void 0,
|
|
56
|
+
preloads: [
|
|
57
|
+
"/assets/projects._project-uyNGnpjH.js",
|
|
58
|
+
"/assets/data-table-DnPYMPCD.js",
|
|
59
|
+
"/assets/delete-confirm-dialog-CcZaRX33.js",
|
|
60
|
+
"/assets/download-DOwxk-cG.js",
|
|
61
|
+
"/assets/page-header-Dr_h1CVv.js",
|
|
62
|
+
"/assets/input-CEsI7EpI.js",
|
|
63
|
+
"/assets/formatters-C12LmYaa.js",
|
|
64
|
+
"/assets/projects._project-zoM8d2nH.js"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"/threads/$threadId": {
|
|
68
|
+
filePath: "/Users/rhaq/workspace/spiracha/apps/ui/src/routes/threads.$threadId.tsx",
|
|
69
|
+
children: void 0,
|
|
70
|
+
preloads: [
|
|
71
|
+
"/assets/threads._threadId-DT75NiBa.js",
|
|
72
|
+
"/assets/threads._threadId-Df5VXIuZ.js",
|
|
73
|
+
"/assets/delete-confirm-dialog-CcZaRX33.js",
|
|
74
|
+
"/assets/download-DOwxk-cG.js",
|
|
75
|
+
"/assets/metric-card-9jwBF7rG.js",
|
|
76
|
+
"/assets/page-header-Dr_h1CVv.js",
|
|
77
|
+
"/assets/checkbox-DXM4lkJq.js",
|
|
78
|
+
"/assets/formatters-C12LmYaa.js",
|
|
79
|
+
"/assets/es2015-Bm0kEzx2.js"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"/projects/": {
|
|
83
|
+
filePath: "/Users/rhaq/workspace/spiracha/apps/ui/src/routes/projects.index.tsx",
|
|
84
|
+
children: void 0,
|
|
85
|
+
preloads: [
|
|
86
|
+
"/assets/projects.index-D1CWVN-O.js",
|
|
87
|
+
"/assets/data-table-DnPYMPCD.js",
|
|
88
|
+
"/assets/delete-confirm-dialog-CcZaRX33.js",
|
|
89
|
+
"/assets/page-header-Dr_h1CVv.js",
|
|
90
|
+
"/assets/input-CEsI7EpI.js",
|
|
91
|
+
"/assets/formatters-C12LmYaa.js",
|
|
92
|
+
"/assets/projects.index-DukMuny6.js"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
clientEntry: "/assets/index-DdJ7ahIt.js"
|
|
97
|
+
});
|
|
98
|
+
//#endregion
|
|
99
|
+
export { tsrStartManifest };
|
|
@@ -3,7 +3,7 @@ import { t as DataTable } from "./data-table-Cdct823O.js";
|
|
|
3
3
|
import { t as MetricCard } from "./metric-card-ByEeLu0r.js";
|
|
4
4
|
import { t as PageHeader } from "./page-header-CxdZM86z.js";
|
|
5
5
|
import { a as SelectValue, i as SelectTrigger, n as SelectContent, r as SelectItem, t as Select } from "./select-GW76p-ld.js";
|
|
6
|
-
import { o as formatNumber, s as formatTokens } from "./formatters-
|
|
6
|
+
import { o as formatNumber, s as formatTokens } from "./formatters-FJaGZgJk.js";
|
|
7
7
|
import { startTransition, useState } from "react";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
9
|
import { useSuspenseQuery } from "@tanstack/react-query";
|