xevol 0.9.7 → 0.9.8
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/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -426,7 +426,7 @@ Read about how to prevent this error on https://github.com/vadimdemedes/ink/#isr
|
|
|
426
426
|
`).length;return}if(G)this.fullStaticOutput+=F;if(this.lastOutputHeight>=this.options.stdout.rows){this.options.stdout.write(pI.clearTerminal+this.fullStaticOutput+E),this.lastOutput=E,this.lastOutputHeight=I,this.log.sync(E);return}if(G)this.log.clear(),this.options.stdout.write(F),this.log(E);if(!G&&E!==this.lastOutput)this.throttledLog(E);this.lastOutput=E,this.lastOutputHeight=I};render(A){let E=nM.default.createElement(w2.Provider,{value:{isScreenReaderEnabled:this.isScreenReaderEnabled}},nM.default.createElement(JR,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},A));Cg.updateContainerSync(E,this.container,null,BZ),Cg.flushSyncWork()}writeToStdout(A){if(this.isUnmounted)return;if(this.options.debug){this.options.stdout.write(A+this.fullStaticOutput+this.lastOutput);return}if(Z8){this.options.stdout.write(A);return}this.log.clear(),this.options.stdout.write(A),this.log(this.lastOutput)}writeToStderr(A){if(this.isUnmounted)return;if(this.options.debug){this.options.stderr.write(A),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(Z8){this.options.stderr.write(A);return}this.log.clear(),this.options.stderr.write(A),this.log(this.lastOutput)}unmount(A){if(this.isUnmounted)return;if(this.calculateLayout(),this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole==="function")this.restoreConsole();if(typeof this.unsubscribeResize==="function")this.unsubscribeResize();if(Z8)this.options.stdout.write(this.lastOutput+`
|
|
427
427
|
`);else if(!this.options.debug)this.log.done();if(this.isUnmounted=!0,Cg.updateContainerSync(null,this.container,null,BZ),Cg.flushSyncWork(),t6.delete(this.options.stdout),A instanceof Error)this.rejectExitPromise(A);else this.resolveExitPromise()}async waitUntilExit(){return this.exitPromise||=new Promise((A,E)=>{this.resolveExitPromise=A,this.rejectExitPromise=E}),this.exitPromise}clear(){if(!Z8&&!this.options.debug)this.log.clear()}patchConsole(){if(this.options.debug)return;this.restoreConsole=X5((A,E)=>{if(A==="stdout")this.writeToStdout(E);if(A==="stderr"){if(!E.startsWith("The above error occurred"))this.writeToStderr(E)}})}}var _S=(A,E)=>{let I={stdout:UR.stdout,stdin:UR.stdin,stderr:UR.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0,maxFps:30,incrementalRendering:!1,...SS(E)},F=$S(I.stdout,()=>new MR(I));return F.render(A),{rerender:F.render,unmount(){F.unmount()},waitUntilExit:F.waitUntilExit,cleanup:()=>t6.delete(I.stdout),clear:F.clear}},rM=_S,SS=(A={})=>{if(A instanceof OS)return{stdout:A,stdin:UR.stdin};return A},$S=(A,E)=>{let I=t6.get(A);if(!I)I=E(),t6.set(A,I);return I};var KR=gD(vB(),1);var IZ=gD(vB(),1);var yS=gD(vB(),1);var VS=gD(vB(),1);var aM=gD(vB(),1);import{Buffer as TS}from"node:buffer";var PS=/^(?:\x1b)([a-zA-Z0-9])$/,jS=/^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/,uZ={OP:"f1",OQ:"f2",OR:"f3",OS:"f4","[11~":"f1","[12~":"f2","[13~":"f3","[14~":"f4","[[A":"f1","[[B":"f2","[[C":"f3","[[D":"f4","[[E":"f5","[15~":"f5","[17~":"f6","[18~":"f7","[19~":"f8","[20~":"f9","[21~":"f10","[23~":"f11","[24~":"f12","[A":"up","[B":"down","[C":"right","[D":"left","[E":"clear","[F":"end","[H":"home",OA:"up",OB:"down",OC:"right",OD:"left",OE:"clear",OF:"end",OH:"home","[1~":"home","[2~":"insert","[3~":"delete","[4~":"end","[5~":"pageup","[6~":"pagedown","[[5~":"pageup","[[6~":"pagedown","[7~":"home","[8~":"end","[a":"up","[b":"down","[c":"right","[d":"left","[e":"clear","[2$":"insert","[3$":"delete","[5$":"pageup","[6$":"pagedown","[7$":"home","[8$":"end",Oa:"up",Ob:"down",Oc:"right",Od:"left",Oe:"clear","[2^":"insert","[3^":"delete","[5^":"pageup","[6^":"pagedown","[7^":"home","[8^":"end","[Z":"tab"},QZ=[...Object.values(uZ),"backspace"],fS=(A)=>{return["[a","[b","[c","[d","[e","[2$","[3$","[5$","[6$","[7$","[8$","[Z"].includes(A)},kS=(A)=>{return["Oa","Ob","Oc","Od","Oe","[2^","[3^","[5^","[6^","[7^","[8^"].includes(A)},vS=(A="")=>{let E;if(TS.isBuffer(A))if(A[0]>127&&A[1]===void 0)A[0]-=128,A="\x1B"+String(A);else A=String(A);else if(A!==void 0&&typeof A!=="string")A=String(A);else if(!A)A="";let I={name:"",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:A,raw:A};if(I.sequence=I.sequence||A||I.name,A==="\r")I.raw=void 0,I.name="return";else if(A===`
|
|
428
428
|
`)I.name="enter";else if(A==="\t")I.name="tab";else if(A==="\b"||A==="\x1B\b")I.name="backspace",I.meta=A.charAt(0)==="\x1B";else if(A===""||A==="\x1B")I.name="delete",I.meta=A.charAt(0)==="\x1B";else if(A==="\x1B"||A==="\x1B\x1B")I.name="escape",I.meta=A.length===2;else if(A===" "||A==="\x1B ")I.name="space",I.meta=A.length===2;else if(A.length===1&&A<="\x1A")I.name=String.fromCharCode(A.charCodeAt(0)+97-1),I.ctrl=!0;else if(A.length===1&&A>="0"&&A<="9")I.name="number";else if(A.length===1&&A>="a"&&A<="z")I.name=A;else if(A.length===1&&A>="A"&&A<="Z")I.name=A.toLowerCase(),I.shift=!0;else if(E=PS.exec(A))I.meta=!0,I.shift=/^[A-Z]$/.test(E[1]);else if(E=jS.exec(A)){let F=[...A];if(F[0]==="\x1B"&&F[1]==="\x1B")I.option=!0;let G=[E[1],E[2],E[4],E[6]].filter(Boolean).join(""),J=(E[3]||E[5]||1)-1;I.ctrl=!!(J&4),I.meta=!!(J&10),I.shift=!!(J&1),I.code=G,I.name=uZ[G],I.shift=fS(G)||I.shift,I.ctrl=kS(G)||I.ctrl}return I},FZ=vS;var gZ=gD(vB(),1);var hS=()=>gZ.useContext(gR),NR=hS;var xS=(A,E={})=>{let{stdin:I,setRawMode:F,internal_exitOnCtrlC:G,internal_eventEmitter:J}=NR();aM.useEffect(()=>{if(E.isActive===!1)return;return F(!0),()=>{F(!1)}},[E.isActive,F]),aM.useEffect(()=>{if(E.isActive===!1)return;let N=(L)=>{let X=FZ(L),S={upArrow:X.name==="up",downArrow:X.name==="down",leftArrow:X.name==="left",rightArrow:X.name==="right",pageDown:X.name==="pagedown",pageUp:X.name==="pageup",home:X.name==="home",end:X.name==="end",return:X.name==="return",escape:X.name==="escape",ctrl:X.ctrl,shift:X.shift,tab:X.name==="tab",backspace:X.name==="backspace",delete:X.name==="delete",meta:X.meta||X.name==="escape"||X.option},y=X.ctrl?X.name:X.sequence;if(QZ.includes(X.name))y="";if(y.startsWith("\x1B"))y=y.slice(1);if(y.length===1&&typeof y[0]==="string"&&/[A-Z]/.test(y[0]))S.shift=!0;if(!(y==="c"&&S.ctrl)||!G)Cg.batchedUpdates(()=>{A(y,S)})};return J?.on("input",N),()=>{J?.removeListener("input",N)}},[E.isActive,I,G,A])},rC=xS;var GZ=gD(vB(),1);var bS=()=>GZ.useContext(FR),a4=bS;var HZ=gD(vB(),1);var mS=()=>HZ.useContext(GR),sM=mS;var cS=gD(vB(),1);var oM=gD(vB(),1);var pS=gD(vB(),1);var dS=gD(vB(),1);var oA={primary:"blueBright",secondary:"gray",muted:"gray",accent:"cyanBright",success:"green",warning:"yellowBright",error:"redBright",highlight:"white"};var I0=gD(nE(),1),iS={dashboard:"Dashboard",list:"Transcriptions",detail:"Transcription","spike-viewer":"Spikes",help:"Help",workspaces:"Workspaces",settings:"Settings"};function RZ({version:A,screen:E,email:I,plan:F}){let G=[I,F].filter(Boolean).join(" · ");return I0.jsxDEV(lA,{paddingX:1,paddingY:0,justifyContent:"space-between",children:[I0.jsxDEV(xA,{color:oA.primary,children:["xevol v",A]},void 0,!0,void 0,this),I0.jsxDEV(lA,{children:[G?I0.jsxDEV(I0.Fragment,{children:[I0.jsxDEV(xA,{color:oA.secondary,children:G},void 0,!1,void 0,this),I0.jsxDEV(xA,{color:oA.secondary,children:" │ "},void 0,!1,void 0,this)]},void 0,!0,void 0,this):null,I0.jsxDEV(xA,{color:oA.secondary,children:iS[E]},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var M2=gD(nE(),1);function wZ({hints:A,status:E}){return M2.jsxDEV(lA,{paddingX:1,paddingY:0,children:M2.jsxDEV(xA,{children:[A.map((I,F)=>M2.jsxDEV(xA,{children:[F>0&&M2.jsxDEV(xA,{color:oA.secondary,children:" · "},void 0,!1,void 0,this),I.key?M2.jsxDEV(xA,{color:oA.primary,children:I.key},void 0,!1,void 0,this):null,I.description&&M2.jsxDEV(xA,{color:oA.secondary,children:I.key?` ${I.description}`:I.description},void 0,!1,void 0,this)]},`${I.key}-${F}`,!0,void 0,this)),E?M2.jsxDEV(xA,{color:oA.secondary,children:[" · ",E]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var JZ=gD(vB(),1);function MZ(A,E){let[I,F]=JZ.useState([{screen:A,params:E}]),G=I[I.length-1],J=(S,y)=>{F((m)=>[...m,{screen:S,params:y}])},N=()=>{F((S)=>S.length>1?S.slice(0,-1):S)},L=(S,y)=>{F((m)=>{if(m.length===0)return[{screen:S,params:y}];return[...m.slice(0,-1),{screen:S,params:y}]})},X=(S,y)=>{F([{screen:S,params:y}])};return{currentScreen:G.screen,params:G.params??{},push:J,pop:N,replace:L,reset:X}}var uE=gD(vB(),1);var e6=gD(vB(),1);function nS({value:A,placeholder:E="",focus:I=!0,mask:F,highlightPastedText:G=!1,showCursor:J=!0,onChange:N,onSubmit:L}){let[X,S]=e6.useState({cursorOffset:(A||"").length,cursorWidth:0}),{cursorOffset:y,cursorWidth:m}=X;e6.useEffect(()=>{S((j)=>{if(!I||!J)return j;let r=A||"";if(j.cursorOffset>r.length-1)return{cursorOffset:r.length,cursorWidth:0};return j})},[A,I,J]);let W=G?m:0,$=F?F.repeat(A.length):A,T=$,_=E?LA.grey(E):void 0;if(J&&I){_=E.length>0?LA.inverse(E[0])+LA.grey(E.slice(1)):LA.inverse(" "),T=$.length>0?"":LA.inverse(" ");let j=0;for(let r of $)T+=j>=y-W&&j<=y?LA.inverse(r):r,j++;if($.length>0&&y===$.length)T+=LA.inverse(" ")}return rC((j,r)=>{if(r.upArrow||r.downArrow||r.ctrl&&j==="c"||r.tab||r.shift&&r.tab)return;if(r.return){if(L)L(A);return}let DA=y,a=A,CA=0;if(r.leftArrow){if(J)DA--}else if(r.rightArrow){if(J)DA++}else if(r.backspace||r.delete){if(y>0)a=A.slice(0,y-1)+A.slice(y,A.length),DA--}else if(a=A.slice(0,y)+j+A.slice(y,A.length),DA+=j.length,j.length>1)CA=j.length;if(y<0)DA=0;if(y>A.length)DA=A.length;if(S({cursorOffset:DA,cursorWidth:CA}),a!==A)N(a)},{isActive:I}),e6.default.createElement(xA,null,E?$.length>0?T:_:T)}var AG=nS;import{promises as oS}from"fs";import tS from"path";var FQ=gD(vB(),1);function qF(A,E={},I=[]){let[F,G]=FQ.useState(null),[J,N]=FQ.useState(!1),[L,X]=FQ.useState(null),S=FQ.useRef(E),y=FQ.useRef(!0);FQ.useEffect(()=>{S.current=E},[E]),FQ.useEffect(()=>{return y.current=!0,()=>{y.current=!1}},[]);let m=FQ.useCallback(async()=>{N(!0),X(null);try{let W=await wB()??{},{token:$,expired:T}=kB(W);if(!$){let r=T?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN.";if(y.current)X(r),N(!1);return}let _=$B(W),j=await WB(A,{...S.current,token:$,apiUrl:_});if(y.current)G(j)}catch(W){if(y.current)X(W.message)}finally{if(y.current)N(!1)}},[A]);return FQ.useEffect(()=>{m()},[m,...I]),{data:F,loading:J,error:L,refresh:m}}var ug=gD(vB(),1);function UZ(A=1,E=20){let[I,F]=ug.useState(A),[G,J]=ug.useState(E),[N,L]=ug.useState(0),[X,S]=ug.useState(1),y=ug.useCallback(($)=>{if(typeof $.page==="number")F($.page);if(typeof $.limit==="number")J($.limit);if(typeof $.total==="number")L($.total);if(typeof $.totalPages==="number")S($.totalPages)},[]),m=ug.useCallback(()=>{F(($)=>Math.min($+1,X))},[X]),W=ug.useCallback(()=>{F(($)=>Math.max($-1,1))},[]);return{page:I,limit:G,total:N,totalPages:X,setPage:F,setLimit:J,setPagination:y,nextPage:m,prevPage:W}}var s4=gD(nE(),1);function rS(A){return A?.toLowerCase()??""}function DG({status:A}){let E=rS(A);if(E.includes("complete"))return s4.jsxDEV(xA,{color:oA.success,children:"●"},void 0,!1,void 0,this);if(E.includes("pending")||E.includes("processing"))return s4.jsxDEV(xA,{color:oA.warning,children:"○"},void 0,!1,void 0,this);if(E.includes("error")||E.includes("failed"))return s4.jsxDEV(xA,{color:oA.error,children:"✗"},void 0,!1,void 0,this);return s4.jsxDEV(xA,{color:oA.secondary,children:"•"},void 0,!1,void 0,this)}var BG=gD(vB(),1);var KZ=gD(NH(),1);function aS({type:A="dots"}){let[E,I]=BG.useState(0),F=KZ.default[A];return BG.useEffect(()=>{let G=setInterval(()=>{I((J)=>{return J===F.frames.length-1?0:J+1})},F.interval);return()=>{clearInterval(G)}},[F]),BG.default.createElement(xA,null,F.frames[E])}var NZ=aS;var tM=gD(nE(),1);function aC({label:A="Loading…"}){return tM.jsxDEV(xA,{color:oA.primary,children:[tM.jsxDEV(NZ,{type:"dots"},void 0,!1,void 0,this)," ",A]},void 0,!0,void 0,this)}import{spawn as sS}from"child_process";function YR(A){let E,I;if(process.platform==="darwin")E="open",I=[A];else if(process.platform==="win32")E="cmd",I=["/c","start","",A];else E="xdg-open",I=[A];let F=sS(E,I,{stdio:"ignore",detached:!0});F.on("error",()=>{}),F.unref()}function LR(A){let E=tB(A,["title","videoTitle","name"])??"Untitled",I=tB(A,["channel","channelTitle","author"])??"",F=tB(A,["url","youtubeUrl","videoUrl"])??"",G=tB(A,["lang","outputLang","language"])??"",J=tB(A,["status","state"])??"",N=A.cleanContent??A.content??A.transcript??"",L=[];L.push(`# ${E}`),L.push("");let X=[];if(I)X.push(`- **Channel:** ${I}`);if(F)X.push(`- **URL:** ${F}`);if(G)X.push(`- **Language:** ${G}`);if(J)X.push(`- **Status:** ${J}`);if(X.length>0)L.push(...X),L.push(""),L.push("---"),L.push("");if(N)L.push(N);else L.push("*No transcript content available.*");return L.join(`
|
|
429
|
-
`)}function ZR(A){if(!A)return"—";try{let E=new Date(A);if(Number.isNaN(E.getTime()))return"—";let I=new Date,F=I.getTime()-E.getTime(),G=Math.floor(F/60000),J=Math.floor(F/3600000),N=Math.floor(F/86400000);if(G<1)return"just now";if(G<60)return`${G}m ago`;if(J<24)return`${J}h ago`;if(N<7)return`${N}d ago`;let L=String(E.getMonth()+1).padStart(2,"0"),X=String(E.getDate()).padStart(2,"0");if(E.getFullYear()===I.getFullYear())return`${L}-${X}`;return`${E.getFullYear()}-${L}-${X}`}catch{return"—"}}var nB=gD(nE(),1);function eS(A){let E=A.list??A.data??A.transcriptions??A.items??A.results??[],I=A.pagination??A.meta??{},F=A.page??I.page??1,G=A.limit??I.limit??E.length,J=A.total??I.total??E.length,N=A.totalPages??I.totalPages??(G?Math.ceil(J/G):1);return{items:E,page:F,limit:G,total:J,totalPages:N}}function A$(A){if(!A)return null;if(A.analysis&&typeof A.analysis==="object")return A.analysis;if(A.data&&typeof A.data==="object")return A.data;return A}function YZ({params:A,navigation:E,onBack:I,terminal:F,setFooterHints:G,setFooterStatus:J}){let[N]=uE.useState(A?.status),[L]=uE.useState(A?.sort),[X,S]=uE.useState(!1),[y,m]=uE.useState(""),[W,$]=uE.useState(""),[T,_]=uE.useState(0),[j,r]=uE.useState([]),[DA,a]=uE.useState(!1),[CA,QA]=uE.useState(!1),[NA,HA]=uE.useState(!1),[XA,MA]=uE.useState(!1),[vA,nA]=uE.useState(!1),[JD,QD]=uE.useState(null);uE.useEffect(()=>{if(!JD)return;let GD=setTimeout(()=>QD(null),5000);return()=>clearTimeout(GD)},[JD]);let PD=y.trim(),{page:jA,limit:OA,total:RA,totalPages:qA,setPagination:ZA,nextPage:wA,prevPage:uD}=UZ(1,20),$D=uE.useRef(null),s=uE.useRef(jA),{data:b,loading:l,error:_A,refresh:TA}=qF("/v1/transcriptions",{query:{page:jA,limit:OA,status:N,sort:L,q:PD||void 0}},[jA,OA,N,L,PD]),dA=b??$D.current;uE.useEffect(()=>{if(b)$D.current=b},[b]),uE.useEffect(()=>{if(jA!==s.current)_(0),s.current=jA},[jA]);let sA=uE.useRef(!1);uE.useEffect(()=>{if(sA.current)return;sA.current=!0,(async()=>{let uB=(await wB())?.default?.limit;if(typeof uB==="number"&&uB>0&&uB!==20)ZA({limit:uB,page:1})})()},[ZA]),uE.useEffect(()=>{if(!X)return;let GD=setTimeout(()=>{m(W),ZA({page:1})},300);return()=>{clearTimeout(GD)}},[X,W,ZA]);let qD=uE.useMemo(()=>eS(dA??{}),[dA]);uE.useEffect(()=>{ZA({total:qD.total,totalPages:qD.totalPages})},[qD.total,qD.totalPages,ZA]);let eD=uE.useMemo(()=>{return qD.items.map((GD)=>{let uB=GD.duration??GD.durationSec??GD.durationSeconds??GD.lengthSec;return{id:cI(GD,["id","transcriptionId","_id"]),title:cI(GD,["title","videoTitle","name"]),status:cI(GD,["status","state"]),duration:LH(uB??"—"),created:ZR(GD.createdAt)}})},[qD.items]);uE.useEffect(()=>{if(T>=eD.length)_(Math.max(0,eD.length-1))},[eD.length,T]);let pD=eD[T],sD=uE.useMemo(()=>new Set(j),[j]),ID=j.length,CB=6+(X?2:y?1:0)+(DA||CA?1:0)+(NA||XA||vA?1:0)+(JD?1:0)+(_A?1:0)+(l&&!dA?1:0),i=3,PA=Math.max(1,F.rows-CB),mA=Math.max(1,Math.floor(PA/i)),hD=Math.max(0,eD.length-mA),lD=Math.min(Math.max(0,T-Math.floor(mA/2)),hD),IB=eD.slice(lD,lD+mA);uE.useEffect(()=>{if(CA||DA)G([{key:"y/n",description:"confirm"},{key:"Esc",description:"cancel"}]);else if(X)G([{key:"Esc",description:"cancel"},{key:"Enter",description:"apply"}]);else{let GD=[{key:"↑/↓",description:"move"},{key:"Enter",description:"view"},{key:"Space",description:"select"}];if(ID>0)GD.push({key:"D",description:"delete sel."}),GD.push({key:"E",description:"export sel."}),GD.push({key:"x",description:"clear sel."});if(qA>1)GD.push({key:"n/p",description:"page"});GD.push({key:"/",description:"search"}),GD.push({key:"r",description:"refresh"}),G(GD)}J(ID>0?`${ID} selected`:void 0)},[CA,DA,X,ID,G,J]);let hB=uE.useCallback(async()=>{if(!pD)return;HA(!0),QD(null);try{let GD=await wB()??{},{token:uB,expired:YB}=kB(GD);if(!uB){QD(YB?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN.");return}let oB=$B(GD);await WB(`/v1/transcriptions/${pD.id}`,{method:"DELETE",token:uB,apiUrl:oB}),QD(`Deleted ${pD.id}`),await TA()}catch(GD){QD(GD.message)}finally{HA(!1)}},[pD,TA]),kE=uE.useCallback(async()=>{if(j.length===0){QD("No transcriptions selected.");return}MA(!0),QD(null);try{let GD=await wB()??{},{token:uB,expired:YB}=kB(GD);if(!uB){QD(YB?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN.");return}let oB=$B(GD);for(let HE of j)await WB(`/v1/transcriptions/${HE}`,{method:"DELETE",token:uB,apiUrl:oB});QD(`Deleted ${j.length} transcriptions`),r([]),await TA()}catch(GD){QD(GD.message)}finally{MA(!1)}},[TA,j]),ZE=uE.useCallback(async()=>{if(j.length===0){QD("No transcriptions selected.");return}nA(!0),QD(null);try{let GD=await wB()??{},{token:uB,expired:YB}=kB(GD);if(!uB){QD(YB?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN.");return}let oB=$B(GD),HE=0;for(let bC of j){let rE=await WB(`/v1/analysis/${bC}`,{token:uB,apiUrl:oB}),RE=A$(rE);if(!RE)continue;let WC=LR(RE);if(!WC.trim())continue;let oC=`xevol-${bC}.md`,P=tS.join(process.cwd(),oC);await oS.writeFile(P,WC,"utf8"),HE+=1}QD(`Exported ${HE} transcription${HE===1?"":"s"}`)}catch(GD){QD(GD.message)}finally{nA(!1)}},[j]),rB=uE.useCallback(()=>{if(!pD)return;let GD=`https://xevol.com/t/${encodeURIComponent(pD.id)}`;YR(GD),QD(`Opened ${pD.id} in browser`)},[pD]);return rC((GD,uB)=>{let YB=GD.toLowerCase();if(CA){if(YB==="y")QA(!1),kE();if(YB==="n"||uB.escape)QA(!1),QD("Batch delete canceled");return}if(DA){if(YB==="y")a(!1),hB();if(YB==="n"||uB.escape)a(!1),QD("Delete canceled");return}if(X){if(uB.escape)$(""),m(""),S(!1),ZA({page:1});return}if(uB.escape||uB.backspace){I();return}if((uB.upArrow||YB==="k")&&eD.length>0){_((oB)=>Math.max(0,oB-1));return}if((uB.downArrow||YB==="j")&&eD.length>0){_((oB)=>Math.min(eD.length-1,oB+1));return}if(uB.return){if(pD)E.push("detail",{id:pD.id});return}if(GD==="D"){if(ID>0)QA(!0);else QD("No transcriptions selected.");return}if(GD==="E"){ZE();return}if(GD===" "){if(pD)r((oB)=>oB.includes(pD.id)?oB.filter((HE)=>HE!==pD.id):[...oB,pD.id]);return}if(YB==="x"){r([]);return}if(YB==="n"){wA();return}if(YB==="p"){uD();return}if(GD==="/"){$(y),S(!0);return}if(YB==="d"){if(pD)a(!0);return}if(YB==="o"){rB();return}if(YB==="r")TA()}),nB.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[X&&nB.jsxDEV(lA,{flexDirection:"column",marginBottom:1,children:[nB.jsxDEV(lA,{children:[nB.jsxDEV(xA,{color:oA.secondary,children:"/ "},void 0,!1,void 0,this),nB.jsxDEV(AG,{value:W,onChange:$,onSubmit:()=>{m(W),S(!1),ZA({page:1})}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),nB.jsxDEV(xA,{color:oA.secondary,children:["Searching: ",W||"…"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!X&&y&&nB.jsxDEV(lA,{marginBottom:1,children:nB.jsxDEV(xA,{color:oA.secondary,children:["Filter: ",y]},void 0,!0,void 0,this)},void 0,!1,void 0,this),l&&!dA&&nB.jsxDEV(aC,{label:"Fetching transcriptions…"},void 0,!1,void 0,this),_A&&nB.jsxDEV(xA,{color:oA.error,children:[_A," (press r to retry)"]},void 0,!0,void 0,this),!l&&!_A&&eD.length===0&&!$D.current&&nB.jsxDEV(xA,{color:oA.secondary,children:"No transcriptions found."},void 0,!1,void 0,this),eD.length>0&&nB.jsxDEV(lA,{flexDirection:"column",children:IB.map((GD,uB)=>{let oB=lD+uB===T,HE=sD.has(GD.id);return nB.jsxDEV(lA,{flexDirection:"row",marginBottom:1,children:[nB.jsxDEV(lA,{width:2,children:nB.jsxDEV(xA,{color:oB?oA.primary:oA.secondary,children:oB?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),nB.jsxDEV(lA,{width:3,children:nB.jsxDEV(xA,{color:HE?oA.primary:oA.secondary,children:HE?"☑":"☐"},void 0,!1,void 0,this)},void 0,!1,void 0,this),nB.jsxDEV(lA,{flexDirection:"column",flexGrow:1,children:[nB.jsxDEV(lA,{flexDirection:"row",justifyContent:"space-between",children:[nB.jsxDEV(xA,{color:oB?oA.primary:void 0,children:GD.title},void 0,!1,void 0,this),nB.jsxDEV(xA,{color:oA.secondary,children:GD.created},void 0,!1,void 0,this)]},void 0,!0,void 0,this),nB.jsxDEV(lA,{flexDirection:"row",children:[nB.jsxDEV(DG,{status:GD.status},void 0,!1,void 0,this),nB.jsxDEV(xA,{color:oA.secondary,children:[" ",GD.status]},void 0,!0,void 0,this),nB.jsxDEV(xA,{color:oA.secondary,children:[" · ",GD.duration]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},GD.id,!0,void 0,this)})},void 0,!1,void 0,this),CA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(xA,{color:oA.warning,children:["Delete ",ID," selected transcriptions? (y/n)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(xA,{color:oA.warning,children:["Delete ",pD?.title,"? (y/n)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),NA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(aC,{label:"Deleting transcription…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),XA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(aC,{label:"Deleting selected…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),vA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(aC,{label:"Exporting selected…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),JD&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(xA,{color:oA.secondary,children:JD},void 0,!1,void 0,this)},void 0,!1,void 0,this),nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(xA,{color:oA.secondary,children:["Page ",jA," / ",qA," · ",RA," total"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var LZ=gD(vB(),1);var vQ=gD(nE(),1),D$=[{key:"",action:"Dashboard",section:"dashboard"},{key:"↑/↓ / j/k",action:"Move selection"},{key:"Enter",action:"Select menu item / transcription"},{key:"r",action:"Refresh data"},{key:"",action:"Transcription List",section:"list"},{key:"↑/↓",action:"Move selection"},{key:"Enter",action:"View transcription"},{key:"Space",action:"Toggle selection"},{key:"D",action:"Batch delete selected"},{key:"E",action:"Batch export selected"},{key:"x",action:"Clear selection"},{key:"d",action:"Delete current"},{key:"n / p",action:"Next / previous page"},{key:"/",action:"Live search"},{key:"o",action:"Open in browser"},{key:"r",action:"Refresh list"},{key:"",action:"Detail / Spike Viewer",section:"detail"},{key:"↑/↓ / j/k",action:"Scroll content"},{key:"s",action:"View spikes (detail)"},{key:"e",action:"Export to markdown"},{key:"o",action:"Open in browser"},{key:"",action:"Global",section:"global"},{key:"Esc / Backspace",action:"Go back"},{key:"?",action:"Toggle help"},{key:"q",action:"Quit"}];function ZZ({onClose:A,setFooterHints:E}){return LZ.useEffect(()=>{E([{key:"Esc",description:"close"},{key:"q",description:"quit"}])},[E]),rC((I,F)=>{if(F.escape||F.backspace)A()}),vQ.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[vQ.jsxDEV(xA,{color:oA.primary,children:"Keybindings"},void 0,!1,void 0,this),vQ.jsxDEV(lA,{flexDirection:"column",marginTop:1,children:D$.map((I,F)=>{if(I.section)return vQ.jsxDEV(lA,{marginTop:F>0?1:0,children:vQ.jsxDEV(xA,{color:oA.accent,children:I.action},void 0,!1,void 0,this)},`section-${I.section}`,!1,void 0,this);return vQ.jsxDEV(lA,{flexDirection:"row",children:[vQ.jsxDEV(lA,{width:16,children:vQ.jsxDEV(xA,{color:oA.secondary,children:I.key},void 0,!1,void 0,this)},void 0,!1,void 0,this),vQ.jsxDEV(xA,{children:I.action},void 0,!1,void 0,this)]},`${I.key}-${F}`,!0,void 0,this)})},void 0,!1,void 0,this),vQ.jsxDEV(lA,{marginTop:1,children:vQ.jsxDEV(xA,{color:oA.secondary,children:"Press ? or Esc to close."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var U2=gD(vB(),1);var xC=gD(nE(),1),eM=null;var EG=[{label:"\uD83D\uDCCB Transcriptions",value:"transcriptions"},{label:"\uD83C\uDFE2 Workspaces",value:"workspaces"},{label:"\uD83D\uDD27 Settings",value:"settings"},{label:"❓ Help",value:"help"},{label:"\uD83D\uDEAA Quit",value:"quit"}];function B$(A){return A.list??A.data??A.transcriptions??A.items??A.results??[]}function XZ({version:A,navigation:E,setFooterHints:I,setFooterStatus:F}){let{exit:G}=a4(),[J,N]=U2.useState(0),{data:L,loading:X,error:S,refresh:y}=qF("/v1/transcriptions",{query:{limit:3}},[]),m=L??eM;U2.useEffect(()=>{if(L)eM=L},[L]);let W=X&&!eM;U2.useEffect(()=>{I([{key:"↑/↓",description:"move"},{key:"Enter",description:"select/toggle"},{key:"a",description:"add URL"},{key:"r",description:"refresh"},{key:"?",description:"help"},{key:"q",description:"quit"}]),F(void 0)},[I,F]);let $=U2.useMemo(()=>{return B$(m??{}).slice(0,3).map((j)=>({id:cI(j,["id","transcriptionId","_id"]),title:cI(j,["title","videoTitle","name"]),created:ZR(j.createdAt)}))},[m]),T=EG.length+$.length;return U2.useEffect(()=>{if(J>=T)N(Math.max(0,T-1))},[T,J]),rC((_,j)=>{let r=_.toLowerCase();if(j.upArrow||r==="k"){if(T>0)N((DA)=>DA<=0?T-1:DA-1);return}if(j.downArrow||r==="j"){if(T>0)N((DA)=>DA>=T-1?0:DA+1);return}if(r==="r"){y();return}if(r==="a"){E.push("add-url");return}if(j.return)if(J<EG.length){let DA=EG[J];if(DA.value==="transcriptions"){E.push("list");return}if(DA.value==="workspaces"){E.push("workspaces");return}if(DA.value==="settings"){E.push("settings");return}if(DA.value==="help"){E.push("help");return}if(DA.value==="quit")G()}else{let DA=J-EG.length,a=$[DA];if(a?.id)E.push("detail",{id:a.id})}}),xC.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[xC.jsxDEV(lA,{flexDirection:"column",marginBottom:1,children:EG.map((_,j)=>{let r=J===j;return xC.jsxDEV(lA,{flexDirection:"row",children:[xC.jsxDEV(lA,{width:2,children:xC.jsxDEV(xA,{color:r?oA.primary:oA.secondary,children:r?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),xC.jsxDEV(xA,{color:r?oA.primary:void 0,children:_.label},void 0,!1,void 0,this)]},_.value,!0,void 0,this)})},void 0,!1,void 0,this),xC.jsxDEV(lA,{flexDirection:"column",children:[xC.jsxDEV(xA,{color:oA.secondary,children:"Recent transcriptions"},void 0,!1,void 0,this),W&&xC.jsxDEV(lA,{marginTop:1,children:xC.jsxDEV(aC,{label:"Loading recent…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),S&&xC.jsxDEV(lA,{marginTop:1,children:xC.jsxDEV(xA,{color:oA.error,children:[S," (press r to retry)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),!W&&!S&&$.length===0&&xC.jsxDEV(lA,{marginTop:1,children:xC.jsxDEV(xA,{color:oA.secondary,children:"No recent transcriptions."},void 0,!1,void 0,this)},void 0,!1,void 0,this),!W&&!S&&$.length>0&&xC.jsxDEV(lA,{flexDirection:"column",marginTop:1,children:$.map((_,j)=>{let r=EG.length+j,DA=J===r;return xC.jsxDEV(lA,{flexDirection:"row",children:[xC.jsxDEV(lA,{width:2,children:xC.jsxDEV(xA,{color:DA?oA.primary:oA.secondary,children:DA?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),xC.jsxDEV(lA,{flexDirection:"row",justifyContent:"space-between",flexGrow:1,children:[xC.jsxDEV(xA,{color:DA?oA.primary:void 0,children:_.title},void 0,!1,void 0,this),xC.jsxDEV(xA,{color:oA.secondary,children:_.created},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},_.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var GE=gD(vB(),1);import{promises as E$}from"fs";import C$ from"path";function P8(A,E){if(E<=0)return[];let I=[],F=A.split(/\r?\n/);for(let G of F){if(!G.trim()){I.push("");continue}let J=G.trim().split(/\s+/),N="";for(let L of J){if(N.length===0){if(L.length<=E)N=L;else{for(let X=0;X<L.length;X+=E)I.push(L.slice(X,X+E));N=""}continue}if(N.length+1+L.length<=E){N=`${N} ${L}`;continue}if(I.push(N),L.length<=E)N=L;else{for(let X=0;X<L.length;X+=E)I.push(L.slice(X,X+E));N=""}}if(N.length>0)I.push(N)}return I}var MB=gD(nE(),1),AU=["formatted","summary","wisdom","insights","facts"];function I$(A){if(!A)return null;if(A.analysis&&typeof A.analysis==="object")return A.analysis;if(A.data&&typeof A.data==="object")return A.data;return A}function u$(A){if(!A)return"—";let E=new Date(A);if(Number.isNaN(E.getTime()))return"—";return E.toLocaleString()}function Q$(A){let E=[],I=[];for(let F of AU){let G=A.find((J)=>J.id===F);if(G)E.push(G)}for(let F of A)if(!AU.includes(F.id))I.push(F);return I.sort((F,G)=>F.name.localeCompare(G.name)),[...E,...I]}function F$(A){try{let E=JSON.parse(A.data);if(E.type==="token")return{action:"append",content:E.content??""};if(E.type==="full")return{action:"replace",content:E.content??""};if(E.type==="done")return{action:"done",content:""};if(E.type==="error")return{action:"error",content:E.error??"Unknown stream error"}}catch{}if(A.event==="complete")try{let E=JSON.parse(A.data);return{action:"replace",content:E.content??E.data??E.markdown??A.data}}catch{return{action:"replace",content:A.data}}if(A.event==="chunk"||A.event==="delta"||!A.event)try{let E=JSON.parse(A.data);return{action:"append",content:E.text??E.content??E.chunk??E.delta??A.data}}catch{return{action:"append",content:A.data}}if(A.event==="done"||A.event==="end")return{action:"done",content:""};return null}function qZ({id:A,navigation:E,onBack:I,terminal:F,setFooterHints:G}){let[J,N]=GE.useState("transcript"),[L,X]=GE.useState(0),[S,y]=GE.useState(null),[m,W]=GE.useState(!1),[$,T]=GE.useState(0),[_,j]=GE.useState(null),[r,DA]=GE.useState(!1),[a,CA]=GE.useState(null),[QA,NA]=GE.useState(!1),[HA,XA]=GE.useState(null);GE.useEffect(()=>{if(!S)return;let rB=setTimeout(()=>y(null),5000);return()=>clearTimeout(rB)},[S]);let{data:MA,loading:vA,error:nA,refresh:JD}=qF(`/v1/analysis/${A}`,{},[A]),QD=GE.useRef(null),PD=MA??QD.current;GE.useEffect(()=>{if(MA)QD.current=MA},[MA]);let jA=vA&&!PD,OA=GE.useMemo(()=>I$(PD),[PD]),{data:RA,loading:qA,error:ZA,refresh:wA}=qF("/v1/prompts",{},[]),uD=GE.useRef(null),$D=RA??uD.current;GE.useEffect(()=>{if(RA)uD.current=RA},[RA]);let s=qA&&!$D,b=GE.useMemo(()=>{let rB=$D?.prompts??$D?.data??[];return Q$(rB.map((GD)=>({id:GD.id??GD.slug??"",name:GD.name??GD.title??GD.id??"",description:GD.description??""})))},[$D]);GE.useEffect(()=>{if($>=b.length&&b.length>0)T(Math.max(0,b.length-1))},[$,b.length]);let l=tB(OA??{},["title","videoTitle","name"])??"Untitled",_A=tB(OA??{},["channel","channelTitle","author"])??"Unknown",TA=tB(OA??{},["status","state"])??"—",dA=C2(OA?.duration??OA?.durationSec??OA?.durationSeconds),sA=tB(OA??{},["lang","outputLang","language"])??"—",qD=u$(OA?.createdAt),eD=OA?.cleanContent??OA?.content??OA?.transcript??"",pD=Math.max(20,F.columns-4),sD=GE.useMemo(()=>P8(eD||"No transcript content available.",pD),[eD,pD]),ID=GE.useMemo(()=>P8(_||"",pD),[_,pD]),CB=12+(S?2:0),i=Math.max(4,F.rows-CB),PA=J==="transcript"?sD:_!==null?ID:[],mA=Math.max(0,PA.length-i);GE.useEffect(()=>{X((rB)=>Math.min(rB,mA))},[mA]),GE.useEffect(()=>{X(0)},[J]);let hD=GE.useCallback(async(rB)=>{XA(rB.name),j(""),CA(null),NA(!0),X(0);let GD=await wB()??{},{token:uB,expired:YB}=kB(GD);if(!uB){CA(YB?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN."),NA(!1);return}let oB=$B(GD);try{let HE=await WB(`/spikes/${A}`,{method:"POST",body:{promptId:rB.id,outputLang:"en"},token:uB,apiUrl:oB});NA(!1);let bC=HE.content??HE.markdown;if(bC){j(bC);return}let rE=HE.spikeId??HE.id;if(!rE){CA("No spikeId returned from API");return}DA(!0);let RE="",WC=new AbortController;lD.current=WC;try{for await(let oC of I2(`/spikes/stream/${rE}`,{token:uB,apiUrl:oB,signal:WC.signal})){let P=F$(oC);if(!P)continue;if(P.action==="append")RE+=P.content,j(RE);else if(P.action==="replace")RE=P.content,j(RE);else if(P.action==="error"){CA(P.content);break}else if(P.action==="done")break}}finally{DA(!1),lD.current=null}}catch(HE){NA(!1),DA(!1),CA(HE.message)}},[A]),lD=GE.default.useRef(null);GE.useEffect(()=>{return()=>{lD.current?.abort()}},[]),GE.useEffect(()=>{if(r&&J==="spikes")X(mA)},[mA,r,J]),GE.useEffect(()=>{let rB=[{key:"Tab/1/2",description:"switch tab"}];if(J==="transcript")G([...rB,{key:"↑/↓",description:"scroll"},{key:"e",description:"export"},{key:"o",description:"open"},{key:"r",description:"refresh"},{key:"Esc",description:"back"}]);else if(_!==null)G([...rB,{key:"↑/↓",description:"scroll"},{key:"Esc",description:"back to prompts"}]);else G([...rB,{key:"↑/↓",description:"move"},{key:"Enter",description:"run spike"},{key:"r",description:"refresh"},{key:"Esc",description:"back"}])},[G,J,_]);let IB=GE.useCallback(async()=>{if(!OA){y("No transcription loaded.");return}W(!0),y(null);try{let rB=LR(OA);if(!rB.trim()){y("No transcript content available.");return}let GD=`xevol-${A}.md`,uB=C$.join(process.cwd(),GD);await E$.writeFile(uB,rB,"utf8"),y(`Exported to ${GD}`)}catch(rB){y(rB.message)}finally{W(!1)}},[OA,A]),hB=GE.useCallback(()=>{let rB=tB(OA??{},["url","youtubeUrl","videoUrl"])??`https://xevol.com/t/${encodeURIComponent(A)}`;YR(rB),y("Opened in browser")},[OA,A]);rC((rB,GD)=>{let uB=rB.toLowerCase();if(GD.tab){N((YB)=>YB==="transcript"?"spikes":"transcript"),j(null),XA(null);return}if(rB==="1"){N("transcript"),j(null),XA(null);return}if(rB==="2"){N("spikes"),j(null),XA(null);return}if(GD.escape||GD.backspace){if(J==="spikes"&&_!==null){lD.current?.abort(),j(null),XA(null),DA(!1),CA(null),X(0);return}I();return}if(uB==="r"){if(J==="spikes")wA();else JD();return}if(J==="transcript"){if(GD.upArrow||uB==="k"){X((YB)=>Math.max(0,YB-1));return}if(GD.downArrow||uB==="j"){X((YB)=>Math.min(mA,YB+1));return}if(uB==="e"){IB();return}if(uB==="o"){hB();return}}if(J==="spikes")if(_!==null){if(GD.upArrow||uB==="k"){X((YB)=>Math.max(0,YB-1));return}if(GD.downArrow||uB==="j"){X((YB)=>Math.min(mA,YB+1));return}}else{if(GD.upArrow||uB==="k"){T((YB)=>Math.max(0,YB-1));return}if(GD.downArrow||uB==="j"){T((YB)=>Math.min(b.length-1,YB+1));return}if(GD.return&&b[$]&&!QA&&!r){hD(b[$]);return}}});let kE=PA.slice(L,L+i),ZE=MB.jsxDEV(lA,{flexDirection:"row",marginBottom:1,children:[MB.jsxDEV(xA,{color:J==="transcript"?oA.primary:oA.secondary,bold:J==="transcript",children:[J==="transcript"?"▸ ":" ","Transcript"]},void 0,!0,void 0,this),MB.jsxDEV(xA,{color:oA.secondary,children:" │ "},void 0,!1,void 0,this),MB.jsxDEV(xA,{color:J==="spikes"?oA.primary:oA.secondary,bold:J==="spikes",children:[J==="spikes"?"▸ ":" ","Spikes"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);return MB.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[jA&&MB.jsxDEV(aC,{label:"Fetching transcription…"},void 0,!1,void 0,this),nA&&MB.jsxDEV(xA,{color:oA.error,children:[nA," (press r to retry)"]},void 0,!0,void 0,this),!jA&&!nA&&OA&&MB.jsxDEV(lA,{flexDirection:"column",children:[MB.jsxDEV(xA,{color:oA.primary,children:l},void 0,!1,void 0,this),MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(xA,{color:oA.secondary,children:["Channel: ",_A]},void 0,!0,void 0,this)},void 0,!1,void 0,this),MB.jsxDEV(lA,{flexDirection:"row",children:[MB.jsxDEV(xA,{color:oA.secondary,children:"Status: "},void 0,!1,void 0,this),MB.jsxDEV(DG,{status:TA},void 0,!1,void 0,this),MB.jsxDEV(xA,{color:oA.secondary,children:[" ",TA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),MB.jsxDEV(lA,{flexDirection:"row",children:[MB.jsxDEV(xA,{color:oA.secondary,children:["Duration: ",dA]},void 0,!0,void 0,this),MB.jsxDEV(xA,{color:oA.secondary,children:[" · Lang: ",sA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),MB.jsxDEV(lA,{children:MB.jsxDEV(xA,{color:oA.secondary,children:["Created: ",qD]},void 0,!0,void 0,this)},void 0,!1,void 0,this),MB.jsxDEV(lA,{marginTop:1,children:ZE},void 0,!1,void 0,this),J==="transcript"&&MB.jsxDEV(lA,{flexDirection:"column",children:MB.jsxDEV(xA,{children:kE.join(`
|
|
429
|
+
`)}function ZR(A){if(!A)return"—";try{let E=new Date(A);if(Number.isNaN(E.getTime()))return"—";let I=new Date,F=I.getTime()-E.getTime(),G=Math.floor(F/60000),J=Math.floor(F/3600000),N=Math.floor(F/86400000);if(G<1)return"just now";if(G<60)return`${G}m ago`;if(J<24)return`${J}h ago`;if(N<7)return`${N}d ago`;let L=String(E.getMonth()+1).padStart(2,"0"),X=String(E.getDate()).padStart(2,"0");if(E.getFullYear()===I.getFullYear())return`${L}-${X}`;return`${E.getFullYear()}-${L}-${X}`}catch{return"—"}}var nB=gD(nE(),1);function eS(A){let E=A.list??A.data??A.transcriptions??A.items??A.results??[],I=A.pagination??A.meta??{},F=A.page??I.page??1,G=A.limit??I.limit??E.length,J=A.total??I.total??E.length,N=A.totalPages??I.totalPages??(G?Math.ceil(J/G):1);return{items:E,page:F,limit:G,total:J,totalPages:N}}function A$(A){if(!A)return null;if(A.analysis&&typeof A.analysis==="object")return A.analysis;if(A.data&&typeof A.data==="object")return A.data;return A}function YZ({params:A,navigation:E,onBack:I,terminal:F,setFooterHints:G,setFooterStatus:J}){let[N]=uE.useState(A?.status),[L]=uE.useState(A?.sort),[X,S]=uE.useState(!1),[y,m]=uE.useState(""),[W,$]=uE.useState(""),[T,_]=uE.useState(0),[j,r]=uE.useState([]),[DA,a]=uE.useState(!1),[CA,QA]=uE.useState(!1),[NA,HA]=uE.useState(!1),[XA,MA]=uE.useState(!1),[vA,nA]=uE.useState(!1),[JD,QD]=uE.useState(null);uE.useEffect(()=>{if(!JD)return;let GD=setTimeout(()=>QD(null),5000);return()=>clearTimeout(GD)},[JD]);let PD=y.trim(),{page:jA,limit:OA,total:RA,totalPages:qA,setPagination:ZA,nextPage:wA,prevPage:uD}=UZ(1,20),$D=uE.useRef(null),s=uE.useRef(jA),{data:b,loading:l,error:_A,refresh:TA}=qF("/v1/transcriptions",{query:{page:jA,limit:OA,status:N,sort:L,q:PD||void 0}},[jA,OA,N,L,PD]),dA=b??$D.current;uE.useEffect(()=>{if(b)$D.current=b},[b]),uE.useEffect(()=>{if(jA!==s.current)_(0),s.current=jA},[jA]);let sA=uE.useRef(!1);uE.useEffect(()=>{if(sA.current)return;sA.current=!0,(async()=>{let uB=(await wB())?.default?.limit;if(typeof uB==="number"&&uB>0&&uB!==20)ZA({limit:uB,page:1})})()},[ZA]),uE.useEffect(()=>{if(!X)return;let GD=setTimeout(()=>{m(W),ZA({page:1})},300);return()=>{clearTimeout(GD)}},[X,W,ZA]);let qD=uE.useMemo(()=>eS(dA??{}),[dA]);uE.useEffect(()=>{ZA({total:qD.total,totalPages:qD.totalPages})},[qD.total,qD.totalPages,ZA]);let eD=uE.useMemo(()=>{return qD.items.map((GD)=>{let uB=GD.duration??GD.durationSec??GD.durationSeconds??GD.lengthSec;return{id:cI(GD,["id","transcriptionId","_id"]),title:cI(GD,["title","videoTitle","name"]),status:cI(GD,["status","state"]),duration:LH(uB??"—"),created:ZR(GD.createdAt)}})},[qD.items]);uE.useEffect(()=>{if(T>=eD.length)_(Math.max(0,eD.length-1))},[eD.length,T]);let pD=eD[T],sD=uE.useMemo(()=>new Set(j),[j]),ID=j.length,CB=6+(X?2:y?1:0)+(DA||CA?1:0)+(NA||XA||vA?1:0)+(JD?1:0)+(_A?1:0)+(l&&!dA?1:0),i=3,PA=Math.max(1,F.rows-CB),mA=Math.max(1,Math.floor(PA/i)),hD=Math.max(0,eD.length-mA),lD=Math.min(Math.max(0,T-Math.floor(mA/2)),hD),IB=eD.slice(lD,lD+mA);uE.useEffect(()=>{if(CA||DA)G([{key:"y/n",description:"confirm"},{key:"Esc",description:"cancel"}]);else if(X)G([{key:"Esc",description:"cancel"},{key:"Enter",description:"apply"}]);else{let GD=[{key:"↑/↓",description:"move"},{key:"Enter",description:"view"},{key:"Space",description:"select"}];if(ID>0)GD.push({key:"D",description:"delete sel."}),GD.push({key:"E",description:"export sel."}),GD.push({key:"x",description:"clear sel."});if(qA>1)GD.push({key:"n/p",description:"page"});GD.push({key:"/",description:"search"}),GD.push({key:"r",description:"refresh"}),G(GD)}J(ID>0?`${ID} selected`:void 0)},[CA,DA,X,ID,G,J]);let hB=uE.useCallback(async()=>{if(!pD)return;HA(!0),QD(null);try{let GD=await wB()??{},{token:uB,expired:YB}=kB(GD);if(!uB){QD(YB?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN.");return}let oB=$B(GD);await WB(`/v1/transcriptions/${pD.id}`,{method:"DELETE",token:uB,apiUrl:oB}),QD(`Deleted ${pD.id}`),await TA()}catch(GD){QD(GD.message)}finally{HA(!1)}},[pD,TA]),kE=uE.useCallback(async()=>{if(j.length===0){QD("No transcriptions selected.");return}MA(!0),QD(null);try{let GD=await wB()??{},{token:uB,expired:YB}=kB(GD);if(!uB){QD(YB?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN.");return}let oB=$B(GD);for(let HE of j)await WB(`/v1/transcriptions/${HE}`,{method:"DELETE",token:uB,apiUrl:oB});QD(`Deleted ${j.length} transcriptions`),r([]),await TA()}catch(GD){QD(GD.message)}finally{MA(!1)}},[TA,j]),ZE=uE.useCallback(async()=>{if(j.length===0){QD("No transcriptions selected.");return}nA(!0),QD(null);try{let GD=await wB()??{},{token:uB,expired:YB}=kB(GD);if(!uB){QD(YB?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN.");return}let oB=$B(GD),HE=0;for(let bC of j){let rE=await WB(`/v1/analysis/${bC}`,{token:uB,apiUrl:oB}),RE=A$(rE);if(!RE)continue;let WC=LR(RE);if(!WC.trim())continue;let oC=`xevol-${bC}.md`,P=tS.join(process.cwd(),oC);await oS.writeFile(P,WC,"utf8"),HE+=1}QD(`Exported ${HE} transcription${HE===1?"":"s"}`)}catch(GD){QD(GD.message)}finally{nA(!1)}},[j]),rB=uE.useCallback(()=>{if(!pD)return;let GD=`https://xevol.com/t/${encodeURIComponent(pD.id)}`;YR(GD),QD(`Opened ${pD.id} in browser`)},[pD]);return rC((GD,uB)=>{let YB=GD.toLowerCase();if(CA){if(YB==="y")QA(!1),kE();if(YB==="n"||uB.escape)QA(!1),QD("Batch delete canceled");return}if(DA){if(YB==="y")a(!1),hB();if(YB==="n"||uB.escape)a(!1),QD("Delete canceled");return}if(X){if(uB.escape)$(""),m(""),S(!1),ZA({page:1});return}if(uB.escape||uB.backspace){I();return}if((uB.upArrow||YB==="k")&&eD.length>0){_((oB)=>Math.max(0,oB-1));return}if((uB.downArrow||YB==="j")&&eD.length>0){_((oB)=>Math.min(eD.length-1,oB+1));return}if(uB.return){if(pD)E.push("detail",{id:pD.id});return}if(GD==="D"){if(ID>0)QA(!0);else QD("No transcriptions selected.");return}if(GD==="E"){ZE();return}if(GD===" "){if(pD)r((oB)=>oB.includes(pD.id)?oB.filter((HE)=>HE!==pD.id):[...oB,pD.id]);return}if(YB==="x"){r([]);return}if(YB==="n"){wA();return}if(YB==="p"){uD();return}if(GD==="/"){$(y),S(!0);return}if(YB==="d"){if(pD)a(!0);return}if(YB==="o"){rB();return}if(YB==="r")TA()}),nB.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[X&&nB.jsxDEV(lA,{flexDirection:"column",marginBottom:1,children:[nB.jsxDEV(lA,{children:[nB.jsxDEV(xA,{color:oA.secondary,children:"/ "},void 0,!1,void 0,this),nB.jsxDEV(AG,{value:W,onChange:$,onSubmit:()=>{m(W),S(!1),ZA({page:1})}},void 0,!1,void 0,this)]},void 0,!0,void 0,this),nB.jsxDEV(xA,{color:oA.secondary,children:["Searching: ",W||"…"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!X&&y&&nB.jsxDEV(lA,{marginBottom:1,children:nB.jsxDEV(xA,{color:oA.secondary,children:["Filter: ",y]},void 0,!0,void 0,this)},void 0,!1,void 0,this),l&&!dA&&nB.jsxDEV(aC,{label:"Fetching transcriptions…"},void 0,!1,void 0,this),_A&&nB.jsxDEV(xA,{color:oA.error,children:[_A," (press r to retry)"]},void 0,!0,void 0,this),!l&&!_A&&eD.length===0&&!$D.current&&nB.jsxDEV(xA,{color:oA.secondary,children:"No transcriptions found."},void 0,!1,void 0,this),eD.length>0&&nB.jsxDEV(lA,{flexDirection:"column",children:IB.map((GD,uB)=>{let oB=lD+uB===T,HE=sD.has(GD.id);return nB.jsxDEV(lA,{flexDirection:"row",marginBottom:1,children:[nB.jsxDEV(lA,{width:2,children:nB.jsxDEV(xA,{color:oB?oA.primary:oA.secondary,children:oB?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),nB.jsxDEV(lA,{width:3,children:nB.jsxDEV(xA,{color:HE?oA.primary:oA.secondary,children:HE?"☑":"☐"},void 0,!1,void 0,this)},void 0,!1,void 0,this),nB.jsxDEV(lA,{flexDirection:"column",flexGrow:1,children:[nB.jsxDEV(lA,{flexDirection:"row",justifyContent:"space-between",children:[nB.jsxDEV(xA,{color:oB?oA.primary:void 0,children:GD.title},void 0,!1,void 0,this),nB.jsxDEV(xA,{color:oA.secondary,children:GD.created},void 0,!1,void 0,this)]},void 0,!0,void 0,this),nB.jsxDEV(lA,{flexDirection:"row",children:[nB.jsxDEV(DG,{status:GD.status},void 0,!1,void 0,this),nB.jsxDEV(xA,{color:oA.secondary,children:[" ",GD.status]},void 0,!0,void 0,this),nB.jsxDEV(xA,{color:oA.secondary,children:[" · ",GD.duration]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},GD.id,!0,void 0,this)})},void 0,!1,void 0,this),CA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(xA,{color:oA.warning,children:["Delete ",ID," selected transcriptions? (y/n)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),DA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(xA,{color:oA.warning,children:["Delete ",pD?.title,"? (y/n)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),NA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(aC,{label:"Deleting transcription…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),XA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(aC,{label:"Deleting selected…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),vA&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(aC,{label:"Exporting selected…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),JD&&nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(xA,{color:oA.secondary,children:JD},void 0,!1,void 0,this)},void 0,!1,void 0,this),nB.jsxDEV(lA,{marginTop:1,children:nB.jsxDEV(xA,{color:oA.secondary,children:["Page ",jA," / ",qA," · ",RA," total"]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var LZ=gD(vB(),1);var vQ=gD(nE(),1),D$=[{key:"",action:"Dashboard",section:"dashboard"},{key:"↑/↓ / j/k",action:"Move selection"},{key:"Enter",action:"Select menu item / transcription"},{key:"r",action:"Refresh data"},{key:"",action:"Transcription List",section:"list"},{key:"↑/↓",action:"Move selection"},{key:"Enter",action:"View transcription"},{key:"Space",action:"Toggle selection"},{key:"D",action:"Batch delete selected"},{key:"E",action:"Batch export selected"},{key:"x",action:"Clear selection"},{key:"d",action:"Delete current"},{key:"n / p",action:"Next / previous page"},{key:"/",action:"Live search"},{key:"o",action:"Open in browser"},{key:"r",action:"Refresh list"},{key:"",action:"Detail / Spike Viewer",section:"detail"},{key:"↑/↓ / j/k",action:"Scroll content"},{key:"s",action:"View spikes (detail)"},{key:"e",action:"Export to markdown"},{key:"o",action:"Open in browser"},{key:"",action:"Global",section:"global"},{key:"Esc / Backspace",action:"Go back"},{key:"?",action:"Toggle help"},{key:"q",action:"Quit"}];function ZZ({onClose:A,setFooterHints:E}){return LZ.useEffect(()=>{E([{key:"Esc",description:"close"},{key:"q",description:"quit"}])},[E]),rC((I,F)=>{if(F.escape||F.backspace)A()}),vQ.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[vQ.jsxDEV(xA,{color:oA.primary,children:"Keybindings"},void 0,!1,void 0,this),vQ.jsxDEV(lA,{flexDirection:"column",marginTop:1,children:D$.map((I,F)=>{if(I.section)return vQ.jsxDEV(lA,{marginTop:F>0?1:0,children:vQ.jsxDEV(xA,{color:oA.accent,children:I.action},void 0,!1,void 0,this)},`section-${I.section}`,!1,void 0,this);return vQ.jsxDEV(lA,{flexDirection:"row",children:[vQ.jsxDEV(lA,{width:16,children:vQ.jsxDEV(xA,{color:oA.secondary,children:I.key},void 0,!1,void 0,this)},void 0,!1,void 0,this),vQ.jsxDEV(xA,{children:I.action},void 0,!1,void 0,this)]},`${I.key}-${F}`,!0,void 0,this)})},void 0,!1,void 0,this),vQ.jsxDEV(lA,{marginTop:1,children:vQ.jsxDEV(xA,{color:oA.secondary,children:"Press ? or Esc to close."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var U2=gD(vB(),1);var xC=gD(nE(),1),eM=null;var EG=[{label:"\uD83D\uDCCB Transcriptions",value:"transcriptions"},{label:"➕ Add URL",value:"add-url"},{label:"\uD83C\uDFE2 Workspaces",value:"workspaces"},{label:"\uD83D\uDD27 Settings",value:"settings"},{label:"❓ Help",value:"help"},{label:"\uD83D\uDEAA Quit",value:"quit"}];function B$(A){return A.list??A.data??A.transcriptions??A.items??A.results??[]}function XZ({version:A,navigation:E,setFooterHints:I,setFooterStatus:F}){let{exit:G}=a4(),[J,N]=U2.useState(0),{data:L,loading:X,error:S,refresh:y}=qF("/v1/transcriptions",{query:{limit:3}},[]),m=L??eM;U2.useEffect(()=>{if(L)eM=L},[L]);let W=X&&!eM;U2.useEffect(()=>{I([{key:"↑/↓",description:"move"},{key:"Enter",description:"select/toggle"},{key:"a",description:"add URL"},{key:"r",description:"refresh"},{key:"?",description:"help"},{key:"q",description:"quit"}]),F(void 0)},[I,F]);let $=U2.useMemo(()=>{return B$(m??{}).slice(0,3).map((j)=>({id:cI(j,["id","transcriptionId","_id"]),title:cI(j,["title","videoTitle","name"]),created:ZR(j.createdAt)}))},[m]),T=EG.length+$.length;return U2.useEffect(()=>{if(J>=T)N(Math.max(0,T-1))},[T,J]),rC((_,j)=>{let r=_.toLowerCase();if(j.upArrow||r==="k"){if(T>0)N((DA)=>DA<=0?T-1:DA-1);return}if(j.downArrow||r==="j"){if(T>0)N((DA)=>DA>=T-1?0:DA+1);return}if(r==="r"){y();return}if(r==="a"){E.push("add-url");return}if(j.return)if(J<EG.length){let DA=EG[J];if(DA.value==="transcriptions"){E.push("list");return}if(DA.value==="add-url"){E.push("add-url");return}if(DA.value==="workspaces"){E.push("workspaces");return}if(DA.value==="settings"){E.push("settings");return}if(DA.value==="help"){E.push("help");return}if(DA.value==="quit")G()}else{let DA=J-EG.length,a=$[DA];if(a?.id)E.push("detail",{id:a.id})}}),xC.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[xC.jsxDEV(lA,{flexDirection:"column",marginBottom:1,children:EG.map((_,j)=>{let r=J===j;return xC.jsxDEV(lA,{flexDirection:"row",children:[xC.jsxDEV(lA,{width:2,children:xC.jsxDEV(xA,{color:r?oA.primary:oA.secondary,children:r?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),xC.jsxDEV(xA,{color:r?oA.primary:void 0,children:_.label},void 0,!1,void 0,this)]},_.value,!0,void 0,this)})},void 0,!1,void 0,this),xC.jsxDEV(lA,{flexDirection:"column",children:[xC.jsxDEV(xA,{color:oA.secondary,children:"Recent transcriptions"},void 0,!1,void 0,this),W&&xC.jsxDEV(lA,{marginTop:1,children:xC.jsxDEV(aC,{label:"Loading recent…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),S&&xC.jsxDEV(lA,{marginTop:1,children:xC.jsxDEV(xA,{color:oA.error,children:[S," (press r to retry)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),!W&&!S&&$.length===0&&xC.jsxDEV(lA,{marginTop:1,children:xC.jsxDEV(xA,{color:oA.secondary,children:"No recent transcriptions."},void 0,!1,void 0,this)},void 0,!1,void 0,this),!W&&!S&&$.length>0&&xC.jsxDEV(lA,{flexDirection:"column",marginTop:1,children:$.map((_,j)=>{let r=EG.length+j,DA=J===r;return xC.jsxDEV(lA,{flexDirection:"row",children:[xC.jsxDEV(lA,{width:2,children:xC.jsxDEV(xA,{color:DA?oA.primary:oA.secondary,children:DA?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),xC.jsxDEV(lA,{flexDirection:"row",justifyContent:"space-between",flexGrow:1,children:[xC.jsxDEV(xA,{color:DA?oA.primary:void 0,children:_.title},void 0,!1,void 0,this),xC.jsxDEV(xA,{color:oA.secondary,children:_.created},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},_.id,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var GE=gD(vB(),1);import{promises as E$}from"fs";import C$ from"path";function P8(A,E){if(E<=0)return[];let I=[],F=A.split(/\r?\n/);for(let G of F){if(!G.trim()){I.push("");continue}let J=G.trim().split(/\s+/),N="";for(let L of J){if(N.length===0){if(L.length<=E)N=L;else{for(let X=0;X<L.length;X+=E)I.push(L.slice(X,X+E));N=""}continue}if(N.length+1+L.length<=E){N=`${N} ${L}`;continue}if(I.push(N),L.length<=E)N=L;else{for(let X=0;X<L.length;X+=E)I.push(L.slice(X,X+E));N=""}}if(N.length>0)I.push(N)}return I}var MB=gD(nE(),1),AU=["formatted","summary","wisdom","insights","facts"];function I$(A){if(!A)return null;if(A.analysis&&typeof A.analysis==="object")return A.analysis;if(A.data&&typeof A.data==="object")return A.data;return A}function u$(A){if(!A)return"—";let E=new Date(A);if(Number.isNaN(E.getTime()))return"—";return E.toLocaleString()}function Q$(A){let E=[],I=[];for(let F of AU){let G=A.find((J)=>J.id===F);if(G)E.push(G)}for(let F of A)if(!AU.includes(F.id))I.push(F);return I.sort((F,G)=>F.name.localeCompare(G.name)),[...E,...I]}function F$(A){try{let E=JSON.parse(A.data);if(E.type==="token")return{action:"append",content:E.content??""};if(E.type==="full")return{action:"replace",content:E.content??""};if(E.type==="done")return{action:"done",content:""};if(E.type==="error")return{action:"error",content:E.error??"Unknown stream error"}}catch{}if(A.event==="complete")try{let E=JSON.parse(A.data);return{action:"replace",content:E.content??E.data??E.markdown??A.data}}catch{return{action:"replace",content:A.data}}if(A.event==="chunk"||A.event==="delta"||!A.event)try{let E=JSON.parse(A.data);return{action:"append",content:E.text??E.content??E.chunk??E.delta??A.data}}catch{return{action:"append",content:A.data}}if(A.event==="done"||A.event==="end")return{action:"done",content:""};return null}function qZ({id:A,navigation:E,onBack:I,terminal:F,setFooterHints:G}){let[J,N]=GE.useState("transcript"),[L,X]=GE.useState(0),[S,y]=GE.useState(null),[m,W]=GE.useState(!1),[$,T]=GE.useState(0),[_,j]=GE.useState(null),[r,DA]=GE.useState(!1),[a,CA]=GE.useState(null),[QA,NA]=GE.useState(!1),[HA,XA]=GE.useState(null);GE.useEffect(()=>{if(!S)return;let rB=setTimeout(()=>y(null),5000);return()=>clearTimeout(rB)},[S]);let{data:MA,loading:vA,error:nA,refresh:JD}=qF(`/v1/analysis/${A}`,{},[A]),QD=GE.useRef(null),PD=MA??QD.current;GE.useEffect(()=>{if(MA)QD.current=MA},[MA]);let jA=vA&&!PD,OA=GE.useMemo(()=>I$(PD),[PD]),{data:RA,loading:qA,error:ZA,refresh:wA}=qF("/v1/prompts",{},[]),uD=GE.useRef(null),$D=RA??uD.current;GE.useEffect(()=>{if(RA)uD.current=RA},[RA]);let s=qA&&!$D,b=GE.useMemo(()=>{let rB=$D?.prompts??$D?.data??[];return Q$(rB.map((GD)=>({id:GD.id??GD.slug??"",name:GD.name??GD.title??GD.id??"",description:GD.description??""})))},[$D]);GE.useEffect(()=>{if($>=b.length&&b.length>0)T(Math.max(0,b.length-1))},[$,b.length]);let l=tB(OA??{},["title","videoTitle","name"])??"Untitled",_A=tB(OA??{},["channel","channelTitle","author"])??"Unknown",TA=tB(OA??{},["status","state"])??"—",dA=C2(OA?.duration??OA?.durationSec??OA?.durationSeconds),sA=tB(OA??{},["lang","outputLang","language"])??"—",qD=u$(OA?.createdAt),eD=OA?.cleanContent??OA?.content??OA?.transcript??"",pD=Math.max(20,F.columns-4),sD=GE.useMemo(()=>P8(eD||"No transcript content available.",pD),[eD,pD]),ID=GE.useMemo(()=>P8(_||"",pD),[_,pD]),CB=12+(S?2:0),i=Math.max(4,F.rows-CB),PA=J==="transcript"?sD:_!==null?ID:[],mA=Math.max(0,PA.length-i);GE.useEffect(()=>{X((rB)=>Math.min(rB,mA))},[mA]),GE.useEffect(()=>{X(0)},[J]);let hD=GE.useCallback(async(rB)=>{XA(rB.name),j(""),CA(null),NA(!0),X(0);let GD=await wB()??{},{token:uB,expired:YB}=kB(GD);if(!uB){CA(YB?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN."),NA(!1);return}let oB=$B(GD);try{let HE=await WB(`/spikes/${A}`,{method:"POST",body:{promptId:rB.id,outputLang:"en"},token:uB,apiUrl:oB});NA(!1);let bC=HE.content??HE.markdown;if(bC){j(bC);return}let rE=HE.spikeId??HE.id;if(!rE){CA("No spikeId returned from API");return}DA(!0);let RE="",WC=new AbortController;lD.current=WC;try{for await(let oC of I2(`/spikes/stream/${rE}`,{token:uB,apiUrl:oB,signal:WC.signal})){let P=F$(oC);if(!P)continue;if(P.action==="append")RE+=P.content,j(RE);else if(P.action==="replace")RE=P.content,j(RE);else if(P.action==="error"){CA(P.content);break}else if(P.action==="done")break}}finally{DA(!1),lD.current=null}}catch(HE){NA(!1),DA(!1),CA(HE.message)}},[A]),lD=GE.default.useRef(null);GE.useEffect(()=>{return()=>{lD.current?.abort()}},[]),GE.useEffect(()=>{if(r&&J==="spikes")X(mA)},[mA,r,J]),GE.useEffect(()=>{let rB=[{key:"Tab/1/2",description:"switch tab"}];if(J==="transcript")G([...rB,{key:"↑/↓",description:"scroll"},{key:"e",description:"export"},{key:"o",description:"open"},{key:"r",description:"refresh"},{key:"Esc",description:"back"}]);else if(_!==null)G([...rB,{key:"↑/↓",description:"scroll"},{key:"Esc",description:"back to prompts"}]);else G([...rB,{key:"↑/↓",description:"move"},{key:"Enter",description:"run spike"},{key:"r",description:"refresh"},{key:"Esc",description:"back"}])},[G,J,_]);let IB=GE.useCallback(async()=>{if(!OA){y("No transcription loaded.");return}W(!0),y(null);try{let rB=LR(OA);if(!rB.trim()){y("No transcript content available.");return}let GD=`xevol-${A}.md`,uB=C$.join(process.cwd(),GD);await E$.writeFile(uB,rB,"utf8"),y(`Exported to ${GD}`)}catch(rB){y(rB.message)}finally{W(!1)}},[OA,A]),hB=GE.useCallback(()=>{let rB=tB(OA??{},["url","youtubeUrl","videoUrl"])??`https://xevol.com/t/${encodeURIComponent(A)}`;YR(rB),y("Opened in browser")},[OA,A]);rC((rB,GD)=>{let uB=rB.toLowerCase();if(GD.tab){N((YB)=>YB==="transcript"?"spikes":"transcript"),j(null),XA(null);return}if(rB==="1"){N("transcript"),j(null),XA(null);return}if(rB==="2"){N("spikes"),j(null),XA(null);return}if(GD.escape||GD.backspace){if(J==="spikes"&&_!==null){lD.current?.abort(),j(null),XA(null),DA(!1),CA(null),X(0);return}I();return}if(uB==="r"){if(J==="spikes")wA();else JD();return}if(J==="transcript"){if(GD.upArrow||uB==="k"){X((YB)=>Math.max(0,YB-1));return}if(GD.downArrow||uB==="j"){X((YB)=>Math.min(mA,YB+1));return}if(uB==="e"){IB();return}if(uB==="o"){hB();return}}if(J==="spikes")if(_!==null){if(GD.upArrow||uB==="k"){X((YB)=>Math.max(0,YB-1));return}if(GD.downArrow||uB==="j"){X((YB)=>Math.min(mA,YB+1));return}}else{if(GD.upArrow||uB==="k"){T((YB)=>Math.max(0,YB-1));return}if(GD.downArrow||uB==="j"){T((YB)=>Math.min(b.length-1,YB+1));return}if(GD.return&&b[$]&&!QA&&!r){hD(b[$]);return}}});let kE=PA.slice(L,L+i),ZE=MB.jsxDEV(lA,{flexDirection:"row",marginBottom:1,children:[MB.jsxDEV(xA,{color:J==="transcript"?oA.primary:oA.secondary,bold:J==="transcript",children:[J==="transcript"?"▸ ":" ","Transcript"]},void 0,!0,void 0,this),MB.jsxDEV(xA,{color:oA.secondary,children:" │ "},void 0,!1,void 0,this),MB.jsxDEV(xA,{color:J==="spikes"?oA.primary:oA.secondary,bold:J==="spikes",children:[J==="spikes"?"▸ ":" ","Spikes"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this);return MB.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[jA&&MB.jsxDEV(aC,{label:"Fetching transcription…"},void 0,!1,void 0,this),nA&&MB.jsxDEV(xA,{color:oA.error,children:[nA," (press r to retry)"]},void 0,!0,void 0,this),!jA&&!nA&&OA&&MB.jsxDEV(lA,{flexDirection:"column",children:[MB.jsxDEV(xA,{color:oA.primary,children:l},void 0,!1,void 0,this),MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(xA,{color:oA.secondary,children:["Channel: ",_A]},void 0,!0,void 0,this)},void 0,!1,void 0,this),MB.jsxDEV(lA,{flexDirection:"row",children:[MB.jsxDEV(xA,{color:oA.secondary,children:"Status: "},void 0,!1,void 0,this),MB.jsxDEV(DG,{status:TA},void 0,!1,void 0,this),MB.jsxDEV(xA,{color:oA.secondary,children:[" ",TA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),MB.jsxDEV(lA,{flexDirection:"row",children:[MB.jsxDEV(xA,{color:oA.secondary,children:["Duration: ",dA]},void 0,!0,void 0,this),MB.jsxDEV(xA,{color:oA.secondary,children:[" · Lang: ",sA]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),MB.jsxDEV(lA,{children:MB.jsxDEV(xA,{color:oA.secondary,children:["Created: ",qD]},void 0,!0,void 0,this)},void 0,!1,void 0,this),MB.jsxDEV(lA,{marginTop:1,children:ZE},void 0,!1,void 0,this),J==="transcript"&&MB.jsxDEV(lA,{flexDirection:"column",children:MB.jsxDEV(xA,{children:kE.join(`
|
|
430
430
|
`)},void 0,!1,void 0,this)},void 0,!1,void 0,this),J==="spikes"&&_===null&&MB.jsxDEV(lA,{flexDirection:"column",children:[s&&MB.jsxDEV(aC,{label:"Fetching prompts…"},void 0,!1,void 0,this),ZA&&MB.jsxDEV(xA,{color:oA.error,children:[ZA," (press r to retry)"]},void 0,!0,void 0,this),!s&&!ZA&&b.length===0&&MB.jsxDEV(xA,{color:oA.secondary,children:"No prompts available."},void 0,!1,void 0,this),!s&&!ZA&&(()=>{let rB=Math.max(4,F.rows-14),GD=Math.max(0,b.length-rB),uB=Math.min(Math.max(0,$-Math.floor(rB/2)),GD);return b.slice(uB,uB+rB).map((oB,HE)=>{let rE=uB+HE===$,RE=AU.includes(oB.id);return MB.jsxDEV(lA,{children:[MB.jsxDEV(lA,{width:2,children:MB.jsxDEV(xA,{color:rE?oA.primary:oA.secondary,children:rE?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),MB.jsxDEV(lA,{flexDirection:"row",children:MB.jsxDEV(xA,{color:rE?oA.primary:void 0,children:[RE?"★ ":" ",oB.name]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},oB.id,!0,void 0,this)})})()]},void 0,!0,void 0,this),J==="spikes"&&_!==null&&MB.jsxDEV(lA,{flexDirection:"column",children:[MB.jsxDEV(xA,{color:oA.primary,children:[HA??"Spike",QA?" · creating…":r?" · streaming…":""]},void 0,!0,void 0,this),a&&MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(xA,{color:oA.error,children:[a," (press r to retry)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),QA&&!_&&MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(aC,{label:"Generating spike…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),r&&!_&&MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(aC,{label:"Waiting for content…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),!QA&&!r&&!a&&!_&&MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(xA,{color:oA.secondary,children:"No content returned."},void 0,!1,void 0,this)},void 0,!1,void 0,this),_?MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(xA,{children:kE.join(`
|
|
431
431
|
`)},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),!jA&&!nA&&!OA&&MB.jsxDEV(xA,{color:oA.secondary,children:"No transcription data available."},void 0,!1,void 0,this),m&&MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(aC,{label:"Exporting…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),S&&MB.jsxDEV(lA,{marginTop:1,children:MB.jsxDEV(xA,{color:oA.secondary,children:S},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var Uu=gD(vB(),1);var sC=gD(nE(),1);function g$(A){return A.spikes??A.data??A.items??[]}function zZ(A){return A.markdown??A.content??A.text??A.body??""}function G$(A){if(A.event==="complete")try{let E=JSON.parse(A.data);return E.data??E.content??E.markdown??""}catch{return A.data}if(A.event==="chunk"||A.event==="delta"||!A.event)try{let E=JSON.parse(A.data);return E.text??E.content??E.chunk??E.delta??A.data}catch{return A.data}if(A.event==="done"||A.event==="end"){if(!A.data||A.data==="[DONE]")return null;try{let E=JSON.parse(A.data);return E.content??E.text??null}catch{return null}}return null}function WZ({id:A,onBack:E,terminal:I,setFooterHints:F}){let[G,J]=Uu.useState(0),[N,L]=Uu.useState(null),[X,S]=Uu.useState(0),[y,m]=Uu.useState(""),[W,$]=Uu.useState(!1),[T,_]=Uu.useState(null),{data:j,loading:r,error:DA,refresh:a}=qF("/spikes",{query:{transcriptionId:A}},[A]),CA=Uu.useMemo(()=>g$(j??{}),[j]);Uu.useEffect(()=>{if(G>=CA.length)J(Math.max(0,CA.length-1))},[G,CA.length]),Uu.useEffect(()=>{if(N)F([{key:"↑/↓",description:"scroll"},{key:"r",description:"retry"},{key:"Esc",description:"back"}]);else F([{key:"↑/↓",description:"move"},{key:"Enter",description:"view"},{key:"r",description:"refresh"},{key:"Esc",description:"back"}])},[N,F]);let QA=CA[G];Uu.useEffect(()=>{let QD=!0,PD=new AbortController;return(async()=>{if(!N){m(""),$(!1),_(null);return}let OA=tB(N,["status","state"]),RA=OA?String(OA).toLowerCase():"",qA=tB(N,["id","spikeId"])?.toString(),ZA=zZ(N);if(m(ZA),_(null),!qA)return;if(RA!=="pending"&&RA!=="processing")return;let wA=await wB()??{},{token:uD,expired:$D}=kB(wA);if(!uD){_($D?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN.");return}let s=$B(wA);$(!0);let b=ZA??"";try{let l=[`/stream/spikes/${qA}`,`/spikes/stream/${qA}`],_A=!1,TA=null;for(let dA of l)try{for await(let sA of I2(dA,{token:uD,apiUrl:s,signal:PD.signal})){if(!QD)return;if(sA.event==="error"){_(`Stream error: ${sA.data}`);continue}let qD=G$(sA);if(qD)b+=qD,m(b)}_A=!0,TA=null;break}catch(sA){if(TA=sA,PD.signal.aborted)return}if(!_A&&TA)throw TA}catch(l){if(QD)_(l.message)}finally{if(QD)$(!1)}})(),()=>{QD=!1,PD.abort()}},[N]);let NA=Math.max(20,I.columns-4),HA=N?y||zZ(N):"",XA=Uu.useMemo(()=>P8(HA||"No spike content available.",NA),[HA,NA]),MA=7+(T?1:0)+(W?1:0),vA=Math.max(4,I.rows-MA),nA=Math.max(0,XA.length-vA);Uu.useEffect(()=>{if(W)S(nA);else S((QD)=>Math.min(QD,nA))},[nA,W]),rC((QD,PD)=>{let jA=QD.toLowerCase();if(N){if(PD.escape||PD.backspace){L(null),S(0);return}if(jA==="r"){_(null),L({...N});return}if(PD.upArrow||jA==="k"){S((OA)=>Math.max(0,OA-1));return}if(PD.downArrow||jA==="j")S((OA)=>Math.min(nA,OA+1));return}if(PD.escape||PD.backspace){E();return}if(PD.upArrow&&CA.length>0){J((OA)=>Math.max(0,OA-1));return}if(PD.downArrow&&CA.length>0){J((OA)=>Math.min(CA.length-1,OA+1));return}if(jA==="r"){a();return}if(PD.return&&QA)L(QA),S(0)});let JD=XA.slice(X,X+vA);return sC.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[r&&sC.jsxDEV(aC,{label:"Fetching spikes…"},void 0,!1,void 0,this),DA&&sC.jsxDEV(xA,{color:oA.error,children:[DA," (press r to retry)"]},void 0,!0,void 0,this),!r&&!DA&&N&&sC.jsxDEV(lA,{flexDirection:"column",children:[sC.jsxDEV(xA,{color:oA.primary,children:["Spike: ",tB(N,["promptName","promptId","prompt"])??"Spike"]},void 0,!0,void 0,this),W&&sC.jsxDEV(lA,{marginTop:1,children:sC.jsxDEV(xA,{color:oA.secondary,children:"streaming…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),T&&sC.jsxDEV(lA,{marginTop:1,children:sC.jsxDEV(xA,{color:oA.error,children:[T," (press r to retry)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),sC.jsxDEV(lA,{marginTop:1,children:sC.jsxDEV(xA,{children:JD.join(`
|
|
432
432
|
`)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),!r&&!DA&&!N&&sC.jsxDEV(lA,{flexDirection:"column",children:[CA.length===0&&sC.jsxDEV(xA,{color:oA.secondary,children:"No spikes found."},void 0,!1,void 0,this),CA.map((QD,PD)=>{let jA=PD===G,OA=tB(QD,["promptName","promptId","prompt"])??"Spike",RA=tB(QD,["status","state"])??"—";return sC.jsxDEV(lA,{children:[sC.jsxDEV(lA,{width:2,children:sC.jsxDEV(xA,{color:jA?oA.primary:oA.secondary,children:jA?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),sC.jsxDEV(lA,{flexDirection:"row",children:[sC.jsxDEV(DG,{status:RA},void 0,!1,void 0,this),sC.jsxDEV(xA,{color:jA?oA.primary:void 0,children:[" ",OA]},void 0,!0,void 0,this),sC.jsxDEV(xA,{color:oA.secondary,children:[" (",RA,")"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},tB(QD,["id","spikeId"])??`${OA}-${PD}`,!0,void 0,this)})]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}var OZ=gD(vB(),1);var o4=gD(nE(),1);function _Z({title:A,onBack:E,setFooterHints:I}){return OZ.useEffect(()=>{I([{key:"Esc",description:"back"},{key:"q",description:"quit"}])},[I]),rC((F,G)=>{if(G.escape||G.backspace)E()}),o4.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[o4.jsxDEV(xA,{color:oA.primary,children:A},void 0,!1,void 0,this),o4.jsxDEV(lA,{marginTop:1,children:o4.jsxDEV(xA,{color:oA.secondary,children:"Coming soon."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var dI=gD(vB(),1);var cE=gD(nE(),1),j8=["en","de","es","fr","it","ja","kk","ko","ru"];function H$(A){let E=A.usage??{},I=A.limits??{},F=A.period??"month",G=A.current_period_end,J=A.plan??"free",N=A.status??"active",L=E.transcriptions??0,X=I.transcriptions??"∞",S=[];if(S.push(`Status: ${N}`),S.push(`Plan: ${J}`),S.push(`Usage: ${L} / ${X} transcriptions (this ${F})`),G){let y=new Date(G);if(!Number.isNaN(y.getTime())){let m=Math.max(0,Math.ceil((y.getTime()-Date.now())/86400000));S.push(`Renews: ${y.toLocaleDateString()} (${m} days)`)}}return S}function SZ({onBack:A,setFooterHints:E}){let[I,F]=dI.useState(null),[G,J]=dI.useState(!0),[N,L]=dI.useState(null),[X,S]=dI.useState(null),[y,m]=dI.useState(0),[W,$]=dI.useState(null),[T,_]=dI.useState(""),{data:j,loading:r,error:DA}=qF("/auth/cli/status"),a=dI.useMemo(()=>j?H$(j):[],[j]);dI.useEffect(()=>{if(!X)return;let NA=setTimeout(()=>S(null),5000);return()=>clearTimeout(NA)},[X]),dI.useEffect(()=>{let NA=!0;return(async()=>{J(!0),L(null);try{let HA=await wB()??{};if(NA)F(HA)}catch(HA){if(NA)L(HA.message)}finally{if(NA)J(!1)}})(),()=>{NA=!1}},[]),dI.useEffect(()=>{E([{key:"↑/↓",description:"move"},{key:"Enter",description:"edit/confirm"},{key:"Tab",description:"confirm"},{key:"Esc",description:"back/cancel"},{key:"q",description:"quit"}])},[E]);let CA=dI.useMemo(()=>{let NA=I??{};return[{key:"apiUrl",label:"API URL",value:NA.apiUrl??uJ,editable:!1},{key:"default.lang",label:"Default language",value:NA.default?.lang??"—",editable:!0},{key:"default.limit",label:"Default page limit",value:NA.default?.limit?.toString()??"—",editable:!0},{key:"workspaceId",label:"Active workspace",value:NA.workspaceId??"—",editable:!1}]},[I]),QA=dI.useCallback(async()=>{if(!W)return;if(!I)return;S(null),L(null);let NA={...I};if(W==="apiUrl"){let HA=T.trim();NA.apiUrl=HA.length>0?HA:void 0}if(W==="default.lang"){let HA=T.trim(),XA=j8.includes(HA)?HA:"en";NA.default={...NA.default,lang:XA}}if(W==="default.limit"){let HA=Number(T.trim());if(!Number.isFinite(HA)||HA<=0){L("Default page limit must be a positive number.");return}NA.default={...NA.default,limit:HA}}try{await FJ(NA),F(NA),S("Saved settings."),$(null)}catch(HA){L(HA.message)}},[I,T,W]);return rC((NA,HA)=>{let XA=NA.toLowerCase();if(W){if(HA.escape){$(null),_(""),S("Edit canceled.");return}if(HA.tab){QA();return}if(W==="default.lang"){let MA=Math.max(0,j8.indexOf(T));if(HA.upArrow||HA.leftArrow){let vA=MA<=0?j8.length-1:MA-1;_(j8[vA]);return}if(HA.downArrow||HA.rightArrow){let vA=MA>=j8.length-1?0:MA+1;_(j8[vA]);return}if(HA.return)QA();return}return}if(HA.escape||HA.backspace){A();return}if(XA==="r"){J(!0),L(null),S(null),(async()=>{try{let MA=await wB()??{};F(MA)}catch(MA){L(MA.message)}finally{J(!1)}})();return}if(HA.upArrow||XA==="k"){m((MA)=>Math.max(0,MA-1));return}if(HA.downArrow||XA==="j"){m((MA)=>Math.min(CA.length-1,MA+1));return}if(HA.return){let MA=CA[y];if(!MA?.editable)return;if($(MA.key),MA.key==="default.lang"){let vA=j8.includes(MA.value)?MA.value:"en";_(vA);return}_(MA.value==="—"?"":MA.value)}}),cE.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[cE.jsxDEV(xA,{color:oA.primary,children:"Settings"},void 0,!1,void 0,this),cE.jsxDEV(lA,{flexDirection:"column",marginTop:1,marginBottom:1,children:[cE.jsxDEV(xA,{color:oA.secondary,bold:!0,children:"Usage"},void 0,!1,void 0,this),r&&cE.jsxDEV(aC,{label:"Loading usage…"},void 0,!1,void 0,this),DA&&cE.jsxDEV(xA,{color:oA.error,children:DA},void 0,!1,void 0,this),!r&&!DA&&j&&cE.jsxDEV(lA,{flexDirection:"column",children:a.map((NA)=>cE.jsxDEV(xA,{color:oA.secondary,children:NA},NA,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G&&cE.jsxDEV(lA,{marginTop:1,children:cE.jsxDEV(aC,{label:"Loading settings…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),N&&cE.jsxDEV(lA,{marginTop:1,children:cE.jsxDEV(xA,{color:oA.error,children:[N," (press r to retry)"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),!G&&!N&&cE.jsxDEV(lA,{flexDirection:"column",marginTop:1,children:[CA.map((NA,HA)=>{let XA=HA===y,MA=W===NA.key,vA=MA&&(NA.key==="apiUrl"||NA.key==="default.limit"),nA=MA&&NA.key==="default.lang";return cE.jsxDEV(lA,{flexDirection:"row",marginBottom:1,children:[cE.jsxDEV(lA,{width:2,children:cE.jsxDEV(xA,{color:XA?oA.primary:oA.secondary,children:XA?"›":" "},void 0,!1,void 0,this)},void 0,!1,void 0,this),cE.jsxDEV(lA,{width:20,children:cE.jsxDEV(xA,{color:XA?oA.primary:void 0,children:NA.label},void 0,!1,void 0,this)},void 0,!1,void 0,this),cE.jsxDEV(lA,{flexGrow:1,children:vA?cE.jsxDEV(AG,{value:T,onChange:_,onSubmit:()=>void QA()},void 0,!1,void 0,this):nA?cE.jsxDEV(xA,{color:oA.primary,children:T||NA.value},void 0,!1,void 0,this):cE.jsxDEV(xA,{color:oA.secondary,children:NA.value},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},NA.key,!0,void 0,this)}),cE.jsxDEV(xA,{color:oA.secondary,children:"Workspace changes use the workspace switch."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),W==="default.lang"&&cE.jsxDEV(lA,{marginTop:1,children:cE.jsxDEV(xA,{color:oA.secondary,children:"Use ↑/↓ to change language · Enter/Tab to confirm"},void 0,!1,void 0,this)},void 0,!1,void 0,this),X&&cE.jsxDEV(lA,{marginTop:1,children:cE.jsxDEV(xA,{color:oA.secondary,children:X},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}var bu=gD(vB(),1);var zC=gD(nE(),1),R$=/^https?:\/\/(?:www\.|m\.|music\.)?(?:youtube\.com\/(?:watch|shorts|live|embed)|youtu\.be\/)/i;function w$(A){if(A.event==="complete")try{let E=JSON.parse(A.data);return E.data??E.content??E.markdown??""}catch{return A.data}if(A.event==="chunk"||A.event==="delta"||!A.event)try{let E=JSON.parse(A.data);return E.text??E.content??E.chunk??E.delta??A.data}catch{return A.data}if(A.event==="done"||A.event==="end"){if(!A.data||A.data==="[DONE]")return null;try{let E=JSON.parse(A.data);return E.content??E.text??null}catch{return null}}return null}function $Z({onBack:A,terminal:E,setFooterHints:I}){let[F,G]=bu.useState(""),[J,N]=bu.useState("input"),[L,X]=bu.useState(""),[S,y]=bu.useState(""),[m,W]=bu.useState(""),[$,T]=bu.useState(0),[_,j]=bu.useState("");bu.useEffect(()=>{if(J==="input")I([{key:"Enter",description:"submit"},{key:"Esc",description:"cancel"}]);else if(J==="done")I([{key:"↑/↓",description:"scroll"},{key:"Esc",description:"back"}]);else if(J==="error")I([{key:"r",description:"retry"},{key:"Esc",description:"back"}]);else if(J==="streaming")I([{key:"↑/↓",description:"scroll"},{key:"Esc",description:"back"}]);else I([{key:"",description:"Processing…"}])},[J,I]);let r=Math.max(20,E.columns-4),DA=P8(m||" ",r),a=10,CA=Math.max(4,E.rows-a),QA=Math.max(0,DA.length-CA);bu.useEffect(()=>{if(J==="streaming")T(QA)},[QA,J]);let NA=bu.useCallback(async(MA)=>{try{let vA=await wB()??{},{token:nA,expired:JD}=kB(vA);if(!nA){y(JD?"Token expired. Run `xevol login` to re-authenticate.":"Not logged in. Use xevol login --token <token> or set XEVOL_TOKEN."),N("error");return}let QD=$B(vA);N("submitting"),X("Submitting URL…");let PD=await WB("/v1/add",{query:{url:MA,outputLang:"en"},token:nA,apiUrl:QD}),jA=W4(PD);if(!jA){y("No transcription ID returned from API."),N("error");return}N("processing");let OA=120,RA=null;for(let _A=0;_A<OA;_A++){let TA=await WB(`/v1/status/${jA}`,{token:nA,apiUrl:QD}),dA=N8(TA)?.toLowerCase()??"pending",sA=_A*5;if(X(`Processing… (${sA}s)`),dA.includes("complete")){let qD=tB(TA,["title","videoTitle","name"]);if(qD)j(qD);RA=TA;break}if(dA.includes("error")||dA.includes("failed")){y(`Transcription failed: ${dA}`),N("error");return}await new Promise((qD)=>setTimeout(qD,5000))}if(!RA){y("Timed out waiting for transcription to complete."),N("error");return}N("creating-spike"),X("Creating spike…");let qA=await WB(`/spikes/${jA}`,{method:"POST",body:{promptId:"formatted",outputLang:"en"},token:nA,apiUrl:QD}),ZA=qA.spikeId,wA=qA.content??qA.markdown;if(wA){W(wA),N("done");return}if(!ZA){y("No spike ID returned — spike may not have been created."),N("error");return}N("streaming"),X("Streaming content…");let uD=new AbortController,$D="",s=[`/stream/spikes/${ZA}`,`/spikes/stream/${ZA}`],b=!1,l=null;for(let _A of s)try{for await(let TA of I2(_A,{token:nA,apiUrl:QD,signal:uD.signal})){if(TA.event==="error")continue;let dA=w$(TA);if(dA)$D+=dA,W($D)}b=!0;break}catch(TA){l=TA}if(!b&&l){if($D)N("done");else y(l.message),N("error");return}N("done")}catch(vA){y(vA.message),N("error")}},[]),HA=bu.useCallback((MA)=>{let vA=MA.trim();if(!vA)return;if(!R$.test(vA)){y("Not a valid YouTube URL."),N("error");return}NA(vA)},[NA]);rC((MA,vA)=>{if(J==="input"){if(vA.escape){A();return}return}if(J==="error"){if(vA.escape||vA.backspace){A();return}if(MA.toLowerCase()==="r"){y(""),N("input");return}return}if(J==="done"||J==="streaming"){if(vA.escape||vA.backspace){A();return}if(vA.upArrow||MA.toLowerCase()==="k"){T((nA)=>Math.max(0,nA-1));return}if(vA.downArrow||MA.toLowerCase()==="j"){T((nA)=>Math.min(QA,nA+1));return}}});let XA=DA.slice($,$+CA);return zC.jsxDEV(lA,{flexDirection:"column",paddingX:1,paddingY:1,children:[zC.jsxDEV(xA,{color:oA.primary,children:"Add YouTube URL"},void 0,!1,void 0,this),J==="input"&&zC.jsxDEV(lA,{marginTop:1,flexDirection:"row",children:[zC.jsxDEV(xA,{color:oA.secondary,children:"URL: "},void 0,!1,void 0,this),zC.jsxDEV(AG,{value:F,onChange:G,onSubmit:HA,placeholder:"https://youtube.com/watch?v=..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(J==="submitting"||J==="processing"||J==="creating-spike")&&zC.jsxDEV(lA,{marginTop:1,children:zC.jsxDEV(aC,{label:L},void 0,!1,void 0,this)},void 0,!1,void 0,this),J==="streaming"&&zC.jsxDEV(lA,{flexDirection:"column",marginTop:1,children:[_&&zC.jsxDEV(xA,{color:oA.secondary,children:_},void 0,!1,void 0,this),zC.jsxDEV(lA,{marginTop:1,children:zC.jsxDEV(aC,{label:"Streaming…"},void 0,!1,void 0,this)},void 0,!1,void 0,this),zC.jsxDEV(lA,{marginTop:1,flexDirection:"column",children:zC.jsxDEV(xA,{children:XA.join(`
|