| 8073 | `).replaceAll("\t"," ");if(M.length===0){let V3=jR(C1);if(V3!=="prompt")W(V3),C1=fp(C1)}let Dq=Sh6(C1),hK=Math.min(td-10,2);if(C1.length>cE8||Dq>hK){let V3=B7.current++,X$={id:V3,type:"text",content:C1};E((_j)=>({..._j,[V3]:X$})),mM(cB8(V3,Dq))}else mM(C1)}let wx=Gq.useCallback((f8,C1)=>{if(!B1.current)return f8;if(B1.current=!1,_VK(f8,C1))return" "+f8;return f8},[]);function mM(f8){M$(M,n,V);let C1=M.slice(0,n)+f8+M.slice(n);J6(C1),l(n+f8.length)}let Ip=Km(()=>{},()=>Z()),sd=Gq.useCallback(()=>{let f8=PV8(M,n);if(!f8)return!1;if(J6(f8.text),W("prompt"),l(f8.cursorOffset),f8.images.length>0)E((C1)=>{let Dq={...C1};for(let hK of f8.images)Dq[hK.id]=hK;return Dq});return!0},[J6,W,M,n,E]);ScK(v,function(f8){d("tengu_ext_at_mentioned",{});let C1,Dq=riK.relative(Z8(),f8.filePath);if(f8.lineStart&&f8.lineEnd)C1=f8.lineStart===f8.lineEnd?`@${Dq}#L${f8.lineStart} `:`@${Dq}#L${f8.lineStart}-${f8.lineEnd} `;else C1=`@${Dq} `;let hK=M[n-1]??" ";if(!/\s/.test(hK))C1=` ${C1}`;mM(C1)});let up=Gq.useCallback(()=>{if(M2){let f8=sj();if(f8)J6(f8.text),l(f8.cursorOffset),E(f8.pastedContents)}},[M2,sj,J6,E]),p6=Gq.useCallback(()=>{M$(M,n,V);let f8=M.slice(0,n)+` |
| 8074 | `+M.slice(n);J6(f8),l(n+1)},[M,n,J6,l,M$,V]),c6=Gq.useCallback(async()=>{d("tengu_external_editor_used",{}),s_(!0);try{let f8=await Wy(M,V);if(f8.error)w3({key:"external-editor-error",text:f8.error,color:"warning",priority:"high"});if(f8.content!==null&&f8.content!==M)M$(M,n,V),J6(f8.content),l(f8.content.length)}catch(f8){if(f8 instanceof Error)H6(f8);w3({key:"external-editor-error",text:`External editor failed: ${d6(f8)}`,color:"warning",priority:"high"})}finally{s_(!1)}},[M,n,V,M$,J6,w3]),V8=Gq.useCallback(()=>{if(M.trim()===""&&D!==void 0)J6(D.text),l(D.cursorOffset),E(D.pastedContents),f(void 0);else if(M.trim()!=="")f({text:M,cursorOffset:n,pastedContents:V}),J6(""),l(0),E({}),b8((f8)=>{if(f8.hasUsedStash)return f8;return{...f8,hasUsedStash:!0}})},[M,n,D,J6,f,V,E]),G1=Gq.useCallback(()=>{if(qK((f8)=>!f8),t)q6(!1)},[t]),d1=Gq.useCallback(()=>{if(v_((f8)=>!f8),t)q6(!1)},[t]),t7=Gq.useCallback(()=>{if(FA((f8)=>!f8),t)q6(!1)},[t]),NK=Gq.useCallback(()=>{if(nq()&&M8&&h6){let hK={..._,mode:M8.permissionMode},V3=rJ6(hK,void 0);d("tengu_mode_cycle",{to:V3});let X$=h6;if(f6((_j)=>{let X2=_j.tasks[X$];if(!X2||X2.type!=="in_process_teammate")return _j;if(X2.permissionMode===V3)return _j;return{..._j,tasks:{..._j.tasks,[X$]:{...X2,permissionMode:V3}}}}),t)q6(!1);return}N(`[auto-mode] handleCycleMode: currentMode=${_.mode} isAutoModeAvailable=${_.isAutoModeAvailable} showAutoModeOptIn=${UA} timeoutPending=${!!uK.current}`);let f8=rJ6(_,C6),C1=!1;if(C1=f8==="auto"&&_.mode!=="auto"&&!fl()&&!h6,C1){if(e2(_.mode),f6((hK)=>({...hK,toolPermissionContext:{...hK.toolPermissionContext,mode:"auto"}})),z({..._,mode:"auto"}),uK.current)clearTimeout(uK.current);if(uK.current=setTimeout((hK,V3)=>{hK(!0),V3.current=null},400,oO,uK),t)q6(!1);return}if(UA||uK.current){if(UA)d("tengu_auto_mode_opt_in_dialog_decline",{});if(oO(!1),uK.current)clearTimeout(uK.current),uK.current=null;e2(null)}let{context:Dq}=fnK(_,C6);if(d("tengu_mode_cycle",{to:f8}),f8==="plan")b8((hK)=>({...hK,lastPlanModeUse:Date.now()}));if(f6((hK)=>({...hK,toolPermissionContext:{...Dq,mode:f8}})),z({...Dq,mode:f8}),ri1(f8,C6?.teamName),t)q6(!1)},[_,C6,h6,M8,f6,z,t,UA]),K3=Gq.useCallback(()=>{{oO(!1),e2(null);let f8=ca(nY??_.mode,"auto",_);if(f6((C1)=>({...C1,toolPermissionContext:{...f8,mode:"auto"}})),z({...f8,mode:"auto"}),t)q6(!1)}},[t,q6,nY,_,f6,z]),vY=Gq.useCallback(()=>{if(N(`[auto-mode] handleAutoModeOptInDecline: reverting to ${nY}, setting isAutoModeAvailable=false`),oO(!1),uK.current)clearTimeout(uK.current),uK.current=null;if(nY)ge1(!1),f6((f8)=>({...f8,toolPermissionContext:{...f8.toolPermissionContext,mode:nY,isAutoModeAvailable:!1}})),z({..._,mode:nY,isAutoModeAvailable:!1}),e2(null)},[nY,_,f6,z]),k3=Gq.useCallback(()=>{RN6().then((f8)=>{if(f8)tX(f8.base64,f8.mediaType);else{let C1=RH("chat:imagePaste","Chat","ctrl+v"),Dq=a1.isSSH()?"No image found in clipboard. You're SSH'd; try scp?":`No image found in clipboard. Use ${C1} to paste images.`;w3({key:"no-image-in-clipboard",text:Dq,priority:"immediate",timeoutMs:1000})}})},[w3,tX]),sO=VN();Gq.useEffect(()=>{if(!sO||G6)return;return sO.registerHandler({action:"chat:submit",context:"Chat",handler:()=>{aO(M)}})},[sO,G6,aO,M]);let Kj=Gq.useMemo(()=>({"chat:undo":up,"chat:newline":p6,"chat:externalEditor":c6,"chat:stash":V8,"chat:modelPicker":G1,"chat:thinkingToggle":t7,"chat:cycleMode":NK,"chat:imagePaste":k3}),[up,p6,c6,V8,G1,t7,NK,k3]);o7(Kj,{context:"Chat",isActive:!G6}),P1("chat:messageActions",()=>T?.(),{context:"Chat",isActive:!G6&&!F}),P1("chat:fastMode",d1,{context:"Chat",isActive:!G6&&BK()&&oJ()}),P1("help:dismiss",()=>{q6(!1)},{context:"Help",isActive:t});let ZO=!1;P1("app:quickOpen",()=>{},{context:"Global",isActive:ZO}),P1("app:globalSearch",()=>{},{context:"Global",isActive:ZO}),P1("history:search",()=>{},{context:"Global",isActive:!1}),P1("app:interrupt",()=>{ou(f6)},{context:"Global",isActive:!O&&E6.status==="active"}),o7({"footer:up":()=>{fO(-1,!0)},"footer:down":()=>{if(B$&&!T7){I(!0),Iz(null);return}fO(1)},"footer:next":()=>{if(B$&&T7){let f8=1+h1.length;xz((C1)=>(C1+1)%f8);return}fO(1)},"footer:previous":()=>{if(B$&&T7){let f8=1+h1.length;xz((C1)=>(C1-1+f8)%f8);return}fO(-1)},"footer:openSelected":()=>{if(x6==="selecting-agent")return;switch(s3){case"companion":break;case"tasks":if(T7)if(F3===0)KZ(f6);else{let f8=h1[F3-1];if(f8)cb(f8.id,f6)}else if(S3===0&&E9>0)KZ(f6);else{let f8=mY7(N6)[S3-1]?.id;if(f8)cb(f8,f6);else I(!0),Iz(null)}break;case"tmux":break;case"bagel":break;case"teams":eq(!0),Iz(null);break;case"bridge":X9(!0),Iz(null);break}},"footer:clearSelection":()=>{Iz(null)},"footer:close":()=>{if(B$&&S3>=1){let f8=mY7(N6)[S3-1];if(!f8)return!1;if(x6==="viewing-agent"&&f8.id===h6){k7(M.slice(0,n)+"x"+M.slice(n)),l(n+1);return}if(iSK(f8.id,f6),f8.status!=="running")P9((C1)=>Math.max(S4,C1-1));return}return!1}},{context:"Footer",isActive:!!s3&&!G6}),k4((f8,C1)=>{if(j7||Xq||Y_||t_)return;if(Z1()==="macos"&&PnK(f8)){let Dq=bY7[f8],hK=d77();w3({key:"option-meta-hint",jsx:hK?Mq.createElement(k,{dimColor:!0},"To enable ",Dq,", set ",Mq.createElement(k,{bold:!0},"Option as Meta")," in"," ",hK," preferences (⌘,)"):Mq.createElement(k,{dimColor:!0},"To enable ",Dq,", run /terminal-setup"),priority:"immediate",timeoutMs:5000})}if(s3&&f8&&!C1.ctrl&&!C1.meta&&!C1.escape&&!C1.return){k7(M.slice(0,n)+f8+M.slice(n)),l(n+f8.length);return}if(n===0&&(C1.escape||C1.backspace||C1.delete||C1.ctrl&&f8==="u"))W("prompt"),q6(!1);if(t&&M===""&&(C1.backspace||C1.delete))q6(!1);if(C1.escape){if(E6.status==="active"){ou(f6);return}if(K6&&c){c();return}if(t){q6(!1);return}if(s3)return;if(l6.some(UO6)){sd();return}if(j.length>0&&!M&&!O)Ip()}if(C1.return&&t)q6(!1)});let Iw=niK(),Vk=BK()?yg():!1,uy=BK()?K8&&(oJ()||Vk):!1,ts=QiK(uy??!1),jx=F6?void 0:PvK(H8,j6);Gq.useEffect(()=>{if(!jx){uz("effort-level");return}w3({key:"effort-level",text:jx,priority:"high",timeoutMs:12000})},[jx,w3,uz]),IcK();let es=!1,{columns:Hx,rows:td}=t1(),Nk=Hx-3-xcK(Hx,es),oH=p4()?Math.max(JUY,Math.floor(td/2)-HUY):void 0,HW=Gq.useCallback((f8)=>{if(!M||F)return;let C1=k5.fromText(M,Nk,n),Dq=C1.getViewportStartLine(oH),hK=C1.measuredText.getOffsetFromPosition({line:f8.localRow+Dq,column:f8.localCol});l(hK)},[M,Nk,F,n,oH]),uR=Gq.useCallback((f8)=>I(f8??!0),[I]),j36=xw&&J1?J1:H7,ej=Gq.useMemo(()=>M.includes(` |
| 8075 | `),[M]),my=Gq.useCallback((f8,C1)=>{let Dq=!1;f6((X$)=>{return Dq=BK()&&!jJ(f8)&&!!X$.fastMode,{...X$,mainLoopModel:f8,mainLoopModelForSession:null,...Dq&&{fastMode:!1}}}),qK(!1);let hK=(K8??!1)&&!Dq,V3=`Model set to ${yV(f8)}`;if(BH6(f8,hK,HJ()))V3+=" · Billed as extra usage";if(Dq)V3+=" · Fast mode OFF";w3({key:"model-switched",jsx:Mq.createElement(k,null,V3),priority:"immediate",timeoutMs:3000}),d("tengu_model_picker_hotkey",{model:f8})},[f6,w3,K8]),ed=Gq.useCallback(()=>{qK(!1)},[]),mR=Gq.useMemo(()=>{if(!N5)return null;return Mq.createElement(u,{flexDirection:"column",marginTop:1},Mq.createElement(pH6,{initial:W6,sessionModel:v6,onSelect:my,onCancel:ed,isStandaloneCommand:!0,showFastModeNotice:BK()&&K8&&jJ(W6)&&oJ()}))},[N5,W6,v6,my,ed]),qc=Gq.useCallback((f8)=>{if(v_(!1),f8)w3({key:"fast-mode-toggled",jsx:Mq.createElement(k,null,f8),priority:"immediate",timeoutMs:3000})},[w3]),vM6=Gq.useMemo(()=>{if(!e5)return null;return Mq.createElement(u,{flexDirection:"column",marginTop:1},Mq.createElement(vU8,{onDone:qc,unavailableReason:u06()}))},[e5,qc]),Jx=Gq.useCallback((f8)=>{f6((C1)=>({...C1,thinkingEnabled:f8})),FA(!1),d("tengu_thinking_toggled_hotkey",{enabled:f8}),w3({key:"thinking-toggled-hotkey",jsx:Mq.createElement(k,{color:f8?"suggestion":void 0,dimColor:!f8},"Thinking ",f8?"on":"off"),priority:"immediate",timeoutMs:3000})},[f6,w3]),Kc=Gq.useCallback(()=>{FA(!1)},[]),qt=Gq.useMemo(()=>{if(!bw)return null;return Mq.createElement(u,{flexDirection:"column",marginTop:1},Mq.createElement(bnK,{currentValue:m6??!0,onSelect:Jx,onCancel:Kc,isMidConversation:j.some((f8)=>f8.type==="assistant")}))},[bw,m6,Jx,Kc,j.length]),_f=Gq.useMemo(()=>UA?Mq.createElement(uY7,{onAccept:K3,onDecline:vY}):null,[UA,K3,vY]);if(ghK(p4()?_f:null),x)return Mq.createElement(WU8,{onDone:()=>I(!1),toolUseContext:p(j,[],new AbortController,j6),initialDetailTaskId:typeof x==="string"?x:void 0});if(nq()&&j7)return Mq.createElement(mnK,{initialTeams:j$,onDone:()=>{eq(!1)}});if(mR)return mR;if(vM6)return vM6;if(qt)return qt;if(AK)return Mq.createElement(vnK,{onDone:()=>{X9(!1),Iz(null)}});let mp={multiline:!0,onSubmit:aO,onChange:k7,value:P7?fp(typeof P7==="string"?P7:P7.display):M,onHistoryUp:sX,onHistoryDown:P5,onHistoryReset:Uq,placeholder:j36,onExit:B,onExitMessage:(f8,C1)=>a({show:f8,key:C1}),onImagePaste:tX,columns:Nk,maxVisibleLines:oH,disableCursorMovementForUpDownKeys:jW.length>0||!!s3,disableEscapeDoublePress:jW.length>0,cursorOffset:n,onChangeCursorOffset:l,onPaste:Ox,onIsPastingChange:j2,focus:!F&&!G6&&!s3,showCursor:!s3&&!F&&!v3,argumentHint:gJ,onUndo:M2?()=>{let f8=sj();if(f8)J6(f8.text),l(f8.cursorOffset),E(f8.pastedContents)}:void 0,highlights:_z,inlineGhostText:GT,inputFilter:wx},jA=()=>{let f8={bash:"bashBorder"};if(f8[P])return f8[P];if(cW())return"promptBorder";let C1=vj();if(C1&&GJ.includes(C1))return vX[C1];return"promptBorder"};if(wA)return Mq.createElement(u,{flexDirection:"row",alignItems:"center",justifyContent:"center",borderColor:jA(),borderStyle:"round",borderLeft:!1,borderRight:!1,borderBottom:!0,width:"100%"},Mq.createElement(k,{dimColor:!0,italic:!0},"Save and close editor to continue..."));let _c=ea()?Mq.createElement(sY7,{...mp,initialMode:S,onModeChange:R}):Mq.createElement(r3,{...mp});return Mq.createElement(u,{flexDirection:"column",marginTop:F6?0:1},!p4()&&Mq.createElement(Oc8,null),e&&Mq.createElement(u,{marginTop:1,marginLeft:2},Mq.createElement(k,{dimColor:!0},"Waiting for permission…")),Mq.createElement(RiK,{hasStash:D!==void 0}),Iw?Mq.createElement(Mq.Fragment,null,Mq.createElement(k,{color:Iw.bgColor},Iw.text?Mq.createElement(Mq.Fragment,null,"─".repeat(Math.max(0,Hx-O1(Iw.text)-4)),Mq.createElement(k,{backgroundColor:Iw.bgColor,color:"inverseText"}," ",Iw.text," "),"──"):"─".repeat(Hx)),Mq.createElement(u,{flexDirection:"row",width:"100%"},Mq.createElement(z$7,{mode:P,isLoading:O,viewingAgentName:X1,viewingAgentColor:j1}),Mq.createElement(u,{flexGrow:1,flexShrink:1,onClick:HW},_c)),Mq.createElement(k,{color:Iw.bgColor},"─".repeat(Hx))):Mq.createElement(u,{flexDirection:"row",alignItems:"flex-start",justifyContent:"flex-start",borderColor:jA(),borderStyle:"round",borderLeft:!1,borderRight:!1,borderBottom:!0,width:"100%",borderText:PUY(uy??!1,ts,Vk)},Mq.createElement(z$7,{mode:P,isLoading:O,viewingAgentName:X1,viewingAgentColor:j1}),Mq.createElement(u,{flexGrow:1,flexShrink:1,onClick:HW},_c)),Mq.createElement(ViK,{apiKeyStatus:Y,debug:q,exitMessage:s,vimMode:ea()?S:void 0,mode:P,autoUpdaterResult:J,isAutoUpdating:w6,verbose:w,onAutoUpdaterResult:H,onChangeIsUpdating:o,suggestions:jW,selectedSuggestion:kk,maxColumnWidth:TT,toolPermissionContext:X7,helpOpen:t,suppressHint:M.length>0,isLoading:O,tasksSelected:B$,teamsSelected:DO,bridgeSelected:J2,tmuxSelected:H$,teammateFooterIndex:F3,ideSelection:K,mcpClients:v,isPasting:Mz,isInputWrapped:ej,messages:j,isSearching:F,historyQuery:Y1,setHistoryQuery:Y7,historyFailedMatch:L1,onOpenTasksDialog:p4()?uR:void 0}),p4()?null:_f,p4()?Mq.createElement(u,{position:"absolute",marginTop:F6?-2:-1,height:jW.length===0&&!UA?1:0,width:"100%",paddingLeft:2,paddingRight:1,flexDirection:"column",justifyContent:"flex-end",overflow:"hidden"},Mq.createElement(xd8,{apiKeyStatus:Y,autoUpdaterResult:J,debug:q,isAutoUpdating:w6,verbose:w,messages:j,onAutoUpdaterResult:H,onChangeIsUpdating:o,ideSelection:K,mcpClients:v,isInputWrapped:ej})):null)}function XUY(q){let K=0;for(let _ of q)if(_.type==="user"){if(_.imagePasteIds){for(let z of _.imagePasteIds)if(z>K)K=z}if(Array.isArray(_.message.content)){for(let z of _.message.content)if(z.type==="text"){let Y=Od(z.text);for(let $ of Y)if($.id>K)K=$.id}}}return K+1}function PUY(q,K,_){if(!q)return;return{content:` ${K?`${jJ6(!0,_)} ${$8.dim("/fast")}`:jJ6(!0,_)} `,position:"top",align:"end",offset:0}}var Mq,Gq,HUY=5,JUY=3,oiK;var aiK=y(()=>{x3();h$();fC6();CcK();k8();C7();I7();p2();CT();qY7();mcK();f37();u57();SH6();yA();T0();eF8();Ib();XlK();Da6();WlK();flK();yQ();GlK();t4();JnK();Q5();s6();yU();tu();Oq();zw6();Yw6();bE6();x56();Hb();gP();$0();i$();CH6();V1();_8();y_();y8();Rg8();xf();_M();hN6();Ko();WnK();E8();aq();xY7();fX();vK();DR();U1();wg8();VY7();yY7();Jb();RD();AY();JG();RJ();WL();vp8();IY7();rd8();knK();a5();ad8();Ng8();W37();LnK();RnK();Lg8();SnK();CH();xnK();_37();I56();gnK();$iK();Id8();NiK();EiK();$$7();hiK();IiK();FiK();diK();iiK();Qh6();Mq=O6(D6(),1),Gq=O6(D6(),1);oiK=Mq.memo(MUY)});import{randomUUID as WUY}from"crypto";function ZUY(q){if(typeof q!=="object"||q===null||!("type"in q))return!1;return typeof q.type==="string"}class w$7{sessionId;orgUuid;getAccessToken;callbacks;ws=null;state="closed";reconnectAttempts=0;sessionNotFoundRetries=0;pingInterval=null;reconnectTimer=null;constructor(q,K,_,z){this.sessionId=q;this.orgUuid=K;this.getAccessToken=_;this.callbacks=z}async connect(){if(this.state==="connecting"){N("[SessionsWebSocket] Already connecting");return}this.state="connecting";let K=`${u7().BASE_API_URL.replace("https://","wss://")}/v1/sessions/ws/${this.sessionId}/subscribe?organization_uuid=${this.orgUuid}`;N(`[SessionsWebSocket] Connecting to ${K}`);let z={Authorization:`Bearer ${this.getAccessToken()}`,"anthropic-version":"2023-06-01"};if(typeof Bun<"u"){let Y=new globalThis.WebSocket(K,{headers:z,proxy:NI(K),tls:YV()||void 0});this.ws=Y,Y.addEventListener("open",()=>{N("[SessionsWebSocket] Connection opened, authenticated via headers"),this.state="connected",this.reconnectAttempts=0,this.sessionNotFoundRetries=0,this.startPingInterval(),this.callbacks.onConnected?.()}),Y.addEventListener("message",($)=>{let A=typeof $.data==="string"?$.data:String($.data);this.handleMessage(A)}),Y.addEventListener("error",()=>{let $=Error("[SessionsWebSocket] WebSocket error");H6($),this.callbacks.onError?.($)}),Y.addEventListener("close",($)=>{N(`[SessionsWebSocket] Closed: code=${$.code} reason=${$.reason}`),this.handleClose($.code)}),Y.addEventListener("pong",()=>{N("[SessionsWebSocket] Pong received")})}else{let{default:Y}=await Promise.resolve().then(() => (W96(),MI6)),$=new Y(K,{headers:z,agent:VI(K),...YV()});this.ws=$,$.on("open",()=>{N("[SessionsWebSocket] Connection opened, authenticated via headers"),this.state="connected",this.reconnectAttempts=0,this.sessionNotFoundRetries=0,this.startPingInterval(),this.callbacks.onConnected?.()}),$.on("message",(A)=>{this.handleMessage(A.toString())}),$.on("error",(A)=>{H6(Error(`[SessionsWebSocket] Error: ${A.message}`)),this.callbacks.onError?.(A)}),$.on("close",(A,O)=>{N(`[SessionsWebSocket] Closed: code=${A} reason=${O.toString()}`),this.handleClose(A)}),$.on("pong",()=>{N("[SessionsWebSocket] Pong received")})}}handleMessage(q){try{let K=r8(q);if(ZUY(K))this.callbacks.onMessage(K);else N(`[SessionsWebSocket] Ignoring message type: ${typeof K==="object"&&K!==null&&"type"in K?String(K.type):"unknown"}`)}catch(K){H6(Error(`[SessionsWebSocket] Failed to parse message: ${d6(K)}`))}}handleClose(q){if(this.stopPingInterval(),this.state==="closed")return;this.ws=null;let K=this.state;if(this.state="closed",fUY.has(q)){N(`[SessionsWebSocket] Permanent close code ${q}, not reconnecting`),this.callbacks.onClose?.();return}if(q===4001){if(this.sessionNotFoundRetries++,this.sessionNotFoundRetries>O$7){N(`[SessionsWebSocket] 4001 retry budget exhausted (${O$7}), not reconnecting`),this.callbacks.onClose?.();return}this.scheduleReconnect(siK*this.sessionNotFoundRetries,`4001 attempt ${this.sessionNotFoundRetries}/${O$7}`);return}if(K==="connected"&&this.reconnectAttempts<tiK)this.reconnectAttempts++,this.scheduleReconnect(siK,`attempt ${this.reconnectAttempts}/${tiK}`);else N("[SessionsWebSocket] Not reconnecting"),this.callbacks.onClose?.()}scheduleReconnect(q,K){this.callbacks.onReconnecting?.(),N(`[SessionsWebSocket] Scheduling reconnect (${K}) in ${q}ms`),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},q)}startPingInterval(){this.stopPingInterval(),this.pingInterval=setInterval(()=>{if(this.ws&&this.state==="connected")try{this.ws.ping?.()}catch{}},DUY)}stopPingInterval(){if(this.pingInterval)clearInterval(this.pingInterval),this.pingInterval=null}sendControlResponse(q){if(!this.ws||this.state!=="connected"){H6(Error("[SessionsWebSocket] Cannot send: not connected"));return}N("[SessionsWebSocket] Sending control response"),this.ws.send(g6(q))}sendControlRequest(q){if(!this.ws||this.state!=="connected"){H6(Error("[SessionsWebSocket] Cannot send: not connected"));return}let K={type:"control_request",request_id:WUY(),request:q};N(`[SessionsWebSocket] Sending control request: ${q.subtype}`),this.ws.send(g6(K))}isConnected(){return this.state==="connected"}close(){if(N("[SessionsWebSocket] Closing connection"),this.state="closed",this.stopPingInterval(),this.reconnectTimer)clearTimeout(this.reconnectTimer),this.reconnectTimer=null;if(this.ws)this.ws.close(),this.ws=null}reconnect(){N("[SessionsWebSocket] Force reconnecting"),this.reconnectAttempts=0,this.sessionNotFoundRetries=0,this.close(),this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},500)}}var siK=2000,tiK=5,DUY=30000,O$7=3,fUY;var eiK=y(()=>{H3();_8();y8();E8();PI();qv();l8();fUY=new Set([4003])});function GUY(q){return q.type!=="control_request"&&q.type!=="control_response"&&q.type!=="control_cancel_request"}class j$7{config;callbacks;websocket=null;pendingPermissionRequests=new Map;constructor(q,K){this.config=q;this.callbacks=K}connect(){N(`[RemoteSessionManager] Connecting to session ${this.config.sessionId}`);let q={onMessage:(K)=>this.handleMessage(K),onConnected:()=>{N("[RemoteSessionManager] Connected"),this.callbacks.onConnected?.()},onClose:()=>{N("[RemoteSessionManager] Disconnected"),this.callbacks.onDisconnected?.()},onReconnecting:()=>{N("[RemoteSessionManager] Reconnecting"),this.callbacks.onReconnecting?.()},onError:(K)=>{H6(K),this.callbacks.onError?.(K)}};this.websocket=new w$7(this.config.sessionId,this.config.orgUuid,this.config.getAccessToken,q),this.websocket.connect()}handleMessage(q){if(q.type==="control_request"){this.handleControlRequest(q);return}if(q.type==="control_cancel_request"){let{request_id:K}=q,_=this.pendingPermissionRequests.get(K);N(`[RemoteSessionManager] Permission request cancelled: ${K}`),this.pendingPermissionRequests.delete(K),this.callbacks.onPermissionCancelled?.(K,_?.tool_use_id);return}if(q.type==="control_response"){N("[RemoteSessionManager] Received control response");return}if(GUY(q))this.callbacks.onMessage(q)}handleControlRequest(q){let{request_id:K,request:_}=q;if(_.subtype==="can_use_tool")N(`[RemoteSessionManager] Permission request for tool: ${_.tool_name}`),this.pendingPermissionRequests.set(K,_),this.callbacks.onPermissionRequest(_,K);else{N(`[RemoteSessionManager] Unsupported control request subtype: ${_.subtype}`);let z={type:"control_response",response:{subtype:"error",request_id:K,error:`Unsupported control request subtype: ${_.subtype}`}};this.websocket?.sendControlResponse(z)}}async sendMessage(q,K){N(`[RemoteSessionManager] Sending message to session ${this.config.sessionId}`);let _=await Yr1(this.config.sessionId,q,K);if(!_)H6(Error(`[RemoteSessionManager] Failed to send message to session ${this.config.sessionId}`));return _}respondToPermissionRequest(q,K){if(!this.pendingPermissionRequests.get(q)){H6(Error(`[RemoteSessionManager] No pending permission request with ID: ${q}`));return}this.pendingPermissionRequests.delete(q);let z={type:"control_response",response:{subtype:"success",request_id:q,response:{behavior:K.behavior,...K.behavior==="allow"?{updatedInput:K.updatedInput}:{message:K.message}}}};N(`[RemoteSessionManager] Sending permission response: ${K.behavior}`),this.websocket?.sendControlResponse(z)}isConnected(){return this.websocket?.isConnected()??!1}cancelSession(){N("[RemoteSessionManager] Sending interrupt signal"),this.websocket?.sendControlRequest({subtype:"interrupt"})}getSessionId(){return this.config.sessionId}disconnect(){N("[RemoteSessionManager] Disconnecting"),this.websocket?.close(),this.websocket=null,this.pendingPermissionRequests.clear()}reconnect(){N("[RemoteSessionManager] Reconnecting WebSocket"),this.websocket?.reconnect()}}function qrK(q,K,_,z=!1,Y=!1){return{sessionId:q,getAccessToken:K,orgUuid:_,hasInitialPrompt:z,viewerOnly:Y}}var H$7=y(()=>{_8();E8();VM();eiK()});import{randomUUID as TUY}from"crypto";function NC6(q,K){return{type:"assistant",uuid:TUY(),message:{id:`remote-${K}`,type:"message",role:"assistant",content:[{type:"tool_use",id:q.tool_use_id,name:q.tool_name,input:q.input}],model:"",stop_reason:null,stop_sequence:null,container:null,context_management:null,usage:{input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0}},requestId:void 0,timestamp:new Date().toISOString()}}function yC6(q){return{name:q,inputSchema:{},isEnabled:()=>!0,userFacingName:()=>q,renderToolUseMessage:(K)=>{let _=Object.entries(K);if(_.length===0)return"";return _.slice(0,3).map(([z,Y])=>{let $=typeof Y==="string"?Y:g6(Y);return`${z}: ${$}`}).join(", ")},call:async()=>({data:""}),description:async()=>"",prompt:()=>"",isReadOnly:()=>!1,isMcp:!1,needsPermissions:()=>!0}}var Jc8=y(()=>{l8()});function vUY(q){return{type:"assistant",message:q.message,uuid:q.uuid,requestId:void 0,timestamp:new Date().toISOString(),error:q.error}}function kUY(q){return{type:"stream_event",event:q.event}}function VUY(q){let K=q.subtype!=="success";return{type:"system",subtype:"informational",content:K?q.errors?.join(", ")||"Unknown error":"Session completed successfully",level:K?"warning":"info",uuid:q.uuid,timestamp:new Date().toISOString()}}function NUY(q){return{type:"system",subtype:"informational",content:`Remote session initialized (model: ${q.model})`,level:"info",uuid:q.uuid,timestamp:new Date().toISOString()}}function yUY(q){if(!q.status)return null;return{type:"system",subtype:"informational",content:q.status==="compacting"?"Compacting conversation…":`Status: ${q.status}`,level:"info",uuid:q.uuid,timestamp:new Date().toISOString()}}function EUY(q){return{type:"system",subtype:"informational",content:`Tool ${q.tool_name} running for ${q.elapsed_time_seconds}s…`,level:"info",uuid:q.uuid,timestamp:new Date().toISOString(),toolUseID:q.tool_use_id}}function LUY(q){return{type:"system",subtype:"compact_boundary",content:"Conversation compacted",level:"info",uuid:q.uuid,timestamp:new Date().toISOString(),compactMetadata:s57(q.compact_metadata)}}function qM6(q,K){switch(q.type){case"assistant":return{type:"message",message:vUY(q)};case"user":{let _=q.message?.content,z=Array.isArray(_)&&_.some((Y)=>Y.type==="tool_result");if(K?.convertToolResults&&z)return{type:"message",message:U8({content:_,toolUseResult:q.tool_use_result,uuid:q.uuid,timestamp:q.timestamp})};if(K?.convertUserTextMessages&&!z){if(typeof _==="string"||Array.isArray(_))return{type:"message",message:U8({content:_,toolUseResult:q.tool_use_result,uuid:q.uuid,timestamp:q.timestamp})}}return{type:"ignored"}}case"stream_event":return{type:"stream_event",event:kUY(q)};case"result":if(q.subtype!=="success")return{type:"message",message:VUY(q)};return{type:"ignored"};case"system":if(q.subtype==="init")return{type:"message",message:NUY(q)};if(q.subtype==="status"){let _=yUY(q);return _?{type:"message",message:_}:{type:"ignored"}}if(q.subtype==="compact_boundary")return{type:"message",message:LUY(q)};return N(`[sdkMessageAdapter] Ignoring system message subtype: ${q.subtype}`),{type:"ignored"};case"tool_progress":return{type:"message",message:EUY(q)};case"auth_status":return N("[sdkMessageAdapter] Ignoring auth_status message"),{type:"ignored"};case"tool_use_summary":return N("[sdkMessageAdapter] Ignoring tool_use_summary message"),{type:"ignored"};case"rate_limit_event":return N("[sdkMessageAdapter] Ignoring rate_limit_event message"),{type:"ignored"};default:return N(`[sdkMessageAdapter] Unknown message type: ${q.type}`),{type:"ignored"}}}function EC6(q){return q.type==="result"}var I48=y(()=>{_8();yS6();i1()});function KrK({config:q,setMessages:K,setIsLoading:_,onInit:z,setToolUseConfirmQueue:Y,tools:$,setStreamingToolUses:A,setStreamMode:O,setInProgressToolUseIDs:w}){let j=!!q,H=s7(),J=OW.useCallback((E)=>H((S)=>S.remoteConnectionStatus===E?S:{...S,remoteConnectionStatus:E}),[H]),M=OW.useRef(new Set),X=OW.useCallback(()=>{let E=M.current.size;H((S)=>S.remoteBackgroundTaskCount===E?S:{...S,remoteBackgroundTaskCount:E})},[H]),P=OW.useRef(null),W=OW.useRef(!1),D=OW.useRef(null),f=OW.useRef(!1),G=OW.useRef(new Cs(50)),Z=OW.useRef($);OW.useEffect(()=>{Z.current=$},[$]),OW.useEffect(()=>{if(!q)return;N(`[useRemoteSession] Initializing for session ${q.sessionId}`);let E=new j$7(q,{onMessage:(S)=>{let R=[`type=${S.type}`];if("subtype"in S)R.push(`subtype=${S.subtype}`);if(S.type==="user"){let I=S.message?.content;R.push(`content=${Array.isArray(I)?I.map((B)=>B.type).join(","):typeof I}`)}if(N(`[useRemoteSession] Received ${R.join(" ")}`),P.current)clearTimeout(P.current),P.current=null;if(S.type==="user"&&S.uuid&&G.current.has(S.uuid)){N(`[useRemoteSession] Dropping echoed user message ${S.uuid}`);return}if(S.type==="system"&&S.subtype==="init"&&z)N(`[useRemoteSession] Init received with ${S.slash_commands.length} slash commands`),z(S.slash_commands);if(S.type==="system"){if(S.subtype==="task_started"){M.current.add(S.task_id),X();return}if(S.subtype==="task_notification"){M.current.delete(S.task_id),X();return}if(S.subtype==="task_progress")return;if(S.subtype==="status"){let I=W.current;if(W.current=S.status==="compacting",I&&W.current)return}if(S.subtype==="compact_boundary")W.current=!1}if(EC6(S))W.current=!1,_(!1);if(w&&S.type==="user"){let I=S.message?.content;if(Array.isArray(I)){let B=[];for(let p of I)if(p.type==="tool_result")B.push(p.tool_use_id);if(B.length>0)w((p)=>{let C=new Set(p);for(let g of B)C.delete(g);return C.size===p.size?p:C})}}let x=qM6(S,q.viewerOnly?{convertToolResults:!0,convertUserTextMessages:!0}:void 0);if(x.type==="message"){if(A?.((I)=>I.length>0?[]:I),w&&x.message.type==="assistant"){let I=x.message.message.content.filter((B)=>B.type==="tool_use").map((B)=>B.id);if(I.length>0)w((B)=>{let p=new Set(B);for(let C of I)p.add(C);return p})}K((I)=>[...I,x.message])}else if(x.type==="stream_event")if(A&&O)fh6(x.event,(I)=>K((B)=>[...B,I]),()=>{},O,A);else N("[useRemoteSession] Stream event received but streaming callbacks not provided")},onPermissionRequest:(S,R)=>{N(`[useRemoteSession] Permission request for tool: ${S.tool_name}`);let x=L5(Z.current,S.tool_name)??yC6(S.tool_name),I=NC6(S,R),B={behavior:"ask",message:S.description??`${S.tool_name} requires permission`,suggestions:S.permission_suggestions,blockedPath:S.blocked_path},p={assistantMessage:I,tool:x,description:S.description??`${S.tool_name} requires permission`,input:S.input,toolUseContext:{},toolUseID:S.tool_use_id,permissionResult:B,permissionPromptStartTimeMs:Date.now(),onUserInteraction(){},onAbort(){let C={behavior:"deny",message:"User aborted"};E.respondToPermissionRequest(R,C),Y((g)=>g.filter((F)=>F.toolUseID!==S.tool_use_id))},onAllow(C,g,F){let U={behavior:"allow",updatedInput:C};E.respondToPermissionRequest(R,U),Y((c)=>c.filter((K6)=>K6.toolUseID!==S.tool_use_id)),_(!0)},onReject(C){let g={behavior:"deny",message:C??"User denied permission"};E.respondToPermissionRequest(R,g),Y((F)=>F.filter((U)=>U.toolUseID!==S.tool_use_id))},async recheckPermission(){}};Y((C)=>[...C,p]),_(!1)},onPermissionCancelled:(S,R)=>{N(`[useRemoteSession] Permission request cancelled: ${S}`);let x=R??S;Y((I)=>I.filter((B)=>B.toolUseID!==x)),_(!0)},onConnected:()=>{N("[useRemoteSession] Connected"),J("connected")},onReconnecting:()=>{N("[useRemoteSession] Reconnecting"),J("reconnecting"),M.current.clear(),X(),w?.((S)=>S.size>0?new Set:S)},onDisconnected:()=>{N("[useRemoteSession] Disconnected"),J("disconnected"),_(!1),M.current.clear(),X(),w?.((S)=>S.size>0?new Set:S)},onError:(S)=>{N(`[useRemoteSession] Error: ${S.message}`)}});return D.current=E,E.connect(),()=>{if(N("[useRemoteSession] Cleanup - disconnecting"),P.current)clearTimeout(P.current),P.current=null;E.disconnect(),D.current=null}},[q,K,_,z,Y,A,O,w,J,X]);let T=OW.useCallback(async(E,S)=>{let R=D.current;if(!R)return N("[useRemoteSession] Cannot send - no manager"),!1;if(P.current)clearTimeout(P.current);if(_(!0),S?.uuid)G.current.add(S.uuid);let x=await R.sendMessage(E,S);if(!x)return _(!1),!1;if(!f.current&&q&&!q.hasInitialPrompt&&!q.viewerOnly){f.current=!0;let I=q.sessionId,B=typeof E==="string"?E:L3(E," ");if(B)h56(B,new AbortController().signal).then((p)=>{$r1(I,p??T4(B,75))})}if(!q?.viewerOnly){let I=W.current?hUY:RUY;P.current=setTimeout((B,p)=>{N("[useRemoteSession] Response timeout - attempting reconnect");let C=fw("Remote session may be unresponsive. Attempting to reconnect…","warning");B((g)=>[...g,C]),p.reconnect()},I,K,R)}return x},[q,_,K]),v=OW.useCallback(()=>{if(P.current)clearTimeout(P.current),P.current=null;if(!q?.viewerOnly)D.current?.cancelSession();_(!1)},[q,_]),V=OW.useCallback(()=>{if(P.current)clearTimeout(P.current),P.current=null;D.current?.disconnect(),D.current=null},[]);return OW.useMemo(()=>({isRemoteMode:j,sendMessage:T,cancelRequest:v,disconnect:V}),[j,T,v,V])}var OW,RUY=60000,hUY=180000;var _rK=y(()=>{Yd8();H$7();Jc8();I48();C7();Bq();_8();U7();i1();PS6();VM();OW=O6(D6(),1)});function SUY(q){return typeof q==="object"&&q!==null&&"type"in q&&typeof q.type==="string"}class J$7{ws=null;config;callbacks;constructor(q,K){this.config=q,this.callbacks=K}connect(){let q={};if(this.config.authToken)q.authorization=`Bearer ${this.config.authToken}`;this.ws=new WebSocket(this.config.wsUrl,{headers:q}),this.ws.addEventListener("open",()=>{this.callbacks.onConnected?.()}),this.ws.addEventListener("message",(K)=>{let z=(typeof K.data==="string"?K.data:"").split(` |
| 8076 | `).filter((Y)=>Y.trim());for(let Y of z){let $;try{$=r8(Y)}catch{continue}if(!SUY($))continue;let A=$;if(A.type==="control_request"){if(A.request.subtype==="can_use_tool")this.callbacks.onPermissionRequest(A.request,A.request_id);else N(`[DirectConnect] Unsupported control request subtype: ${A.request.subtype}`),this.sendErrorResponse(A.request_id,`Unsupported control request subtype: ${A.request.subtype}`);continue}if(A.type!=="control_response"&&A.type!=="keep_alive"&&A.type!=="control_cancel_request"&&A.type!=="streamlined_text"&&A.type!=="streamlined_tool_use_summary"&&!(A.type==="system"&&A.subtype==="post_turn_summary"))this.callbacks.onMessage(A)}}),this.ws.addEventListener("close",()=>{this.callbacks.onDisconnected?.()}),this.ws.addEventListener("error",()=>{this.callbacks.onError?.(Error("WebSocket connection error"))})}sendMessage(q){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return!1;let K=g6({type:"user",message:{role:"user",content:q},parent_tool_use_id:null,session_id:""});return this.ws.send(K),!0}respondToPermissionRequest(q,K){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return;let _=g6({type:"control_response",response:{subtype:"success",request_id:q,response:{behavior:K.behavior,...K.behavior==="allow"?{updatedInput:K.updatedInput}:{message:K.message}}}});this.ws.send(_)}sendInterrupt(){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return;let q=g6({type:"control_request",request_id:crypto.randomUUID(),request:{subtype:"interrupt"}});this.ws.send(q)}sendErrorResponse(q,K){if(!this.ws||this.ws.readyState!==WebSocket.OPEN)return;let _=g6({type:"control_response",response:{subtype:"error",request_id:q,error:K}});this.ws.send(_)}disconnect(){if(this.ws)this.ws.close(),this.ws=null}isConnected(){return this.ws?.readyState===WebSocket.OPEN}}var zrK=y(()=>{_8();l8()});function YrK({config:q,setMessages:K,setIsLoading:_,setToolUseConfirmQueue:z,tools:Y}){let $=!!q,A=hy.useRef(null),O=hy.useRef(!1),w=hy.useRef(!1),j=hy.useRef(Y);hy.useEffect(()=>{j.current=Y},[Y]),hy.useEffect(()=>{if(!q)return;O.current=!1,N(`[useDirectConnect] Connecting to ${q.wsUrl}`);let X=new J$7(q,{onMessage:(P)=>{if(EC6(P))_(!1);if(P.type==="system"&&P.subtype==="init"){if(O.current)return;O.current=!0}let W=qM6(P,{convertToolResults:!0});if(W.type==="message")K((D)=>[...D,W.message])},onPermissionRequest:(P,W)=>{N(`[useDirectConnect] Permission request for tool: ${P.tool_name}`);let D=L5(j.current,P.tool_name)??yC6(P.tool_name),f=NC6(P,W),G={behavior:"ask",message:P.description??`${P.tool_name} requires permission`,suggestions:P.permission_suggestions,blockedPath:P.blocked_path},Z={assistantMessage:f,tool:D,description:P.description??`${P.tool_name} requires permission`,input:P.input,toolUseContext:{},toolUseID:P.tool_use_id,permissionResult:G,permissionPromptStartTimeMs:Date.now(),onUserInteraction(){},onAbort(){let T={behavior:"deny",message:"User aborted"};X.respondToPermissionRequest(W,T),z((v)=>v.filter((V)=>V.toolUseID!==P.tool_use_id))},onAllow(T,v,V){let E={behavior:"allow",updatedInput:T};X.respondToPermissionRequest(W,E),z((S)=>S.filter((R)=>R.toolUseID!==P.tool_use_id)),_(!0)},onReject(T){let v={behavior:"deny",message:T??"User denied permission"};X.respondToPermissionRequest(W,v),z((V)=>V.filter((E)=>E.toolUseID!==P.tool_use_id))},async recheckPermission(){}};z((T)=>[...T,Z]),_(!1)},onConnected:()=>{N("[useDirectConnect] Connected"),w.current=!0},onDisconnected:()=>{if(N("[useDirectConnect] Disconnected"),!w.current)process.stderr.write(` |
| 8077 | Failed to connect to server at ${q.wsUrl} |
| 8078 | `);else process.stderr.write(` |
| 8079 | Server disconnected. |
| 8080 | `);w.current=!1,xK(1),_(!1)},onError:(P)=>{N(`[useDirectConnect] Error: ${P.message}`)}});return A.current=X,X.connect(),()=>{N("[useDirectConnect] Cleanup - disconnecting"),X.disconnect(),A.current=null}},[q,K,_,z]);let H=hy.useCallback(async(X)=>{let P=A.current;if(!P)return!1;return _(!0),P.sendMessage(X)},[_]),J=hy.useCallback(()=>{A.current?.sendInterrupt(),_(!1)},[_]),M=hy.useCallback(()=>{A.current?.disconnect(),A.current=null,w.current=!1},[]);return hy.useMemo(()=>({isRemoteMode:$,sendMessage:H,cancelRequest:J,disconnect:M}),[$,H,J,M])}var hy;var $rK=y(()=>{Jc8();I48();zrK();Bq();_8();RA();hy=O6(D6(),1)});import{randomUUID as CUY}from"crypto";function ArK({session:q,setMessages:K,setIsLoading:_,setToolUseConfirmQueue:z,tools:Y}){let $=!!q,A=Sy.useRef(null),O=Sy.useRef(!1),w=Sy.useRef(!1),j=Sy.useRef(Y);Sy.useEffect(()=>{j.current=Y},[Y]),Sy.useEffect(()=>{if(!q)return;O.current=!1,N("[useSSHSession] wiring SSH session manager");let X=q.createManager({onMessage:(P)=>{if(EC6(P))_(!1);if(P.type==="system"&&P.subtype==="init"){if(O.current)return;O.current=!0}let W=qM6(P,{convertToolResults:!0});if(W.type==="message")K((D)=>[...D,W.message])},onPermissionRequest:(P,W)=>{N(`[useSSHSession] permission request: ${P.tool_name}`);let D=L5(j.current,P.tool_name)??yC6(P.tool_name),f=NC6(P,W),G={behavior:"ask",message:P.description??`${P.tool_name} requires permission`,suggestions:P.permission_suggestions,blockedPath:P.blocked_path},Z={assistantMessage:f,tool:D,description:P.description??`${P.tool_name} requires permission`,input:P.input,toolUseContext:{},toolUseID:P.tool_use_id,permissionResult:G,permissionPromptStartTimeMs:Date.now(),onUserInteraction(){},onAbort(){X.respondToPermissionRequest(W,{behavior:"deny",message:"User aborted"}),z((T)=>T.filter((v)=>v.toolUseID!==P.tool_use_id))},onAllow(T){X.respondToPermissionRequest(W,{behavior:"allow",updatedInput:T}),z((v)=>v.filter((V)=>V.toolUseID!==P.tool_use_id)),_(!0)},onReject(T){X.respondToPermissionRequest(W,{behavior:"deny",message:T??"User denied permission"}),z((v)=>v.filter((V)=>V.toolUseID!==P.tool_use_id))},async recheckPermission(){}};z((T)=>[...T,Z]),_(!1)},onConnected:()=>{N("[useSSHSession] connected"),w.current=!0},onReconnecting:(P,W)=>{N(`[useSSHSession] ssh dropped, reconnecting (${P}/${W})`),w.current=!1,_(!1);let D={type:"system",subtype:"informational",content:`SSH connection dropped — reconnecting (attempt ${P}/${W})...`,timestamp:new Date().toISOString(),uuid:CUY(),level:"warning"};K((f)=>[...f,D])},onDisconnected:()=>{N("[useSSHSession] ssh process exited (giving up)");let P=q.getStderrTail().trim(),W=w.current,D=q.proc.exitCode;w.current=!1,_(!1);let f=W?"Remote session ended.":"SSH session failed before connecting.";if(P&&(!W||D!==0))f+=` |
| 8081 | Remote stderr (exit ${D??"signal "+q.proc.signalCode}): |
| 8082 | ${P}`;xK(1,"other",{finalMessage:f})},onError:(P)=>{N(`[useSSHSession] error: ${P.message}`)}});return A.current=X,X.connect(),()=>{N("[useSSHSession] cleanup"),X.disconnect(),q.proxy.stop(),A.current=null}},[q,K,_,z]);let H=Sy.useCallback(async(X)=>{let P=A.current;if(!P)return!1;return _(!0),P.sendMessage(X)},[_]),J=Sy.useCallback(()=>{A.current?.sendInterrupt(),_(!1)},[_]),M=Sy.useCallback(()=>{A.current?.disconnect(),A.current=null,w.current=!1},[]);return Sy.useMemo(()=>({isRemoteMode:$,sendMessage:H,cancelRequest:J,disconnect:M}),[$,H,J,M])}var Sy;var OrK=y(()=>{Jc8();I48();Bq();_8();RA();Sy=O6(D6(),1)});var wrK=y(()=>{H3();_8();VM()});var Mc8;var jrK=y(()=>{wrK();I48();_8();Mc8=O6(D6(),1)});function LC6({inputValue:q,setInputValue:K,isValidDigit:_,onDigit:z,enabled:Y=!0,once:$=!1,debounceMs:A=bUY}){let O=KM6.useRef(q),w=KM6.useRef(!1),j=KM6.useRef(null),H=KM6.useRef({setInputValue:K,isValidDigit:_,onDigit:z});H.current={setInputValue:K,isValidDigit:_,onDigit:z},KM6.useEffect(()=>{if(!Y||$&&w.current)return;if(j.current!==null)clearTimeout(j.current),j.current=null;if(q!==O.current){let J=T_6(q.slice(-1));if(H.current.isValidDigit(J)){let M=q.slice(0,-1);j.current=setTimeout((X,P,W,D,f)=>{X.current=null,P.current=!0,W.current.setInputValue(D),W.current.onDigit(f)},A,j,w,H,M,J)}}return()=>{if(j.current!==null)clearTimeout(j.current),j.current=null}},[q,Y,$,A])}var KM6,bUY=400;var Xc8=y(()=>{KM6=O6(D6(),1)});function HrK(q){let K=z6(15),{onSelect:_,inputValue:z,setInputValue:Y,message:$}=q,A=$===void 0?uUY:$,O;if(K[0]!==_)O=(D)=>_(IUY[D]),K[0]=_,K[1]=O;else O=K[1];let w;if(K[2]!==z||K[3]!==Y||K[4]!==O)w={inputValue:z,setInputValue:Y,isValidDigit:Pc8,onDigit:O},K[2]=z,K[3]=Y,K[4]=O,K[5]=w;else w=K[5];LC6(w);let j;if(K[6]===Symbol.for("react.memo_cache_sentinel"))j=qf.default.createElement(k,{color:"ansi:cyan"},"● "),K[6]=j;else j=K[6];let H;if(K[7]!==A)H=qf.default.createElement(u,null,j,qf.default.createElement(k,{bold:!0},A)),K[7]=A,K[8]=H;else H=K[8];let J;if(K[9]===Symbol.for("react.memo_cache_sentinel"))J=qf.default.createElement(u,{width:10},qf.default.createElement(k,null,qf.default.createElement(k,{color:"ansi:cyan"},"1"),": Bad")),K[9]=J;else J=K[9];let M;if(K[10]===Symbol.for("react.memo_cache_sentinel"))M=qf.default.createElement(u,{width:10},qf.default.createElement(k,null,qf.default.createElement(k,{color:"ansi:cyan"},"2"),": Fine")),K[10]=M;else M=K[10];let X;if(K[11]===Symbol.for("react.memo_cache_sentinel"))X=qf.default.createElement(u,{width:10},qf.default.createElement(k,null,qf.default.createElement(k,{color:"ansi:cyan"},"3"),": Good")),K[11]=X;else X=K[11];let P;if(K[12]===Symbol.for("react.memo_cache_sentinel"))P=qf.default.createElement(u,{marginLeft:2},J,M,X,qf.default.createElement(u,null,qf.default.createElement(k,null,qf.default.createElement(k,{color:"ansi:cyan"},"0"),": Dismiss"))),K[12]=P;else P=K[12];let W;if(K[13]!==H)W=qf.default.createElement(u,{flexDirection:"column",marginTop:1},H,P),K[13]=H,K[14]=W;else W=K[14];return W}var qf,xUY,IUY,Pc8=(q)=>xUY.includes(q),uUY="How is Claude doing this session? (optional)";var M$7=y(()=>{q8();s6();Xc8();qf=O6(D6(),1),xUY=["0","1","2","3"],IUY={"0":"dismissed","1":"bad","2":"fine","3":"good"}});var X$7;var JrK=y(()=>{q8();zz();s6();M$7();X$7=O6(D6(),1)});var MrK=y(()=>{ew();B2();E8();y8();i1()});function XrK(){}async function PrK(q,K){if(!q)return;let{join:_}=await import("path"),z=await import("fs/promises"),Y=_(Z8(),".claude","skills",q,"SKILL.md"),$;try{$=await z.readFile(Y,"utf-8")}catch{H6(Error(`Failed to read skill file for improvement: ${Y}`));return}let A=K.map((H)=>`- ${H.section}: ${H.change}`).join(` |