spiracha 1.1.1 → 1.2.0

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.
Files changed (51) hide show
  1. package/AGENTS.md +13 -7
  2. package/README.md +6 -2
  3. package/apps/ui/AGENTS.md +2 -0
  4. package/apps/ui/README.md +3 -1
  5. package/apps/ui/dist/client/assets/{analytics-CqWZmyV6.js → analytics-Cv0JMDN2.js} +1 -1
  6. package/apps/ui/dist/client/assets/{checkbox-DXM4lkJq.js → checkbox-DjHij7DJ.js} +1 -1
  7. package/apps/ui/dist/client/assets/{data-table-DnPYMPCD.js → data-table-Bgnh7phF.js} +1 -1
  8. package/apps/ui/dist/client/assets/{delete-confirm-dialog-CcZaRX33.js → delete-confirm-dialog-CIZy_LXD.js} +1 -1
  9. package/apps/ui/dist/client/assets/download-DQtfva4z.js +1 -0
  10. package/apps/ui/dist/client/assets/{es2015-Bm0kEzx2.js → es2015-DsDKdYCE.js} +1 -1
  11. package/apps/ui/dist/client/assets/{formatters-C12LmYaa.js → formatters-CWFrMKSn.js} +1 -1
  12. package/apps/ui/dist/client/assets/{index-DdJ7ahIt.js → index-C_-e0lDI.js} +2 -2
  13. package/apps/ui/dist/client/assets/{input-CEsI7EpI.js → input-BbgApiqZ.js} +1 -1
  14. package/apps/ui/dist/client/assets/{metric-card-9jwBF7rG.js → metric-card-BJX5rkHK.js} +1 -1
  15. package/apps/ui/dist/client/assets/{page-header-Dr_h1CVv.js → page-header-ODLuGLAB.js} +1 -1
  16. package/apps/ui/dist/client/assets/{projects._project-uyNGnpjH.js → projects._project-C2Pys_bB.js} +1 -1
  17. package/apps/ui/dist/client/assets/{projects._project-zoM8d2nH.js → projects._project-CHvAKvlu.js} +1 -1
  18. package/apps/ui/dist/client/assets/{projects.index-D1CWVN-O.js → projects.index-BmwtS1x-.js} +1 -1
  19. package/apps/ui/dist/client/assets/{projects.index-DukMuny6.js → projects.index-CuLw73mt.js} +1 -1
  20. package/apps/ui/dist/client/assets/{routes-Gr2Wwh83.js → routes-CfnaTOlj.js} +1 -1
  21. package/apps/ui/dist/client/assets/{select-CFim44gT.js → select-B1kH_5lx.js} +1 -1
  22. package/apps/ui/dist/client/assets/{settings-DqhyDxo2.js → settings-mYTB3sso.js} +1 -1
  23. package/apps/ui/dist/client/assets/{threads._threadId-DT75NiBa.js → threads._threadId-CUiCZSwo.js} +1 -1
  24. package/apps/ui/dist/client/assets/{threads._threadId-Df5VXIuZ.js → threads._threadId-C_47okme.js} +1 -1
  25. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-kj_QB_26.js +99 -0
  26. package/apps/ui/dist/server/assets/{analytics-BMxW_bZL.js → analytics-2QpLKjlG.js} +1 -1
  27. package/apps/ui/dist/server/assets/{codex-queries-CAF6HYiG.js → codex-queries-BH4Cb0v3.js} +2 -2
  28. package/apps/ui/dist/server/assets/{codex-server-BFZq2Y2O.js → codex-server-DqzruLmg.js} +35 -87
  29. package/apps/ui/dist/server/assets/{download-C5rkk_Bo.js → download-Drctxary.js} +7 -7
  30. package/apps/ui/dist/server/assets/{projects._project-CcJLp_A8.js → projects._project-DreIU5b0.js} +3 -3
  31. package/apps/ui/dist/server/assets/{projects._project-CJ7l0ynC.js → projects._project-gT01HBqH.js} +2 -2
  32. package/apps/ui/dist/server/assets/{projects.index-srtogpuF.js → projects.index-BYmgSGAj.js} +1 -1
  33. package/apps/ui/dist/server/assets/{router-C_w-haH6.js → router-Qj5Kn7bl.js} +6 -6
  34. package/apps/ui/dist/server/assets/{routes-BhbxvJE7.js → routes-BtcXuK0x.js} +2 -2
  35. package/apps/ui/dist/server/assets/{routes-CPe-ppmC.js → routes-_LbCIjtJ.js} +2 -2
  36. package/apps/ui/dist/server/assets/{threads._threadId-euyNckhj.js → threads._threadId-D5m6ypGw.js} +3 -3
  37. package/apps/ui/dist/server/assets/{threads._threadId-Ba7vv6-K.js → threads._threadId-DcbAJkwf.js} +2 -2
  38. package/apps/ui/dist/server/server.js +19 -36
  39. package/bin/codex-chats-claude.js +5 -0
  40. package/bin/codex-chats.js +5 -0
  41. package/bin/spiracha.js +5 -0
  42. package/package.json +9 -6
  43. package/src/lib/codex-browser-export.ts +28 -3
  44. package/src/lib/codex-exporter-cli.ts +9 -9
  45. package/src/lib/codex-exporter-transcript.ts +16 -190
  46. package/src/lib/codex-exporter-types.ts +1 -1
  47. package/src/lib/codex-exporter.ts +0 -1
  48. package/src/lib/interactive-cli.ts +2 -2
  49. package/src/mcp-server.ts +2 -2
  50. package/apps/ui/dist/client/assets/download-DOwxk-cG.js +0 -1
  51. package/apps/ui/dist/server/assets/_tanstack-start-manifest_v-C0V305Nt.js +0 -99
@@ -1,4 +1,4 @@
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(`
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-CWFrMKSn.js";import{f as l,i as u,n as d,p as f,r as p,t as m}from"./delete-confirm-dialog-CIZy_LXD.js";import{r as h,t as g}from"./checkbox-DjHij7DJ.js";import{a as _,n as v,r as y,t as b}from"./download-DQtfva4z.js";import{a as x}from"./es2015-DsDKdYCE.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-C_-e0lDI.js";import{t as R}from"./metric-card-BJX5rkHK.js";import{t as ce}from"./page-header-ODLuGLAB.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
 
@@ -0,0 +1,99 @@
1
+ //#region \0tanstack-start-manifest:v
2
+ var tsrStartManifest = () => ({
3
+ routes: {
4
+ __root__: {
5
+ filePath: "/home/runner/work/spiracha/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-C_-e0lDI.js"]
16
+ },
17
+ "/": {
18
+ filePath: "/home/runner/work/spiracha/spiracha/apps/ui/src/routes/index.tsx",
19
+ children: void 0,
20
+ preloads: [
21
+ "/assets/routes-CfnaTOlj.js",
22
+ "/assets/metric-card-BJX5rkHK.js",
23
+ "/assets/page-header-ODLuGLAB.js",
24
+ "/assets/formatters-CWFrMKSn.js"
25
+ ]
26
+ },
27
+ "/$threadId": {
28
+ filePath: "/home/runner/work/spiracha/spiracha/apps/ui/src/routes/$threadId.tsx",
29
+ children: void 0,
30
+ preloads: ["/assets/_threadId-CAIeH5mq.js"]
31
+ },
32
+ "/analytics": {
33
+ filePath: "/home/runner/work/spiracha/spiracha/apps/ui/src/routes/analytics.tsx",
34
+ children: void 0,
35
+ preloads: [
36
+ "/assets/analytics-Cv0JMDN2.js",
37
+ "/assets/data-table-Bgnh7phF.js",
38
+ "/assets/metric-card-BJX5rkHK.js",
39
+ "/assets/page-header-ODLuGLAB.js",
40
+ "/assets/select-B1kH_5lx.js",
41
+ "/assets/formatters-CWFrMKSn.js"
42
+ ]
43
+ },
44
+ "/settings": {
45
+ filePath: "/home/runner/work/spiracha/spiracha/apps/ui/src/routes/settings.tsx",
46
+ children: void 0,
47
+ preloads: [
48
+ "/assets/settings-mYTB3sso.js",
49
+ "/assets/page-header-ODLuGLAB.js",
50
+ "/assets/checkbox-DjHij7DJ.js"
51
+ ]
52
+ },
53
+ "/projects/$project": {
54
+ filePath: "/home/runner/work/spiracha/spiracha/apps/ui/src/routes/projects.$project.tsx",
55
+ children: void 0,
56
+ preloads: [
57
+ "/assets/projects._project-C2Pys_bB.js",
58
+ "/assets/data-table-Bgnh7phF.js",
59
+ "/assets/delete-confirm-dialog-CIZy_LXD.js",
60
+ "/assets/download-DQtfva4z.js",
61
+ "/assets/page-header-ODLuGLAB.js",
62
+ "/assets/input-BbgApiqZ.js",
63
+ "/assets/formatters-CWFrMKSn.js",
64
+ "/assets/projects._project-CHvAKvlu.js"
65
+ ]
66
+ },
67
+ "/threads/$threadId": {
68
+ filePath: "/home/runner/work/spiracha/spiracha/apps/ui/src/routes/threads.$threadId.tsx",
69
+ children: void 0,
70
+ preloads: [
71
+ "/assets/threads._threadId-CUiCZSwo.js",
72
+ "/assets/threads._threadId-C_47okme.js",
73
+ "/assets/delete-confirm-dialog-CIZy_LXD.js",
74
+ "/assets/download-DQtfva4z.js",
75
+ "/assets/metric-card-BJX5rkHK.js",
76
+ "/assets/page-header-ODLuGLAB.js",
77
+ "/assets/checkbox-DjHij7DJ.js",
78
+ "/assets/formatters-CWFrMKSn.js",
79
+ "/assets/es2015-DsDKdYCE.js"
80
+ ]
81
+ },
82
+ "/projects/": {
83
+ filePath: "/home/runner/work/spiracha/spiracha/apps/ui/src/routes/projects.index.tsx",
84
+ children: void 0,
85
+ preloads: [
86
+ "/assets/projects.index-BmwtS1x-.js",
87
+ "/assets/data-table-Bgnh7phF.js",
88
+ "/assets/delete-confirm-dialog-CIZy_LXD.js",
89
+ "/assets/page-header-ODLuGLAB.js",
90
+ "/assets/input-BbgApiqZ.js",
91
+ "/assets/formatters-CWFrMKSn.js",
92
+ "/assets/projects.index-CuLw73mt.js"
93
+ ]
94
+ }
95
+ },
96
+ clientEntry: "/assets/index-C_-e0lDI.js"
97
+ });
98
+ //#endregion
99
+ export { tsrStartManifest };
@@ -1,4 +1,4 @@
1
- import { i as projectsQueryOptions, t as analyticsQueryOptions } from "./codex-queries-CAF6HYiG.js";
1
+ import { i as projectsQueryOptions, t as analyticsQueryOptions } from "./codex-queries-BH4Cb0v3.js";
2
2
  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";
@@ -35,8 +35,8 @@ var analyticsSchema = z.object({ project: z.string().min(1).nullable() });
35
35
  var exportSchema = z.object({
36
36
  convertToProjectRoot: z.boolean(),
37
37
  includeCommentary: z.boolean(),
38
+ includeMetadata: z.boolean(),
38
39
  includeTools: z.boolean(),
39
- optimized: z.boolean(),
40
40
  outputFormat: z.enum(["md", "txt"]),
41
41
  redactUsername: z.boolean(),
42
42
  threadId: z.string().min(1)
@@ -44,8 +44,8 @@ var exportSchema = z.object({
44
44
  var exportThreadsSchema = z.object({
45
45
  convertToProjectRoot: z.boolean(),
46
46
  includeCommentary: z.boolean(),
47
+ includeMetadata: z.boolean(),
47
48
  includeTools: z.boolean(),
48
- optimized: z.boolean(),
49
49
  outputFormat: z.enum(["md", "txt"]),
50
50
  redactUsername: z.boolean(),
51
51
  threadIds: z.array(z.string().min(1)).min(1)
@@ -1067,13 +1067,10 @@ var convertSessionFile = async (target, options) => {
1067
1067
  }
1068
1068
  if (!matchesFilters(target.thread?.cwd ?? transcriptState.sessionMeta.cwd ?? null, options)) return null;
1069
1069
  if (transcriptState.sections.length === 0) return null;
1070
- if (options.optimized) return transcriptState.sections.join("\n\n").trimEnd() + "\n";
1071
- const title = getTitle(target, transcriptState.sessionMeta);
1072
- const metadata = buildMetadataEntries(target, transcriptState.sessionMeta, options);
1073
1070
  return [
1074
- renderDocumentTitle(title, options.outputFormat),
1071
+ renderDocumentTitle(getTitle(target, transcriptState.sessionMeta), options.outputFormat),
1075
1072
  "",
1076
- renderMetadataBlock(metadata, options.outputFormat),
1073
+ options.includeMetadata ? renderMetadataBlock(buildMetadataEntries(target, transcriptState.sessionMeta, options), options.outputFormat) : "",
1077
1074
  ...transcriptState.sections
1078
1075
  ].filter(Boolean).join("\n").trimEnd() + "\n";
1079
1076
  };
@@ -1083,8 +1080,7 @@ var writeSessionFileExport = async (target, options, outputPath, transform = (te
1083
1080
  const state = {
1084
1081
  assistantModel: target.thread?.model ?? null,
1085
1082
  sections: [],
1086
- sessionMeta: {},
1087
- startedTranscript: false
1083
+ sessionMeta: {}
1088
1084
  };
1089
1085
  let wroteSection = false;
1090
1086
  try {
@@ -1093,7 +1089,7 @@ var writeSessionFileExport = async (target, options, outputPath, transform = (te
1093
1089
  captureSessionMeta(parsed, state.sessionMeta);
1094
1090
  const block = renderCodexTranscriptRecord(parsed, options, state);
1095
1091
  if (!block) continue;
1096
- transcriptStream.write(transform(wroteSection ? `${getSectionSeparator(options)}${block}` : block));
1092
+ transcriptStream.write(transform(wroteSection ? `${getSectionSeparator()}${block}` : block));
1097
1093
  wroteSection = true;
1098
1094
  }
1099
1095
  await finalizeExportWriteStream(transcriptStream);
@@ -1124,15 +1120,12 @@ var collectCodexTranscript = async (sessionFile, options, assistantModel = null)
1124
1120
  const state = {
1125
1121
  assistantModel,
1126
1122
  sections: [],
1127
- sessionMeta: {},
1128
- startedTranscript: false
1123
+ sessionMeta: {}
1129
1124
  };
1130
1125
  for await (const parsed of readJsonlObjects(sessionFile)) processCodexTranscriptRecord(parsed, options, state);
1131
1126
  return state;
1132
1127
  };
1133
- var getSectionSeparator = (options) => {
1134
- return options.optimized ? "\n\n" : "\n";
1135
- };
1128
+ var getSectionSeparator = () => "\n";
1136
1129
  var processCodexTranscriptRecord = (parsed, options, state) => {
1137
1130
  captureSessionMeta(parsed, state.sessionMeta);
1138
1131
  const block = renderCodexTranscriptRecord(parsed, options, state);
@@ -1144,37 +1137,19 @@ var renderCodexTranscriptRecord = (parsed, options, state) => {
1144
1137
  if (!options.includeTools) return "";
1145
1138
  const tool = extractToolRecord(parsed);
1146
1139
  if (!tool) return "";
1147
- return options.optimized ? renderCompactToolBlock(tool, options.outputFormat) : renderToolBlock(tool, options.outputFormat);
1140
+ return renderToolBlock(tool, options.outputFormat);
1148
1141
  };
1149
1142
  var processCodexMessageRecord = (message, options, state) => {
1150
- if (options.optimized) return processOptimizedCodexMessageRecord(message, options, state);
1151
1143
  return renderMessageBlock(message, options.outputFormat, state.assistantModel, options.includeCommentary);
1152
1144
  };
1153
- var processOptimizedCodexMessageRecord = (message, options, state) => {
1154
- if (message.role !== "user" && message.role !== "assistant") return "";
1155
- if (message.role === "assistant" && message.phase === "commentary" && !options.includeCommentary) return "";
1156
- const compact = compactMessageText(message, true);
1157
- if (!compact) return "";
1158
- if (!state.startedTranscript) {
1159
- if (shouldSkipOptimizedPrelude(message.role, compact)) return "";
1160
- state.startedTranscript = true;
1161
- }
1162
- return renderCompactBlock(message, compact, options.outputFormat, state.assistantModel);
1163
- };
1164
1145
  var buildStreamExportPrefix = (target, sessionMeta, options) => {
1165
- if (options.optimized) return "";
1166
- const title = getTitle(target, sessionMeta);
1167
- const metadata = buildMetadataEntries(target, sessionMeta, options);
1146
+ if (!options.includeMetadata) return "";
1168
1147
  return `${[
1169
- renderDocumentTitle(title, options.outputFormat),
1148
+ renderDocumentTitle(getTitle(target, sessionMeta), options.outputFormat),
1170
1149
  "",
1171
- renderMetadataBlock(metadata, options.outputFormat)
1150
+ renderMetadataBlock(buildMetadataEntries(target, sessionMeta, options), options.outputFormat)
1172
1151
  ].filter(Boolean).join("\n")}\n`;
1173
1152
  };
1174
- var compactMessageText = (message, optimized) => {
1175
- const cleaned = stripPreviewBlock(extractText(message.content));
1176
- return optimized ? optimizePlainText(optimizeRenderedText(cleaned)) : cleaned.trim();
1177
- };
1178
1153
  var formatToolOutputSummary = (outputText, outputFormat) => {
1179
1154
  if (!outputText) return "";
1180
1155
  const lines = outputText.split("\n").map((line) => line.trim()).filter(Boolean);
@@ -1214,10 +1189,6 @@ var getTitle = (target, sessionMeta) => {
1214
1189
  if (target.thread?.title) return cleanInlineTitle(target.thread.title);
1215
1190
  return sessionMeta.id ?? path.basename(target.sessionFile, ".jsonl");
1216
1191
  };
1217
- var shouldSkipOptimizedPrelude = (role, text) => {
1218
- if (role !== "user") return true;
1219
- return text.startsWith("AGENTS.md instructions for ") || text.startsWith("# AGENTS.md instructions for ") || text.startsWith("<permissions instructions>") || text.startsWith("<environment_context>") || text.startsWith("<app-context>") || text.startsWith("<collaboration_mode>") || text.startsWith("<skills_instructions>") || text.startsWith("You are Codex, a coding agent based on GPT-5.") || text.startsWith("Read this before making changes.") || text.includes("Filesystem sandboxing defines which files can be read or written.") || text.includes("approval_policy") || text.includes("base_instructions");
1220
- };
1221
1192
  var buildMetadataEntries = (target, sessionMeta, options) => {
1222
1193
  return [
1223
1194
  ...buildCodexExportIdentityMetadata(target, sessionMeta),
@@ -1495,7 +1466,7 @@ var extractToolRecord = (parsed) => {
1495
1466
  var renderMessageBlock = (message, outputFormat, assistantModel, includeCommentary) => {
1496
1467
  if (message.role !== "user" && message.role !== "assistant") return "";
1497
1468
  if (message.role === "assistant" && message.phase === "commentary" && !includeCommentary) return "";
1498
- const text = cleanExtractedText(extractText(message.content)).trim();
1469
+ const text = cleanExtractedText(stripPreviewBlock(extractText(message.content))).trim();
1499
1470
  if (!text || shouldSkipMessage(message.role, text)) return "";
1500
1471
  return renderSection(message.role === "user" ? "User" : formatModelLabel(message.model ?? assistantModel), message.phase ? `Phase: ${message.phase}\n\n${text}` : text, outputFormat);
1501
1472
  };
@@ -1507,20 +1478,6 @@ var renderToolBlock = (tool, outputFormat) => {
1507
1478
  const summary = formatToolOutputSummary(tool.outputText ?? "", outputFormat);
1508
1479
  return summary ? renderSection("Tool Output", summary, outputFormat) : "";
1509
1480
  };
1510
- var renderCompactBlock = (message, text, outputFormat, assistantModel) => {
1511
- const prefix = message.role === "user" ? "U:" : `${formatModelLabel(message.model ?? assistantModel)}:`;
1512
- const [firstLine, ...rest] = text.split("\n");
1513
- if (rest.length === 0) return `${prefix} ${normalizeCompactLiteral(firstLine, outputFormat)}`;
1514
- return [`${prefix} ${normalizeCompactLiteral(firstLine, outputFormat)}`, ...rest.map((line) => normalizeCompactLiteral(line, outputFormat))].join("\n");
1515
- };
1516
- var renderCompactToolBlock = (tool, outputFormat) => {
1517
- if (tool.kind === "call") {
1518
- const details = formatCompactToolCall(tool, outputFormat);
1519
- return details ? `T: ${details}` : "";
1520
- }
1521
- const summary = formatCompactToolOutput(tool.outputText ?? "");
1522
- return summary ? `R: ${summary}` : "";
1523
- };
1524
1481
  var stripPreviewBlock = (text) => {
1525
1482
  const parts = text.split(/\n{2,}/).map((part) => part.trim()).filter(Boolean);
1526
1483
  if (parts.length < 2) return text.trim();
@@ -1530,14 +1487,9 @@ var stripPreviewBlock = (text) => {
1530
1487
  if (!(!/^([UA]):/i.test(first) && !isTranscriptHeading(first) && /^([UA]):/i.test(second) === false && isTranscriptHeading(second))) return text.trim();
1531
1488
  return parts.slice(1).join("\n\n");
1532
1489
  };
1533
- var optimizeRenderedText = (text) => {
1534
- return text.replace(/^\*Phase:\s+`[^`]+`\*\s*\n*/gm, "").replace(/^\s*<image\b[^>]*>\s*$/gim, "").replace(/^\s*<\/image>\s*$/gim, "").replace(/^\s*\[Image attached\]\s*$/gim, "").replace(/^#{1,6}\s+/gm, "").replace(/^```[^\n]*\n?/gm, "").replace(/\n```$/gm, "").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/^##\s+User\s*$/gm, "User:").replace(/^##\s+Assistant\s*$/gm, "Assistant:").replace(/`([^`]+)`/g, "$1").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*\n]+)\*/g, "$1").replace(/\n{3,}/g, "\n\n").trim();
1535
- };
1536
- var optimizePlainText = (text) => {
1537
- return text.replace(/\r/g, "").replace(/^\s*<image\b[^>]*>\s*$/gim, "").replace(/^\s*<\/image>\s*$/gim, "").replace(/^\s*\[Image attached\]\s*$/gim, "").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/`([^`]+)`/g, "$1").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*\n]+)\*/g, "$1").split("\n").map((line) => line.replace(/[ \t]+$/g, "")).join("\n").replace(/\n{3,}/g, "\n\n").trim();
1538
- };
1539
1490
  var shouldSkipMessage = (role, text) => {
1540
1491
  if (text.startsWith("<environment_context>")) return true;
1492
+ if (text.startsWith("AGENTS.md instructions for ")) return true;
1541
1493
  if (text.startsWith("# AGENTS.md instructions for ")) return true;
1542
1494
  if (role === "user" && text.includes("<environment_context>")) return true;
1543
1495
  return false;
@@ -1547,24 +1499,6 @@ var formatToolCallDetails = (tool, outputFormat) => {
1547
1499
  const details = parseExecCommandArguments(tool.argumentsText);
1548
1500
  return details.cmd ? `Command: ${formatInlineLiteral(details.cmd, outputFormat)}` : "";
1549
1501
  };
1550
- var formatCompactToolCall = (tool, outputFormat) => {
1551
- if (tool.name === "exec_command") {
1552
- const details = parseExecCommandArguments(tool.argumentsText);
1553
- if (!details.cmd) return "exec_command";
1554
- const command = formatInlineLiteral(details.cmd, outputFormat);
1555
- return details.workdir ? `exec_command ${command} @ ${details.workdir}` : `exec_command ${command}`;
1556
- }
1557
- return tool.callId ? `${tool.name} (${tool.callId})` : tool.name;
1558
- };
1559
- var formatCompactToolOutput = (outputText) => {
1560
- if (!outputText) return "";
1561
- const lines = outputText.split("\n").map((line) => line.trim()).filter(Boolean);
1562
- const exit = lines.find((line) => line.startsWith("Process exited with code "));
1563
- const wall = lines.find((line) => line.startsWith("Wall time: "));
1564
- if (exit && wall) return `${exit.replace("Process ", "")}; ${wall.toLowerCase()}`;
1565
- if (exit) return exit.replace("Process ", "");
1566
- return "";
1567
- };
1568
1502
  var extractText = (content) => {
1569
1503
  if (typeof content === "string") return content;
1570
1504
  if (Array.isArray(content)) return content.map((item) => extractContentPart(item)).filter((part) => part.length > 0).join("\n\n");
@@ -1583,9 +1517,6 @@ var extractContentPart = (value) => {
1583
1517
  if (type === "input_image") return "[Image attached]";
1584
1518
  return text ?? "";
1585
1519
  };
1586
- var normalizeCompactLiteral = (value, outputFormat) => {
1587
- return outputFormat === "md" ? value : value.replace(/`([^`]+)`/g, "$1");
1588
- };
1589
1520
  var UI_EXPORT_URL_PREFIX = "/__exports/";
1590
1521
  var DEFAULT_UI_EXPORT_DIR = path.join(os.tmpdir(), "spiracha-ui-exports");
1591
1522
  var DEFAULT_EXPORT_MAX_AGE_MS = 1440 * 60 * 1e3;
@@ -1631,15 +1562,24 @@ var buildBatchExportBaseName = (threads) => {
1631
1562
  var buildUniqueArchivePath = (exportDir, exportBaseName) => {
1632
1563
  return path.join(exportDir, `${exportBaseName}-${randomUUID()}.zip`);
1633
1564
  };
1565
+ var buildUniqueBatchEntryBaseName = (baseName, threadId, usedBaseNames) => {
1566
+ if (!usedBaseNames.has(baseName)) {
1567
+ usedBaseNames.add(baseName);
1568
+ return baseName;
1569
+ }
1570
+ const collisionSafeBaseName = `${baseName}-${threadId}`;
1571
+ usedBaseNames.add(collisionSafeBaseName);
1572
+ return collisionSafeBaseName;
1573
+ };
1634
1574
  var toDownloadOptions = (input) => {
1635
1575
  return {
1636
1576
  cwdFilter: null,
1637
1577
  dbPath: input.dbPath,
1638
1578
  flat: false,
1639
1579
  includeCommentary: input.includeCommentary,
1580
+ includeMetadata: input.includeMetadata,
1640
1581
  includeTools: input.includeTools,
1641
1582
  inputDir: "",
1642
- optimized: input.optimized,
1643
1583
  outputDir: "",
1644
1584
  outputFormat: input.outputFormat,
1645
1585
  projectFilter: null,
@@ -1829,6 +1769,7 @@ var renderCodexThreadsDownload = async (input) => {
1829
1769
  const exportBaseName = buildBatchExportBaseName(threads);
1830
1770
  const bundleDirectory = await createExportWorkspace(exportDir, exportBaseName);
1831
1771
  const zipPath = buildUniqueArchivePath(exportDir, exportBaseName);
1772
+ const usedBatchEntryBaseNames = /* @__PURE__ */ new Set();
1832
1773
  logExportEvent("info", "batch_start", {
1833
1774
  exportBaseName,
1834
1775
  selectedThreadCount: threadIds.length,
@@ -1838,12 +1779,19 @@ var renderCodexThreadsDownload = async (input) => {
1838
1779
  try {
1839
1780
  for (const entry of browseEntries) {
1840
1781
  const rolloutSnapshotBefore = await getRolloutSnapshot(entry.thread.rollout_path);
1841
- const relativeFileName = `${buildExportBaseName(entry.thread)}.${input.outputFormat === "md" ? "md" : "txt"}`;
1782
+ const singleBaseName = buildExportBaseName(entry.thread);
1783
+ const uniqueBaseName = buildUniqueBatchEntryBaseName(singleBaseName, entry.thread.id, usedBatchEntryBaseNames);
1784
+ const relativeFileName = `${uniqueBaseName}.${input.outputFormat === "md" ? "md" : "txt"}`;
1842
1785
  const savedPath = path.join(bundleDirectory, relativeFileName);
1843
1786
  const transform = (text) => input.pathDisplaySettings ? applyPathTransforms(text, {
1844
1787
  ...input.pathDisplaySettings,
1845
1788
  projectPath: entry.thread.cwd
1846
1789
  }) : text;
1790
+ if (uniqueBaseName !== singleBaseName) logExportEvent("warn", "batch_entry_name_collision", {
1791
+ resolvedFileName: relativeFileName,
1792
+ singleBaseName,
1793
+ threadId: entry.thread.id
1794
+ });
1847
1795
  if (!await writeSessionFileExport({
1848
1796
  fallbackReason: null,
1849
1797
  outputRelativePath: relativeFileName,
@@ -1910,8 +1858,8 @@ var analyticsSchema = z.object({ project: z.string().min(1).nullable() });
1910
1858
  var exportSchema = z.object({
1911
1859
  convertToProjectRoot: z.boolean(),
1912
1860
  includeCommentary: z.boolean(),
1861
+ includeMetadata: z.boolean(),
1913
1862
  includeTools: z.boolean(),
1914
- optimized: z.boolean(),
1915
1863
  outputFormat: z.enum(["md", "txt"]),
1916
1864
  redactUsername: z.boolean(),
1917
1865
  threadId: z.string().min(1)
@@ -1919,8 +1867,8 @@ var exportSchema = z.object({
1919
1867
  var exportThreadsSchema = z.object({
1920
1868
  convertToProjectRoot: z.boolean(),
1921
1869
  includeCommentary: z.boolean(),
1870
+ includeMetadata: z.boolean(),
1922
1871
  includeTools: z.boolean(),
1923
- optimized: z.boolean(),
1924
1872
  outputFormat: z.enum(["md", "txt"]),
1925
1873
  redactUsername: z.boolean(),
1926
1874
  threadIds: z.array(z.string().min(1)).min(1)
@@ -2005,8 +1953,8 @@ var exportThreadFn = createServerFn({ method: "POST" }).inputValidator(exportSch
2005
1953
  return renderCodexThreadDownload({
2006
1954
  dbPath: getDbPath(),
2007
1955
  includeCommentary: data.includeCommentary,
1956
+ includeMetadata: data.includeMetadata,
2008
1957
  includeTools: data.includeTools,
2009
- optimized: data.optimized,
2010
1958
  outputFormat: data.outputFormat,
2011
1959
  pathDisplaySettings: {
2012
1960
  convertToProjectRoot: data.convertToProjectRoot,
@@ -2024,8 +1972,8 @@ var exportThreadsFn = createServerFn({ method: "POST" }).inputValidator(exportTh
2024
1972
  return renderCodexThreadsDownload({
2025
1973
  dbPath: getDbPath(),
2026
1974
  includeCommentary: data.includeCommentary,
1975
+ includeMetadata: data.includeMetadata,
2027
1976
  includeTools: data.includeTools,
2028
- optimized: data.optimized,
2029
1977
  outputFormat: data.outputFormat,
2030
1978
  pathDisplaySettings: {
2031
1979
  convertToProjectRoot: data.convertToProjectRoot,
@@ -83,7 +83,7 @@ function DialogDescription({ className, ...props }) {
83
83
  //#region src/components/export-dialog.tsx
84
84
  function ExportDialog({ open, pending = false, title = "Export thread", onExport, onOpenChange }) {
85
85
  const [outputFormat, setOutputFormat] = useState("md");
86
- const [optimized, setOptimized] = useState(false);
86
+ const [includeMetadata, setIncludeMetadata] = useState(true);
87
87
  const [includeCommentary, setIncludeCommentary] = useState(false);
88
88
  const [includeTools, setIncludeTools] = useState(true);
89
89
  return /* @__PURE__ */ jsx(Dialog$1, {
@@ -124,17 +124,17 @@ function ExportDialog({ open, pending = false, title = "Export thread", onExport
124
124
  /* @__PURE__ */ jsxs("div", {
125
125
  className: "flex items-center gap-3 rounded-2xl border border-[var(--border)] bg-[var(--panel-secondary)] p-3",
126
126
  children: [/* @__PURE__ */ jsx(Checkbox$1, {
127
- "aria-label": "Optimized transcript",
128
- checked: optimized,
129
- onCheckedChange: (checked) => setOptimized(checked === true)
127
+ "aria-label": "Include metadata",
128
+ checked: includeMetadata,
129
+ onCheckedChange: (checked) => setIncludeMetadata(checked === true)
130
130
  }), /* @__PURE__ */ jsxs("span", {
131
131
  className: "space-y-1",
132
132
  children: [/* @__PURE__ */ jsx("span", {
133
133
  className: "block font-medium text-sm",
134
- children: "Optimized transcript"
134
+ children: "Include metadata"
135
135
  }), /* @__PURE__ */ jsx("span", {
136
136
  className: "block text-[var(--muted-foreground)] text-sm",
137
- children: "Removes metadata and condenses the transcript for readability and token efficiency."
137
+ children: "Includes the chat metadata section at the top of the exported transcript."
138
138
  })]
139
139
  })]
140
140
  }),
@@ -184,8 +184,8 @@ function ExportDialog({ open, pending = false, title = "Export thread", onExport
184
184
  disabled: pending,
185
185
  onClick: () => onExport({
186
186
  includeCommentary,
187
+ includeMetadata,
187
188
  includeTools,
188
- optimized,
189
189
  outputFormat
190
190
  }),
191
191
  children: pending ? "Exporting..." : "Download export"
@@ -1,12 +1,12 @@
1
1
  import { t as Button } from "./button-CmTDnzOn.js";
2
2
  import { n as useSettings } from "./settings-store-DpEJEQ7M.js";
3
- import { c as deleteThreadFn, d as exportThreadsFn, l as deleteThreadsFn, r as projectThreadsQueryOptions, u as exportThreadFn } from "./codex-queries-CAF6HYiG.js";
4
- import { t as Route } from "./projects._project-CJ7l0ynC.js";
3
+ import { c as deleteThreadFn, d as exportThreadsFn, l as deleteThreadsFn, r as projectThreadsQueryOptions, u as exportThreadFn } from "./codex-queries-BH4Cb0v3.js";
4
+ import { t as Route } from "./projects._project-gT01HBqH.js";
5
5
  import { t as DataTable } from "./data-table-Cdct823O.js";
6
6
  import { t as PageHeader } from "./page-header-CxdZM86z.js";
7
7
  import { n as formatBytes, o as formatNumber, r as formatDateTime, s as formatTokens } from "./formatters-FJaGZgJk.js";
8
8
  import { t as DeleteConfirmDialog } from "./delete-confirm-dialog-CWqcTXTF.js";
9
- import { n as downloadUrlFile, r as ExportDialog, t as downloadTextFile } from "./download-C5rkk_Bo.js";
9
+ import { n as downloadUrlFile, r as ExportDialog, t as downloadTextFile } from "./download-Drctxary.js";
10
10
  import { a as DropdownMenuTrigger, i as DropdownMenuItem, n as DropdownMenu, r as DropdownMenuContent, t as Input } from "./input-B4tEzctc.js";
11
11
  import { startTransition, useDeferredValue, useState } from "react";
12
12
  import { Link } from "@tanstack/react-router";
@@ -1,10 +1,10 @@
1
- import { r as projectThreadsQueryOptions } from "./codex-queries-CAF6HYiG.js";
1
+ import { r as projectThreadsQueryOptions } from "./codex-queries-BH4Cb0v3.js";
2
2
  import { t as LoadingPanel } from "./loading-panel-DbLdvjtR.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/routes/projects.$project.tsx
6
6
  var $$splitErrorComponentImporter = () => import("./projects._project-CLSohrBp.js");
7
- var $$splitComponentImporter = () => import("./projects._project-CcJLp_A8.js");
7
+ var $$splitComponentImporter = () => import("./projects._project-DreIU5b0.js");
8
8
  var Route = createFileRoute("/projects/$project")({
9
9
  component: lazyRouteComponent($$splitComponentImporter, "component"),
10
10
  errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent"),
@@ -1,5 +1,5 @@
1
1
  import { t as Button } from "./button-CmTDnzOn.js";
2
- import { i as projectsQueryOptions, s as deleteProjectFn } from "./codex-queries-CAF6HYiG.js";
2
+ import { i as projectsQueryOptions, s as deleteProjectFn } from "./codex-queries-BH4Cb0v3.js";
3
3
  import { t as DataTable } from "./data-table-Cdct823O.js";
4
4
  import { t as PageHeader } from "./page-header-CxdZM86z.js";
5
5
  import { i as formatList, o as formatNumber, r as formatDateTime, s as formatTokens } from "./formatters-FJaGZgJk.js";