makecoder 2.0.75 → 2.0.77

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/cc.mjs CHANGED
@@ -20,13 +20,13 @@ import{createRequire as ez5}from"node:module";var nz5=Object.create;var{getProto
20
20
  Object.assign(A, {
21
21
  post(...args) {
22
22
  const [url, payload, ...remainArgs] = args;
23
- const patchedUrl = url + (url.includes('?') ? '&' : ':') + '&app=codev-cli' + '&version=2.0.75' + '&session_id=' + V8();
23
+ const patchedUrl = url + (url.includes('?') ? '&' : ':') + '&app=codev-cli' + '&version=2.0.77' + '&session_id=' + V8();
24
24
  if (process.env.CODEV_AUTH_SK && process.env.CODEV_AUTH_AK) {
25
25
  const headerValues = payload.headers.values;
26
26
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODEV_AUTH_AK}.${process.env.CODEV_AUTH_SK}`)
27
27
  }
28
28
 
29
- payload.headers.values.set('X-Coder-Version', '2.0.75');
29
+ payload.headers.values.set('X-Coder-Version', '2.0.77');
30
30
  payload.headers.values.set('X-Coder-Platform', process.platform);
31
31
  payload.headers.values.set('X-Coder-Arch', process.arch);
32
32
 
@@ -8302,7 +8302,7 @@ Error: sandbox required but unavailable: ${j8}
8302
8302
  ${R8}`)}else N("No CLAUDE.md/rules files found");for(let R8 of j8)TR.current.set(R8.path,{content:R8.contentDiffersFromDisk?R8.rawContent??R8.content:R8.content,timestamp:Date.now(),offset:void 0,limit:void 0,isPartialView:R8.contentDiffersFromDisk})}B65(hiK()),YrK(QK,QK.length===z?.length);let{sendBridgeResult:tr8}=prK(QK,BK,eY,M5,W6);V2.current=tr8,U65();let $e=O1.useRef(!1);O1.useEffect(()=>{if(l.length<1){$e.current=!1;return}if($e.current)return;$e.current=!0,C8((j8)=>({...j8,promptQueueUseCount:(j8.promptQueueUseCount??0)+1}))},[l.length]);let we=O1.useCallback(async(j8)=>{await Fi8({helpers:{setCursorOffset:()=>{},clearBuffer:()=>{},resetHistory:()=>{}},queryGuard:OK,commands:M5,onInputChange:()=>{},setPastedContents:()=>{},setToolJSX:L3,getToolUseContext:u3,messages:QK,mainLoopModel:W6,ideSelection:L8,setUserInputOnProcessing:tJ,setAbortController:Fz,onQuery:JI,setAppState:j6,querySource:cs6(),onBeforeQuery:W,canUseTool:EE,addNotification:b6,setMessages:BK,queuedCommands:j8})},[OK,M5,L3,u3,QK,W6,L8,tJ,EE,Fz,JI,b6,j6,W]);x85({executeQueuedInput:we,hasActiveLocalJsxUI:y2,queryGuard:OK}),O1.useEffect(()=>{Fj6.recordUserActivity(),t96(!0)},[sK,$H]),O1.useEffect(()=>{if($H===1)_27()},[$H]),O1.useEffect(()=>{if(l4)return;if($H===0)return;if(Oz===0)return;let j8=setTimeout((R8,l8,G7,L7,Gq)=>{if(BR()>R8)return;let Vq=Date.now()-R8;if(!l8&&!G7&&L7.current===void 0&&Vq>=w8().messageIdleNotifThresholdMs)Ed({message:"Claude is waiting for your input",notificationType:"idle_prompt"},Gq)},w8().messageIdleNotifThresholdMs,Oz,l4,lq,ww,v6);return()=>clearTimeout(j8)},[l4,lq,$H,Oz,v6]),O1.useEffect(()=>{if(Oz===0)return;if(l4)return;let j8=S8("tengu_willow_mode","off");if(j8!=="hint"&&j8!=="hint_v2")return;if(w8().idleReturnDismissed)return;let R8=Number(process.env.CLAUDE_CODE_IDLE_TOKEN_THRESHOLD??1e5);if(BH(wA(VK.current))<R8)return;let G7=Number(process.env.CLAUDE_CODE_IDLE_THRESHOLD_MINUTES??75)*60000,L7=Date.now()-Oz,Gq=G7-L7,R7=setTimeout((Vq,g4,fK,F4,ZA)=>{if(fK.current.length===0)return;let z9=BH(wA(fK.current)),HH=s5(z9),HT=(Date.now()-Vq)/60000;g4({key:"idle-return-hint",jsx:F4==="hint_v2"?y8.createElement(y8.Fragment,null,y8.createElement(T,{dimColor:!0},"new task? "),y8.createElement(T,{color:"suggestion"},"/clear"),y8.createElement(T,{dimColor:!0}," to save "),y8.createElement(T,{color:"suggestion"},HH," tokens")):y8.createElement(T,{color:"warning"},"new task? /clear to save ",HH," tokens"),priority:"medium",timeoutMs:2147483647}),ZA.current=F4,d("tengu_idle_return_action",{action:"hint_shown",variant:F4,idleMinutes:Math.round(HT),messageCount:fK.current.length,contextTokens:z9})},Math.max(0,Gq),Oz,b6,VK,j8,_O);return()=>{clearTimeout(R7),t6("idle-return-hint"),_O.current=!1}},[Oz,l4,b6,t6]);let Xl=O1.useCallback((j8,R8)=>{if(OK.isActive)return!1;if(rZ4().some((L7)=>L7.mode==="prompt"||L7.mode==="bash"))return!1;let l8=U3();Fz(l8);let G7=i8({content:j8,isMeta:R8?.isMeta?!0:void 0});return JI([G7],l8,!0,[],W6),!0},[JI,W6,y6]),NR=M6O({setInputValueRaw:RY,inputValueRef:SY,insertTextRef:qM});_15({enabled:oq(),isLoading:l4,focusedInputDialog:Dz,onSubmitMessage:Xl}),u85({isLoading:l4,onSubmitMessage:Xl});{let j8=y6.getState().kairosEnabled;G6O({isLoading:l4,assistantMode:j8,setMessages:BK})}O1.useEffect(()=>{if(l.some((j8)=>j8.priority==="now"))eY.current?.abort("interrupt")},[l]),O1.useEffect(()=>{return cx6(),()=>{ws.shutdown()}},[]);let{internal_eventEmitter:Pl}=qm(),[w98,QB]=O1.useState(0);O1.useEffect(()=>{let j8=()=>{process.stdout.write(`
8303
8303
  Claude Code has been suspended. Run \`fg\` to bring Claude Code back.
8304
8304
  Note: ctrl + z now suspends Claude Code, ctrl + _ undoes input.
8305
- `)},R8=()=>{QB((l8)=>l8+1)};return Pl?.on("suspend",j8),Pl?.on("resume",R8),()=>{Pl?.off("suspend",j8),Pl?.off("resume",R8)}},[Pl]);let lx6=O1.useMemo(()=>{if(!l4)return null;let j8=QK.filter((g4)=>g4.type==="progress"&&g4.data.type==="hook_progress"&&(g4.data.hookEvent==="Stop"||g4.data.hookEvent==="SubagentStop"));if(j8.length===0)return null;let R8=j8.at(-1)?.toolUseID;if(!R8)return null;if(QK.some((g4)=>g4.type==="system"&&g4.subtype==="stop_hook_summary"&&g4.toolUseID===R8))return null;let G7=j8.filter((g4)=>g4.toolUseID===R8),L7=G7.length,Gq=H7(QK,(g4)=>{if(g4.type!=="attachment")return!1;let fK=g4.attachment;return"hookEvent"in fK&&(fK.hookEvent==="Stop"||fK.hookEvent==="SubagentStop")&&"toolUseID"in fK&&fK.toolUseID===R8}),R7=G7.find((g4)=>g4.data.statusMessage)?.data.statusMessage;if(R7)return L7===1?`${R7}…`:`${R7}… ${Gq}/${L7}`;let Vq=G7[0]?.data.hookEvent==="SubagentStop"?"subagent stop":"stop";return L7===1?`running ${Vq} hook`:`running stop hooks… ${Gq}/${L7}`},[QK,l4]),nx6=O1.useCallback(()=>{xK({messagesLength:QK.length,streamingToolUsesLength:gz.length})},[QK.length,gz.length]),QX6=O1.useCallback(()=>{xK(null)},[]),je=E4()&&!m,NP=O1.useRef(null),[XI,b96]=O1.useState(!1),[dB,ix6]=O1.useState(""),[cB,A5]=O1.useState(0),[j98,dX6]=O1.useState(0),H98=O1.useCallback((j8,R8)=>{A5(j8),dX6(R8)},[]);RK((j8,R8,l8)=>{if(R8.ctrl||R8.meta)return;if(j8==="/"){NP.current?.setAnchor(),b96(!0),l8.stopImmediatePropagation();return}let G7=j8[0];if((G7==="n"||G7==="N")&&j8===G7.repeat(j8.length)&&cB>0){let L7=G7==="n"?NP.current?.nextMatch:NP.current?.prevMatch;if(L7)for(let Gq=0;Gq<j8.length;Gq++)L7();l8.stopImmediatePropagation()}},{isActive:T6==="transcript"&&je&&!XI&&!C6});let{setQuery:yR,scanElement:er8,setPositions:rx6}=FiK(),x96=o1().columns,J98=y8.useRef(x96);y8.useEffect(()=>{if(J98.current!==x96){if(J98.current=x96,dB||XI)b96(!1),ix6(""),A5(0),dX6(0),NP.current?.disarmSearch(),yR("")}},[x96,dB,XI,yR]),RK((j8,R8,l8)=>{if(R8.ctrl||R8.meta)return;if(j8==="q"){QX6(),l8.stopImmediatePropagation();return}if(j8==="["&&!C6)x6(!0),r6(!0),l8.stopImmediatePropagation();else if(j8==="v"){if(l8.stopImmediatePropagation(),V6.current)return;V6.current=!0;let G7=k6.current,L7=(Gq)=>{if(G7!==k6.current)return;clearTimeout(M6.current),w6(Gq)};L7(`rendering ${v1.length} messages…`),(async()=>{try{let Gq=Math.max(80,(process.stdout.columns??80)-6),Vq=(await zl8(v1,cw,Gq)).replace(/[ \t]+$/gm,""),g4=H6O(X2(),`cc-transcript-${Date.now()}.txt`);await J6O(g4,Vq);let fK=Kd8(g4);L7(fK?`opening ${g4}`:`wrote ${g4} · no $VISUAL/$EDITOR set`)}catch(Gq){L7(`render failed: ${Gq instanceof Error?Gq.message:String(Gq)}`)}if(V6.current=!1,G7!==k6.current)return;M6.current=setTimeout((Gq)=>Gq(""),4000,w6)})()}},{isActive:T6==="transcript"&&je&&!XI});let I96=T6==="transcript"&&je;O1.useEffect(()=>{if(!I96)ix6(""),A5(0),dX6(0),b96(!1),k6.current++,clearTimeout(M6.current),x6(!1),w6("")},[I96]),O1.useEffect(()=>{if(yR(I96?dB:""),!I96)rx6(null)},[I96,dB,yR,rx6]);let cX6={screen:T6,setScreen:L6,showAllInTranscript:S6,setShowAllInTranscript:r6,messageCount:QK.length,onEnterTranscript:nx6,onExitTranscript:QX6,virtualScrollActive:je,searchBarOpen:XI},M98=uq?v1.slice(0,uq.messagesLength):v1,lX6=uq?gz.slice(0,uq.streamingToolUsesLength):gz;if(t65({onOpenBackgroundTasks:y2?void 0:()=>VP(!0)}),$85(),T6==="transcript"){let j8=E4()&&!m&&!C6?hY:void 0,R8=y8.createElement(Wd1,null,y8.createElement(PM6,{messages:M98,tools:cw,commands:M5,verbose:!0,toolJSX:null,toolUseConfirmQueue:[],inProgressToolUseIDs:bB,isMessageSelectorVisible:!1,conversationId:NE,screen:T6,agentDefinitions:o,streamingToolUses:lX6,showAllInTranscript:S6,onOpenRateLimitOptions:Fx6,isLoading:l4,hidePastThinking:!0,streamingThinking:R$,scrollRef:j8,jumpRef:NP,onSearchMatchesChange:H98,scanElement:er8,setPositions:rx6,disableRenderCap:C6})),l8=lq&&y8.createElement(u,{flexDirection:"column",width:"100%"},lq.jsx),G7=y8.createElement(IM,null,y8.createElement(q45,{isAnimating:j_,title:jX,disabled:b,noPrefix:Yz}),y8.createElement(Y27,{...cX6}),y8.createElement(aq5,{voiceHandleKeyEvent:NR.handleKeyEvent,voiceCancelRecording:NR.cancelRecording,stripTrailing:NR.stripTrailing,resetAnchor:NR.resetAnchor,isActive:!lq?.isLocalJSXCommand,inputValueRef:SY}),y8.createElement(O27,{onSubmit:kR,isActive:!lq?.isLocalJSXCommand}),j8?y8.createElement(U27,{scrollRef:hY,isActive:Dz!=="ultraplan-choice",isModal:!XI,onScroll:()=>NP.current?.disarmSearch()}):null,y8.createElement(A27,{...ux6}),j8?y8.createElement(a_7,{scrollRef:hY,scrollable:y8.createElement(y8.Fragment,null,R8,l8,y8.createElement(I27,null)),bottom:XI?y8.createElement(k6O,{jumpRef:NP,initialQuery:"",count:cB,current:j98,onClose:(L7)=>{if(ix6(cB>0?L7:""),b96(!1),!L7)A5(0),dX6(0),NP.current?.setSearchQuery("")},onCancel:()=>{b96(!1),NP.current?.setSearchQuery(""),NP.current?.setSearchQuery(dB),yR(dB)},setHighlight:yR}):y8.createElement(tq5,{showAllInTranscript:S6,virtualScroll:!0,status:e||void 0,searchBadge:dB&&cB>0?{current:j98,count:cB}:void 0})}):y8.createElement(y8.Fragment,null,R8,l8,y8.createElement(I27,null),y8.createElement(tq5,{showAllInTranscript:S6,virtualScroll:!1,suppressShowAll:C6,status:e||void 0})));if(j8)return y8.createElement(F27,{mouseTracking:Md1()},G7);return G7}let Wl=A6?t[A6]:void 0,nX6=Wl&&rH(Wl)?Wl:void 0,PI=nX6??(Wl&&gJ(Wl)?Wl:void 0),ER=PI?PI.messages??[]:mB||!l4?QK:v1,yP=Uz&&!PI&&ER.length<=Z9.current?Uz:void 0,LE=Dz==="tool-permission"?y8.createElement(yaK,{key:Y5[0]?.toolUseID,onDone:()=>M4(([j8,...R8])=>R8),onReject:Ix6,toolUseConfirm:Y5[0],toolUseContext:u3(QK,QK,TO??U3(),W6),verbose:U,workerBadge:Y5[0]?.workerBadge,setStickyFooter:E4()?w3:void 0}):null,JJ=x96<ln8,ox6=!lq?.shouldHidePromptInput&&!Dz&&!_e,ax6=E4()&&lq?.isLocalJSXCommand===!0,jH=ax6?lq.jsx:null,LR=y8.createElement(IM,null,y8.createElement(q45,{isAnimating:j_,title:jX,disabled:b,noPrefix:Yz}),y8.createElement(Y27,{...cX6}),y8.createElement(aq5,{voiceHandleKeyEvent:NR.handleKeyEvent,voiceCancelRecording:NR.cancelRecording,stripTrailing:NR.stripTrailing,resetAnchor:NR.resetAnchor,isActive:!lq?.isLocalJSXCommand,inputValueRef:SY}),y8.createElement(O27,{onSubmit:kR,isActive:!lq?.isLocalJSXCommand}),y8.createElement(U27,{scrollRef:hY,isActive:E4()&&(jH!=null||!Dz||Dz==="tool-permission"),onScroll:jH||LE||PI?void 0:d6}),null,y8.createElement(A27,{...ux6}),y8.createElement(Yd8,{key:w98,dynamicMcpConfig:e6,isStrictMcpConfig:M},y8.createElement(a_7,{scrollRef:hY,overlay:LE,bottomFloat:ox6&&!JJ?y8.createElement(raK,null):void 0,modal:jH,modalScrollRef:$w,dividerYRef:AT,hidePill:!!PI,hideSticky:!!nX6,newMessageCount:ZR?.count??0,onPillClick:()=>{PV(null),eJ(hY.current)},scrollable:y8.createElement(y8.Fragment,null,y8.createElement(n85,null),y8.createElement(Wd1,null,y8.createElement(PM6,{messages:ER,tools:cw,commands:M5,verbose:U,toolJSX:lq,toolUseConfirmQueue:Y5,inProgressToolUseIDs:nX6?nX6.inProgressToolUseIDs??new Set:bB,isMessageSelectorVisible:O5,conversationId:A6??NE,screen:T6,streamingToolUses:gz,showAllInTranscript:S6,agentDefinitions:o,onOpenRateLimitOptions:Fx6,isLoading:l4,streamingText:l4&&!PI?$I:null,isBriefOnly:PI?!1:c6,unseenDivider:PI?void 0:ZR,scrollRef:E4()?hY:void 0,trackStickyPrompt:E4()?!0:void 0,cursor:jG,setCursor:PV,cursorNavRef:OI})),y8.createElement(i75,null),!f&&yP&&!jH&&y8.createElement(DH6,{param:{text:yP,type:"text"},addMargin:!0,verbose:U}),lq&&!(lq.isLocalJSXCommand&&lq.isImmediate)&&!ax6&&y8.createElement(u,{flexDirection:"column",width:"100%"},lq.jsx),!1,null,y8.createElement(u,{flexGrow:1}),bX6&&y8.createElement(L3K,{mode:Cq,spinnerTip:q6,responseLengthRef:VE,apiMetricsRef:GR,overrideMessage:yX6,spinnerSuffix:lx6,verbose:U,loadingStartTimeRef:E_,totalPausedMsRef:nO,pauseStartTimeRef:S$,overrideColor:gB,overrideShimmerColor:x1,hasActiveTools:bB.size>0,leaderIsIdle:!l4}),!bX6&&!l4&&!Uz&&!vR&&c6&&!PI&&y8.createElement(h3K,null),E4()&&y8.createElement(yi8,null)),bottom:y8.createElement(u,{flexDirection:JJ?"column":"row",width:"100%",alignItems:JJ?void 0:"flex-end"},JJ&&E4()&&ox6?y8.createElement(B$7,null):null,y8.createElement(u,{flexDirection:"column",flexGrow:1},Wz,lq?.isLocalJSXCommand&&lq.isImmediate&&!ax6&&y8.createElement(u,{flexDirection:"column",width:"100%"},lq.jsx),!bX6&&!lq?.isLocalJSXCommand&&J6&&Bz&&Bz.length>0&&y8.createElement(u,{width:"100%",flexDirection:"column"},y8.createElement(yI8,{tasks:Bz,isStandalone:!0})),Dz==="sandbox-permission"&&y8.createElement(x27,{key:n3[0].hostPattern.host,hostPattern:n3[0].hostPattern,onUserResponse:(j8)=>{let{allow:R8,persistToSettings:l8}=j8,G7=n3[0];if(!G7)return;let L7=G7.hostPattern.host;if(l8){let R7={type:"addRules",rules:[{toolName:Bj,ruleContent:`domain:${L7}`}],behavior:R8?"allow":"deny",destination:"localSettings"};j6((Vq)=>({...Vq,toolPermissionContext:pO(Vq.toolPermissionContext,R7)})),hQ(R7),Z7.refreshConfig()}_9((R7)=>{return R7.filter((Vq)=>Vq.hostPattern.host===L7).forEach((Vq)=>Vq.resolvePromise(R8)),R7.filter((Vq)=>Vq.hostPattern.host!==L7)});let Gq=wq.current.get(L7);if(Gq){for(let R7 of Gq)R7();wq.current.delete(L7)}}}),Dz==="prompt"&&y8.createElement(uaK,{key:F1[0].request.prompt,title:F1[0].title,toolInputSummary:F1[0].toolInputSummary,request:F1[0].request,onRespond:(j8)=>{let R8=F1[0];if(!R8)return;R8.resolve({prompt_response:R8.request.prompt,selected:j8}),l1(([,...l8])=>l8)},onAbort:()=>{let j8=F1[0];if(!j8)return;j8.reject(Error("Prompt cancelled by user")),l1(([,...R8])=>R8)}}),O6&&y8.createElement(lA7,{toolName:O6.toolName,description:O6.description}),X6&&y8.createElement(lA7,{toolName:"Network Access",description:`Waiting for leader to approve network access to ${X6.host}`}),Dz==="worker-sandbox-permission"&&y8.createElement(x27,{key:a.queue[0].requestId,hostPattern:{host:a.queue[0].host,port:void 0},onUserResponse:(j8)=>{let{allow:R8,persistToSettings:l8}=j8,G7=a.queue[0];if(!G7)return;let L7=G7.host;if(h5K(G7.workerName,G7.requestId,L7,R8,P6?.teamName),l8&&R8){let Gq={type:"addRules",rules:[{toolName:Bj,ruleContent:`domain:${L7}`}],behavior:"allow",destination:"localSettings"};j6((R7)=>({...R7,toolPermissionContext:pO(R7.toolPermissionContext,Gq)})),hQ(Gq),Z7.refreshConfig()}j6((Gq)=>({...Gq,workerSandboxPermissions:{...Gq.workerSandboxPermissions,queue:Gq.workerSandboxPermissions.queue.slice(1)}}))}}),Dz==="elicitation"&&y8.createElement(xaK,{key:$6.queue[0].serverName+":"+String($6.queue[0].requestId),event:$6.queue[0],onResponse:(j8,R8)=>{let l8=$6.queue[0];if(!l8)return;if(l8.respond({action:j8,content:R8}),!(l8.params.mode==="url"&&j8==="accept"))j6((L7)=>({...L7,elicitation:{queue:L7.elicitation.queue.slice(1)}}))},onWaitingDismiss:(j8)=>{let R8=$6.queue[0];j6((l8)=>({...l8,elicitation:{queue:l8.elicitation.queue.slice(1)}})),R8?.onWaitingDismiss?.(j8)}}),Dz==="cost"&&y8.createElement(QiK,{onDone:()=>{cW(!1),s38(!0),C8((j8)=>({...j8,hasAcknowledgedCostThreshold:!0})),d("tengu_cost_threshold_acknowledged",{})}}),Dz==="idle-return"&&v96&&y8.createElement(ciK,{idleMinutes:v96.idleMinutes,contextTokens:BH(wA(VK.current)),onDone:async(j8)=>{let R8=v96;if(Vx6(null),d("tengu_idle_return_action",{action:j8,idleMinutes:Math.round(R8.idleMinutes),messageCount:VK.current.length,contextTokens:BH(wA(VK.current))}),j8==="dismiss"){S9(R8.input);return}if(j8==="never")C8((l8)=>{if(l8.idleReturnDismissed)return l8;return{...l8,idleReturnDismissed:!0}});if(j8==="clear"){let{clearConversation:l8}=await Promise.resolve().then(() => (R48(),o57));await l8({setMessages:BK,readFileState:TR.current,discoveredSkillNames:IX6.current,loadedNestedMemoryPaths:h96.current,memorySelector:HI.current,getAppState:()=>y6.getState(),setAppState:j6,setConversationId:JX,resultDedupState:N96.current}),VO.current=!1,OH(void 0),L96.current.clear(),yE.current=0,uX6.current=NS6()}k96.current=!0,VR.current(R8.input,{setCursorOffset:()=>{},clearBuffer:()=>{},resetHistory:()=>{}})}}),Dz==="resume-return"&&T96&&y8.createElement(niK,{sessionAgeMinutes:T96.sessionAgeMinutes,estimatedTokens:T96.estimatedTokens,onDone:async(j8)=>{let R8=T96;if(EX6(null),d("tengu_resume_return_action",{action:j8,sessionAgeMinutes:Math.round(R8.sessionAgeMinutes),messageCount:VK.current.length,estimatedTokens:R8.estimatedTokens}),j8==="never")C8((l8)=>{if(l8.resumeReturnDismissed)return l8;return{...l8,resumeReturnDismissed:!0}});if(j8==="compact"){let{getDefaultHaikuModel:l8}=await Promise.resolve().then(() => (Fq(),oD1));VR.current("/compact",{setCursorOffset:()=>{},clearBuffer:()=>{},resetHistory:()=>{}},void 0,{modelOverride:l8()})}}}),Dz==="ide-onboarding"&&y8.createElement(WQ1,{onDone:()=>Dq(!1),installationStatus:m1}),!1,!1,Dz==="effort-callout"&&y8.createElement(Z15,{model:W6,onDone:(j8)=>{if(O7(!1),j8!=="dismiss")j6((R8)=>({...R8,effortValue:j8}))}}),Dz==="remote-callout"&&y8.createElement(dQK,{onDone:(j8)=>{j6((R8)=>{if(!R8.showRemoteCallout)return R8;return{...R8,showRemoteCallout:!1,...j8==="enable"&&{replBridgeEnabled:!0,replBridgeExplicit:!0,replBridgeOutboundOnly:!1}}})}}),q98,Dz==="plugin-hint"&&E3&&y8.createElement(u75,{pluginName:E3.pluginName,pluginDescription:E3.pluginDescription,marketplaceName:E3.marketplaceName,sourceCommand:E3.sourceCommand,onResponse:I3}),Dz==="lsp-recommendation"&&$3&&y8.createElement(C75,{pluginName:$3.pluginName,pluginDescription:$3.pluginDescription,fileExtension:$3.fileExtension,onResponse:R4}),Dz==="desktop-upsell"&&y8.createElement(t15,{onDone:()=>_5(!1)}),Dz==="ultraplan-choice"&&i&&y8.createElement(M15,{plan:i.plan,sessionId:i.sessionId,taskId:i.taskId,setMessages:BK,readFileState:TR.current,memorySelector:HI.current,getAppState:()=>y6.getState(),setConversationId:JX,resultDedupState:N96.current}),Dz==="ultraplan-launch"&&c&&y8.createElement(P15,{onChoice:(j8,R8)=>{let l8=c.blurb;if(j6((Vq)=>Vq.ultraplanLaunchPending?{...Vq,ultraplanLaunchPending:void 0}:Vq),j8==="cancel"){if(l8)S9(l8);return}BK((Vq)=>[...Vq,Xx(yh6("ultraplan",l8))]);let G7=(Vq)=>Xx(`<${OD}>${_0(Vq)}</${OD}>`),L7,Gq=(Vq)=>{let g4=G7(Vq);BK((fK)=>{let F4=L7?fK.findIndex((z9)=>z9.uuid===L7):-1;if(F4===-1)return[...fK,g4];let ZA=[...fK];return ZA[F4]=g4,ZA})},R7=(Vq)=>{if(!OK.isActive){Gq(Vq);return}let g4=OK.subscribe(()=>{if(OK.isActive)return;if(g4(),!y6.getState().ultraplanSessionUrl)return;Gq(Vq)})};pK8({blurb:l8,promptIdentifier:R8?.promptIdentifier,getAppState:()=>y6.getState(),setAppState:j6,signal:U3().signal,disconnectedBridge:R8?.disconnectedBridge,onSessionReady:R7}).then((Vq)=>{let g4=G7(Vq);L7=g4.uuid,BK((fK)=>[...fK,g4])}).catch(H6)}}),CX6(),!lq?.shouldHidePromptInput&&!Dz&&!bx6&&!f&&!jG&&y8.createElement(y8.Fragment,null,UB&&y8.createElement(Zq5,{onRun:MI,onCancel:Y98,reason:Tq5(UB)}),Jl.state!=="closed"?y8.createElement(L38,{state:Jl.state,lastResponse:Jl.lastResponse,handleSelect:Jl.handleSelect,inputValue:sK,setInputValue:S9,onRequestFeedback:Ae}):MX.state!=="closed"?y8.createElement(L38,{state:MX.state,lastResponse:MX.lastResponse,handleSelect:MX.handleSelect,handleTranscriptSelect:MX.handleTranscriptSelect,inputValue:sK,setInputValue:S9,onRequestFeedback:Ae,message:"How well did Claude use its memory? (optional)"}):y8.createElement(L38,{state:Oe.state,lastResponse:Oe.lastResponse,handleSelect:Oe.handleSelect,handleTranscriptSelect:Oe.handleTranscriptSelect,inputValue:sK,setInputValue:S9,onRequestFeedback:Sx6.current?void 0:Ae}),xX6.state!=="closed"&&y8.createElement(L38,{state:xX6.state,lastResponse:null,handleSelect:()=>{},handleTranscriptSelect:xX6.handleTranscriptSelect,inputValue:sK,setInputValue:S9}),hx6&&y8.createElement(Vq5,null),y8.createElement(Y65,{debug:K,ideSelection:L8,hasSuppressedDialogs:!!K98,isLocalJSXCommandActive:y2,getToolUseContext:u3,toolPermissionContext:F,setToolPermissionContext:C96,apiKeyStatus:e38,commands:M5,agents:o.activeAgents,isLoading:l4,onExit:Ux6,verbose:U,messages:QK,onAutoUpdaterResult:J4,autoUpdaterResult:_q,input:sK,onInputChange:S9,mode:HX,onModeChange:AH,stashedPrompt:NO,setStashedPrompt:kE,submitCount:$H,onShowMessageSelector:sr8,onMessageActionsEnter:void 0,mcpClients:a6,pastedContents:DV,setPastedContents:QW,vimMode:y96,setVimMode:lW,showBashesDialog:_e,setShowBashesDialog:VP,onSubmit:kR,onAgentSubmit:gx6,isSearchingHistory:yx6,setIsSearchingHistory:wI,helpOpen:FB,setHelpOpen:jI,insertTextRef:qM,voiceInterimRange:NR.interimRange}),y8.createElement(H15,{onBackgroundSession:ar8,isLoading:l4})),jG&&y8.createElement(DC4,{cursor:jG}),Dz==="message-selector"&&y8.createElement(P$7,{messages:QK,preselectedMessage:sA,onPreRestore:gX6,onRestoreCode:async(j8)=>{await Xm8((R8)=>{j6((l8)=>({...l8,fileHistory:R8(l8.fileHistory)}))},j8.uuid)},onSummarize:async(j8,R8,l8="from")=>{let G7=wA(QK),L7=G7.indexOf(j8);if(L7===-1){BK((JH)=>[...JH,BA("That message is no longer in the active context (snipped or pre-compact). Choose a more recent message.","warning")]);return}let Gq=U3(),R7=u3(G7,[],Gq,W6),Vq=R7.getAppState(),g4=await GW(R7.options.tools,R7.options.mainLoopModel,Array.from(Vq.toolPermissionContext.additionalWorkingDirectories.keys())),fK=Lx({mainThreadAgentDefinition:void 0,toolUseContext:R7,customSystemPrompt:R7.options.customSystemPrompt,defaultSystemPrompt:g4,appendSystemPrompt:R7.options.appendSystemPrompt}),[F4,ZA]=await Promise.all([d$(),J2()]),z9=await rGK(G7,L7,R7,{systemPrompt:fK,userContext:F4,systemContext:ZA,toolUseContext:R7,forkContextMessages:G7},R8,l8),HH=z9.messagesToKeep??[],HT=l8==="up_to"?[...z9.summaryMessages,...HH]:[...HH,...z9.summaryMessages],$z=[z9.boundaryMarker,...HT,...z9.attachments,...z9.hookResults];if(E4()&&l8==="from")BK((JH)=>{let Dl=JH.findIndex((fl)=>fl.uuid===j8.uuid);return[...JH.slice(0,Dl===-1?0:Dl),...$z]});else BK($z);if(JX(DX6()),OB(R7.options.querySource),l8==="from"){let JH=VK7(j8);if(JH)S9(JH.text),AH(JH.mode)}let yO=dH("app:toggleTranscript","Global","ctrl+o");b6({key:"summarize-ctrl-o-hint",text:`Conversation summarized (${yO} for history)`,priority:"medium",timeoutMs:8000})},onRestoreMessage:dx6,onClose:()=>{tK(!1),wH(void 0)}}),!1),!(JJ&&E4())&&ox6?y8.createElement(B$7,null):null)})));if(E4())return y8.createElement(F27,{mouseTracking:Md1()},LR);return LR}var y8,O1,M6O,aq5,X6O=()=>({state:"closed",handleTranscriptSelect:()=>{}}),P6O=()=>{},W6O=()=>({}),sq5=null,D6O=(q)=>()=>{},f6O=()=>!1,Z6O=(q,K)=>!1,G6O,t27,v6O,T6O=3000,K45,eq5="✳",V6O=960;var qj7=L(()=>{o6();T8();LF8();cD();eD();xq();l6();W36();u4();UiK();yY7();Tc();l6();diK();liK();iiK();PO();P88();eiK();yU();rr();Lk();T8();z0();_8();qrK();g8();m7();rn6();Mf();oL6();eL6();MY();zrK();zx();PW();XK6();OrK();BrK();IA();Rn8();lrK();EaK();IaK();maK();O65();Qw7();J65();P65();D65();Z65();f2();Sh();XS6();_y();yM();z27();Gx();g65();mA7();Je6();Q65();c65();xx();ww7();n65();r65();o65();sQ();WW();im();s65();e65();O85();w85();E8();h8();Z85();QH();I$7();TM();Vz();jy();yS6();y1();Zi();k8();s1();K7();aC6();RO();zA();R85();I85();m85();ZJ6();VH6();g85();Kh8();_Y7();pc8();U85();l85();D27();RK8();Qo1();i85();LI8();f48();D56();uO();o85();Tf();qK6();W77();oP();iu8();jx();E7();KJ();qK();uh6();gs6();Zb();Bq8();w0();DF8();ea();By();Qo();qK();y38();TZ();G56();z15();tO();O15();qj();w15();NY7();kY7();vf();s2();zx6();J15();X15();W15();Ob6();Qg8();f15();fH6();H26();DQ1();v15();mY7();Io1();FH();V36();y15();L15();R15();I15();m15();U15();d15();i15();o15();_75();qs1();JO();wr8();H75();J75();M75();B37();W75();f75();Mi8();G75();S75();b75();I75();m75();E27();g75();U75();n75();cu8();r75();a75();t75();qq5();_q5();Oq5();$q5();Mq5();fq5();kq5();yq5();g$7();lY7();Eq5();IA();s_7();nj();Lq5();uq5();Py();GM();AP();y8=Y6(f6(),1),O1=Y6(f6(),1),M6O=(d27(),bq(Q27)).useVoiceIntegration,aq5=(d27(),bq(Q27)).VoiceKeybindingHandler,G6O=(oq5(),bq(rq5)).useScheduledTasks,t27=[],v6O={maybeLoadOlder:(q)=>{}};K45=["⠂","⠐"]});async function Q38(q,K,_,z){let{App:Y}=await Promise.resolve().then(() => (QA7(),UA7)),{REPL:O}=await Promise.resolve().then(() => (qj7(),_45));await z(q,Kj7.default.createElement(Y,{...K},Kj7.default.createElement(O,{..._})))}var Kj7;var z45=L(()=>{Kj7=Y6(f6(),1)});async function L6O(){if(wY())return N("[Bootstrap] Skipped: Nonessential traffic disabled"),null;if(Jq()!=="firstParty")return N("[Bootstrap] Skipped: 3P provider"),null;let q=dT();if(!(s7()?.accessToken&&fD())&&!q)return N("[Bootstrap] Skipped: no usable OAuth or API key"),null;let _=`${p7().BASE_API_URL}/api/claude_cli/bootstrap`;try{return await Pr(async()=>{let z=s7()?.accessToken,Y;if(z&&fD())Y={Authorization:`Bearer ${z}`,"anthropic-beta":fJ};else if(q)Y={"x-api-key":q};else return N("[Bootstrap] No auth available on retry, aborting"),null;N("[Bootstrap] Fetching");let O=await w1.get(_,{headers:{"Content-Type":"application/json","User-Agent":wO(),...Y},timeout:5000}),A=E6O().safeParse(O.data);if(!A.success)return N(`[Bootstrap] Response failed validation: ${A.error.message}`),null;return N("[Bootstrap] Fetch ok"),A.data})}catch(z){throw N(`[Bootstrap] Fetch failed: ${w1.isAxiosError(z)?z.response?.status??z.code:"unknown"}`),z}}async function Y45(){try{let q=await L6O();if(!q)return;let K=q.client_data??null,_=q.additional_model_options??[],z=w8();if(YM(z.clientDataCache,K)&&YM(z.additionalModelOptionsCache,_)){N("[Bootstrap] Cache unchanged, skipping write");return}N("[Bootstrap] Cache updated, persisting to disk"),C8((Y)=>({...Y,clientDataCache:K,additionalModelOptionsCache:_}))}catch(q){H6(q)}}var E6O;var O45=L(()=>{EK();E66();T7();i$6();H3();y1();_8();Kv();h8();K_();kX();E6O=m6(()=>yK.object({client_data:yK.record(yK.unknown()).nullish(),additional_model_options:yK.array(yK.object({model:yK.string(),name:yK.string(),description:yK.string()}).transform(({model:q,name:K,description:_})=>({value:q,label:K,description:_}))).nullish()}))});import{posix as A45,win32 as $45}from"path";function R6O(){let q=process.argv[1]||"",K=process.execPath||process.argv[0]||"";if(T1()==="windows")q=q.split($45.sep).join(A45.sep),K=K.split($45.sep).join(A45.sep);let _=[q,K],z=["/build-ant/","/build-external/","/build-external-native/","/build-ant-native/"];return _.some((Y)=>z.some((O)=>Y.includes(O)))}function C6O(q){let K=`${q.name}: ${q.message}`;return S6O.some((_)=>_.test(K))}function w45(){let q=process.listeners("warning");if(Vr8&&q.includes(Vr8))return;if(!R6O())process.removeAllListeners("warning");Vr8=(_)=>{try{let z=`${_.name}: ${_.message.slice(0,50)}`,Y=kr8.get(z)||0;if(kr8.has(z)||kr8.size<h6O)kr8.set(z,Y+1);let O=C6O(_);if(d("tengu_node_warning",{is_internal:O?1:0,occurrence_count:Y+1,classname:_.name,...!1}),U6(process.env.CLAUDE_DEBUG))N(`${O?"[Internal Warning]":"[Warning]"} ${_.toString()}`,{level:"warn"})}catch{}},process.on("warning",Vr8)}var h6O=1000,kr8,S6O,Vr8=null;var j45=L(()=>{k8();_8();g8();LK();kr8=new Map;S6O=[/MaxListenersExceededWarning.*AbortSignal/,/MaxListenersExceededWarning.*EventTarget/]});function Nr8(){let q=K6(1),K;if(q[0]===Symbol.for("react.memo_cache_sentinel"))K=_j7.default.createElement(T,null,"MCP servers may execute code or access system resources. All tool calls require approval. Learn more in the"," ",_j7.default.createElement(Sq,{url:"https://code.claude.com/docs/en/mcp"},"MCP documentation"),"."),q[0]=K;else K=q[0];return K}var _j7;var zj7=L(()=>{o6();l6();_j7=Y6(f6(),1)});function H45(q){let K=K6(13),{serverName:_,onDone:z}=q,Y;if(K[0]!==z||K[1]!==_)Y=function(X){d("tengu_mcp_dialog_choice",{choice:X});q:switch(X){case"yes":case"yes_all":{let W=(N7()||{}).enabledMcpjsonServers||[];if(!W.includes(_))W7("localSettings",{enabledMcpjsonServers:[...W,_]});if(X==="yes_all")W7("localSettings",{enableAllProjectMcpServers:!0});z();break q}case"no":{let W=(N7()||{}).disabledMcpjsonServers||[];if(!W.includes(_))W7("localSettings",{disabledMcpjsonServers:[...W,_]});z()}}},K[0]=z,K[1]=_,K[2]=Y;else Y=K[2];let O=Y,A=`New MCP server found in .mcp.json: ${_}`,$;if(K[3]!==O)$=()=>O("no"),K[3]=O,K[4]=$;else $=K[4];let w;if(K[5]===Symbol.for("react.memo_cache_sentinel"))w=yr8.default.createElement(Nr8,null),K[5]=w;else w=K[5];let j;if(K[6]===Symbol.for("react.memo_cache_sentinel"))j=[{label:"Use this and all future MCP servers in this project",value:"yes_all"},{label:"Use this MCP server",value:"yes"},{label:"Continue without using this MCP server",value:"no"}],K[6]=j;else j=K[6];let H;if(K[7]!==O)H=yr8.default.createElement(z1,{options:j,onChange:(M)=>O(M),onCancel:()=>O("no")}),K[7]=O,K[8]=H;else H=K[8];let J;if(K[9]!==A||K[10]!==$||K[11]!==H)J=yr8.default.createElement(N1,{title:A,color:"warning",onCancel:$},w,H),K[9]=A,K[10]=$,K[11]=H,K[12]=J;else J=K[12];return J}var yr8;var J45=L(()=>{o6();k8();r1();I_();y4();zj7();yr8=Y6(f6(),1)});function M45(q){let K=K6(21),{serverNames:_,onDone:z}=q,Y;if(K[0]!==z||K[1]!==_)Y=function(D){let f=N7()||{},G=f.enabledMcpjsonServers||[],Z=f.disabledMcpjsonServers||[],[v,k]=mc8(_,(V)=>D.includes(V));if(d("tengu_mcp_multidialog_choice",{approved:v.length,rejected:k.length}),v.length>0){let V=e9([...G,...v]);W7("localSettings",{enabledMcpjsonServers:V})}if(k.length>0){let V=e9([...Z,...k]);W7("localSettings",{disabledMcpjsonServers:V})}z()},K[0]=z,K[1]=_,K[2]=Y;else Y=K[2];let O=Y,A;if(K[3]!==z||K[4]!==_)A=()=>{let D=(N7()||{}).disabledMcpjsonServers||[],f=e9([...D,..._]);W7("localSettings",{disabledMcpjsonServers:f}),z()},K[3]=z,K[4]=_,K[5]=A;else A=K[5];let $=A,w=`${_.length} new MCP servers found in .mcp.json`,j;if(K[6]===Symbol.for("react.memo_cache_sentinel"))j=_I.default.createElement(Nr8,null),K[6]=j;else j=K[6];let H;if(K[7]!==_)H=_.map(b6O),K[7]=_,K[8]=H;else H=K[8];let J;if(K[9]!==$||K[10]!==O||K[11]!==_||K[12]!==H)J=_I.default.createElement(wK6,{options:H,defaultValue:_,onSubmit:O,onCancel:$,hideIndexes:!0}),K[9]=$,K[10]=O,K[11]=_,K[12]=H,K[13]=J;else J=K[13];let M;if(K[14]!==$||K[15]!==w||K[16]!==J)M=_I.default.createElement(N1,{title:w,subtitle:"Select any you wish to enable.",color:"warning",onCancel:$,hideInputGuide:!0},j,J),K[14]=$,K[15]=w,K[16]=J,K[17]=M;else M=K[17];let X;if(K[18]===Symbol.for("react.memo_cache_sentinel"))X=_I.default.createElement(u,{paddingX:1},_I.default.createElement(T,{dimColor:!0,italic:!0},_I.default.createElement(h1,null,_I.default.createElement(n8,{chord:"space",action:"select"}),_I.default.createElement(n8,{chord:"enter",action:"confirm"}),_I.default.createElement(M1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"reject all"})))),K[18]=X;else X=K[18];let P;if(K[19]!==M)P=_I.default.createElement(_I.default.Fragment,null,M,X),K[19]=M,K[20]=P;else P=K[20];return P}function b6O(q){return{label:q,value:q}}var _I;var X45=L(()=>{o6();KY7();k8();l6();r1();oK();Ze6();$K();y4();XK();zj7();_I=Y6(f6(),1)});async function P45(q){let{servers:K}=cH("project"),_=Object.keys(K).filter((z)=>TR8(z)==="pending");if(_.length===0)return;await new Promise((z)=>{let Y=()=>void z();if(_.length===1&&_[0]!==void 0){let O=_[0];q.render(fX6.default.createElement(FJ,null,fX6.default.createElement(IM,null,fX6.default.createElement(H45,{serverName:O,onDone:Y}))))}else q.render(fX6.default.createElement(FJ,null,fX6.default.createElement(IM,null,fX6.default.createElement(M45,{serverNames:_,onDone:Y}))))})}var fX6;var W45=L(()=>{J45();X45();sQ();E7();$0();SM();fX6=Y6(f6(),1)});function D45(){if(process.platform!=="darwin")return;let q=process.env.TERM_PROGRAM;if(!q)return;let K=x6O[q.toLowerCase()];if(!K)return;if(w8().deepLinkTerminal===K)return;C8((z)=>({...z,deepLinkTerminal:K})),N(`Stored deep link terminal preference: ${K}`)}var x6O;var f45=L(()=>{y1();_8();x6O={iterm:"iTerm","iterm.app":"iTerm",ghostty:"Ghostty",kitty:"kitty",alacritty:"Alacritty",wezterm:"WezTerm",apple_terminal:"Terminal"}});class Yj7{frameDurations=[];firstRenderTime;lastRenderTime;record(q){let K=performance.now();if(this.firstRenderTime===void 0)this.firstRenderTime=K;this.lastRenderTime=K,this.frameDurations.push(q)}getMetrics(){if(this.frameDurations.length===0||this.firstRenderTime===void 0||this.lastRenderTime===void 0)return;let q=this.lastRenderTime-this.firstRenderTime;if(q<=0)return;let _=this.frameDurations.length/(q/1000),z=this.frameDurations.slice().sort(($,w)=>w-$),Y=Math.max(0,Math.ceil(z.length*0.01)-1),O=z[Y],A=O>0?1000/O:0;return{averageFps:Math.round(_*100)/100,low1PctFps:Math.round(A*100)/100}}}import{realpath as I6O}from"fs/promises";async function Z45(){try{let q=await Q66();if(!q){N("Not in a GitHub repository, skipping path mapping update");return}let K=A7(),z=mY(K)??K,Y;try{Y=(await I6O(z)).normalize("NFC")}catch{Y=z}let O=q.toLowerCase(),$=w8().githubRepoPaths?.[O]??[];if($[0]===Y){N(`Path ${Y} already tracked for repo ${O}`);return}let w=$.filter((H)=>H!==Y),j=[Y,...w];C8((H)=>({...H,githubRepoPaths:{...H.githubRepoPaths,[O]:j}})),N(`Added ${Y} to tracked paths for repo ${O}`)}catch(q){N(`Error updating repo path mapping: ${q}`)}}function Er8(q){let K=w8(),_=q.toLowerCase();return K.githubRepoPaths?.[_]??[]}async function Lr8(q){let K=await Promise.all(q.map(F5));return q.filter((_,z)=>K[z])}async function G45(q,K){try{let _=await Nw8(q);if(!_)return!1;let z=yz6(_);if(!z)return!1;return z.toLowerCase()===K.toLowerCase()}catch{return!1}}function v45(q,K){let _=w8(),z=q.toLowerCase(),Y=_.githubRepoPaths?.[z]??[],O=Y.filter(($)=>$!==K);if(O.length===Y.length)return;let A={..._.githubRepoPaths};if(O.length===0)delete A[z];else A[z]=O;C8(($)=>({...$,githubRepoPaths:A})),N(`Removed ${K} from tracked paths for repo ${z}`)}var d38=L(()=>{T8();y1();_8();NG();hK();Zn();W5()});function T45(q,K){let[_,z]=hr8.useState(!1);return hr8.useEffect(()=>{z(!1);let Y=setTimeout(z,q,!0);return()=>clearTimeout(Y)},[q,K]),_}var hr8;var k45=L(()=>{hr8=Y6(f6(),1)});async function u6O(){try{let q=p7(),K=new URL(q.TOKEN_URL),_=[`${q.BASE_API_URL}/api/hello`,`${K.origin}/v1/oauth/hello`],z=async(A)=>{try{let $=await w1.get(A,{headers:{"User-Agent":TC()}});if($.status!==200)return{success:!1,error:`Failed to connect to ${new URL(A).hostname}: Status ${$.status}`};return{success:!0}}catch($){let w=new URL(A).hostname,j=eq6($);return{success:!1,error:`Failed to connect to ${w}: ${$ instanceof Error?$.code||$.message:String($)}`,sslHint:j??void 0}}},O=(await Promise.all(_.map(z))).find((A)=>!A.success);if(O)d("tengu_preflight_check_failed",{isConnectivityError:!1,hasErrorMessage:!!O.error,isSSLError:!!O.sslHint});return O||{success:!0}}catch(q){return H6(q),d("tengu_preflight_check_failed",{isConnectivityError:!0}),{success:!1,error:`Connectivity check error: ${q instanceof Error?q.code||q.message:String(q)}`}}}function V45(q){let K=K6(12),{onSuccess:_}=q,[z,Y]=AX.useState(null),[O,A]=AX.useState(!0),$=T45(1000)&&O,w,j;if(K[0]===Symbol.for("react.memo_cache_sentinel"))w=()=>{(async function(){let D=await u6O();Y(D),A(!1)})()},j=[],K[0]=w,K[1]=j;else w=K[0],j=K[1];AX.useEffect(w,j);let H,J;if(K[2]!==_||K[3]!==z)H=()=>{if(z?.success)_();else if(z&&!z.success){let P=setTimeout(m6O,100);return()=>clearTimeout(P)}},J=[z,_],K[2]=_,K[3]=z,K[4]=H,K[5]=J;else H=K[4],J=K[5];AX.useEffect(H,J);let M;if(K[6]!==O||K[7]!==z||K[8]!==$)M=O&&$?AX.default.createElement(u,{paddingLeft:1},AX.default.createElement(CK,null),AX.default.createElement(T,null,"Checking connectivity...")):!z?.success&&!O&&AX.default.createElement(u,{flexDirection:"column",gap:1},AX.default.createElement(T,{color:"error"},"Unable to connect to Anthropic services"),AX.default.createElement(T,{color:"error"},z?.error),z?.sslHint?AX.default.createElement(u,{flexDirection:"column",gap:1},AX.default.createElement(T,null,z.sslHint),AX.default.createElement(T,{color:"suggestion"},"See https://code.claude.com/docs/en/network-config")):AX.default.createElement(u,{flexDirection:"column",gap:1},AX.default.createElement(T,null,"Please check your internet connection and network settings."),AX.default.createElement(T,null,"Note: Claude Code might not be available in your country. Check supported countries at"," ",AX.default.createElement(T,{color:"suggestion"},"https://anthropic.com/supported-countries")))),K[6]=O,K[7]=z,K[8]=$,K[9]=M;else M=K[9];let X;if(K[10]!==M)X=AX.default.createElement(u,{flexDirection:"column",gap:1,paddingLeft:1},M),K[10]=M,K[11]=X;else X=K[11];return X}function m6O(){return process.exit(1)}var AX;var N45=L(()=>{o6();EK();k8();f2();H3();k45();l6();Vo();Kv();h8();AX=Y6(f6(),1)});var y45={};G8(y45,{ApproveApiKey:()=>Oj7});function Oj7(q){let K=K6(17),{customApiKeyTruncated:_,onDone:z}=q,Y;if(K[0]!==_||K[1]!==z)Y=function(W){q:switch(W){case"yes":{C8((D)=>({...D,customApiKeyResponses:{...D.customApiKeyResponses,approved:[...D.customApiKeyResponses?.approved??[],_]}})),z(!0);break q}case"no":C8((D)=>({...D,customApiKeyResponses:{...D.customApiKeyResponses,rejected:[...D.customApiKeyResponses?.rejected??[],_]}})),z(!1)}},K[0]=_,K[1]=z,K[2]=Y;else Y=K[2];let O=Y,A;if(K[3]!==O)A=()=>O("no"),K[3]=O,K[4]=A;else A=K[4];let $;if(K[5]===Symbol.for("react.memo_cache_sentinel"))$=tt.default.createElement(T,{bold:!0},"ANTHROPIC_API_KEY"),K[5]=$;else $=K[5];let w;if(K[6]!==_)w=tt.default.createElement(T,null,$,tt.default.createElement(T,null,": sk-ant-...",_)),K[6]=_,K[7]=w;else w=K[7];let j;if(K[8]===Symbol.for("react.memo_cache_sentinel"))j=tt.default.createElement(T,null,"Do you want to use this API key?"),K[8]=j;else j=K[8];let H;if(K[9]===Symbol.for("react.memo_cache_sentinel"))H={label:"Yes",value:"yes"},K[9]=H;else H=K[9];let J;if(K[10]===Symbol.for("react.memo_cache_sentinel"))J=[H,{label:tt.default.createElement(T,null,"No (",tt.default.createElement(T,{bold:!0},"recommended"),")"),value:"no"}],K[10]=J;else J=K[10];let M;if(K[11]!==O)M=tt.default.createElement(z1,{defaultValue:"no",defaultFocusValue:"no",options:J,onChange:(P)=>O(P),onCancel:()=>O("no")}),K[11]=O,K[12]=M;else M=K[12];let X;if(K[13]!==A||K[14]!==w||K[15]!==M)X=tt.default.createElement(N1,{title:"Detected a custom API key in your environment",color:"warning",onCancel:A},w,j,M),K[13]=A,K[14]=w,K[15]=M,K[16]=X;else X=K[16];return X}var tt;var Aj7=L(()=>{o6();l6();y1();I_();y4();tt=Y6(f6(),1)});function Sr8(){return;let q=K6(35),[K]=Aq();if($7.terminal==="Apple_Terminal"){let Z;if(q[0]!==K)Z=z7.default.createElement(p6O,{theme:K,welcomeMessage:"Welcome to Claude Code"}),q[0]=K,q[1]=Z;else Z=q[1];return Z}if(["light","light-daltonized","light-ansi"].includes(K)){let Z,v,k,V,y,E,R,b,I;if(q[2]===Symbol.for("react.memo_cache_sentinel"))Z=z7.default.createElement(T,null,z7.default.createElement(T,{color:"claude"},"Welcome to Claude Code"," "),z7.default.createElement(T,{dimColor:!0},"v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION," ")),v=z7.default.createElement(T,null,"…………………………………………………………………………………………………………………………………………………………"),k=z7.default.createElement(T,null," "),V=z7.default.createElement(T,null," "),y=z7.default.createElement(T,null," "),E=z7.default.createElement(T,null," ░░░░░░ "),R=z7.default.createElement(T,null," ░░░ ░░░░░░░░░░ "),b=z7.default.createElement(T,null," ░░░░░░░░░░░░░░░░░░░ "),I=z7.default.createElement(T,null," "),q[2]=Z,q[3]=v,q[4]=k,q[5]=V,q[6]=y,q[7]=E,q[8]=R,q[9]=b,q[10]=I;else Z=q[2],v=q[3],k=q[4],V=q[5],y=q[6],E=q[7],R=q[8],b=q[9],I=q[10];let m;if(q[11]===Symbol.for("react.memo_cache_sentinel"))m=z7.default.createElement(T,null,z7.default.createElement(T,{dimColor:!0}," ░░░░"),z7.default.createElement(T,null," ██ ")),q[11]=m;else m=q[11];let p,S;if(q[12]===Symbol.for("react.memo_cache_sentinel"))p=z7.default.createElement(T,null,z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░░░"),z7.default.createElement(T,null," ██▒▒██ ")),S=z7.default.createElement(T,null," ▒▒ ██ ▒"),q[12]=p,q[13]=S;else p=q[12],S=q[13];let g;if(q[14]===Symbol.for("react.memo_cache_sentinel"))g=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"}," █████████ ")," ▒▒░░▒▒ ▒ ▒▒"),q[14]=g;else g=q[14];let F;if(q[15]===Symbol.for("react.memo_cache_sentinel"))F=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body",backgroundColor:"clawd_background"},"██▄█████▄██")," ▒▒ ▒▒ "),q[15]=F;else F=q[15];let U;if(q[16]===Symbol.for("react.memo_cache_sentinel"))U=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"}," █████████ ")," ░ ▒ "),q[16]=U;else U=q[16];let n;if(q[17]===Symbol.for("react.memo_cache_sentinel"))n=z7.default.createElement(u,{width:Rr8},z7.default.createElement(T,null,Z,v,k,V,y,E,R,b,I,m,p,S,g,F,U,z7.default.createElement(T,null,"…………………",z7.default.createElement(T,{color:"clawd_body"},"█ █ █ █"),"……………………………………………………………………░…………………………▒…………"))),q[17]=n;else n=q[17];return n}let _,z,Y,O,A,$,w;if(q[18]===Symbol.for("react.memo_cache_sentinel"))_=z7.default.createElement(T,null,z7.default.createElement(T,{color:"claude"},"Welcome to Claude Code"," "),z7.default.createElement(T,{dimColor:!0},"v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION," ")),z=z7.default.createElement(T,null,"…………………………………………………………………………………………………………………………………………………………"),Y=z7.default.createElement(T,null," "),O=z7.default.createElement(T,null," * █████▓▓░ "),A=z7.default.createElement(T,null," * ███▓░ ░░ "),$=z7.default.createElement(T,null," ░░░░░░ ███▓░ "),w=z7.default.createElement(T,null," ░░░ ░░░░░░░░░░ ███▓░ "),q[18]=_,q[19]=z,q[20]=Y,q[21]=O,q[22]=A,q[23]=$,q[24]=w;else _=q[18],z=q[19],Y=q[20],O=q[21],A=q[22],$=q[23],w=q[24];let j,H,J,M,X;if(q[25]===Symbol.for("react.memo_cache_sentinel"))J=z7.default.createElement(T,null,z7.default.createElement(T,null," ░░░░░░░░░░░░░░░░░░░ "),z7.default.createElement(T,{bold:!0},"*"),z7.default.createElement(T,null," ██▓░░ ▓ ")),M=z7.default.createElement(T,null," ░▓▓███▓▓░ "),X=z7.default.createElement(T,{dimColor:!0}," * ░░░░ "),j=z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░ "),H=z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░░░░░░░░░ "),q[25]=j,q[26]=H,q[27]=J,q[28]=M,q[29]=X;else j=q[25],H=q[26],J=q[27],M=q[28],X=q[29];let P;if(q[30]===Symbol.for("react.memo_cache_sentinel"))P=z7.default.createElement(T,{color:"clawd_body"}," █████████ "),q[30]=P;else P=q[30];let W;if(q[31]===Symbol.for("react.memo_cache_sentinel"))W=z7.default.createElement(T,null," ",P," ",z7.default.createElement(T,{dimColor:!0},"*"),z7.default.createElement(T,null," ")),q[31]=W;else W=q[31];let D;if(q[32]===Symbol.for("react.memo_cache_sentinel"))D=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"},"██▄█████▄██"),z7.default.createElement(T,null," "),z7.default.createElement(T,{bold:!0},"*"),z7.default.createElement(T,null," ")),q[32]=D;else D=q[32];let f;if(q[33]===Symbol.for("react.memo_cache_sentinel"))f=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"}," █████████ ")," * "),q[33]=f;else f=q[33];let G;if(q[34]===Symbol.for("react.memo_cache_sentinel"))G=z7.default.createElement(u,{width:Rr8},z7.default.createElement(T,null,_,z,Y,O,A,$,w,J,M,X,j,H,W,D,f,z7.default.createElement(T,null,"…………………",z7.default.createElement(T,{color:"clawd_body"},"█ █ █ █"),"………………………………………………………………………………………………………………"))),q[34]=G;else G=q[34];return G}function p6O(q){let K=K6(44),{theme:_,welcomeMessage:z}=q;if(["light","light-daltonized","light-ansi"].includes(_)){let E;if(K[0]!==z)E=z7.default.createElement(T,{color:"claude"},z," "),K[0]=z,K[1]=E;else E=K[1];let R;if(K[2]===Symbol.for("react.memo_cache_sentinel"))R=z7.default.createElement(T,{dimColor:!0},"v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION," "),K[2]=R;else R=K[2];let b;if(K[3]!==E)b=z7.default.createElement(T,null,E,R),K[3]=E,K[4]=b;else b=K[4];let I,m,p,S,g,F,U,n;if(K[5]===Symbol.for("react.memo_cache_sentinel"))p=z7.default.createElement(T,null,"…………………………………………………………………………………………………………………………………………………………"),S=z7.default.createElement(T,null," "),g=z7.default.createElement(T,null," "),F=z7.default.createElement(T,null," "),U=z7.default.createElement(T,null," ░░░░░░ "),n=z7.default.createElement(T,null," ░░░ ░░░░░░░░░░ "),I=z7.default.createElement(T,null," ░░░░░░░░░░░░░░░░░░░ "),m=z7.default.createElement(T,null," "),K[5]=I,K[6]=m,K[7]=p,K[8]=S,K[9]=g,K[10]=F,K[11]=U,K[12]=n;else I=K[5],m=K[6],p=K[7],S=K[8],g=K[9],F=K[10],U=K[11],n=K[12];let r;if(K[13]===Symbol.for("react.memo_cache_sentinel"))r=z7.default.createElement(T,null,z7.default.createElement(T,{dimColor:!0}," ░░░░"),z7.default.createElement(T,null," ██ ")),K[13]=r;else r=K[13];let o,z6,_6;if(K[14]===Symbol.for("react.memo_cache_sentinel"))o=z7.default.createElement(T,null,z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░░░"),z7.default.createElement(T,null," ██▒▒██ ")),z6=z7.default.createElement(T,null," ▒▒ ██ ▒"),_6=z7.default.createElement(T,null," ▒▒░░▒▒ ▒ ▒▒"),K[14]=o,K[15]=z6,K[16]=_6;else o=K[14],z6=K[15],_6=K[16];let l;if(K[17]===Symbol.for("react.memo_cache_sentinel"))l=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"},"▗"),z7.default.createElement(T,{color:"clawd_background",backgroundColor:"clawd_body"}," ","▗"," ","▖"," "),z7.default.createElement(T,{color:"clawd_body"},"▖")," ▒▒ ▒▒ "),K[17]=l;else l=K[17];let q6;if(K[18]===Symbol.for("react.memo_cache_sentinel"))q6=z7.default.createElement(T,null," ",z7.default.createElement(T,{backgroundColor:"clawd_body"}," ".repeat(9))," ░ ▒ "),K[18]=q6;else q6=K[18];let J6;if(K[19]===Symbol.for("react.memo_cache_sentinel"))J6=z7.default.createElement(T,null,"…………………",z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),"……………………………………………………………………░…………………………▒…………"),K[19]=J6;else J6=K[19];let O6;if(K[20]!==b)O6=z7.default.createElement(u,{width:Rr8},z7.default.createElement(T,null,b,p,S,g,F,U,n,I,m,r,o,z6,_6,l,q6,J6)),K[20]=b,K[21]=O6;else O6=K[21];return O6}let O;if(K[22]!==z)O=z7.default.createElement(T,{color:"claude"},z," "),K[22]=z,K[23]=O;else O=K[23];let A;if(K[24]===Symbol.for("react.memo_cache_sentinel"))A=z7.default.createElement(T,{dimColor:!0},"v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION," "),K[24]=A;else A=K[24];let $;if(K[25]!==O)$=z7.default.createElement(T,null,O,A),K[25]=O,K[26]=$;else $=K[26];let w,j,H,J,M,X;if(K[27]===Symbol.for("react.memo_cache_sentinel"))w=z7.default.createElement(T,null,"…………………………………………………………………………………………………………………………………………………………"),j=z7.default.createElement(T,null," "),H=z7.default.createElement(T,null," * █████▓▓░ "),J=z7.default.createElement(T,null," * ███▓░ ░░ "),M=z7.default.createElement(T,null," ░░░░░░ ███▓░ "),X=z7.default.createElement(T,null," ░░░ ░░░░░░░░░░ ███▓░ "),K[27]=w,K[28]=j,K[29]=H,K[30]=J,K[31]=M,K[32]=X;else w=K[27],j=K[28],H=K[29],J=K[30],M=K[31],X=K[32];let P,W,D,f,G;if(K[33]===Symbol.for("react.memo_cache_sentinel"))P=z7.default.createElement(T,null,z7.default.createElement(T,null," ░░░░░░░░░░░░░░░░░░░ "),z7.default.createElement(T,{bold:!0},"*"),z7.default.createElement(T,null," ██▓░░ ▓ ")),W=z7.default.createElement(T,null," ░▓▓███▓▓░ "),D=z7.default.createElement(T,{dimColor:!0}," * ░░░░ "),f=z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░ "),G=z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░░░░░░░░░ "),K[33]=P,K[34]=W,K[35]=D,K[36]=f,K[37]=G;else P=K[33],W=K[34],D=K[35],f=K[36],G=K[37];let Z;if(K[38]===Symbol.for("react.memo_cache_sentinel"))Z=z7.default.createElement(T,null," ",z7.default.createElement(T,{dimColor:!0},"*"),z7.default.createElement(T,null," ")),K[38]=Z;else Z=K[38];let v;if(K[39]===Symbol.for("react.memo_cache_sentinel"))v=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"},"▗"),z7.default.createElement(T,{color:"clawd_background",backgroundColor:"clawd_body"}," ","▗"," ","▖"," "),z7.default.createElement(T,{color:"clawd_body"},"▖"),z7.default.createElement(T,null," "),z7.default.createElement(T,{bold:!0},"*"),z7.default.createElement(T,null," ")),K[39]=v;else v=K[39];let k;if(K[40]===Symbol.for("react.memo_cache_sentinel"))k=z7.default.createElement(T,null," ",z7.default.createElement(T,{backgroundColor:"clawd_body"}," ".repeat(9))," * "),K[40]=k;else k=K[40];let V;if(K[41]===Symbol.for("react.memo_cache_sentinel"))V=z7.default.createElement(T,null,"…………………",z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),"………………………………………………………………………………………………………………"),K[41]=V;else V=K[41];let y;if(K[42]!==$)y=z7.default.createElement(u,{width:Rr8},z7.default.createElement(T,null,$,w,j,H,J,M,X,P,W,D,f,G,Z,v,k,V)),K[42]=$,K[43]=y;else y=K[43];return y}var z7,Rr8=58;var $j7=L(()=>{o6();l6();S_();z7=Y6(f6(),1)});function Cr8(q){let K=K6(7),{children:_}=q,{marker:z}=W96.useContext(wj7),Y;if(K[0]!==z)Y=W96.default.createElement(T,{dimColor:!0},z),K[0]=z,K[1]=Y;else Y=K[1];let O;if(K[2]!==_)O=W96.default.createElement(u,{flexDirection:"column"},_),K[2]=_,K[3]=O;else O=K[3];let A;if(K[4]!==Y||K[5]!==O)A=W96.default.createElement(u,{gap:1},Y,O),K[4]=Y,K[5]=O,K[6]=A;else A=K[6];return A}var W96,wj7;var E45=L(()=>{o6();l6();W96=Y6(f6(),1),wj7=W96.createContext({marker:""})});function h45(q){let K=K6(9),{children:_}=q,{marker:z}=DR.useContext(L45),Y=0;for(let w of DR.default.Children.toArray(_)){if(!DR.isValidElement(w)||w.type!==Cr8)continue;Y++}let O=String(Y).length,A;if(K[0]!==_||K[1]!==O||K[2]!==z){let w;if(K[4]!==O||K[5]!==z)w=(j,H)=>{if(!DR.isValidElement(j)||j.type!==Cr8)return j;let J=`${String(H+1).padStart(O)}.`,M=`${z}${J}`;return DR.default.createElement(L45.Provider,{value:{marker:M}},DR.default.createElement(wj7.Provider,{value:{marker:M}},j))},K[4]=O,K[5]=z,K[6]=w;else w=K[6];A=DR.default.Children.map(_,w),K[0]=_,K[1]=O,K[2]=z,K[3]=A}else A=K[3];let $;if(K[7]!==A)$=DR.default.createElement(u,{flexDirection:"column"},A),K[7]=A,K[8]=$;else $=K[8];return $}var DR,L45,br8;var R45=L(()=>{o6();l6();E45();DR=Y6(f6(),1),L45=DR.createContext({marker:""});h45.Item=Cr8;br8=h45});var C45={};G8(C45,{SkippableStep:()=>S45,Onboarding:()=>B6O});function B6O({onDone:q}){let[K,_]=W3.useState(0),[z,Y]=W3.useState(!1),[O]=W3.useState(()=>CJ()),[A,$]=Aq();W3.useEffect(()=>{d("tengu_began_setup",{oauthEnabled:O})},[O]);function w(){if(K<D.length-1){let v=K+1;_(v),d("tengu_onboarding_step",{oauthEnabled:O,stepId:D[v]?.id})}else q()}function j(v){$(v),w()}let H=z3(),J=W3.default.createElement(u,{marginX:1},W3.default.createElement(fC6,{onThemeSelect:j,showIntroText:!0,helpText:"To change this later, run /theme",hideEscToCancel:!0,skipExitHandling:!0})),M=W3.default.createElement(u,{flexDirection:"column",gap:1,paddingLeft:1},W3.default.createElement(T,{bold:!0},"Security notes:"),W3.default.createElement(u,{flexDirection:"column",width:70},W3.default.createElement(br8,null,W3.default.createElement(br8.Item,null,W3.default.createElement(T,null,"Claude can make mistakes"),W3.default.createElement(T,{dimColor:!0,wrap:"wrap"},"You should always review Claude's responses, especially when",W3.default.createElement(Xk,null),"running code.",W3.default.createElement(Xk,null))),W3.default.createElement(br8.Item,null,W3.default.createElement(T,null,"Due to prompt injection risks, only use it with code you trust"),W3.default.createElement(T,{dimColor:!0,wrap:"wrap"},"For more details see:",W3.default.createElement(Xk,null),W3.default.createElement(Sq,{url:"https://code.claude.com/docs/en/security"}))))),W3.default.createElement(rQ8,null)),X=W3.default.createElement(V45,{onSuccess:w}),P=W3.useMemo(()=>{if(!process.env.ANTHROPIC_API_KEY||WT())return"";let v=JN(process.env.ANTHROPIC_API_KEY);if(In6(v)==="new")return v},[]);function W(v){if(v)Y(!0);w()}let D=[];if(O)D.push({id:"preflight",component:X});if(D.push({id:"theme",component:J}),P)D.push({id:"api-key",component:W3.default.createElement(Oj7,{customApiKeyTruncated:P,onDone:W})});if(O)D.push({id:"oauth",component:W3.default.createElement(S45,{skip:z,onSkip:w},W3.default.createElement(OH6,{onDone:w}))});if(D.push({id:"security",component:M}),jC6())D.push({id:"terminal-setup",component:W3.default.createElement(u,{flexDirection:"column",gap:1,paddingLeft:1},W3.default.createElement(T,{bold:!0},"Use Claude Code's terminal setup?"),W3.default.createElement(u,{flexDirection:"column",width:70,gap:1},W3.default.createElement(T,null,"For the optimal coding experience, enable the recommended settings",W3.default.createElement(Xk,null),"for your terminal:"," ",$7.terminal==="Apple_Terminal"?"Option+Enter for newlines and visual bell":"Shift+Enter for newlines"),W3.default.createElement(z1,{options:[{label:"Yes, use recommended settings",value:"install"},{label:"No, maybe later with /terminal-setup",value:"no"}],onChange:(v)=>{if(v==="install")QU8(A).catch(()=>{}).finally(w);else w()},onCancel:()=>w()}),W3.default.createElement(T,{dimColor:!0},H.pending?W3.default.createElement(W3.default.Fragment,null,"Press ",H.keyName," again to exit"):W3.default.createElement(W3.default.Fragment,null,"Enter to confirm · Esc to skip"))))});let f=D[K],G=W3.useCallback(()=>{if(K===D.length-1)q();else w()},[K,D.length,O,q]),Z=W3.useCallback(()=>{w()},[K,D.length,O,q]);return B7({"confirm:yes":G},{context:"Confirmation",isActive:f?.id==="security"}),B7({"confirm:no":Z},{context:"Confirmation",isActive:f?.id==="terminal-setup"}),W3.default.createElement(u,{flexDirection:"column"},W3.default.createElement(Sr8,null),W3.default.createElement(u,{flexDirection:"column",marginTop:1},f?.component,H.pending&&W3.default.createElement(u,{padding:1},W3.default.createElement(T,{dimColor:!0},"Press ",H.keyName," again to exit"))))}function S45(q){let K=K6(4),{skip:_,onSkip:z,children:Y}=q,O,A;if(K[0]!==z||K[1]!==_)O=()=>{if(_)z()},A=[_,z],K[0]=z,K[1]=_,K[2]=O,K[3]=A;else O=K[2],A=K[3];if(W3.useEffect(O,A),_)return null;return Y}var W3;var b45=L(()=>{o6();k8();pJ6();P2();l6();F7();T7();hQ6();y1();S_();g8();N45();Aj7();q18();j5();$j7();m37();yQ8();R45();W3=Y6(f6(),1)});function x45(q){if(q===null||q.disableAllHooks)return!1;if(q.statusLine)return!0;if(q.fileSuggestion)return!0;if(!q.hooks)return!1;for(let K of Object.values(q.hooks))if(K.length>0)return!0;return!1}function F45(){let q=[],K=V1("projectSettings");if(x45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(x45(_))q.push(".claude/settings.local.json");return q}function I45(q){return q.some((K)=>K.ruleBehavior==="allow"&&(K.ruleValue.toolName===e7||K.ruleValue.toolName.startsWith(e7+"(")))}function U45(){let q=[],K=Ls6("projectSettings");if(I45(K))q.push(".claude/settings.json");let _=Ls6("localSettings");if(I45(_))q.push(".claude/settings.local.json");return q}function u45(q){return!!q?.otelHeadersHelper}function Q45(){let q=[],K=V1("projectSettings");if(u45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(u45(_))q.push(".claude/settings.local.json");return q}function m45(q){return!!q?.apiKeyHelper}function d45(){let q=[],K=V1("projectSettings");if(m45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(m45(_))q.push(".claude/settings.local.json");return q}function p45(q){return!!(q?.awsAuthRefresh||q?.awsCredentialExport)}function c45(){let q=[],K=V1("projectSettings");if(p45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(p45(_))q.push(".claude/settings.local.json");return q}function B45(q){return!!q?.gcpAuthRefresh}function l45(){let q=[],K=V1("projectSettings");if(B45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(B45(_))q.push(".claude/settings.local.json");return q}function g45(q){if(!q?.env)return!1;return Object.keys(q.env).some((K)=>!TE6.has(K.toUpperCase()))}function n45(){let q=[],K=V1("projectSettings");if(g45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(g45(_))q.push(".claude/settings.local.json");return q}var i45=L(()=>{r1();iS8();Um()});var o45={};G8(o45,{TrustDialog:()=>g6O});import{homedir as r45}from"os";function g6O(q){let K=K6(33),{onDone:_,commands:z}=q,Y;if(K[0]===Symbol.for("react.memo_cache_sentinel"))Y=cH("project"),K[0]=Y;else Y=K[0];let{servers:O}=Y,A;if(K[1]===Symbol.for("react.memo_cache_sentinel"))A=Object.keys(O),K[1]=A;else A=K[1];let $=A.length>0,w;if(K[2]===Symbol.for("react.memo_cache_sentinel"))w=F45(),K[2]=w;else w=K[2];let H=w.length>0,J;if(K[3]===Symbol.for("react.memo_cache_sentinel"))J=U45(),K[3]=J;else J=K[3];let M=J,X;if(K[4]===Symbol.for("react.memo_cache_sentinel"))X=d45(),K[4]=X;else X=K[4];let W=X.length>0,D;if(K[5]===Symbol.for("react.memo_cache_sentinel"))D=c45(),K[5]=D;else D=K[5];let G=D.length>0,Z;if(K[6]===Symbol.for("react.memo_cache_sentinel"))Z=l45(),K[6]=Z;else Z=K[6];let k=Z.length>0,V;if(K[7]===Symbol.for("react.memo_cache_sentinel"))V=Q45(),K[7]=V;else V=K[7];let E=V.length>0,R;if(K[8]===Symbol.for("react.memo_cache_sentinel"))R=n45(),K[8]=R;else R=K[8];let I=R.length>0,m;if(K[9]!==z)m=z?.some(l6O)??!1,K[9]=z,K[10]=m;else m=K[10];let p=m,S;if(K[11]!==z)S=z?.some(d6O)??!1,K[11]=z,K[12]=S;else S=K[12];let g=S,F=M.length>0||p||g,U=sO(),n,r;if(K[13]!==F)n=()=>{let i=r45()===Z8();d("tengu_trust_dialog_shown",{isHomeDir:i,hasMcpServers:$,hasHooks:H,hasBashExecution:F,hasApiKeyHelper:W,hasAwsCommands:G,hasGcpCommands:k,hasOtelHeadersHelper:E,hasDangerousEnvVars:I})},r=[$,H,F,W,G,k,E,I],K[13]=F,K[14]=n,K[15]=r;else n=K[14],r=K[15];XV.default.useEffect(n,r);let o;if(K[16]!==F||K[17]!==_)o=function(c){if(c==="exit"){H5(1);return}let A6=r45()===Z8();if(d("tengu_trust_dialog_accept",{isHomeDir:A6,hasMcpServers:$,hasHooks:H,hasBashExecution:F,hasApiKeyHelper:W,hasAwsCommands:G,hasGcpCommands:k,hasOtelHeadersHelper:E,hasDangerousEnvVars:I}),A6)lI6(!0);else Vw(Q6O);_()},K[16]=F,K[17]=_,K[18]=o;else o=K[18];let z6=o,_6=z3(U6O),l;if(K[19]===Symbol.for("react.memo_cache_sentinel"))l={context:"Confirmation"},K[19]=l;else l=K[19];if(J1("confirm:no",F6O,l),U)return setTimeout(_),null;let q6,J6,O6;if(K[20]===Symbol.for("react.memo_cache_sentinel"))q6=XV.default.createElement(T,{bold:!0},X8().cwd()),J6=XV.default.createElement(T,null,"Quick safety check: Is this a project you created or one you trust? (Like your own code, a well-known open source project, or work from your team). If not, take a moment to review what","'","s in this folder first."),O6=XV.default.createElement(T,null,"Claude Code","'","ll be able to read, edit, and execute files here."),K[20]=q6,K[21]=J6,K[22]=O6;else q6=K[20],J6=K[21],O6=K[22];let X6;if(K[23]===Symbol.for("react.memo_cache_sentinel"))X6=XV.default.createElement(T,{dimColor:!0},XV.default.createElement(Sq,{url:"https://code.claude.com/docs/en/security"},"Security guide")),K[23]=X6;else X6=K[23];let P6;if(K[24]===Symbol.for("react.memo_cache_sentinel"))P6=[{label:"Yes, I trust this folder",value:"enable_all"},{label:"No, exit",value:"exit"}],K[24]=P6;else P6=K[24];let t;if(K[25]!==z6)t=XV.default.createElement(z1,{options:P6,onChange:(i)=>z6(i),onCancel:()=>z6("exit")}),K[25]=z6,K[26]=t;else t=K[26];let a;if(K[27]!==_6.keyName||K[28]!==_6.pending)a=XV.default.createElement(T,{dimColor:!0},_6.pending?XV.default.createElement(XV.default.Fragment,null,"Press ",_6.keyName," again to exit"):XV.default.createElement(XV.default.Fragment,null,"Enter to confirm · Esc to cancel")),K[27]=_6.keyName,K[28]=_6.pending,K[29]=a;else a=K[29];let $6;if(K[30]!==t||K[31]!==a)$6=XV.default.createElement(ZY,{color:"warning",titleColor:"warning",title:"Accessing workspace:"},XV.default.createElement(u,{flexDirection:"column",gap:1,paddingTop:1},q6,J6,O6,X6,t,a)),K[30]=t,K[31]=a,K[32]=$6;else $6=K[32];return $6}function F6O(){H5(0)}function U6O(){return H5(1)}function Q6O(q){return{...q,hasTrustDialogAccepted:!0}}function d6O(q){return q.type==="prompt"&&(q.loadedFrom==="skills"||q.loadedFrom==="plugin")&&(q.source==="projectSettings"||q.source==="localSettings"||q.source==="plugin")&&q.allowedTools?.some(c6O)}function c6O(q){return q===e7||q.startsWith(e7+"(")}function l6O(q){return q.type==="prompt"&&q.loadedFrom==="commands_DEPRECATED"&&(q.source==="projectSettings"||q.source==="localSettings")&&q.allowedTools?.some(n6O)}function n6O(q){return q===e7||q.startsWith(e7+"(")}var XV;var a45=L(()=>{o6();k8();T8();P2();l6();F7();$0();y1();Q7();t7();zA();I_();zf();i45();XV=Y6(f6(),1)});var s45={};G8(s45,{BypassPermissionsModeDialog:()=>i6O});function i6O(q){let K=K6(7),{onAccept:_}=q,z;if(K[0]===Symbol.for("react.memo_cache_sentinel"))z=[],K[0]=z;else z=K[0];et.default.useEffect(o6O,z);let Y;if(K[1]!==_)Y=function(J){q:switch(J){case"accept":{d("tengu_bypass_permissions_mode_dialog_accept",{}),W7("userSettings",{skipDangerousModePermissionPrompt:!0}),_();break q}case"decline":H5(1)}},K[1]=_,K[2]=Y;else Y=K[2];let O=Y,A=r6O,$;if(K[3]===Symbol.for("react.memo_cache_sentinel"))$=et.default.createElement(u,{flexDirection:"column",gap:1},et.default.createElement(T,null,"In Bypass Permissions mode, Claude Code will not ask for your approval before running potentially dangerous commands.",et.default.createElement(Xk,null),"This mode should only be used in a sandboxed container/VM that has restricted internet access and can easily be restored if damaged."),et.default.createElement(T,null,"By proceeding, you accept all responsibility for actions taken while running in Bypass Permissions mode."),et.default.createElement(Sq,{url:"https://code.claude.com/docs/en/security"})),K[3]=$;else $=K[3];let w;if(K[4]===Symbol.for("react.memo_cache_sentinel"))w=[{label:"No, exit",value:"decline"},{label:"Yes, I accept",value:"accept"}],K[4]=w;else w=K[4];let j;if(K[5]!==O)j=et.default.createElement(N1,{title:"WARNING: Claude Code running in Bypass Permissions mode",color:"error",onCancel:A},$,et.default.createElement(z1,{options:w,onChange:(H)=>O(H)})),K[5]=O,K[6]=j;else j=K[6];return j}function r6O(){H5(0)}function o6O(){d("tengu_bypass_permissions_mode_dialog_shown",{})}var et;var t45=L(()=>{o6();k8();l6();zA();r1();I_();y4();et=Y6(f6(),1)});var e45={};G8(e45,{DevChannelsDialog:()=>a6O});function a6O(q){let K=K6(14),{channels:_,onAccept:z}=q,Y;if(K[0]!==z)Y=function(W){q:switch(W){case"accept":{z();break q}case"exit":H5(1)}},K[0]=z,K[1]=Y;else Y=K[1];let O=Y,A=t6O,$,w;if(K[2]===Symbol.for("react.memo_cache_sentinel"))$=ZX6.default.createElement(T,null,"--dangerously-load-development-channels is for local channel development only. Do not use this option to run channels you have downloaded off the internet."),w=ZX6.default.createElement(T,null,"Please use --channels to run a list of approved channels."),K[2]=$,K[3]=w;else $=K[2],w=K[3];let j;if(K[4]!==_)j=_.map(s6O).join(", "),K[4]=_,K[5]=j;else j=K[5];let H;if(K[6]!==j)H=ZX6.default.createElement(u,{flexDirection:"column",gap:1},$,w,ZX6.default.createElement(T,{dimColor:!0},"Channels:"," ",j)),K[6]=j,K[7]=H;else H=K[7];let J;if(K[8]===Symbol.for("react.memo_cache_sentinel"))J=[{label:"I am using this for local development",value:"accept"},{label:"Exit",value:"exit"}],K[8]=J;else J=K[8];let M;if(K[9]!==O)M=ZX6.default.createElement(z1,{options:J,onChange:(P)=>O(P)}),K[9]=O,K[10]=M;else M=K[10];let X;if(K[11]!==H||K[12]!==M)X=ZX6.default.createElement(N1,{title:"WARNING: Loading development channels",color:"error",onCancel:A},H,M),K[11]=H,K[12]=M,K[13]=X;else X=K[13];return X}function s6O(q){return q.kind==="plugin"?`plugin:${q.name}@${q.marketplace}`:`server:${q.name}`}function t6O(){H5(0)}var ZX6;var qK5=L(()=>{o6();l6();zA();I_();y4();ZX6=Y6(f6(),1)});var KK5={};G8(KK5,{ClaudeInChromeOnboarding:()=>K8O});function K8O(q){let K=K6(20),{onDone:_}=q,[z,Y]=Ff.default.useState(!1),O,A;if(K[0]===Symbol.for("react.memo_cache_sentinel"))O=()=>{d("tengu_claude_in_chrome_onboarding_shown",{}),kt().then(Y),C8(_8O)},A=[],K[0]=O,K[1]=A;else O=K[0],A=K[1];Ff.default.useEffect(O,A);let $;if(K[2]!==_)$=(D,f)=>{if(f.return)_()},K[2]=_,K[3]=$;else $=K[3];RK($);let w;if(K[4]!==z)w=!z&&Ff.default.createElement(Ff.default.Fragment,null,Ff.default.createElement(Xk,null),Ff.default.createElement(Xk,null),"Requires the Chrome extension. Get started at"," ",Ff.default.createElement(Sq,{url:e6O})),K[4]=z,K[5]=w;else w=K[5];let j;if(K[6]!==w)j=Ff.default.createElement(T,null,"Claude in Chrome works with the Chrome extension to let you control your browser directly from Claude Code. You can navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests.",w),K[6]=w,K[7]=j;else j=K[7];let H;if(K[8]!==z)H=z&&Ff.default.createElement(Ff.default.Fragment,null," ","(",Ff.default.createElement(Sq,{url:q8O}),")"),K[8]=z,K[9]=H;else H=K[9];let J;if(K[10]!==H)J=Ff.default.createElement(T,{dimColor:!0},"Site-level permissions are inherited from the Chrome extension. Manage permissions in the Chrome extension settings to control which sites Claude can browse, click, and type on",H,"."),K[10]=H,K[11]=J;else J=K[11];let M;if(K[12]===Symbol.for("react.memo_cache_sentinel"))M=Ff.default.createElement(T,{bold:!0,color:"chromeYellow"},"/chrome"),K[12]=M;else M=K[12];let X;if(K[13]===Symbol.for("react.memo_cache_sentinel"))X=Ff.default.createElement(T,{dimColor:!0},"For more info, use"," ",M," ","or visit ",Ff.default.createElement(Sq,{url:"https://code.claude.com/docs/en/chrome"})),K[13]=X;else X=K[13];let P;if(K[14]!==j||K[15]!==J)P=Ff.default.createElement(u,{flexDirection:"column",gap:1},j,J,X),K[14]=j,K[15]=J,K[16]=P;else P=K[16];let W;if(K[17]!==_||K[18]!==P)W=Ff.default.createElement(N1,{title:"Claude in Chrome (Beta)",onCancel:_,color:"chromeYellow"},P),K[17]=_,K[18]=P,K[19]=W;else W=K[19];return W}function _8O(q){return{...q,hasCompletedClaudeInChromeOnboarding:!0}}var Ff,e6O="https://claude.ai/chrome",q8O="https://clau.de/chrome/permissions";var _K5=L(()=>{o6();k8();l6();TM6();y1();y4();Ff=Y6(f6(),1)});import{appendFileSync as z8O}from"fs";function Y8O(){C8((q)=>({...q,hasCompletedOnboarding:!0,lastOnboardingVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION}))}function O8O(q,K){return new Promise((_)=>{let z=(Y)=>void _(Y);q.render(K(z))})}async function CB(q,K,_){return A8O(q,K,{color:"error",beforeExit:_})}async function A8O(q,K,_){let{Text:z}=await Promise.resolve().then(() => (l6(),Qi6)),Y=_?.color,O=_?.exitCode??1;q.render(Y?ZE.default.createElement(z,{color:Y},K):ZE.default.createElement(z,null,K)),q.unmount(),await _?.beforeExit?.(),process.exit(O)}function fR(q,K,_){return O8O(q,(z)=>ZE.default.createElement(FJ,{onChangeAppState:_?.onChangeAppState},ZE.default.createElement(IM,null,K(z))))}async function GX6(q,K){q.render(K),xr8(),await q.waitUntilExit(),await FK(0)}async function zK5(q,K,_,z,Y,O){if(U6(!1)||process.env.IS_DEMO)return!1;let A=w8(),$=!1;if(!A.theme||!A.hasCompletedOnboarding){$=!0;let{Onboarding:w}=await Promise.resolve().then(() => (b45(),C45));await fR(q,(j)=>ZE.default.createElement(w,{onDone:()=>{Y8O(),j()}}),{onChangeAppState:xt})}if(!U6(process.env.CLAUBBIT)){if(!sO()){let{TrustDialog:j}=await Promise.resolve().then(() => (a45(),o45));await fR(q,(H)=>ZE.default.createElement(j,{commands:z,onDone:H}))}lI6(!0),Cn6(),Er().catch((j)=>H6(B1(j))),J2();let{errors:w}=ga();if(w.length===0)await P45(q);if(await Op1()){let j=qN6(await pH(!0)),{ClaudeMdExternalIncludesDialog:H}=await Promise.resolve().then(() => (f37(),MEK));await fR(q,(J)=>ZE.default.createElement(H,{onDone:J,isStandaloneDialog:!0,externalIncludes:j}))}}if(Z45(),D45(),dc(),setImmediate(()=>Hn8()),await ZE6()){let{GroveDialog:w}=await Promise.resolve().then(() => (az7(),CBK));if(await fR(q,(H)=>ZE.default.createElement(w,{showIfAlreadyViewed:!1,location:$?"onboarding":"policy_update_modal",onDone:H}))==="escape")return d("tengu_grove_policy_exited",{}),H5(0),!1}if(process.env.ANTHROPIC_API_KEY&&!WT()){let w=JN(process.env.ANTHROPIC_API_KEY);if(In6(w)==="new"){let{ApproveApiKey:H}=await Promise.resolve().then(() => (Aj7(),y45));await fR(q,(J)=>ZE.default.createElement(H,{customApiKeyTruncated:w,onDone:J}),{onChangeAppState:xt})}}if((K==="bypassPermissions"||_)&&!kf6()){let{BypassPermissionsModeDialog:w}=await Promise.resolve().then(() => (t45(),s45));await fR(q,(j)=>ZE.default.createElement(w,{onAccept:j}))}if(K==="auto"&&!En()){let{AutoModeOptInDialog:w}=await Promise.resolve().then(() => (Mi8(),RtK));await fR(q,(j)=>ZE.default.createElement(w,{onAccept:j,onDecline:()=>H5(1),declineExits:!0}))}if(PJ().length>0||(O?.length??0)>0)await xN("tengu_harbor");if(O&&O.length>0){let[{isChannelsEnabled:w},{getClaudeAIOAuthTokens:j}]=await Promise.all([Promise.resolve().then(() => (o48(),eRK)),Promise.resolve().then(() => (T7(),FL))]);if(!w()||!j()?.accessToken)bl([...PJ(),...O.map((H)=>({...H,dev:!0}))]),g_8(!0);else{let{DevChannelsDialog:H}=await Promise.resolve().then(() => (qK5(),e45));await fR(q,(J)=>ZE.default.createElement(H,{channels:O,onAccept:()=>{bl([...PJ(),...O.map((M)=>({...M,dev:!0}))]),g_8(!0),J()}}))}}if(Y&&!w8().hasCompletedClaudeInChromeOnboarding){let{ClaudeInChromeOnboarding:w}=await Promise.resolve().then(() => (_K5(),KK5));await fR(q,(j)=>ZE.default.createElement(w,{onDone:j}))}return $}function YK5(q){let K=0,_=va(q);if(_.stdin)d("tengu_stdin_interactive",{});let z=new Yj7,Y=BA7();Ha8(Y);let O=process.env.CLAUDE_CODE_FRAME_TIMING_LOG;return{getFpsMetrics:()=>z.getMetrics(),stats:Y,renderOptions:{..._,onFrame:(A)=>{if(z.record(A.durationMs),Y.observe("frame_duration_ms",A.durationMs),O&&A.phases){let $=JSON.stringify({total:A.durationMs,...A.phases,rss:process.memoryUsage.rss(),cpu:process.cpuUsage()})+`
8305
+ `)},R8=()=>{QB((l8)=>l8+1)};return Pl?.on("suspend",j8),Pl?.on("resume",R8),()=>{Pl?.off("suspend",j8),Pl?.off("resume",R8)}},[Pl]);let lx6=O1.useMemo(()=>{if(!l4)return null;let j8=QK.filter((g4)=>g4.type==="progress"&&g4.data.type==="hook_progress"&&(g4.data.hookEvent==="Stop"||g4.data.hookEvent==="SubagentStop"));if(j8.length===0)return null;let R8=j8.at(-1)?.toolUseID;if(!R8)return null;if(QK.some((g4)=>g4.type==="system"&&g4.subtype==="stop_hook_summary"&&g4.toolUseID===R8))return null;let G7=j8.filter((g4)=>g4.toolUseID===R8),L7=G7.length,Gq=H7(QK,(g4)=>{if(g4.type!=="attachment")return!1;let fK=g4.attachment;return"hookEvent"in fK&&(fK.hookEvent==="Stop"||fK.hookEvent==="SubagentStop")&&"toolUseID"in fK&&fK.toolUseID===R8}),R7=G7.find((g4)=>g4.data.statusMessage)?.data.statusMessage;if(R7)return L7===1?`${R7}…`:`${R7}… ${Gq}/${L7}`;let Vq=G7[0]?.data.hookEvent==="SubagentStop"?"subagent stop":"stop";return L7===1?`running ${Vq} hook`:`running stop hooks… ${Gq}/${L7}`},[QK,l4]),nx6=O1.useCallback(()=>{xK({messagesLength:QK.length,streamingToolUsesLength:gz.length})},[QK.length,gz.length]),QX6=O1.useCallback(()=>{xK(null)},[]),je=E4()&&!m,NP=O1.useRef(null),[XI,b96]=O1.useState(!1),[dB,ix6]=O1.useState(""),[cB,A5]=O1.useState(0),[j98,dX6]=O1.useState(0),H98=O1.useCallback((j8,R8)=>{A5(j8),dX6(R8)},[]);RK((j8,R8,l8)=>{if(R8.ctrl||R8.meta)return;if(j8==="/"){NP.current?.setAnchor(),b96(!0),l8.stopImmediatePropagation();return}let G7=j8[0];if((G7==="n"||G7==="N")&&j8===G7.repeat(j8.length)&&cB>0){let L7=G7==="n"?NP.current?.nextMatch:NP.current?.prevMatch;if(L7)for(let Gq=0;Gq<j8.length;Gq++)L7();l8.stopImmediatePropagation()}},{isActive:T6==="transcript"&&je&&!XI&&!C6});let{setQuery:yR,scanElement:er8,setPositions:rx6}=FiK(),x96=o1().columns,J98=y8.useRef(x96);y8.useEffect(()=>{if(J98.current!==x96){if(J98.current=x96,dB||XI)b96(!1),ix6(""),A5(0),dX6(0),NP.current?.disarmSearch(),yR("")}},[x96,dB,XI,yR]),RK((j8,R8,l8)=>{if(R8.ctrl||R8.meta)return;if(j8==="q"){QX6(),l8.stopImmediatePropagation();return}if(j8==="["&&!C6)x6(!0),r6(!0),l8.stopImmediatePropagation();else if(j8==="v"){if(l8.stopImmediatePropagation(),V6.current)return;V6.current=!0;let G7=k6.current,L7=(Gq)=>{if(G7!==k6.current)return;clearTimeout(M6.current),w6(Gq)};L7(`rendering ${v1.length} messages…`),(async()=>{try{let Gq=Math.max(80,(process.stdout.columns??80)-6),Vq=(await zl8(v1,cw,Gq)).replace(/[ \t]+$/gm,""),g4=H6O(X2(),`cc-transcript-${Date.now()}.txt`);await J6O(g4,Vq);let fK=Kd8(g4);L7(fK?`opening ${g4}`:`wrote ${g4} · no $VISUAL/$EDITOR set`)}catch(Gq){L7(`render failed: ${Gq instanceof Error?Gq.message:String(Gq)}`)}if(V6.current=!1,G7!==k6.current)return;M6.current=setTimeout((Gq)=>Gq(""),4000,w6)})()}},{isActive:T6==="transcript"&&je&&!XI});let I96=T6==="transcript"&&je;O1.useEffect(()=>{if(!I96)ix6(""),A5(0),dX6(0),b96(!1),k6.current++,clearTimeout(M6.current),x6(!1),w6("")},[I96]),O1.useEffect(()=>{if(yR(I96?dB:""),!I96)rx6(null)},[I96,dB,yR,rx6]);let cX6={screen:T6,setScreen:L6,showAllInTranscript:S6,setShowAllInTranscript:r6,messageCount:QK.length,onEnterTranscript:nx6,onExitTranscript:QX6,virtualScrollActive:je,searchBarOpen:XI},M98=uq?v1.slice(0,uq.messagesLength):v1,lX6=uq?gz.slice(0,uq.streamingToolUsesLength):gz;if(t65({onOpenBackgroundTasks:y2?void 0:()=>VP(!0)}),$85(),T6==="transcript"){let j8=E4()&&!m&&!C6?hY:void 0,R8=y8.createElement(Wd1,null,y8.createElement(PM6,{messages:M98,tools:cw,commands:M5,verbose:!0,toolJSX:null,toolUseConfirmQueue:[],inProgressToolUseIDs:bB,isMessageSelectorVisible:!1,conversationId:NE,screen:T6,agentDefinitions:o,streamingToolUses:lX6,showAllInTranscript:S6,onOpenRateLimitOptions:Fx6,isLoading:l4,hidePastThinking:!0,streamingThinking:R$,scrollRef:j8,jumpRef:NP,onSearchMatchesChange:H98,scanElement:er8,setPositions:rx6,disableRenderCap:C6})),l8=lq&&y8.createElement(u,{flexDirection:"column",width:"100%"},lq.jsx),G7=y8.createElement(IM,null,y8.createElement(q45,{isAnimating:j_,title:jX,disabled:b,noPrefix:Yz}),y8.createElement(Y27,{...cX6}),y8.createElement(aq5,{voiceHandleKeyEvent:NR.handleKeyEvent,voiceCancelRecording:NR.cancelRecording,stripTrailing:NR.stripTrailing,resetAnchor:NR.resetAnchor,isActive:!lq?.isLocalJSXCommand,inputValueRef:SY}),y8.createElement(O27,{onSubmit:kR,isActive:!lq?.isLocalJSXCommand}),j8?y8.createElement(U27,{scrollRef:hY,isActive:Dz!=="ultraplan-choice",isModal:!XI,onScroll:()=>NP.current?.disarmSearch()}):null,y8.createElement(A27,{...ux6}),j8?y8.createElement(a_7,{scrollRef:hY,scrollable:y8.createElement(y8.Fragment,null,R8,l8,y8.createElement(I27,null)),bottom:XI?y8.createElement(k6O,{jumpRef:NP,initialQuery:"",count:cB,current:j98,onClose:(L7)=>{if(ix6(cB>0?L7:""),b96(!1),!L7)A5(0),dX6(0),NP.current?.setSearchQuery("")},onCancel:()=>{b96(!1),NP.current?.setSearchQuery(""),NP.current?.setSearchQuery(dB),yR(dB)},setHighlight:yR}):y8.createElement(tq5,{showAllInTranscript:S6,virtualScroll:!0,status:e||void 0,searchBadge:dB&&cB>0?{current:j98,count:cB}:void 0})}):y8.createElement(y8.Fragment,null,R8,l8,y8.createElement(I27,null),y8.createElement(tq5,{showAllInTranscript:S6,virtualScroll:!1,suppressShowAll:C6,status:e||void 0})));if(j8)return y8.createElement(F27,{mouseTracking:Md1()},G7);return G7}let Wl=A6?t[A6]:void 0,nX6=Wl&&rH(Wl)?Wl:void 0,PI=nX6??(Wl&&gJ(Wl)?Wl:void 0),ER=PI?PI.messages??[]:mB||!l4?QK:v1,yP=Uz&&!PI&&ER.length<=Z9.current?Uz:void 0,LE=Dz==="tool-permission"?y8.createElement(yaK,{key:Y5[0]?.toolUseID,onDone:()=>M4(([j8,...R8])=>R8),onReject:Ix6,toolUseConfirm:Y5[0],toolUseContext:u3(QK,QK,TO??U3(),W6),verbose:U,workerBadge:Y5[0]?.workerBadge,setStickyFooter:E4()?w3:void 0}):null,JJ=x96<ln8,ox6=!lq?.shouldHidePromptInput&&!Dz&&!_e,ax6=E4()&&lq?.isLocalJSXCommand===!0,jH=ax6?lq.jsx:null,LR=y8.createElement(IM,null,y8.createElement(q45,{isAnimating:j_,title:jX,disabled:b,noPrefix:Yz}),y8.createElement(Y27,{...cX6}),y8.createElement(aq5,{voiceHandleKeyEvent:NR.handleKeyEvent,voiceCancelRecording:NR.cancelRecording,stripTrailing:NR.stripTrailing,resetAnchor:NR.resetAnchor,isActive:!lq?.isLocalJSXCommand,inputValueRef:SY}),y8.createElement(O27,{onSubmit:kR,isActive:!lq?.isLocalJSXCommand}),y8.createElement(U27,{scrollRef:hY,isActive:E4()&&(jH!=null||!Dz||Dz==="tool-permission"),onScroll:jH||LE||PI?void 0:d6}),null,y8.createElement(A27,{...ux6}),y8.createElement(Yd8,{key:w98,dynamicMcpConfig:e6,isStrictMcpConfig:M},y8.createElement(a_7,{scrollRef:hY,overlay:LE,bottomFloat:ox6&&!JJ?y8.createElement(raK,null):void 0,modal:jH,modalScrollRef:$w,dividerYRef:AT,hidePill:!!PI,hideSticky:!!nX6,newMessageCount:ZR?.count??0,onPillClick:()=>{PV(null),eJ(hY.current)},scrollable:y8.createElement(y8.Fragment,null,y8.createElement(n85,null),y8.createElement(Wd1,null,y8.createElement(PM6,{messages:ER,tools:cw,commands:M5,verbose:U,toolJSX:lq,toolUseConfirmQueue:Y5,inProgressToolUseIDs:nX6?nX6.inProgressToolUseIDs??new Set:bB,isMessageSelectorVisible:O5,conversationId:A6??NE,screen:T6,streamingToolUses:gz,showAllInTranscript:S6,agentDefinitions:o,onOpenRateLimitOptions:Fx6,isLoading:l4,streamingText:l4&&!PI?$I:null,isBriefOnly:PI?!1:c6,unseenDivider:PI?void 0:ZR,scrollRef:E4()?hY:void 0,trackStickyPrompt:E4()?!0:void 0,cursor:jG,setCursor:PV,cursorNavRef:OI})),y8.createElement(i75,null),!f&&yP&&!jH&&y8.createElement(DH6,{param:{text:yP,type:"text"},addMargin:!0,verbose:U}),lq&&!(lq.isLocalJSXCommand&&lq.isImmediate)&&!ax6&&y8.createElement(u,{flexDirection:"column",width:"100%"},lq.jsx),!1,null,y8.createElement(u,{flexGrow:1}),bX6&&y8.createElement(L3K,{mode:Cq,spinnerTip:q6,responseLengthRef:VE,apiMetricsRef:GR,overrideMessage:yX6,spinnerSuffix:lx6,verbose:U,loadingStartTimeRef:E_,totalPausedMsRef:nO,pauseStartTimeRef:S$,overrideColor:gB,overrideShimmerColor:x1,hasActiveTools:bB.size>0,leaderIsIdle:!l4}),!bX6&&!l4&&!Uz&&!vR&&c6&&!PI&&y8.createElement(h3K,null),E4()&&y8.createElement(yi8,null)),bottom:y8.createElement(u,{flexDirection:JJ?"column":"row",width:"100%",alignItems:JJ?void 0:"flex-end"},JJ&&E4()&&ox6?y8.createElement(B$7,null):null,y8.createElement(u,{flexDirection:"column",flexGrow:1},Wz,lq?.isLocalJSXCommand&&lq.isImmediate&&!ax6&&y8.createElement(u,{flexDirection:"column",width:"100%"},lq.jsx),!bX6&&!lq?.isLocalJSXCommand&&J6&&Bz&&Bz.length>0&&y8.createElement(u,{width:"100%",flexDirection:"column"},y8.createElement(yI8,{tasks:Bz,isStandalone:!0})),Dz==="sandbox-permission"&&y8.createElement(x27,{key:n3[0].hostPattern.host,hostPattern:n3[0].hostPattern,onUserResponse:(j8)=>{let{allow:R8,persistToSettings:l8}=j8,G7=n3[0];if(!G7)return;let L7=G7.hostPattern.host;if(l8){let R7={type:"addRules",rules:[{toolName:Bj,ruleContent:`domain:${L7}`}],behavior:R8?"allow":"deny",destination:"localSettings"};j6((Vq)=>({...Vq,toolPermissionContext:pO(Vq.toolPermissionContext,R7)})),hQ(R7),Z7.refreshConfig()}_9((R7)=>{return R7.filter((Vq)=>Vq.hostPattern.host===L7).forEach((Vq)=>Vq.resolvePromise(R8)),R7.filter((Vq)=>Vq.hostPattern.host!==L7)});let Gq=wq.current.get(L7);if(Gq){for(let R7 of Gq)R7();wq.current.delete(L7)}}}),Dz==="prompt"&&y8.createElement(uaK,{key:F1[0].request.prompt,title:F1[0].title,toolInputSummary:F1[0].toolInputSummary,request:F1[0].request,onRespond:(j8)=>{let R8=F1[0];if(!R8)return;R8.resolve({prompt_response:R8.request.prompt,selected:j8}),l1(([,...l8])=>l8)},onAbort:()=>{let j8=F1[0];if(!j8)return;j8.reject(Error("Prompt cancelled by user")),l1(([,...R8])=>R8)}}),O6&&y8.createElement(lA7,{toolName:O6.toolName,description:O6.description}),X6&&y8.createElement(lA7,{toolName:"Network Access",description:`Waiting for leader to approve network access to ${X6.host}`}),Dz==="worker-sandbox-permission"&&y8.createElement(x27,{key:a.queue[0].requestId,hostPattern:{host:a.queue[0].host,port:void 0},onUserResponse:(j8)=>{let{allow:R8,persistToSettings:l8}=j8,G7=a.queue[0];if(!G7)return;let L7=G7.host;if(h5K(G7.workerName,G7.requestId,L7,R8,P6?.teamName),l8&&R8){let Gq={type:"addRules",rules:[{toolName:Bj,ruleContent:`domain:${L7}`}],behavior:"allow",destination:"localSettings"};j6((R7)=>({...R7,toolPermissionContext:pO(R7.toolPermissionContext,Gq)})),hQ(Gq),Z7.refreshConfig()}j6((Gq)=>({...Gq,workerSandboxPermissions:{...Gq.workerSandboxPermissions,queue:Gq.workerSandboxPermissions.queue.slice(1)}}))}}),Dz==="elicitation"&&y8.createElement(xaK,{key:$6.queue[0].serverName+":"+String($6.queue[0].requestId),event:$6.queue[0],onResponse:(j8,R8)=>{let l8=$6.queue[0];if(!l8)return;if(l8.respond({action:j8,content:R8}),!(l8.params.mode==="url"&&j8==="accept"))j6((L7)=>({...L7,elicitation:{queue:L7.elicitation.queue.slice(1)}}))},onWaitingDismiss:(j8)=>{let R8=$6.queue[0];j6((l8)=>({...l8,elicitation:{queue:l8.elicitation.queue.slice(1)}})),R8?.onWaitingDismiss?.(j8)}}),Dz==="cost"&&y8.createElement(QiK,{onDone:()=>{cW(!1),s38(!0),C8((j8)=>({...j8,hasAcknowledgedCostThreshold:!0})),d("tengu_cost_threshold_acknowledged",{})}}),Dz==="idle-return"&&v96&&y8.createElement(ciK,{idleMinutes:v96.idleMinutes,contextTokens:BH(wA(VK.current)),onDone:async(j8)=>{let R8=v96;if(Vx6(null),d("tengu_idle_return_action",{action:j8,idleMinutes:Math.round(R8.idleMinutes),messageCount:VK.current.length,contextTokens:BH(wA(VK.current))}),j8==="dismiss"){S9(R8.input);return}if(j8==="never")C8((l8)=>{if(l8.idleReturnDismissed)return l8;return{...l8,idleReturnDismissed:!0}});if(j8==="clear"){let{clearConversation:l8}=await Promise.resolve().then(() => (R48(),o57));await l8({setMessages:BK,readFileState:TR.current,discoveredSkillNames:IX6.current,loadedNestedMemoryPaths:h96.current,memorySelector:HI.current,getAppState:()=>y6.getState(),setAppState:j6,setConversationId:JX,resultDedupState:N96.current}),VO.current=!1,OH(void 0),L96.current.clear(),yE.current=0,uX6.current=NS6()}k96.current=!0,VR.current(R8.input,{setCursorOffset:()=>{},clearBuffer:()=>{},resetHistory:()=>{}})}}),Dz==="resume-return"&&T96&&y8.createElement(niK,{sessionAgeMinutes:T96.sessionAgeMinutes,estimatedTokens:T96.estimatedTokens,onDone:async(j8)=>{let R8=T96;if(EX6(null),d("tengu_resume_return_action",{action:j8,sessionAgeMinutes:Math.round(R8.sessionAgeMinutes),messageCount:VK.current.length,estimatedTokens:R8.estimatedTokens}),j8==="never")C8((l8)=>{if(l8.resumeReturnDismissed)return l8;return{...l8,resumeReturnDismissed:!0}});if(j8==="compact"){let{getDefaultHaikuModel:l8}=await Promise.resolve().then(() => (Fq(),oD1));VR.current("/compact",{setCursorOffset:()=>{},clearBuffer:()=>{},resetHistory:()=>{}},void 0,{modelOverride:l8()})}}}),Dz==="ide-onboarding"&&y8.createElement(WQ1,{onDone:()=>Dq(!1),installationStatus:m1}),!1,!1,Dz==="effort-callout"&&y8.createElement(Z15,{model:W6,onDone:(j8)=>{if(O7(!1),j8!=="dismiss")j6((R8)=>({...R8,effortValue:j8}))}}),Dz==="remote-callout"&&y8.createElement(dQK,{onDone:(j8)=>{j6((R8)=>{if(!R8.showRemoteCallout)return R8;return{...R8,showRemoteCallout:!1,...j8==="enable"&&{replBridgeEnabled:!0,replBridgeExplicit:!0,replBridgeOutboundOnly:!1}}})}}),q98,Dz==="plugin-hint"&&E3&&y8.createElement(u75,{pluginName:E3.pluginName,pluginDescription:E3.pluginDescription,marketplaceName:E3.marketplaceName,sourceCommand:E3.sourceCommand,onResponse:I3}),Dz==="lsp-recommendation"&&$3&&y8.createElement(C75,{pluginName:$3.pluginName,pluginDescription:$3.pluginDescription,fileExtension:$3.fileExtension,onResponse:R4}),Dz==="desktop-upsell"&&y8.createElement(t15,{onDone:()=>_5(!1)}),Dz==="ultraplan-choice"&&i&&y8.createElement(M15,{plan:i.plan,sessionId:i.sessionId,taskId:i.taskId,setMessages:BK,readFileState:TR.current,memorySelector:HI.current,getAppState:()=>y6.getState(),setConversationId:JX,resultDedupState:N96.current}),Dz==="ultraplan-launch"&&c&&y8.createElement(P15,{onChoice:(j8,R8)=>{let l8=c.blurb;if(j6((Vq)=>Vq.ultraplanLaunchPending?{...Vq,ultraplanLaunchPending:void 0}:Vq),j8==="cancel"){if(l8)S9(l8);return}BK((Vq)=>[...Vq,Xx(yh6("ultraplan",l8))]);let G7=(Vq)=>Xx(`<${OD}>${_0(Vq)}</${OD}>`),L7,Gq=(Vq)=>{let g4=G7(Vq);BK((fK)=>{let F4=L7?fK.findIndex((z9)=>z9.uuid===L7):-1;if(F4===-1)return[...fK,g4];let ZA=[...fK];return ZA[F4]=g4,ZA})},R7=(Vq)=>{if(!OK.isActive){Gq(Vq);return}let g4=OK.subscribe(()=>{if(OK.isActive)return;if(g4(),!y6.getState().ultraplanSessionUrl)return;Gq(Vq)})};pK8({blurb:l8,promptIdentifier:R8?.promptIdentifier,getAppState:()=>y6.getState(),setAppState:j6,signal:U3().signal,disconnectedBridge:R8?.disconnectedBridge,onSessionReady:R7}).then((Vq)=>{let g4=G7(Vq);L7=g4.uuid,BK((fK)=>[...fK,g4])}).catch(H6)}}),CX6(),!lq?.shouldHidePromptInput&&!Dz&&!bx6&&!f&&!jG&&y8.createElement(y8.Fragment,null,UB&&y8.createElement(Zq5,{onRun:MI,onCancel:Y98,reason:Tq5(UB)}),Jl.state!=="closed"?y8.createElement(L38,{state:Jl.state,lastResponse:Jl.lastResponse,handleSelect:Jl.handleSelect,inputValue:sK,setInputValue:S9,onRequestFeedback:Ae}):MX.state!=="closed"?y8.createElement(L38,{state:MX.state,lastResponse:MX.lastResponse,handleSelect:MX.handleSelect,handleTranscriptSelect:MX.handleTranscriptSelect,inputValue:sK,setInputValue:S9,onRequestFeedback:Ae,message:"How well did Claude use its memory? (optional)"}):y8.createElement(L38,{state:Oe.state,lastResponse:Oe.lastResponse,handleSelect:Oe.handleSelect,handleTranscriptSelect:Oe.handleTranscriptSelect,inputValue:sK,setInputValue:S9,onRequestFeedback:Sx6.current?void 0:Ae}),xX6.state!=="closed"&&y8.createElement(L38,{state:xX6.state,lastResponse:null,handleSelect:()=>{},handleTranscriptSelect:xX6.handleTranscriptSelect,inputValue:sK,setInputValue:S9}),hx6&&y8.createElement(Vq5,null),y8.createElement(Y65,{debug:K,ideSelection:L8,hasSuppressedDialogs:!!K98,isLocalJSXCommandActive:y2,getToolUseContext:u3,toolPermissionContext:F,setToolPermissionContext:C96,apiKeyStatus:e38,commands:M5,agents:o.activeAgents,isLoading:l4,onExit:Ux6,verbose:U,messages:QK,onAutoUpdaterResult:J4,autoUpdaterResult:_q,input:sK,onInputChange:S9,mode:HX,onModeChange:AH,stashedPrompt:NO,setStashedPrompt:kE,submitCount:$H,onShowMessageSelector:sr8,onMessageActionsEnter:void 0,mcpClients:a6,pastedContents:DV,setPastedContents:QW,vimMode:y96,setVimMode:lW,showBashesDialog:_e,setShowBashesDialog:VP,onSubmit:kR,onAgentSubmit:gx6,isSearchingHistory:yx6,setIsSearchingHistory:wI,helpOpen:FB,setHelpOpen:jI,insertTextRef:qM,voiceInterimRange:NR.interimRange}),y8.createElement(H15,{onBackgroundSession:ar8,isLoading:l4})),jG&&y8.createElement(DC4,{cursor:jG}),Dz==="message-selector"&&y8.createElement(P$7,{messages:QK,preselectedMessage:sA,onPreRestore:gX6,onRestoreCode:async(j8)=>{await Xm8((R8)=>{j6((l8)=>({...l8,fileHistory:R8(l8.fileHistory)}))},j8.uuid)},onSummarize:async(j8,R8,l8="from")=>{let G7=wA(QK),L7=G7.indexOf(j8);if(L7===-1){BK((JH)=>[...JH,BA("That message is no longer in the active context (snipped or pre-compact). Choose a more recent message.","warning")]);return}let Gq=U3(),R7=u3(G7,[],Gq,W6),Vq=R7.getAppState(),g4=await GW(R7.options.tools,R7.options.mainLoopModel,Array.from(Vq.toolPermissionContext.additionalWorkingDirectories.keys())),fK=Lx({mainThreadAgentDefinition:void 0,toolUseContext:R7,customSystemPrompt:R7.options.customSystemPrompt,defaultSystemPrompt:g4,appendSystemPrompt:R7.options.appendSystemPrompt}),[F4,ZA]=await Promise.all([d$(),J2()]),z9=await rGK(G7,L7,R7,{systemPrompt:fK,userContext:F4,systemContext:ZA,toolUseContext:R7,forkContextMessages:G7},R8,l8),HH=z9.messagesToKeep??[],HT=l8==="up_to"?[...z9.summaryMessages,...HH]:[...HH,...z9.summaryMessages],$z=[z9.boundaryMarker,...HT,...z9.attachments,...z9.hookResults];if(E4()&&l8==="from")BK((JH)=>{let Dl=JH.findIndex((fl)=>fl.uuid===j8.uuid);return[...JH.slice(0,Dl===-1?0:Dl),...$z]});else BK($z);if(JX(DX6()),OB(R7.options.querySource),l8==="from"){let JH=VK7(j8);if(JH)S9(JH.text),AH(JH.mode)}let yO=dH("app:toggleTranscript","Global","ctrl+o");b6({key:"summarize-ctrl-o-hint",text:`Conversation summarized (${yO} for history)`,priority:"medium",timeoutMs:8000})},onRestoreMessage:dx6,onClose:()=>{tK(!1),wH(void 0)}}),!1),!(JJ&&E4())&&ox6?y8.createElement(B$7,null):null)})));if(E4())return y8.createElement(F27,{mouseTracking:Md1()},LR);return LR}var y8,O1,M6O,aq5,X6O=()=>({state:"closed",handleTranscriptSelect:()=>{}}),P6O=()=>{},W6O=()=>({}),sq5=null,D6O=(q)=>()=>{},f6O=()=>!1,Z6O=(q,K)=>!1,G6O,t27,v6O,T6O=3000,K45,eq5="✳",V6O=960;var qj7=L(()=>{o6();T8();LF8();cD();eD();xq();l6();W36();u4();UiK();yY7();Tc();l6();diK();liK();iiK();PO();P88();eiK();yU();rr();Lk();T8();z0();_8();qrK();g8();m7();rn6();Mf();oL6();eL6();MY();zrK();zx();PW();XK6();OrK();BrK();IA();Rn8();lrK();EaK();IaK();maK();O65();Qw7();J65();P65();D65();Z65();f2();Sh();XS6();_y();yM();z27();Gx();g65();mA7();Je6();Q65();c65();xx();ww7();n65();r65();o65();sQ();WW();im();s65();e65();O85();w85();E8();h8();Z85();QH();I$7();TM();Vz();jy();yS6();y1();Zi();k8();s1();K7();aC6();RO();zA();R85();I85();m85();ZJ6();VH6();g85();Kh8();_Y7();pc8();U85();l85();D27();RK8();Qo1();i85();LI8();f48();D56();uO();o85();Tf();qK6();W77();oP();iu8();jx();E7();KJ();qK();uh6();gs6();Zb();Bq8();w0();DF8();ea();By();Qo();qK();y38();TZ();G56();z15();tO();O15();qj();w15();NY7();kY7();vf();s2();zx6();J15();X15();W15();Ob6();Qg8();f15();fH6();H26();DQ1();v15();mY7();Io1();FH();V36();y15();L15();R15();I15();m15();U15();d15();i15();o15();_75();qs1();JO();wr8();H75();J75();M75();B37();W75();f75();Mi8();G75();S75();b75();I75();m75();E27();g75();U75();n75();cu8();r75();a75();t75();qq5();_q5();Oq5();$q5();Mq5();fq5();kq5();yq5();g$7();lY7();Eq5();IA();s_7();nj();Lq5();uq5();Py();GM();AP();y8=Y6(f6(),1),O1=Y6(f6(),1),M6O=(d27(),bq(Q27)).useVoiceIntegration,aq5=(d27(),bq(Q27)).VoiceKeybindingHandler,G6O=(oq5(),bq(rq5)).useScheduledTasks,t27=[],v6O={maybeLoadOlder:(q)=>{}};K45=["⠂","⠐"]});async function Q38(q,K,_,z){let{App:Y}=await Promise.resolve().then(() => (QA7(),UA7)),{REPL:O}=await Promise.resolve().then(() => (qj7(),_45));await z(q,Kj7.default.createElement(Y,{...K},Kj7.default.createElement(O,{..._})))}var Kj7;var z45=L(()=>{Kj7=Y6(f6(),1)});async function L6O(){if(wY())return N("[Bootstrap] Skipped: Nonessential traffic disabled"),null;if(Jq()!=="firstParty")return N("[Bootstrap] Skipped: 3P provider"),null;let q=dT();if(!(s7()?.accessToken&&fD())&&!q)return N("[Bootstrap] Skipped: no usable OAuth or API key"),null;let _=`${p7().BASE_API_URL}/api/claude_cli/bootstrap`;try{return await Pr(async()=>{let z=s7()?.accessToken,Y;if(z&&fD())Y={Authorization:`Bearer ${z}`,"anthropic-beta":fJ};else if(q)Y={"x-api-key":q};else return N("[Bootstrap] No auth available on retry, aborting"),null;N("[Bootstrap] Fetching");let O=await w1.get(_,{headers:{"Content-Type":"application/json","User-Agent":wO(),...Y},timeout:5000}),A=E6O().safeParse(O.data);if(!A.success)return N(`[Bootstrap] Response failed validation: ${A.error.message}`),null;return N("[Bootstrap] Fetch ok"),A.data})}catch(z){throw N(`[Bootstrap] Fetch failed: ${w1.isAxiosError(z)?z.response?.status??z.code:"unknown"}`),z}}async function Y45(){try{let q=await L6O();if(!q)return;let K=q.client_data??null,_=q.additional_model_options??[],z=w8();if(YM(z.clientDataCache,K)&&YM(z.additionalModelOptionsCache,_)){N("[Bootstrap] Cache unchanged, skipping write");return}N("[Bootstrap] Cache updated, persisting to disk"),C8((Y)=>({...Y,clientDataCache:K,additionalModelOptionsCache:_}))}catch(q){H6(q)}}var E6O;var O45=L(()=>{EK();E66();T7();i$6();H3();y1();_8();Kv();h8();K_();kX();E6O=m6(()=>yK.object({client_data:yK.record(yK.unknown()).nullish(),additional_model_options:yK.array(yK.object({model:yK.string(),name:yK.string(),description:yK.string()}).transform(({model:q,name:K,description:_})=>({value:q,label:K,description:_}))).nullish()}))});import{posix as A45,win32 as $45}from"path";function R6O(){let q=process.argv[1]||"",K=process.execPath||process.argv[0]||"";if(T1()==="windows")q=q.split($45.sep).join(A45.sep),K=K.split($45.sep).join(A45.sep);let _=[q,K],z=["/build-ant/","/build-external/","/build-external-native/","/build-ant-native/"];return _.some((Y)=>z.some((O)=>Y.includes(O)))}function C6O(q){let K=`${q.name}: ${q.message}`;return S6O.some((_)=>_.test(K))}function w45(){let q=process.listeners("warning");if(Vr8&&q.includes(Vr8))return;if(!R6O())process.removeAllListeners("warning");Vr8=(_)=>{try{let z=`${_.name}: ${_.message.slice(0,50)}`,Y=kr8.get(z)||0;if(kr8.has(z)||kr8.size<h6O)kr8.set(z,Y+1);let O=C6O(_);if(d("tengu_node_warning",{is_internal:O?1:0,occurrence_count:Y+1,classname:_.name,...!1}),U6(process.env.CLAUDE_DEBUG))N(`${O?"[Internal Warning]":"[Warning]"} ${_.toString()}`,{level:"warn"})}catch{}},process.on("warning",Vr8)}var h6O=1000,kr8,S6O,Vr8=null;var j45=L(()=>{k8();_8();g8();LK();kr8=new Map;S6O=[/MaxListenersExceededWarning.*AbortSignal/,/MaxListenersExceededWarning.*EventTarget/]});function Nr8(){let q=K6(1),K;if(q[0]===Symbol.for("react.memo_cache_sentinel"))K=_j7.default.createElement(T,null,"MCP servers may execute code or access system resources. All tool calls require approval. Learn more in the"," ",_j7.default.createElement(Sq,{url:"https://code.claude.com/docs/en/mcp"},"MCP documentation"),"."),q[0]=K;else K=q[0];return K}var _j7;var zj7=L(()=>{o6();l6();_j7=Y6(f6(),1)});function H45(q){let K=K6(13),{serverName:_,onDone:z}=q,Y;if(K[0]!==z||K[1]!==_)Y=function(X){d("tengu_mcp_dialog_choice",{choice:X});q:switch(X){case"yes":case"yes_all":{let W=(N7()||{}).enabledMcpjsonServers||[];if(!W.includes(_))W7("localSettings",{enabledMcpjsonServers:[...W,_]});if(X==="yes_all")W7("localSettings",{enableAllProjectMcpServers:!0});z();break q}case"no":{let W=(N7()||{}).disabledMcpjsonServers||[];if(!W.includes(_))W7("localSettings",{disabledMcpjsonServers:[...W,_]});z()}}},K[0]=z,K[1]=_,K[2]=Y;else Y=K[2];let O=Y,A=`New MCP server found in .mcp.json: ${_}`,$;if(K[3]!==O)$=()=>O("no"),K[3]=O,K[4]=$;else $=K[4];let w;if(K[5]===Symbol.for("react.memo_cache_sentinel"))w=yr8.default.createElement(Nr8,null),K[5]=w;else w=K[5];let j;if(K[6]===Symbol.for("react.memo_cache_sentinel"))j=[{label:"Use this and all future MCP servers in this project",value:"yes_all"},{label:"Use this MCP server",value:"yes"},{label:"Continue without using this MCP server",value:"no"}],K[6]=j;else j=K[6];let H;if(K[7]!==O)H=yr8.default.createElement(z1,{options:j,onChange:(M)=>O(M),onCancel:()=>O("no")}),K[7]=O,K[8]=H;else H=K[8];let J;if(K[9]!==A||K[10]!==$||K[11]!==H)J=yr8.default.createElement(N1,{title:A,color:"warning",onCancel:$},w,H),K[9]=A,K[10]=$,K[11]=H,K[12]=J;else J=K[12];return J}var yr8;var J45=L(()=>{o6();k8();r1();I_();y4();zj7();yr8=Y6(f6(),1)});function M45(q){let K=K6(21),{serverNames:_,onDone:z}=q,Y;if(K[0]!==z||K[1]!==_)Y=function(D){let f=N7()||{},G=f.enabledMcpjsonServers||[],Z=f.disabledMcpjsonServers||[],[v,k]=mc8(_,(V)=>D.includes(V));if(d("tengu_mcp_multidialog_choice",{approved:v.length,rejected:k.length}),v.length>0){let V=e9([...G,...v]);W7("localSettings",{enabledMcpjsonServers:V})}if(k.length>0){let V=e9([...Z,...k]);W7("localSettings",{disabledMcpjsonServers:V})}z()},K[0]=z,K[1]=_,K[2]=Y;else Y=K[2];let O=Y,A;if(K[3]!==z||K[4]!==_)A=()=>{let D=(N7()||{}).disabledMcpjsonServers||[],f=e9([...D,..._]);W7("localSettings",{disabledMcpjsonServers:f}),z()},K[3]=z,K[4]=_,K[5]=A;else A=K[5];let $=A,w=`${_.length} new MCP servers found in .mcp.json`,j;if(K[6]===Symbol.for("react.memo_cache_sentinel"))j=_I.default.createElement(Nr8,null),K[6]=j;else j=K[6];let H;if(K[7]!==_)H=_.map(b6O),K[7]=_,K[8]=H;else H=K[8];let J;if(K[9]!==$||K[10]!==O||K[11]!==_||K[12]!==H)J=_I.default.createElement(wK6,{options:H,defaultValue:_,onSubmit:O,onCancel:$,hideIndexes:!0}),K[9]=$,K[10]=O,K[11]=_,K[12]=H,K[13]=J;else J=K[13];let M;if(K[14]!==$||K[15]!==w||K[16]!==J)M=_I.default.createElement(N1,{title:w,subtitle:"Select any you wish to enable.",color:"warning",onCancel:$,hideInputGuide:!0},j,J),K[14]=$,K[15]=w,K[16]=J,K[17]=M;else M=K[17];let X;if(K[18]===Symbol.for("react.memo_cache_sentinel"))X=_I.default.createElement(u,{paddingX:1},_I.default.createElement(T,{dimColor:!0,italic:!0},_I.default.createElement(h1,null,_I.default.createElement(n8,{chord:"space",action:"select"}),_I.default.createElement(n8,{chord:"enter",action:"confirm"}),_I.default.createElement(M1,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"reject all"})))),K[18]=X;else X=K[18];let P;if(K[19]!==M)P=_I.default.createElement(_I.default.Fragment,null,M,X),K[19]=M,K[20]=P;else P=K[20];return P}function b6O(q){return{label:q,value:q}}var _I;var X45=L(()=>{o6();KY7();k8();l6();r1();oK();Ze6();$K();y4();XK();zj7();_I=Y6(f6(),1)});async function P45(q){let{servers:K}=cH("project"),_=Object.keys(K).filter((z)=>TR8(z)==="pending");if(_.length===0)return;await new Promise((z)=>{let Y=()=>void z();if(_.length===1&&_[0]!==void 0){let O=_[0];q.render(fX6.default.createElement(FJ,null,fX6.default.createElement(IM,null,fX6.default.createElement(H45,{serverName:O,onDone:Y}))))}else q.render(fX6.default.createElement(FJ,null,fX6.default.createElement(IM,null,fX6.default.createElement(M45,{serverNames:_,onDone:Y}))))})}var fX6;var W45=L(()=>{J45();X45();sQ();E7();$0();SM();fX6=Y6(f6(),1)});function D45(){if(process.platform!=="darwin")return;let q=process.env.TERM_PROGRAM;if(!q)return;let K=x6O[q.toLowerCase()];if(!K)return;if(w8().deepLinkTerminal===K)return;C8((z)=>({...z,deepLinkTerminal:K})),N(`Stored deep link terminal preference: ${K}`)}var x6O;var f45=L(()=>{y1();_8();x6O={iterm:"iTerm","iterm.app":"iTerm",ghostty:"Ghostty",kitty:"kitty",alacritty:"Alacritty",wezterm:"WezTerm",apple_terminal:"Terminal"}});class Yj7{frameDurations=[];firstRenderTime;lastRenderTime;record(q){let K=performance.now();if(this.firstRenderTime===void 0)this.firstRenderTime=K;this.lastRenderTime=K,this.frameDurations.push(q)}getMetrics(){if(this.frameDurations.length===0||this.firstRenderTime===void 0||this.lastRenderTime===void 0)return;let q=this.lastRenderTime-this.firstRenderTime;if(q<=0)return;let _=this.frameDurations.length/(q/1000),z=this.frameDurations.slice().sort(($,w)=>w-$),Y=Math.max(0,Math.ceil(z.length*0.01)-1),O=z[Y],A=O>0?1000/O:0;return{averageFps:Math.round(_*100)/100,low1PctFps:Math.round(A*100)/100}}}import{realpath as I6O}from"fs/promises";async function Z45(){try{let q=await Q66();if(!q){N("Not in a GitHub repository, skipping path mapping update");return}let K=A7(),z=mY(K)??K,Y;try{Y=(await I6O(z)).normalize("NFC")}catch{Y=z}let O=q.toLowerCase(),$=w8().githubRepoPaths?.[O]??[];if($[0]===Y){N(`Path ${Y} already tracked for repo ${O}`);return}let w=$.filter((H)=>H!==Y),j=[Y,...w];C8((H)=>({...H,githubRepoPaths:{...H.githubRepoPaths,[O]:j}})),N(`Added ${Y} to tracked paths for repo ${O}`)}catch(q){N(`Error updating repo path mapping: ${q}`)}}function Er8(q){let K=w8(),_=q.toLowerCase();return K.githubRepoPaths?.[_]??[]}async function Lr8(q){let K=await Promise.all(q.map(F5));return q.filter((_,z)=>K[z])}async function G45(q,K){try{let _=await Nw8(q);if(!_)return!1;let z=yz6(_);if(!z)return!1;return z.toLowerCase()===K.toLowerCase()}catch{return!1}}function v45(q,K){let _=w8(),z=q.toLowerCase(),Y=_.githubRepoPaths?.[z]??[],O=Y.filter(($)=>$!==K);if(O.length===Y.length)return;let A={..._.githubRepoPaths};if(O.length===0)delete A[z];else A[z]=O;C8(($)=>({...$,githubRepoPaths:A})),N(`Removed ${K} from tracked paths for repo ${z}`)}var d38=L(()=>{T8();y1();_8();NG();hK();Zn();W5()});function T45(q,K){let[_,z]=hr8.useState(!1);return hr8.useEffect(()=>{z(!1);let Y=setTimeout(z,q,!0);return()=>clearTimeout(Y)},[q,K]),_}var hr8;var k45=L(()=>{hr8=Y6(f6(),1)});async function u6O(){try{let q=p7(),K=new URL(q.TOKEN_URL),_=[`${q.BASE_API_URL}/api/hello`,`${K.origin}/v1/oauth/hello`],z=async(A)=>{try{let $=await w1.get(A,{headers:{"User-Agent":TC()}});if($.status!==200)return{success:!1,error:`Failed to connect to ${new URL(A).hostname}: Status ${$.status}`};return{success:!0}}catch($){let w=new URL(A).hostname,j=eq6($);return{success:!1,error:`Failed to connect to ${w}: ${$ instanceof Error?$.code||$.message:String($)}`,sslHint:j??void 0}}},O=(await Promise.all(_.map(z))).find((A)=>!A.success);if(O)d("tengu_preflight_check_failed",{isConnectivityError:!1,hasErrorMessage:!!O.error,isSSLError:!!O.sslHint});return O||{success:!0}}catch(q){return H6(q),d("tengu_preflight_check_failed",{isConnectivityError:!0}),{success:!1,error:`Connectivity check error: ${q instanceof Error?q.code||q.message:String(q)}`}}}function V45(q){let K=K6(12),{onSuccess:_}=q,[z,Y]=AX.useState(null),[O,A]=AX.useState(!0),$=T45(1000)&&O,w,j;if(K[0]===Symbol.for("react.memo_cache_sentinel"))w=()=>{(async function(){let D=await u6O();Y(D),A(!1)})()},j=[],K[0]=w,K[1]=j;else w=K[0],j=K[1];AX.useEffect(w,j);let H,J;if(K[2]!==_||K[3]!==z)H=()=>{if(z?.success)_();else if(z&&!z.success){let P=setTimeout(m6O,100);return()=>clearTimeout(P)}},J=[z,_],K[2]=_,K[3]=z,K[4]=H,K[5]=J;else H=K[4],J=K[5];AX.useEffect(H,J);let M;if(K[6]!==O||K[7]!==z||K[8]!==$)M=O&&$?AX.default.createElement(u,{paddingLeft:1},AX.default.createElement(CK,null),AX.default.createElement(T,null,"Checking connectivity...")):!z?.success&&!O&&AX.default.createElement(u,{flexDirection:"column",gap:1},AX.default.createElement(T,{color:"error"},"Unable to connect to Anthropic services"),AX.default.createElement(T,{color:"error"},z?.error),z?.sslHint?AX.default.createElement(u,{flexDirection:"column",gap:1},AX.default.createElement(T,null,z.sslHint),AX.default.createElement(T,{color:"suggestion"},"See https://code.claude.com/docs/en/network-config")):AX.default.createElement(u,{flexDirection:"column",gap:1},AX.default.createElement(T,null,"Please check your internet connection and network settings."),AX.default.createElement(T,null,"Note: Claude Code might not be available in your country. Check supported countries at"," ",AX.default.createElement(T,{color:"suggestion"},"https://anthropic.com/supported-countries")))),K[6]=O,K[7]=z,K[8]=$,K[9]=M;else M=K[9];let X;if(K[10]!==M)X=AX.default.createElement(u,{flexDirection:"column",gap:1,paddingLeft:1},M),K[10]=M,K[11]=X;else X=K[11];return X}function m6O(){return process.exit(1)}var AX;var N45=L(()=>{o6();EK();k8();f2();H3();k45();l6();Vo();Kv();h8();AX=Y6(f6(),1)});var y45={};G8(y45,{ApproveApiKey:()=>Oj7});function Oj7(q){let K=K6(17),{customApiKeyTruncated:_,onDone:z}=q,Y;if(K[0]!==_||K[1]!==z)Y=function(W){q:switch(W){case"yes":{C8((D)=>({...D,customApiKeyResponses:{...D.customApiKeyResponses,approved:[...D.customApiKeyResponses?.approved??[],_]}})),z(!0);break q}case"no":C8((D)=>({...D,customApiKeyResponses:{...D.customApiKeyResponses,rejected:[...D.customApiKeyResponses?.rejected??[],_]}})),z(!1)}},K[0]=_,K[1]=z,K[2]=Y;else Y=K[2];let O=Y,A;if(K[3]!==O)A=()=>O("no"),K[3]=O,K[4]=A;else A=K[4];let $;if(K[5]===Symbol.for("react.memo_cache_sentinel"))$=tt.default.createElement(T,{bold:!0},"ANTHROPIC_API_KEY"),K[5]=$;else $=K[5];let w;if(K[6]!==_)w=tt.default.createElement(T,null,$,tt.default.createElement(T,null,": sk-ant-...",_)),K[6]=_,K[7]=w;else w=K[7];let j;if(K[8]===Symbol.for("react.memo_cache_sentinel"))j=tt.default.createElement(T,null,"Do you want to use this API key?"),K[8]=j;else j=K[8];let H;if(K[9]===Symbol.for("react.memo_cache_sentinel"))H={label:"Yes",value:"yes"},K[9]=H;else H=K[9];let J;if(K[10]===Symbol.for("react.memo_cache_sentinel"))J=[H,{label:tt.default.createElement(T,null,"No (",tt.default.createElement(T,{bold:!0},"recommended"),")"),value:"no"}],K[10]=J;else J=K[10];let M;if(K[11]!==O)M=tt.default.createElement(z1,{defaultValue:"no",defaultFocusValue:"no",options:J,onChange:(P)=>O(P),onCancel:()=>O("no")}),K[11]=O,K[12]=M;else M=K[12];let X;if(K[13]!==A||K[14]!==w||K[15]!==M)X=tt.default.createElement(N1,{title:"Detected a custom API key in your environment",color:"warning",onCancel:A},w,j,M),K[13]=A,K[14]=w,K[15]=M,K[16]=X;else X=K[16];return X}var tt;var Aj7=L(()=>{o6();l6();y1();I_();y4();tt=Y6(f6(),1)});function Sr8(){return;let q=K6(35),[K]=Aq();if($7.terminal==="Apple_Terminal"){let Z;if(q[0]!==K)Z=z7.default.createElement(p6O,{theme:K,welcomeMessage:"Welcome to Claude Code"}),q[0]=K,q[1]=Z;else Z=q[1];return Z}if(["light","light-daltonized","light-ansi"].includes(K)){let Z,v,k,V,y,E,R,b,I;if(q[2]===Symbol.for("react.memo_cache_sentinel"))Z=z7.default.createElement(T,null,z7.default.createElement(T,{color:"claude"},"Welcome to Claude Code"," "),z7.default.createElement(T,{dimColor:!0},"v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION," ")),v=z7.default.createElement(T,null,"…………………………………………………………………………………………………………………………………………………………"),k=z7.default.createElement(T,null," "),V=z7.default.createElement(T,null," "),y=z7.default.createElement(T,null," "),E=z7.default.createElement(T,null," ░░░░░░ "),R=z7.default.createElement(T,null," ░░░ ░░░░░░░░░░ "),b=z7.default.createElement(T,null," ░░░░░░░░░░░░░░░░░░░ "),I=z7.default.createElement(T,null," "),q[2]=Z,q[3]=v,q[4]=k,q[5]=V,q[6]=y,q[7]=E,q[8]=R,q[9]=b,q[10]=I;else Z=q[2],v=q[3],k=q[4],V=q[5],y=q[6],E=q[7],R=q[8],b=q[9],I=q[10];let m;if(q[11]===Symbol.for("react.memo_cache_sentinel"))m=z7.default.createElement(T,null,z7.default.createElement(T,{dimColor:!0}," ░░░░"),z7.default.createElement(T,null," ██ ")),q[11]=m;else m=q[11];let p,S;if(q[12]===Symbol.for("react.memo_cache_sentinel"))p=z7.default.createElement(T,null,z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░░░"),z7.default.createElement(T,null," ██▒▒██ ")),S=z7.default.createElement(T,null," ▒▒ ██ ▒"),q[12]=p,q[13]=S;else p=q[12],S=q[13];let g;if(q[14]===Symbol.for("react.memo_cache_sentinel"))g=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"}," █████████ ")," ▒▒░░▒▒ ▒ ▒▒"),q[14]=g;else g=q[14];let F;if(q[15]===Symbol.for("react.memo_cache_sentinel"))F=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body",backgroundColor:"clawd_background"},"██▄█████▄██")," ▒▒ ▒▒ "),q[15]=F;else F=q[15];let U;if(q[16]===Symbol.for("react.memo_cache_sentinel"))U=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"}," █████████ ")," ░ ▒ "),q[16]=U;else U=q[16];let n;if(q[17]===Symbol.for("react.memo_cache_sentinel"))n=z7.default.createElement(u,{width:Rr8},z7.default.createElement(T,null,Z,v,k,V,y,E,R,b,I,m,p,S,g,F,U,z7.default.createElement(T,null,"…………………",z7.default.createElement(T,{color:"clawd_body"},"█ █ █ █"),"……………………………………………………………………░…………………………▒…………"))),q[17]=n;else n=q[17];return n}let _,z,Y,O,A,$,w;if(q[18]===Symbol.for("react.memo_cache_sentinel"))_=z7.default.createElement(T,null,z7.default.createElement(T,{color:"claude"},"Welcome to Claude Code"," "),z7.default.createElement(T,{dimColor:!0},"v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION," ")),z=z7.default.createElement(T,null,"…………………………………………………………………………………………………………………………………………………………"),Y=z7.default.createElement(T,null," "),O=z7.default.createElement(T,null," * █████▓▓░ "),A=z7.default.createElement(T,null," * ███▓░ ░░ "),$=z7.default.createElement(T,null," ░░░░░░ ███▓░ "),w=z7.default.createElement(T,null," ░░░ ░░░░░░░░░░ ███▓░ "),q[18]=_,q[19]=z,q[20]=Y,q[21]=O,q[22]=A,q[23]=$,q[24]=w;else _=q[18],z=q[19],Y=q[20],O=q[21],A=q[22],$=q[23],w=q[24];let j,H,J,M,X;if(q[25]===Symbol.for("react.memo_cache_sentinel"))J=z7.default.createElement(T,null,z7.default.createElement(T,null," ░░░░░░░░░░░░░░░░░░░ "),z7.default.createElement(T,{bold:!0},"*"),z7.default.createElement(T,null," ██▓░░ ▓ ")),M=z7.default.createElement(T,null," ░▓▓███▓▓░ "),X=z7.default.createElement(T,{dimColor:!0}," * ░░░░ "),j=z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░ "),H=z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░░░░░░░░░ "),q[25]=j,q[26]=H,q[27]=J,q[28]=M,q[29]=X;else j=q[25],H=q[26],J=q[27],M=q[28],X=q[29];let P;if(q[30]===Symbol.for("react.memo_cache_sentinel"))P=z7.default.createElement(T,{color:"clawd_body"}," █████████ "),q[30]=P;else P=q[30];let W;if(q[31]===Symbol.for("react.memo_cache_sentinel"))W=z7.default.createElement(T,null," ",P," ",z7.default.createElement(T,{dimColor:!0},"*"),z7.default.createElement(T,null," ")),q[31]=W;else W=q[31];let D;if(q[32]===Symbol.for("react.memo_cache_sentinel"))D=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"},"██▄█████▄██"),z7.default.createElement(T,null," "),z7.default.createElement(T,{bold:!0},"*"),z7.default.createElement(T,null," ")),q[32]=D;else D=q[32];let f;if(q[33]===Symbol.for("react.memo_cache_sentinel"))f=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"}," █████████ ")," * "),q[33]=f;else f=q[33];let G;if(q[34]===Symbol.for("react.memo_cache_sentinel"))G=z7.default.createElement(u,{width:Rr8},z7.default.createElement(T,null,_,z,Y,O,A,$,w,J,M,X,j,H,W,D,f,z7.default.createElement(T,null,"…………………",z7.default.createElement(T,{color:"clawd_body"},"█ █ █ █"),"………………………………………………………………………………………………………………"))),q[34]=G;else G=q[34];return G}function p6O(q){let K=K6(44),{theme:_,welcomeMessage:z}=q;if(["light","light-daltonized","light-ansi"].includes(_)){let E;if(K[0]!==z)E=z7.default.createElement(T,{color:"claude"},z," "),K[0]=z,K[1]=E;else E=K[1];let R;if(K[2]===Symbol.for("react.memo_cache_sentinel"))R=z7.default.createElement(T,{dimColor:!0},"v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION," "),K[2]=R;else R=K[2];let b;if(K[3]!==E)b=z7.default.createElement(T,null,E,R),K[3]=E,K[4]=b;else b=K[4];let I,m,p,S,g,F,U,n;if(K[5]===Symbol.for("react.memo_cache_sentinel"))p=z7.default.createElement(T,null,"…………………………………………………………………………………………………………………………………………………………"),S=z7.default.createElement(T,null," "),g=z7.default.createElement(T,null," "),F=z7.default.createElement(T,null," "),U=z7.default.createElement(T,null," ░░░░░░ "),n=z7.default.createElement(T,null," ░░░ ░░░░░░░░░░ "),I=z7.default.createElement(T,null," ░░░░░░░░░░░░░░░░░░░ "),m=z7.default.createElement(T,null," "),K[5]=I,K[6]=m,K[7]=p,K[8]=S,K[9]=g,K[10]=F,K[11]=U,K[12]=n;else I=K[5],m=K[6],p=K[7],S=K[8],g=K[9],F=K[10],U=K[11],n=K[12];let r;if(K[13]===Symbol.for("react.memo_cache_sentinel"))r=z7.default.createElement(T,null,z7.default.createElement(T,{dimColor:!0}," ░░░░"),z7.default.createElement(T,null," ██ ")),K[13]=r;else r=K[13];let o,z6,_6;if(K[14]===Symbol.for("react.memo_cache_sentinel"))o=z7.default.createElement(T,null,z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░░░"),z7.default.createElement(T,null," ██▒▒██ ")),z6=z7.default.createElement(T,null," ▒▒ ██ ▒"),_6=z7.default.createElement(T,null," ▒▒░░▒▒ ▒ ▒▒"),K[14]=o,K[15]=z6,K[16]=_6;else o=K[14],z6=K[15],_6=K[16];let l;if(K[17]===Symbol.for("react.memo_cache_sentinel"))l=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"},"▗"),z7.default.createElement(T,{color:"clawd_background",backgroundColor:"clawd_body"}," ","▗"," ","▖"," "),z7.default.createElement(T,{color:"clawd_body"},"▖")," ▒▒ ▒▒ "),K[17]=l;else l=K[17];let q6;if(K[18]===Symbol.for("react.memo_cache_sentinel"))q6=z7.default.createElement(T,null," ",z7.default.createElement(T,{backgroundColor:"clawd_body"}," ".repeat(9))," ░ ▒ "),K[18]=q6;else q6=K[18];let J6;if(K[19]===Symbol.for("react.memo_cache_sentinel"))J6=z7.default.createElement(T,null,"…………………",z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),"……………………………………………………………………░…………………………▒…………"),K[19]=J6;else J6=K[19];let O6;if(K[20]!==b)O6=z7.default.createElement(u,{width:Rr8},z7.default.createElement(T,null,b,p,S,g,F,U,n,I,m,r,o,z6,_6,l,q6,J6)),K[20]=b,K[21]=O6;else O6=K[21];return O6}let O;if(K[22]!==z)O=z7.default.createElement(T,{color:"claude"},z," "),K[22]=z,K[23]=O;else O=K[23];let A;if(K[24]===Symbol.for("react.memo_cache_sentinel"))A=z7.default.createElement(T,{dimColor:!0},"v",{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION," "),K[24]=A;else A=K[24];let $;if(K[25]!==O)$=z7.default.createElement(T,null,O,A),K[25]=O,K[26]=$;else $=K[26];let w,j,H,J,M,X;if(K[27]===Symbol.for("react.memo_cache_sentinel"))w=z7.default.createElement(T,null,"…………………………………………………………………………………………………………………………………………………………"),j=z7.default.createElement(T,null," "),H=z7.default.createElement(T,null," * █████▓▓░ "),J=z7.default.createElement(T,null," * ███▓░ ░░ "),M=z7.default.createElement(T,null," ░░░░░░ ███▓░ "),X=z7.default.createElement(T,null," ░░░ ░░░░░░░░░░ ███▓░ "),K[27]=w,K[28]=j,K[29]=H,K[30]=J,K[31]=M,K[32]=X;else w=K[27],j=K[28],H=K[29],J=K[30],M=K[31],X=K[32];let P,W,D,f,G;if(K[33]===Symbol.for("react.memo_cache_sentinel"))P=z7.default.createElement(T,null,z7.default.createElement(T,null," ░░░░░░░░░░░░░░░░░░░ "),z7.default.createElement(T,{bold:!0},"*"),z7.default.createElement(T,null," ██▓░░ ▓ ")),W=z7.default.createElement(T,null," ░▓▓███▓▓░ "),D=z7.default.createElement(T,{dimColor:!0}," * ░░░░ "),f=z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░ "),G=z7.default.createElement(T,{dimColor:!0}," ░░░░░░░░░░░░░░░░ "),K[33]=P,K[34]=W,K[35]=D,K[36]=f,K[37]=G;else P=K[33],W=K[34],D=K[35],f=K[36],G=K[37];let Z;if(K[38]===Symbol.for("react.memo_cache_sentinel"))Z=z7.default.createElement(T,null," ",z7.default.createElement(T,{dimColor:!0},"*"),z7.default.createElement(T,null," ")),K[38]=Z;else Z=K[38];let v;if(K[39]===Symbol.for("react.memo_cache_sentinel"))v=z7.default.createElement(T,null," ",z7.default.createElement(T,{color:"clawd_body"},"▗"),z7.default.createElement(T,{color:"clawd_background",backgroundColor:"clawd_body"}," ","▗"," ","▖"," "),z7.default.createElement(T,{color:"clawd_body"},"▖"),z7.default.createElement(T,null," "),z7.default.createElement(T,{bold:!0},"*"),z7.default.createElement(T,null," ")),K[39]=v;else v=K[39];let k;if(K[40]===Symbol.for("react.memo_cache_sentinel"))k=z7.default.createElement(T,null," ",z7.default.createElement(T,{backgroundColor:"clawd_body"}," ".repeat(9))," * "),K[40]=k;else k=K[40];let V;if(K[41]===Symbol.for("react.memo_cache_sentinel"))V=z7.default.createElement(T,null,"…………………",z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),z7.default.createElement(T,null," "),z7.default.createElement(T,{backgroundColor:"clawd_body"}," "),"………………………………………………………………………………………………………………"),K[41]=V;else V=K[41];let y;if(K[42]!==$)y=z7.default.createElement(u,{width:Rr8},z7.default.createElement(T,null,$,w,j,H,J,M,X,P,W,D,f,G,Z,v,k,V)),K[42]=$,K[43]=y;else y=K[43];return y}var z7,Rr8=58;var $j7=L(()=>{o6();l6();S_();z7=Y6(f6(),1)});function Cr8(q){let K=K6(7),{children:_}=q,{marker:z}=W96.useContext(wj7),Y;if(K[0]!==z)Y=W96.default.createElement(T,{dimColor:!0},z),K[0]=z,K[1]=Y;else Y=K[1];let O;if(K[2]!==_)O=W96.default.createElement(u,{flexDirection:"column"},_),K[2]=_,K[3]=O;else O=K[3];let A;if(K[4]!==Y||K[5]!==O)A=W96.default.createElement(u,{gap:1},Y,O),K[4]=Y,K[5]=O,K[6]=A;else A=K[6];return A}var W96,wj7;var E45=L(()=>{o6();l6();W96=Y6(f6(),1),wj7=W96.createContext({marker:""})});function h45(q){let K=K6(9),{children:_}=q,{marker:z}=DR.useContext(L45),Y=0;for(let w of DR.default.Children.toArray(_)){if(!DR.isValidElement(w)||w.type!==Cr8)continue;Y++}let O=String(Y).length,A;if(K[0]!==_||K[1]!==O||K[2]!==z){let w;if(K[4]!==O||K[5]!==z)w=(j,H)=>{if(!DR.isValidElement(j)||j.type!==Cr8)return j;let J=`${String(H+1).padStart(O)}.`,M=`${z}${J}`;return DR.default.createElement(L45.Provider,{value:{marker:M}},DR.default.createElement(wj7.Provider,{value:{marker:M}},j))},K[4]=O,K[5]=z,K[6]=w;else w=K[6];A=DR.default.Children.map(_,w),K[0]=_,K[1]=O,K[2]=z,K[3]=A}else A=K[3];let $;if(K[7]!==A)$=DR.default.createElement(u,{flexDirection:"column"},A),K[7]=A,K[8]=$;else $=K[8];return $}var DR,L45,br8;var R45=L(()=>{o6();l6();E45();DR=Y6(f6(),1),L45=DR.createContext({marker:""});h45.Item=Cr8;br8=h45});var C45={};G8(C45,{SkippableStep:()=>S45,Onboarding:()=>B6O});function B6O({onDone:q}){let[K,_]=W3.useState(0),[z,Y]=W3.useState(!1),[O]=W3.useState(()=>CJ()),[A,$]=Aq();W3.useEffect(()=>{d("tengu_began_setup",{oauthEnabled:O})},[O]);function w(){if(K<D.length-1){let v=K+1;_(v),d("tengu_onboarding_step",{oauthEnabled:O,stepId:D[v]?.id})}else q()}function j(v){$(v),w()}let H=z3(),J=W3.default.createElement(u,{marginX:1},W3.default.createElement(fC6,{onThemeSelect:j,showIntroText:!0,helpText:"To change this later, run /theme",hideEscToCancel:!0,skipExitHandling:!0})),M=W3.default.createElement(u,{flexDirection:"column",gap:1,paddingLeft:1},W3.default.createElement(T,{bold:!0},"Security notes:"),W3.default.createElement(u,{flexDirection:"column",width:70},W3.default.createElement(br8,null,W3.default.createElement(br8.Item,null,W3.default.createElement(T,null,"Claude can make mistakes"),W3.default.createElement(T,{dimColor:!0,wrap:"wrap"},"You should always review Claude's responses, especially when",W3.default.createElement(Xk,null),"running code.",W3.default.createElement(Xk,null))),W3.default.createElement(br8.Item,null,W3.default.createElement(T,null,"Due to prompt injection risks, only use it with code you trust"),W3.default.createElement(T,{dimColor:!0,wrap:"wrap"},"For more details see:",W3.default.createElement(Xk,null),W3.default.createElement(Sq,{url:"https://code.claude.com/docs/en/security"}))))),W3.default.createElement(rQ8,null)),X=W3.default.createElement(V45,{onSuccess:w}),P=W3.useMemo(()=>{if(!process.env.ANTHROPIC_API_KEY||WT())return"";let v=JN(process.env.ANTHROPIC_API_KEY);if(In6(v)==="new")return v},[]);function W(v){if(v)Y(!0);w()}let D=[];if(O)D.push({id:"preflight",component:X});if(D.push({id:"theme",component:J}),P)D.push({id:"api-key",component:W3.default.createElement(Oj7,{customApiKeyTruncated:P,onDone:W})});if(O)D.push({id:"oauth",component:W3.default.createElement(S45,{skip:z,onSkip:w},W3.default.createElement(OH6,{onDone:w}))});if(D.push({id:"security",component:M}),jC6())D.push({id:"terminal-setup",component:W3.default.createElement(u,{flexDirection:"column",gap:1,paddingLeft:1},W3.default.createElement(T,{bold:!0},"Use Claude Code's terminal setup?"),W3.default.createElement(u,{flexDirection:"column",width:70,gap:1},W3.default.createElement(T,null,"For the optimal coding experience, enable the recommended settings",W3.default.createElement(Xk,null),"for your terminal:"," ",$7.terminal==="Apple_Terminal"?"Option+Enter for newlines and visual bell":"Shift+Enter for newlines"),W3.default.createElement(z1,{options:[{label:"Yes, use recommended settings",value:"install"},{label:"No, maybe later with /terminal-setup",value:"no"}],onChange:(v)=>{if(v==="install")QU8(A).catch(()=>{}).finally(w);else w()},onCancel:()=>w()}),W3.default.createElement(T,{dimColor:!0},H.pending?W3.default.createElement(W3.default.Fragment,null,"Press ",H.keyName," again to exit"):W3.default.createElement(W3.default.Fragment,null,"Enter to confirm · Esc to skip"))))});let f=D[K],G=W3.useCallback(()=>{if(K===D.length-1)q();else w()},[K,D.length,O,q]),Z=W3.useCallback(()=>{w()},[K,D.length,O,q]);return B7({"confirm:yes":G},{context:"Confirmation",isActive:f?.id==="security"}),B7({"confirm:no":Z},{context:"Confirmation",isActive:f?.id==="terminal-setup"}),W3.default.createElement(u,{flexDirection:"column"},W3.default.createElement(Sr8,null),W3.default.createElement(u,{flexDirection:"column",marginTop:1},f?.component,H.pending&&W3.default.createElement(u,{padding:1},W3.default.createElement(T,{dimColor:!0},"Press ",H.keyName," again to exit"))))}function S45(q){let K=K6(4),{skip:_,onSkip:z,children:Y}=q,O,A;if(K[0]!==z||K[1]!==_)O=()=>{if(_)z()},A=[_,z],K[0]=z,K[1]=_,K[2]=O,K[3]=A;else O=K[2],A=K[3];if(W3.useEffect(O,A),_)return null;return Y}var W3;var b45=L(()=>{o6();k8();pJ6();P2();l6();F7();T7();hQ6();y1();S_();g8();N45();Aj7();q18();j5();$j7();m37();yQ8();R45();W3=Y6(f6(),1)});function x45(q){if(q===null||q.disableAllHooks)return!1;if(q.statusLine)return!0;if(q.fileSuggestion)return!0;if(!q.hooks)return!1;for(let K of Object.values(q.hooks))if(K.length>0)return!0;return!1}function F45(){let q=[],K=V1("projectSettings");if(x45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(x45(_))q.push(".claude/settings.local.json");return q}function I45(q){return q.some((K)=>K.ruleBehavior==="allow"&&(K.ruleValue.toolName===e7||K.ruleValue.toolName.startsWith(e7+"(")))}function U45(){let q=[],K=Ls6("projectSettings");if(I45(K))q.push(".claude/settings.json");let _=Ls6("localSettings");if(I45(_))q.push(".claude/settings.local.json");return q}function u45(q){return!!q?.otelHeadersHelper}function Q45(){let q=[],K=V1("projectSettings");if(u45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(u45(_))q.push(".claude/settings.local.json");return q}function m45(q){return!!q?.apiKeyHelper}function d45(){let q=[],K=V1("projectSettings");if(m45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(m45(_))q.push(".claude/settings.local.json");return q}function p45(q){return!!(q?.awsAuthRefresh||q?.awsCredentialExport)}function c45(){let q=[],K=V1("projectSettings");if(p45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(p45(_))q.push(".claude/settings.local.json");return q}function B45(q){return!!q?.gcpAuthRefresh}function l45(){let q=[],K=V1("projectSettings");if(B45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(B45(_))q.push(".claude/settings.local.json");return q}function g45(q){if(!q?.env)return!1;return Object.keys(q.env).some((K)=>!TE6.has(K.toUpperCase()))}function n45(){let q=[],K=V1("projectSettings");if(g45(K))q.push(".claude/settings.json");let _=V1("localSettings");if(g45(_))q.push(".claude/settings.local.json");return q}var i45=L(()=>{r1();iS8();Um()});var o45={};G8(o45,{TrustDialog:()=>g6O});import{homedir as r45}from"os";function g6O(q){let K=K6(33),{onDone:_,commands:z}=q,Y;if(K[0]===Symbol.for("react.memo_cache_sentinel"))Y=cH("project"),K[0]=Y;else Y=K[0];let{servers:O}=Y,A;if(K[1]===Symbol.for("react.memo_cache_sentinel"))A=Object.keys(O),K[1]=A;else A=K[1];let $=A.length>0,w;if(K[2]===Symbol.for("react.memo_cache_sentinel"))w=F45(),K[2]=w;else w=K[2];let H=w.length>0,J;if(K[3]===Symbol.for("react.memo_cache_sentinel"))J=U45(),K[3]=J;else J=K[3];let M=J,X;if(K[4]===Symbol.for("react.memo_cache_sentinel"))X=d45(),K[4]=X;else X=K[4];let W=X.length>0,D;if(K[5]===Symbol.for("react.memo_cache_sentinel"))D=c45(),K[5]=D;else D=K[5];let G=D.length>0,Z;if(K[6]===Symbol.for("react.memo_cache_sentinel"))Z=l45(),K[6]=Z;else Z=K[6];let k=Z.length>0,V;if(K[7]===Symbol.for("react.memo_cache_sentinel"))V=Q45(),K[7]=V;else V=K[7];let E=V.length>0,R;if(K[8]===Symbol.for("react.memo_cache_sentinel"))R=n45(),K[8]=R;else R=K[8];let I=R.length>0,m;if(K[9]!==z)m=z?.some(l6O)??!1,K[9]=z,K[10]=m;else m=K[10];let p=m,S;if(K[11]!==z)S=z?.some(d6O)??!1,K[11]=z,K[12]=S;else S=K[12];let g=S,F=M.length>0||p||g,U=sO(),n,r;if(K[13]!==F)n=()=>{let i=r45()===Z8();d("tengu_trust_dialog_shown",{isHomeDir:i,hasMcpServers:$,hasHooks:H,hasBashExecution:F,hasApiKeyHelper:W,hasAwsCommands:G,hasGcpCommands:k,hasOtelHeadersHelper:E,hasDangerousEnvVars:I})},r=[$,H,F,W,G,k,E,I],K[13]=F,K[14]=n,K[15]=r;else n=K[14],r=K[15];XV.default.useEffect(n,r);let o;if(K[16]!==F||K[17]!==_)o=function(c){if(c==="exit"){H5(1);return}let A6=r45()===Z8();if(d("tengu_trust_dialog_accept",{isHomeDir:A6,hasMcpServers:$,hasHooks:H,hasBashExecution:F,hasApiKeyHelper:W,hasAwsCommands:G,hasGcpCommands:k,hasOtelHeadersHelper:E,hasDangerousEnvVars:I}),A6)lI6(!0);else Vw(Q6O);_()},K[16]=F,K[17]=_,K[18]=o;else o=K[18];let z6=o,_6=z3(U6O),l;if(K[19]===Symbol.for("react.memo_cache_sentinel"))l={context:"Confirmation"},K[19]=l;else l=K[19];if(J1("confirm:no",F6O,l),U)return setTimeout(_),null;let q6,J6,O6;if(K[20]===Symbol.for("react.memo_cache_sentinel"))q6=XV.default.createElement(T,{bold:!0},X8().cwd()),J6=XV.default.createElement(T,null,"Quick safety check: Is this a project you created or one you trust? (Like your own code, a well-known open source project, or work from your team). If not, take a moment to review what","'","s in this folder first."),O6=XV.default.createElement(T,null,"","",""),K[20]=q6,K[21]=J6,K[22]=O6;else q6=K[20],J6=K[21],O6=K[22];let X6;if(K[23]===Symbol.for("react.memo_cache_sentinel"))X6=XV.default.createElement(T,{dimColor:!0},XV.default.createElement(Sq,{url:"https://code.claude.com/docs/en/security"},"Security guide")),K[23]=X6;else X6=K[23];let P6;if(K[24]===Symbol.for("react.memo_cache_sentinel"))P6=[{label:"Yes, I trust this folder",value:"enable_all"},{label:"No, exit",value:"exit"}],K[24]=P6;else P6=K[24];let t;if(K[25]!==z6)t=XV.default.createElement(z1,{options:P6,onChange:(i)=>z6(i),onCancel:()=>z6("exit")}),K[25]=z6,K[26]=t;else t=K[26];let a;if(K[27]!==_6.keyName||K[28]!==_6.pending)a=XV.default.createElement(T,{dimColor:!0},_6.pending?XV.default.createElement(XV.default.Fragment,null,"Press ",_6.keyName," again to exit"):XV.default.createElement(XV.default.Fragment,null,"Enter to confirm · Esc to cancel")),K[27]=_6.keyName,K[28]=_6.pending,K[29]=a;else a=K[29];let $6;if(K[30]!==t||K[31]!==a)$6=XV.default.createElement(ZY,{color:"warning",titleColor:"warning",title:"Accessing workspace:"},XV.default.createElement(u,{flexDirection:"column",gap:1,paddingTop:1},q6,J6,O6,X6,t,a)),K[30]=t,K[31]=a,K[32]=$6;else $6=K[32];return $6}function F6O(){H5(0)}function U6O(){return H5(1)}function Q6O(q){return{...q,hasTrustDialogAccepted:!0}}function d6O(q){return q.type==="prompt"&&(q.loadedFrom==="skills"||q.loadedFrom==="plugin")&&(q.source==="projectSettings"||q.source==="localSettings"||q.source==="plugin")&&q.allowedTools?.some(c6O)}function c6O(q){return q===e7||q.startsWith(e7+"(")}function l6O(q){return q.type==="prompt"&&q.loadedFrom==="commands_DEPRECATED"&&(q.source==="projectSettings"||q.source==="localSettings")&&q.allowedTools?.some(n6O)}function n6O(q){return q===e7||q.startsWith(e7+"(")}var XV;var a45=L(()=>{o6();k8();T8();P2();l6();F7();$0();y1();Q7();t7();zA();I_();zf();i45();XV=Y6(f6(),1)});var s45={};G8(s45,{BypassPermissionsModeDialog:()=>i6O});function i6O(q){let K=K6(7),{onAccept:_}=q,z;if(K[0]===Symbol.for("react.memo_cache_sentinel"))z=[],K[0]=z;else z=K[0];et.default.useEffect(o6O,z);let Y;if(K[1]!==_)Y=function(J){q:switch(J){case"accept":{d("tengu_bypass_permissions_mode_dialog_accept",{}),W7("userSettings",{skipDangerousModePermissionPrompt:!0}),_();break q}case"decline":H5(1)}},K[1]=_,K[2]=Y;else Y=K[2];let O=Y,A=r6O,$;if(K[3]===Symbol.for("react.memo_cache_sentinel"))$=et.default.createElement(u,{flexDirection:"column",gap:1},et.default.createElement(T,null,"In Bypass Permissions mode, Claude Code will not ask for your approval before running potentially dangerous commands.",et.default.createElement(Xk,null),"This mode should only be used in a sandboxed container/VM that has restricted internet access and can easily be restored if damaged."),et.default.createElement(T,null,"By proceeding, you accept all responsibility for actions taken while running in Bypass Permissions mode."),et.default.createElement(Sq,{url:"https://code.claude.com/docs/en/security"})),K[3]=$;else $=K[3];let w;if(K[4]===Symbol.for("react.memo_cache_sentinel"))w=[{label:"No, exit",value:"decline"},{label:"Yes, I accept",value:"accept"}],K[4]=w;else w=K[4];let j;if(K[5]!==O)j=et.default.createElement(N1,{title:"WARNING: Claude Code running in Bypass Permissions mode",color:"error",onCancel:A},$,et.default.createElement(z1,{options:w,onChange:(H)=>O(H)})),K[5]=O,K[6]=j;else j=K[6];return j}function r6O(){H5(0)}function o6O(){d("tengu_bypass_permissions_mode_dialog_shown",{})}var et;var t45=L(()=>{o6();k8();l6();zA();r1();I_();y4();et=Y6(f6(),1)});var e45={};G8(e45,{DevChannelsDialog:()=>a6O});function a6O(q){let K=K6(14),{channels:_,onAccept:z}=q,Y;if(K[0]!==z)Y=function(W){q:switch(W){case"accept":{z();break q}case"exit":H5(1)}},K[0]=z,K[1]=Y;else Y=K[1];let O=Y,A=t6O,$,w;if(K[2]===Symbol.for("react.memo_cache_sentinel"))$=ZX6.default.createElement(T,null,"--dangerously-load-development-channels is for local channel development only. Do not use this option to run channels you have downloaded off the internet."),w=ZX6.default.createElement(T,null,"Please use --channels to run a list of approved channels."),K[2]=$,K[3]=w;else $=K[2],w=K[3];let j;if(K[4]!==_)j=_.map(s6O).join(", "),K[4]=_,K[5]=j;else j=K[5];let H;if(K[6]!==j)H=ZX6.default.createElement(u,{flexDirection:"column",gap:1},$,w,ZX6.default.createElement(T,{dimColor:!0},"Channels:"," ",j)),K[6]=j,K[7]=H;else H=K[7];let J;if(K[8]===Symbol.for("react.memo_cache_sentinel"))J=[{label:"I am using this for local development",value:"accept"},{label:"Exit",value:"exit"}],K[8]=J;else J=K[8];let M;if(K[9]!==O)M=ZX6.default.createElement(z1,{options:J,onChange:(P)=>O(P)}),K[9]=O,K[10]=M;else M=K[10];let X;if(K[11]!==H||K[12]!==M)X=ZX6.default.createElement(N1,{title:"WARNING: Loading development channels",color:"error",onCancel:A},H,M),K[11]=H,K[12]=M,K[13]=X;else X=K[13];return X}function s6O(q){return q.kind==="plugin"?`plugin:${q.name}@${q.marketplace}`:`server:${q.name}`}function t6O(){H5(0)}var ZX6;var qK5=L(()=>{o6();l6();zA();I_();y4();ZX6=Y6(f6(),1)});var KK5={};G8(KK5,{ClaudeInChromeOnboarding:()=>K8O});function K8O(q){let K=K6(20),{onDone:_}=q,[z,Y]=Ff.default.useState(!1),O,A;if(K[0]===Symbol.for("react.memo_cache_sentinel"))O=()=>{d("tengu_claude_in_chrome_onboarding_shown",{}),kt().then(Y),C8(_8O)},A=[],K[0]=O,K[1]=A;else O=K[0],A=K[1];Ff.default.useEffect(O,A);let $;if(K[2]!==_)$=(D,f)=>{if(f.return)_()},K[2]=_,K[3]=$;else $=K[3];RK($);let w;if(K[4]!==z)w=!z&&Ff.default.createElement(Ff.default.Fragment,null,Ff.default.createElement(Xk,null),Ff.default.createElement(Xk,null),"Requires the Chrome extension. Get started at"," ",Ff.default.createElement(Sq,{url:e6O})),K[4]=z,K[5]=w;else w=K[5];let j;if(K[6]!==w)j=Ff.default.createElement(T,null,"Claude in Chrome works with the Chrome extension to let you control your browser directly from Claude Code. You can navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests.",w),K[6]=w,K[7]=j;else j=K[7];let H;if(K[8]!==z)H=z&&Ff.default.createElement(Ff.default.Fragment,null," ","(",Ff.default.createElement(Sq,{url:q8O}),")"),K[8]=z,K[9]=H;else H=K[9];let J;if(K[10]!==H)J=Ff.default.createElement(T,{dimColor:!0},"Site-level permissions are inherited from the Chrome extension. Manage permissions in the Chrome extension settings to control which sites Claude can browse, click, and type on",H,"."),K[10]=H,K[11]=J;else J=K[11];let M;if(K[12]===Symbol.for("react.memo_cache_sentinel"))M=Ff.default.createElement(T,{bold:!0,color:"chromeYellow"},"/chrome"),K[12]=M;else M=K[12];let X;if(K[13]===Symbol.for("react.memo_cache_sentinel"))X=Ff.default.createElement(T,{dimColor:!0},"For more info, use"," ",M," ","or visit ",Ff.default.createElement(Sq,{url:"https://code.claude.com/docs/en/chrome"})),K[13]=X;else X=K[13];let P;if(K[14]!==j||K[15]!==J)P=Ff.default.createElement(u,{flexDirection:"column",gap:1},j,J,X),K[14]=j,K[15]=J,K[16]=P;else P=K[16];let W;if(K[17]!==_||K[18]!==P)W=Ff.default.createElement(N1,{title:"Claude in Chrome (Beta)",onCancel:_,color:"chromeYellow"},P),K[17]=_,K[18]=P,K[19]=W;else W=K[19];return W}function _8O(q){return{...q,hasCompletedClaudeInChromeOnboarding:!0}}var Ff,e6O="https://claude.ai/chrome",q8O="https://clau.de/chrome/permissions";var _K5=L(()=>{o6();k8();l6();TM6();y1();y4();Ff=Y6(f6(),1)});import{appendFileSync as z8O}from"fs";function Y8O(){C8((q)=>({...q,hasCompletedOnboarding:!0,lastOnboardingVersion:{ISSUES_EXPLAINER:"report the issue at https://github.com/anthropics/claude-code/issues",PACKAGE_URL:"@anthropic-ai/claude-code",README_URL:"https://code.claude.com/docs/en/overview",VERSION:"2.1.92",FEEDBACK_CHANNEL:"https://github.com/anthropics/claude-code/issues",BUILD_TIME:"2026-04-03T23:25:15Z"}.VERSION}))}function O8O(q,K){return new Promise((_)=>{let z=(Y)=>void _(Y);q.render(K(z))})}async function CB(q,K,_){return A8O(q,K,{color:"error",beforeExit:_})}async function A8O(q,K,_){let{Text:z}=await Promise.resolve().then(() => (l6(),Qi6)),Y=_?.color,O=_?.exitCode??1;q.render(Y?ZE.default.createElement(z,{color:Y},K):ZE.default.createElement(z,null,K)),q.unmount(),await _?.beforeExit?.(),process.exit(O)}function fR(q,K,_){return O8O(q,(z)=>ZE.default.createElement(FJ,{onChangeAppState:_?.onChangeAppState},ZE.default.createElement(IM,null,K(z))))}async function GX6(q,K){q.render(K),xr8(),await q.waitUntilExit(),await FK(0)}async function zK5(q,K,_,z,Y,O){if(U6(!1)||process.env.IS_DEMO)return!1;let A=w8(),$=!1;if(!A.theme||!A.hasCompletedOnboarding){$=!0;let{Onboarding:w}=await Promise.resolve().then(() => (b45(),C45));await fR(q,(j)=>ZE.default.createElement(w,{onDone:()=>{Y8O(),j()}}),{onChangeAppState:xt})}if(!U6(process.env.CLAUBBIT)){if(!sO()){let{TrustDialog:j}=await Promise.resolve().then(() => (a45(),o45));await fR(q,(H)=>ZE.default.createElement(j,{commands:z,onDone:H}))}lI6(!0),Cn6(),Er().catch((j)=>H6(B1(j))),J2();let{errors:w}=ga();if(w.length===0)await P45(q);if(await Op1()){let j=qN6(await pH(!0)),{ClaudeMdExternalIncludesDialog:H}=await Promise.resolve().then(() => (f37(),MEK));await fR(q,(J)=>ZE.default.createElement(H,{onDone:J,isStandaloneDialog:!0,externalIncludes:j}))}}if(Z45(),D45(),dc(),setImmediate(()=>Hn8()),await ZE6()){let{GroveDialog:w}=await Promise.resolve().then(() => (az7(),CBK));if(await fR(q,(H)=>ZE.default.createElement(w,{showIfAlreadyViewed:!1,location:$?"onboarding":"policy_update_modal",onDone:H}))==="escape")return d("tengu_grove_policy_exited",{}),H5(0),!1}if(process.env.ANTHROPIC_API_KEY&&!WT()){let w=JN(process.env.ANTHROPIC_API_KEY);if(In6(w)==="new"){let{ApproveApiKey:H}=await Promise.resolve().then(() => (Aj7(),y45));await fR(q,(J)=>ZE.default.createElement(H,{customApiKeyTruncated:w,onDone:J}),{onChangeAppState:xt})}}if((K==="bypassPermissions"||_)&&!kf6()){let{BypassPermissionsModeDialog:w}=await Promise.resolve().then(() => (t45(),s45));await fR(q,(j)=>ZE.default.createElement(w,{onAccept:j}))}if(K==="auto"&&!En()){let{AutoModeOptInDialog:w}=await Promise.resolve().then(() => (Mi8(),RtK));await fR(q,(j)=>ZE.default.createElement(w,{onAccept:j,onDecline:()=>H5(1),declineExits:!0}))}if(PJ().length>0||(O?.length??0)>0)await xN("tengu_harbor");if(O&&O.length>0){let[{isChannelsEnabled:w},{getClaudeAIOAuthTokens:j}]=await Promise.all([Promise.resolve().then(() => (o48(),eRK)),Promise.resolve().then(() => (T7(),FL))]);if(!w()||!j()?.accessToken)bl([...PJ(),...O.map((H)=>({...H,dev:!0}))]),g_8(!0);else{let{DevChannelsDialog:H}=await Promise.resolve().then(() => (qK5(),e45));await fR(q,(J)=>ZE.default.createElement(H,{channels:O,onAccept:()=>{bl([...PJ(),...O.map((M)=>({...M,dev:!0}))]),g_8(!0),J()}}))}}if(Y&&!w8().hasCompletedClaudeInChromeOnboarding){let{ClaudeInChromeOnboarding:w}=await Promise.resolve().then(() => (_K5(),KK5));await fR(q,(j)=>ZE.default.createElement(w,{onDone:j}))}return $}function YK5(q){let K=0,_=va(q);if(_.stdin)d("tengu_stdin_interactive",{});let z=new Yj7,Y=BA7();Ha8(Y);let O=process.env.CLAUDE_CODE_FRAME_TIMING_LOG;return{getFpsMetrics:()=>z.getMetrics(),stats:Y,renderOptions:{..._,onFrame:(A)=>{if(z.record(A.durationMs),Y.observe("frame_duration_ms",A.durationMs),O&&A.phases){let $=JSON.stringify({total:A.durationMs,...A.phases,rss:process.memoryUsage.rss(),cpu:process.cpuUsage()})+`
8306
8306
  `;z8O(O,$)}if(BR1())return;for(let $ of A.flickers){if($.reason==="resize")continue;let w=Date.now();if(w-K<1000)d("tengu_flicker",{desiredHeight:$.desiredHeight,actualHeight:$.availableHeight,reason:$.reason});K=w}}}}}var ZE;var jj7=L(()=>{k8();zA();T8();gA7();_y();uA7();rr();sQ();Hj7();s1();GE6();W45();E7();pb6();hQ6();yM();y1();f45();g8();E8();d38();h8();E58();ve6();q88();r1();ZE=Y6(f6(),1)});var OK5={};G8(OK5,{InvalidSettingsDialog:()=>$8O});function $8O(q){let K=K6(13),{settingsErrors:_,onContinue:z,onExit:Y}=q,O;if(K[0]!==z||K[1]!==Y)O=function(X){if(X==="exit")Y();else z()},K[0]=z,K[1]=Y,K[2]=O;else O=K[2];let A=O,$;if(K[3]!==_)$=l38.default.createElement(oQ8,{errors:_}),K[3]=_,K[4]=$;else $=K[4];let w;if(K[5]===Symbol.for("react.memo_cache_sentinel"))w=l38.default.createElement(T,{dimColor:!0},"Files with errors are skipped entirely, not just the invalid settings."),K[5]=w;else w=K[5];let j;if(K[6]===Symbol.for("react.memo_cache_sentinel"))j=[{label:"Exit and fix manually",value:"exit"},{label:"Continue without these settings",value:"continue"}],K[6]=j;else j=K[6];let H;if(K[7]!==A)H=l38.default.createElement(z1,{options:j,onChange:A}),K[7]=A,K[8]=H;else H=K[8];let J;if(K[9]!==Y||K[10]!==$||K[11]!==H)J=l38.default.createElement(N1,{title:"Settings Error",onCancel:Y,color:"warning"},$,w,H),K[9]=Y,K[10]=$,K[11]=H,K[12]=J;else J=K[12];return J}var l38;var AK5=L(()=>{o6();l6();I_();y4();p37();l38=Y6(f6(),1)});var $K5={};G8($K5,{TeleportRepoMismatchDialog:()=>w8O});function w8O(q){let K=K6(18),{targetRepo:_,initialPaths:z,onSelectPath:Y,onCancel:O}=q,[A,$]=$X.useState(z),[w,j]=$X.useState(null),[H,J]=$X.useState(!1),M;if(K[0]!==A||K[1]!==O||K[2]!==Y||K[3]!==_)M=async(G)=>{if(G==="cancel"){O();return}if(J(!0),j(null),await G45(G,_)){Y(G);return}v45(_,G);let v=A.filter((k)=>k!==G);$(v),J(!1),j(`${U5(G)} no longer contains the correct repository. Select another path.`)},K[0]=A,K[1]=O,K[2]=Y,K[3]=_,K[4]=M;else M=K[4];let X=M,P;if(K[5]!==A){let G;if(K[7]===Symbol.for("react.memo_cache_sentinel"))G={label:"Cancel",value:"cancel"},K[7]=G;else G=K[7];P=[...A.map(j8O),G],K[5]=A,K[6]=P}else P=K[6];let W=P,D;if(K[8]!==A.length||K[9]!==w||K[10]!==X||K[11]!==W||K[12]!==_||K[13]!==H)D=A.length>0?$X.default.createElement($X.default.Fragment,null,$X.default.createElement(u,{flexDirection:"column",gap:1},w&&$X.default.createElement(T,{color:"error"},w),$X.default.createElement(T,null,"Open Claude Code in ",$X.default.createElement(T,{bold:!0},_),":")),H?$X.default.createElement(u,null,$X.default.createElement(CK,null),$X.default.createElement(T,null," Validating repository…")):$X.default.createElement(z1,{options:W,onChange:(G)=>void X(G)})):$X.default.createElement(u,{flexDirection:"column",gap:1},w&&$X.default.createElement(T,{color:"error"},w),$X.default.createElement(T,{dimColor:!0},"Run claude --teleport from a checkout of ",_)),K[8]=A.length,K[9]=w,K[10]=X,K[11]=W,K[12]=_,K[13]=H,K[14]=D;else D=K[14];let f;if(K[15]!==O||K[16]!==D)f=$X.default.createElement(N1,{title:"Teleport to Repo",onCancel:O,color:"background"},D),K[15]=O,K[16]=D,K[17]=f;else f=K[17];return f}function j8O(q){return{label:$X.default.createElement(T,null,"Use ",$X.default.createElement(T,{bold:!0},U5(q))),value:q}}var $X;var wK5=L(()=>{o6();l6();hK();d38();I_();y4();f2();$X=Y6(f6(),1)});var HK5={};G8(HK5,{ResumeConversation:()=>M8O});import{dirname as H8O}from"path";function J8O(q){let K=parseInt(q,10);if(!isNaN(K)&&K>0)return K;let _=q.match(/github\.com\/[^/]+\/[^/]+\/pull\/(\d+)/);if(_?.[1])return parseInt(_[1],10);return null}function M8O({commands:q,worktreePaths:K,initialTools:_,mcpClients:z,dynamicMcpConfig:Y,debug:O,mainThreadAgentDefinition:A,autoConnectIdeFlag:$,strictMcpConfig:w=!1,systemPrompt:j,appendSystemPrompt:H,initialSearchQuery:J,disableSlashCommands:M=!1,forkSession:X,taskListId:P,filterByPr:W,thinkingConfig:D,onTurnComplete:f}){let{rows:G}=o1(),Z=J8((O6)=>O6.agentDefinitions),v=l7(),[k,V]=tY.default.useState([]),[y,E]=tY.default.useState(!0),[R,b]=tY.default.useState(!1),[I,m]=tY.default.useState(!1),[p,S]=tY.default.useState(null),[g,F]=tY.default.useState(null),U=tY.default.useRef(null),n=tY.default.useRef(0),r=tY.default.useMemo(()=>{let O6=k.filter((X6)=>!X6.isSidechain);if(W!==void 0){if(W===!0)O6=O6.filter((X6)=>X6.prNumber!==void 0);else if(typeof W==="number")O6=O6.filter((X6)=>X6.prNumber===W);else if(typeof W==="string"){let X6=J8O(W);if(X6!==null)O6=O6.filter((P6)=>P6.prNumber===X6)}}return O6},[k,W]),o=ft();tY.default.useEffect(()=>{$58(K).then((O6)=>{U.current=O6,n.current=O6.logs.length,V(O6.logs),E(!1)}).catch((O6)=>{H6(O6),E(!1)})},[K]);let z6=tY.default.useCallback((O6)=>{let X6=U.current;if(!X6||X6.nextIndex>=X6.allStatLogs.length)return;EM6(X6.allStatLogs,X6.nextIndex,O6).then((P6)=>{if(X6.nextIndex=P6.nextIndex,P6.logs.length>0){let t=n.current;P6.logs.forEach((a,$6)=>{a.value=t+$6}),V((a)=>a.concat(P6.logs)),n.current+=P6.logs.length}else if(X6.nextIndex<X6.allStatLogs.length)z6(O6)})},[]),_6=tY.default.useCallback((O6)=>{E(!0),(O6?El8():$58(K)).then((P6)=>{U.current=P6,n.current=P6.logs.length,V(P6.logs)}).catch((P6)=>{H6(P6)}).finally(()=>{E(!1)})},[K]),l=tY.default.useCallback(()=>{let O6=!I;m(O6),_6(O6)},[I,_6]);function q6(){process.exit(1)}async function J6(O6){b(!0);let X6=performance.now(),P6=jc8(O6,I,K);if(P6.isCrossProject){if(!P6.isSameRepoWorktree){let t=await dX(P6.command);if(t)process.stdout.write(t);F(P6.command);return}}try{let t=await f56(O6,void 0);if(!t)throw Error("Failed to load conversation");if(t.sessionId&&!X)rf(eX(t.sessionId),O6.fullPath?H8O(O6.fullPath):null),await v38(),await ux(),_B8(t.sessionId);else if(X&&t.contentReplacements?.length)await TJ6(t.contentReplacements);let{agentDefinition:a}=wX6(t.agentSetting,A,Z);v((i)=>({...i,agent:a?.agentType}));let $6=V38(t.agentName,t.agentColor);if($6)v((i)=>({...i,standaloneAgentContext:$6}));if(Ru(t.agentName),pc(X?{...t,worktreeSession:void 0}:t),!X){if(N38(t.worktreeSession),t.sessionId)mc()}d("tengu_session_resumed",{entrypoint:"picker",success:!0,resume_duration_ms:Math.round(performance.now()-X6)}),V([]),S({messages:t.messages,fileHistorySnapshots:t.fileHistorySnapshots,contentReplacements:t.contentReplacements,agentName:t.agentName,agentColor:t.agentColor==="default"?void 0:t.agentColor,mainThreadAgentDefinition:a})}catch(t){throw d("tengu_session_resumed",{entrypoint:"picker",success:!1}),H6(t),t}}if(g)return tY.default.createElement(W8O,{command:g});if(p)return tY.default.createElement(e27,{debug:O,commands:q,initialTools:_,initialMessages:p.messages,initialFileHistorySnapshots:p.fileHistorySnapshots,initialContentReplacements:p.contentReplacements,initialAgentName:p.agentName,initialAgentColor:p.agentColor,mcpClients:z,dynamicMcpConfig:Y,strictMcpConfig:w,systemPrompt:j,appendSystemPrompt:H,mainThreadAgentDefinition:p.mainThreadAgentDefinition,autoConnectIdeFlag:$,disableSlashCommands:M,taskListId:P,thinkingConfig:D,onTurnComplete:f});if(y)return tY.default.createElement(u,null,tY.default.createElement(CK,null),tY.default.createElement(T,null," Loading conversations…"));if(R)return tY.default.createElement(u,null,tY.default.createElement(CK,null),tY.default.createElement(T,null," Resuming conversation…"));if(r.length===0)return tY.default.createElement(X8O,null);return tY.default.createElement($c8,{logs:r,maxHeight:G,onCancel:q6,onSelect:J6,onLogsChanged:o?()=>_6(I):void 0,onLoadMore:z6,initialSearchQuery:J,showAllProjects:I,onToggleAllProjects:l,onAgenticSearch:wc8})}function X8O(){let q=K6(2),K;if(q[0]===Symbol.for("react.memo_cache_sentinel"))K={context:"Global"},q[0]=K;else K=q[0];J1("app:interrupt",P8O,K);let _;if(q[1]===Symbol.for("react.memo_cache_sentinel"))_=tY.default.createElement(u,{flexDirection:"column"},tY.default.createElement(T,null,"No conversations found to resume."),tY.default.createElement(T,{dimColor:!0},"Press Ctrl+C to exit and start a new conversation.")),q[1]=_;else _=q[1];return _}function P8O(){process.exit(1)}function W8O(q){let K=K6(8),{command:_}=q,z;if(K[0]===Symbol.for("react.memo_cache_sentinel"))z=[],K[0]=z;else z=K[0];tY.default.useEffect(D8O,z);let Y;if(K[1]===Symbol.for("react.memo_cache_sentinel"))Y=tY.default.createElement(T,null,"This conversation is from a different directory."),K[1]=Y;else Y=K[1];let O;if(K[2]===Symbol.for("react.memo_cache_sentinel"))O=tY.default.createElement(T,null,"To resume, run:"),K[2]=O;else O=K[2];let A;if(K[3]!==_)A=tY.default.createElement(u,{flexDirection:"column"},O,tY.default.createElement(T,null," ",_)),K[3]=_,K[4]=A;else A=K[4];let $;if(K[5]===Symbol.for("react.memo_cache_sentinel"))$=tY.default.createElement(T,{dimColor:!0},"(Command copied to clipboard)"),K[5]=$;else $=K[5];let w;if(K[6]!==A)w=tY.default.createElement(u,{flexDirection:"column",gap:1},Y,A,$),K[6]=A,K[7]=w;else w=K[7];return w}function D8O(){let q=setTimeout(f8O,100);return()=>clearTimeout(q)}function f8O(){process.exit(0)}var tY;var JK5=L(()=>{o6();u4();T8();zz7();f2();Gx();GM();l6();F7();k8();E7();z0();Az7();T38();TZ();uh6();$z7();h8();K7();y38();qK();qj7();tY=Y6(f6(),1)});async function MK5(q,K){let{InvalidSettingsDialog:_}=await Promise.resolve().then(() => (AK5(),OK5));return fR(q,(z)=>vX6.default.createElement(_,{settingsErrors:K.settingsErrors,onContinue:z,onExit:K.onExit}))}async function XK5(q){let{TeleportResumeWrapper:K}=await Promise.resolve().then(() => (bz7(),NpK));return fR(q,(_)=>vX6.default.createElement(K,{onComplete:_,onCancel:()=>_(null),source:"cliArg"}))}async function PK5(q,K){let{TeleportRepoMismatchDialog:_}=await Promise.resolve().then(() => (wK5(),$K5));return fR(q,(z)=>vX6.default.createElement(_,{targetRepo:K.targetRepo,initialPaths:K.initialPaths,onSelectPath:z,onCancel:()=>z(null)}))}async function WK5(q,K,_,z){let[Y,{ResumeConversation:O},{App:A}]=await Promise.all([_,Promise.resolve().then(() => (JK5(),HK5)),Promise.resolve().then(() => (QA7(),UA7))]);await GX6(q,vX6.default.createElement(A,{getFpsMetrics:K.getFpsMetrics,stats:K.stats,initialState:K.initialState},vX6.default.createElement(IM,null,vX6.default.createElement(O,{...z,worktreePaths:Y}))))}var vX6;var DK5=L(()=>{jj7();sQ();vX6=Y6(f6(),1)});function fK5(){}function kx6(q,K,_){H6(q);let z=_?`${K} plugin "${_}"`:K==="disable-all"?"disable all plugins":`${K} plugins`;console.error(`${i6.cross} Failed to ${z}: ${g6(q)}`);let Y=_?(()=>{let{name:O,marketplace:A}=k4(_);return{_PROTO_plugin_name:O,...A&&{_PROTO_marketplace_name:A},...Jx(O,A,ch())}})():{};d("tengu_plugin_command_failed",{command:K,error_category:GzK(q),...Y}),process.exit(1)}async function ZK5(q,K="user"){try{console.log(`Installing plugin "${q}"...`);let _=await LSK(q,K);if(!_.success)throw Error(_.message);console.log(`${i6.tick} ${_.message}`);let{name:z,marketplace:Y}=k4(_.pluginId||q);d("tengu_plugin_installed_cli",{_PROTO_plugin_name:z,...Y&&{_PROTO_marketplace_name:Y},scope:_.scope||K,install_source:"cli-explicit",...Jx(z,Y,ch())}),process.exit(0)}catch(_){kx6(_,"install",q)}}async function GK5(q,K="user",_=!1){try{let z=await wt(q,K,!_);if(!z.success)throw Error(z.message);console.log(`${i6.tick} ${z.message}`);let{name:Y,marketplace:O}=k4(z.pluginId||q);d("tengu_plugin_uninstalled_cli",{_PROTO_plugin_name:Y,...O&&{_PROTO_marketplace_name:O},scope:z.scope||K,...Jx(Y,O,ch())}),process.exit(0)}catch(z){kx6(z,"uninstall",q)}}async function vK5(q,K){try{let _=await E36(q,K);if(!_.success)throw Error(_.message);console.log(`${i6.tick} ${_.message}`);let{name:z,marketplace:Y}=k4(_.pluginId||q);d("tengu_plugin_enabled_cli",{_PROTO_plugin_name:z,...Y&&{_PROTO_marketplace_name:Y},scope:_.scope,...Jx(z,Y,ch())}),process.exit(0)}catch(_){kx6(_,"enable",q)}}async function TK5(q,K){try{let _=await bC6(q,K);if(!_.success)throw Error(_.message);console.log(`${i6.tick} ${_.message}`);let{name:z,marketplace:Y}=k4(_.pluginId||q);d("tengu_plugin_disabled_cli",{_PROTO_plugin_name:z,...Y&&{_PROTO_marketplace_name:Y},scope:_.scope,...Jx(z,Y,ch())}),process.exit(0)}catch(_){kx6(_,"disable",q)}}async function kK5(){try{let q=await hSK();if(!q.success)throw Error(q.message);console.log(`${i6.tick} ${q.message}`),d("tengu_plugin_disabled_all_cli",{}),process.exit(0)}catch(q){kx6(q,"disable-all")}}async function VK5(q,K){try{b4(`Checking for updates for plugin "${q}" at ${K} scope…
8307
8307
  `);let _=await xC6(q,K);if(!_.success)throw Error(_.message);if(b4(`${i6.tick} ${_.message}
8308
8308
  `),!_.alreadyUpToDate){let{name:z,marketplace:Y}=k4(_.pluginId||q);d("tengu_plugin_updated_cli",{_PROTO_plugin_name:z,...Y&&{_PROTO_marketplace_name:Y},old_version:_.oldVersion||"unknown",new_version:_.newVersion||"unknown",...Jx(z,Y,ch())})}await FK(0)}catch(_){kx6(_,"update",q)}}var Jj7=L(()=>{xq();E8();zA();h8();A48();eP();Vh6();k8();IC6()});function G8O(q){return`# Batch: Parallel Work Orchestration
package/dist/coder.js CHANGED
@@ -189,7 +189,7 @@ CONFIG:
189
189
  Auth credentials can be stored in config file under "auth" section.
190
190
  `)}};oe.exports=q});var P=f((Fs,re)=>{function Ye(u=process.argv.slice(2)){return u.includes("--print")||u.includes("-p")}re.exports={isPrintMode:Ye}});var $=f((Ms,ce)=>{var{spawn:Ze}=require("child_process"),I=require("path"),E=require("fs"),ie=require("os"),{isPrintMode:ae}=P(),U=class{constructor(e){this.config=e}resloveSettingFilePath(e){return I.join(e,this.config.configDir,"settings.json")}readModelFromSettingsFile(e){try{let s=this.resloveSettingFilePath(e);if(E.existsSync(s)){let t=E.readFileSync(s,"utf8"),o=JSON.parse(t);if(o&&o.model)return o.model}}catch(s){console.warn(e,s.message)}return null}getCurrentModel(e){let s=e.findIndex(o=>o==="--model");if(s!==-1&&s+1<e.length)return e[s+1];let t=this.readModelFromSettingsFile(process.cwd());return t||(t=this.readModelFromSettingsFile(ie.homedir()),t)?t:this.config.defaultModel}async ensureConfig(e=0){let s=I.join(ie.homedir(),this.config.configDir,this.config.configFile),t=I.dirname(s);if(!E.existsSync(s)){let o=this.config.defaultConfig||{};try{E.existsSync(t)||E.mkdirSync(t,{recursive:!0}),E.writeFileSync(s,JSON.stringify(o,null,2)),e>0&&await new Promise(n=>setTimeout(n,e))}catch(n){console.warn(`Failed to create ${this.config.configFile}: ${n.message}`)}}}findExecutablePath(){let e=I.dirname(require.main.filename);for(let s of this.config.executablePaths){let t=I.resolve(e,s);if(E.existsSync(t))return t}throw new Error(`Could not find executable in any of the configured paths: ${this.config.executablePaths.join(", ")}`)}handleChildMessages(e){process.env.CODEV_DEBUG&&console.log("Child process message handler initialized"),e.connected&&(e.on("message",s=>{this.onChildMessage(s)}),e.on("exit",async(s,t)=>{try{await this.handleChildProcessExit(s,t)}catch(o){console.error("Error in handleChildProcessExit:",o.message)}}),e.on("error",s=>{this.handleChildProcessError(s)}))}onChildMessage(e){process.env.CODEV_DEBUG&&console.log("Received IPC message from child:",e)}handleChildProcessExit(e,s){}handleChildProcessError(e){}async launch(e={}){let{remainingArgs:s=[],codevServer:t,auth_ak:o=null,auth_sk:n=null}=e;try{let r=this.getCurrentModel(s);ae(s)||console.log(`model:\x1B[90m\x1B[3m ${r} (use /model to switch models) \x1B[0m`),await this.ensureConfig(1e3);let a=this.findExecutablePath();return process.env.CODEV_DEBUG&&console.log(`executablePath: ${a}`),new Promise((i,c)=>{let l={...process.env,...this.config.environmentVariables(t)};o&&(l.CODEV_AUTH_AK=o),n&&(l.CODEV_AUTH_SK=n);let h=["--no-warnings"];process.env.CODEV_INSPECT_BRK==="True"&&h.push("--inspect-brk"),h.push(a,...s);let g=Ze("node",h,{env:l,stdio:["inherit","inherit","inherit","ipc"]});this.handleChildMessages(g),g.on("error",S=>{console.error(`Failed to start: ${S.message}`),c(S)}),g.on("exit",async(S,Q)=>{ae(s)||Q&&console.log(`terminated by signal: ${Q}`)}),process.on("SIGINT",async()=>{console.log(`
191
191
  Terminating ...`),g.kill("SIGTERM"),setTimeout(()=>{g.killed||g.kill("SIGKILL")},8e3)}),process.on("SIGTERM",async()=>{console.log(`
192
- Terminating ...`),g.kill("SIGTERM"),setTimeout(()=>{g.killed||g.kill("SIGKILL")},8e3)})})}catch(r){throw r}}};ce.exports=U});var ue=f((qs,le)=>{var d=process.env.CODEV_DEBUG==="True",B=class{constructor(e={}){this.queue=[],this.processing=!1,this.shuttingDown=!1,this.shutdownTimeout=e.shutdownTimeout||5e3,this.maxRetries=e.maxRetries||3,this.retryDelay=e.retryDelay||1e3,this.onProcessMessage=e.onProcessMessage||null,this.shutdownPromise=null,this.currentlyProcessing=null}enqueue(e){if(this.shuttingDown)return d&&console.log("Queue is shutting down, skipping new messages"),null;let s={id:Date.now()+Math.random(),data:e,timestamp:Date.now(),retryCount:0,processing:!1};return this.queue.push(s),d&&console.log(`Message enqueued, queue length: ${this.queue.length}`),this.processQueue(),s.id}dequeue(){let e=this.queue.shift();return d&&e&&console.log(`Message dequeued, remaining queue length: ${this.queue.length}`),e}removeById(e){let s=this.queue.findIndex(t=>t.id===e);return s>-1?(this.queue.splice(s,1),d&&console.log(`Message ${e} removed from queue`),!0):!1}async processQueue(){if(!(this.processing||this.queue.length===0)){this.processing=!0;try{for(;this.queue.length>0&&!this.shuttingDown;){let e=this.queue[0];e.processing=!0;try{this.onProcessMessage&&await this.onProcessMessage(e),this.dequeue()}catch(s){if(d&&console.error(`Failed to process message: ${s.message}`),e.retryCount++,d&&console.log("Start Retry:",e.retryCount,"times..."),e.retryCount>=this.maxRetries)d&&console.error("Message exceeded max retries, removing from queue"),this.dequeue();else{e.processing=!1;let t=this.shuttingDown?100:this.retryDelay*e.retryCount;await new Promise(o=>setTimeout(o,t))}}}}finally{this.processing=!1}}}getQueueSize(){return this.queue.length}clear(){this.queue=[],d&&console.log("Message queue cleared")}setMessageProcessor(e){this.onProcessMessage=e}async waitForProcessingMessages(e=5e3){let s=this.queue.filter(o=>o.processing);if(s.length===0)return;d&&console.log(`Waiting for ${s.length} processing messages to complete (timeout: ${e}ms)`);let t=Date.now();for(;Date.now()-t<e;){if(this.queue.filter(n=>n.processing).length===0){d&&console.log(`All processing messages completed in ${Date.now()-t}ms`);return}await new Promise(n=>setTimeout(n,50))}if(d){let o=this.queue.filter(n=>n.processing);console.log(`Timeout waiting for processing messages. ${o.length} messages still processing`)}}async gracefulShutdown(e={}){if(this.shutdownPromise)return this.shutdownPromise;let{timeoutMs:s=this.shutdownTimeout,batchSize:t=10,fastMode:o=!1}=e;return this.shutdownPromise=new Promise(async n=>{this.shuttingDown=!0,await this.waitForProcessingMessages(Math.min(s*.3,3e3));let r=this.queue.filter(S=>!S.processing),a=r.length;d&&(console.log(`Starting graceful shutdown with ${a} pending messages (${this.queue.length-a} already processing)`),console.log(`Mode: ${o?"fast (parallel)":"sequential"}, timeout: ${s}ms`));let i=Date.now(),c=0,l=0;try{if(o){let S=await this.processAllParallel(s-(Date.now()-i),r);c=S.processed,l=S.failed}else{let S=await this.processInBatches(t,s-(Date.now()-i),r);c=S.processed,l=S.failed}}catch(S){d&&console.error("Error during shutdown processing:",S.message)}let h=Date.now()-i,g=this.queue.length;d&&(console.log(`Shutdown completed in ${h}ms:`),console.log(` - Total: ${a} messages`),console.log(` - Processed: ${c}`),console.log(` - Failed: ${l}`),console.log(` - Remaining: ${g}`)),n({totalMessages:a,processedMessages:c,failedMessages:l,remainingMessages:g,duration:h,allMessagesSent:g===0&&l===0})}),this.shutdownPromise}async processAllParallel(e){if(this.queue.length===0)return{processed:0,failed:0};d&&console.log(`Processing ${this.queue.length} messages in parallel...`);let s=[...this.queue];this.queue=[];let t=s.map(async i=>{try{return this.onProcessMessage&&await this.onProcessMessage(i),{success:!0,messageId:i.id}}catch(c){return d&&console.warn(`Message ${i.id} processing failed: ${c.message}`),{success:!1,messageId:i.id,error:c}}}),o=new Promise(i=>{setTimeout(()=>i({timedOut:!0}),e)}),n=await Promise.race([Promise.allSettled(t).then(i=>({results:i})),o]);if(n.timedOut)return d&&console.log(`Parallel processing timed out after ${e}ms`),{processed:0,failed:s.length};let r=n.results.filter(i=>i.status==="fulfilled"&&i.value?.success).length,a=s.length-r;return{processed:r,failed:a}}async processInBatches(e,s){if(this.queue.length===0)return{processed:0,failed:0};d&&console.log(`Processing ${this.queue.length} messages in batches of ${e}...`);let t=Date.now(),o=0,n=0;for(;this.queue.length>0&&Date.now()-t<s;){let r=this.queue.splice(0,e),a=r.map(async h=>{try{return this.onProcessMessage&&await this.onProcessMessage(h),{success:!0}}catch(g){return d&&console.warn(`Batch message processing failed: ${g.message}`),{success:!1,error:g}}}),c=(await Promise.allSettled(a)).filter(h=>h.status==="fulfilled"&&h.value?.success).length,l=r.length-c;o+=c,n+=l,d&&r.length>0&&console.log(`Batch completed: ${c}/${r.length} successful`),this.queue.length>0&&await new Promise(h=>setTimeout(h,10))}return this.queue.length>0&&(n+=this.queue.length,d&&console.log(`${this.queue.length} messages not processed due to timeout`),this.queue=[]),{processed:o,failed:n}}async forceFlushAndShutdown(e=2e3){this.shuttingDown=!0,await this.waitForProcessingMessages(Math.min(e*.4,1e3));let s=this.queue.filter(i=>!i.processing);d&&console.log(`Force flush: attempting to send ${s.length} pending messages within ${e}ms (${this.queue.length-s.length} already processing)`);let t=Date.now(),o=s.map(async i=>{try{return this.onProcessMessage&&Date.now()-t<e?(await this.onProcessMessage(i),{success:!0,messageId:i.id}):{success:!1,messageId:i.id,reason:"timeout"}}catch(c){return{success:!1,messageId:i.id,error:c.message}}}),n=e-(Date.now()-t),r=new Promise(i=>{setTimeout(()=>i({timedOut:!0}),Math.max(100,n))}),a=await Promise.race([Promise.allSettled(o).then(i=>({results:i})),r]);if(s.forEach(i=>{let c=this.queue.findIndex(l=>l.id===i.id);c>-1&&this.queue.splice(c,1)}),this.processing=!1,a.timedOut)return d&&console.log(`Force flush timed out after ${e}ms`),{success:!1,reason:"timeout",attemptedCount:s.length};{let i=a.results.filter(c=>c.status==="fulfilled"&&c.value.success).length;return d&&console.log(`Force flush completed: ${i}/${s.length} messages sent`),{success:i===s.length,successCount:i,totalCount:s.length,results:a.results}}}forceShutdown(){this.shuttingDown=!0,this.queue=[],this.processing=!1,d&&console.log("Force shutdown: Queue cleared")}};le.exports=B});var A=f((Us,Xe)=>{Xe.exports={name:"makecoder",version:"2.0.75",description:"MakeCoder: Unified AI agent CLI tool integrating Claude Code, Codex and Gemini CLI",main:"./dist/coder.js",bin:{coder:"./dist/coder.js"},scripts:{test:'echo "Error: no test specified" && exit 1',start:"node ./src/coder.js",build:"node scripts/build.js","build:clean":"node scripts/build.js --clean","build:dev":"node scripts/build.js --no-minify --sourcemap",postinstall:"node scripts/postinstall.js"},keywords:["cli","ai","claude","gemini","codex","agent"],author:"makecoder",license:"MIT",repository:{type:"git",url:"https://github.com/makecoderai/coder.git"},homepage:"https://github.com/makecoderai/coder",dependencies:{"node-fetch":"^3.3.2",open:"^10.1.0",zod:"^3.25.76"},optionalDependencies:{"makecoder-codex-linux-x64":"*","makecoder-codex-darwin-arm64":"*","makecoder-codex-win32-x64":"*"},engines:{node:">=20.0.0"},devDependencies:{chokidar:"^4.0.3"},files:["dist","claude","scripts/postinstall.js"]}});var fe=f((Bs,ge)=>{var es=require("http"),ss=require("https"),{URL:he}=require("url"),{version:ts}=A(),de=process.env.CODEV_DEBUG==="True",N=class{constructor(e={}){this.baseUrl=e.baseUrl||"",this.timeout=e.timeout||3e4,this.defaultHeaders={"Content-Type":"application/json","User-Agent":`codev-cli/${ts}`,...e.headers}}setBaseUrl(e){this.baseUrl=e}setDefaultHeaders(e){this.defaultHeaders={...this.defaultHeaders,...e}}async post(e,s,t={}){let o=this.resolveUrl(e),n={...this.defaultHeaders,...t.headers};return new Promise((r,a)=>{this.validateRequest(o,s,a);let i=this.serializeData(s,a);if(!i)return;n["Content-Length"]=Buffer.byteLength(i);let c=this.buildRequestOptions(o,"POST",n),l=this.getHttpModule(o);de&&console.debug(`HTTP POST to ${o} with data length: ${i.length}`);let h=l.request(c,g=>{this.handleResponse(g,r,a)});this.attachErrorHandlers(h,o,a),h.setTimeout(this.timeout),h.write(i),h.end()})}resolveUrl(e){return e.startsWith("http")?e:`${this.baseUrl}${e.startsWith("/")?"":"/"}${e}`}validateRequest(e,s,t){return!e||typeof e!="string"?(t(new Error(`Invalid URL: ${e}`)),!1):s?!0:(t(new Error("No data provided for HTTP POST")),!1)}serializeData(e,s){try{return typeof e=="string"?e:JSON.stringify(e)}catch(t){return s(new Error(`Failed to serialize data: ${t.message}`)),null}}buildRequestOptions(e,s,t){let o=new he(e),n=o.protocol==="https:";return{hostname:o.hostname,port:o.port||(n?443:80),path:o.pathname+o.search,method:s,headers:t}}getHttpModule(e){return new he(e).protocol==="https:"?ss:es}handleResponse(e,s,t){de&&console.debug(`HTTP response status: ${e.statusCode}`);let o="";e.on("data",n=>{o+=n}),e.on("end",()=>{e.statusCode>=200&&e.statusCode<300?s({statusCode:e.statusCode,data:o,headers:e.headers}):t(new Error(`HTTP request returned status ${e.statusCode}: ${o}`))})}attachErrorHandlers(e,s,t){e.on("error",o=>{t(new Error(`HTTP POST request failed: ${o.message}`))}),e.on("timeout",()=>{t(new Error(`HTTP POST request timed out for URL: ${s}`)),e.destroy()})}};ge.exports=N});var pe=f((Ns,me)=>{var os=require("crypto"),{URL:ns}=require("url"),V=class{static generateSignature(e,s,t,o){try{let n=new ns(e),r=Buffer.from(n.pathname),a=Buffer.from(r),i=s?typeof s=="string"?Buffer.from(s):Buffer.from(JSON.stringify(s)):Buffer.alloc(0),c=Buffer.concat([a,i,Buffer.from(o)]),l=os.createHmac("sha256",t);return l.update(c),l.digest("hex")}catch(n){throw new Error(`Failed to generate signature: ${n.message}`)}}static validateSignature(e,s,t,o,n){return this.generateSignature(e,s,t,o)===n}static generateTimestamp(){return Date.now().toString()}};me.exports=V});var ye=f((Vs,Se)=>{var rs=pe(),G=class{constructor(e={}){this.accessKey=null,this.secretKey=null,this.validateCredentials=e.validateCredentials!==!1}setCredentials(e,s){if(this.validateCredentials&&(!e||!s))throw new Error("Both access key and secret key are required");this.accessKey=e,this.secretKey=s}hasCredentials(){return!!(this.accessKey&&this.secretKey)}generateAuthHeaders(e,s=null){if(!this.hasCredentials())return{};try{return{AUTHORIZATION:`Bearer ${this.accessKey}.${this.secretKey}`}}catch(t){throw new Error(`Failed to generate auth headers: ${t.message}`)}}validateAuthHeaders(e,s,t,o){if(!this.hasCredentials())throw new Error("No credentials available for validation");return rs.validateSignature(e,s,this.secretKey,t,o)}clearCredentials(){this.accessKey=null,this.secretKey=null}getCredentials(){return{accessKey:this.accessKey,hasCredentials:this.hasCredentials()}}};Se.exports=G});var Ce=f((Gs,we)=>{var _=process.env.CODEV_DEBUG==="True",R=class{constructor(e={}){this.currentSessionId=null,this.previousSessionId=null,this.onSessionSwitch=e.onSessionSwitch||null,this.terminateSignal=e.terminateSignal||"CODEV_TERMINATE_SIGNAL"}handleSessionSwitch(e){if(!e)return _&&console.warn("Received empty session ID"),!1;let s=this.previousSessionId!==null&&this.previousSessionId!==e;return s&&(_&&console.log(`Session switch detected: ${this.previousSessionId} -> ${e}`),this.onSessionSwitch&&this.onSessionSwitch({type:this.terminateSignal,reason:"User switch session",agent:"claude",previousSessionId:this.previousSessionId,newSessionId:e})),this.previousSessionId=this.currentSessionId,this.currentSessionId=e,s}getCurrentSessionId(){return this.currentSessionId}getPreviousSessionId(){return this.previousSessionId}hasActiveSession(){return!!this.currentSessionId}terminateCurrentSession(e="Session terminated",s=null,t=null){if(!this.hasActiveSession())return _&&console.log("No active session to terminate"),null;let o={type:this.terminateSignal,reason:t?`terminated by signal: ${t}`:e,code:s,signal:t,timestamp:Date.now(),agent:"claude",sessionId:this.currentSessionId};return _&&console.log("Terminating session:",o),this.previousSessionId=null,this.currentSessionId=null,o}createErrorTermination(e){return this.hasActiveSession()?{type:this.terminateSignal,error:e.message,stack:e.stack,timestamp:Date.now(),agent:"claude",sessionId:this.currentSessionId}:null}reset(){_&&console.log("Resetting session manager"),this.currentSessionId=null,this.previousSessionId=null}setSessionSwitchCallback(e){this.onSessionSwitch=e}getSessionInfo(){return{currentSessionId:this.currentSessionId,previousSessionId:this.previousSessionId,hasActiveSession:this.hasActiveSession()}}};we.exports=R});var ve=f((Rs,Ee)=>{var v=require("fs"),b=require("path"),is=require("events"),as=require("crypto"),p=process.env.CODEV_DEBUG==="True",L=class extends is{constructor(e={}){super(),this.watchPaths=e.watchPaths||[],this.excludePatterns=e.excludePatterns||[/node_modules/,/\.git/,/\.DS_Store/,/\.tmp/,/\.log$/,/\.swp$/,/codev\.log/],this.includePatterns=e.includePatterns||[/\.(js|jsx|ts|tsx|py|java|c|cpp|h|hpp|go|rs|rb|php|html|css|scss|sass|less|json|xml|yaml|yml|md|txt)$/],this.watchers=new Map,this.isWatching=!1,this.debounceTimeout=e.debounceTimeout||300,this.pendingChanges=new Map,this.fileContentHashes=new Map,this.enableContentComparison=e.enableContentComparison!==!1,this.onFileChange=e.onFileChange||null}calculateFileHash(e){try{let s=v.readFileSync(e,"utf8");return as.createHash("sha256").update(s).digest("hex")}catch{return null}}hasContentChanged(e){if(!this.enableContentComparison)return!0;let s=this.calculateFileHash(e),t=this.fileContentHashes.get(e);return s===null?t!==void 0?(this.fileContentHashes.delete(e),!0):!1:t===void 0||s!==t?(this.fileContentHashes.set(e,s),!0):!1}preloadFileHashes(e){if(!(!this.enableContentComparison||!v.existsSync(e)))try{let s=v.readdirSync(e,{withFileTypes:!0});for(let t of s){let o=b.join(e,t.name);t.isFile()&&this.shouldWatchFile(o)?(this.calculateFileHash(o),this.fileContentHashes.set(o,this.calculateFileHash(o))):t.isDirectory()&&!this.shouldExcludeDirectory(o)&&this.preloadFileHashes(o)}}catch(s){p&&console.warn(`Failed to preload hashes for ${e}:`,s.message)}}shouldExcludeDirectory(e){let s=e.replace(/\\/g,"/");for(let t of this.excludePatterns)if(t.test(s)||t.test(b.basename(e)))return!0;return!1}startWatching(e=null){if(this.isWatching){p&&console.log("FileWatchService is already watching");return}let s=e||this.watchPaths;if(s.length===0){p&&console.log("No watch paths specified");return}this.isWatching=!0;for(let t of s)this.enableContentComparison&&this.preloadFileHashes(t),this.watchDirectory(t);p&&(console.log(`FileWatchService started watching ${s.length} paths`),this.enableContentComparison&&console.log(`Preloaded hashes for ${this.fileContentHashes.size} files`))}stopWatching(){if(this.isWatching){this.isWatching=!1;for(let[e,s]of this.watchers)try{s.close(),p&&console.log(`Stopped watching: ${e}`)}catch(t){p&&console.error(`Error stopping watcher for ${e}:`,t.message)}this.watchers.clear(),this.pendingChanges.clear(),this.fileContentHashes.clear(),p&&console.log("FileWatchService stopped watching all paths")}}watchDirectory(e){if(!v.existsSync(e)){p&&console.warn(`Watch path does not exist: ${e}`);return}if(!v.statSync(e).isDirectory()){p&&console.warn(`Watch path is not a directory: ${e}`);return}try{let t=v.watch(e,{recursive:!0,persistent:!1},(o,n)=>{if(!n)return;let r=b.join(e,n);this.handleFileChange(o,r,e)});this.watchers.set(e,t),p&&console.log(`Started watching directory: ${e}`),t.on("error",o=>{p&&console.error(`Watcher error for ${e}:`,o.message),this.watchers.delete(e)})}catch(t){p&&console.error(`Failed to start watching ${e}:`,t.message)}}handleFileChange(e,s,t){if(!this.shouldWatchFile(s))return;let o=`${e}:${s}`;this.pendingChanges.has(o)&&clearTimeout(this.pendingChanges.get(o)),this.pendingChanges.set(o,setTimeout(()=>{this.pendingChanges.delete(o),this.processFileChange(e,s,t)},this.debounceTimeout))}processFileChange(e,s,t){if(!this.isWatching)return;let o="modified",n=!1;try{v.statSync(s),n=!0,e==="rename"?o="created":e==="change"&&(o="modified")}catch{e==="rename"&&(o="deleted")}if(n&&(o==="modified"||o==="created")&&!this.hasContentChanged(s)){p&&console.log(`Ignoring false change for: ${b.relative(t,s)}`);return}!n&&o==="deleted"&&this.fileContentHashes.delete(s);let r={type:"CODEV_FILE_CHANGE_DETECTTED",data:{eventType:e,changeType:o,filePath:s,relativePath:b.relative(t,s),watchPath:t,fileExists:n,timestamp:Date.now(),sessionId:process.env.SESSION_ID||"default"}};if(p&&console.log(`File ${o}: ${r.data.relativePath}`),this.emit("fileChange",r),this.onFileChange&&typeof this.onFileChange=="function")try{this.onFileChange(r)}catch(a){p&&console.error("Error in file change callback:",a.message)}}shouldWatchFile(e){let s=b.basename(e),t=e.replace(/\\/g,"/");for(let o of this.excludePatterns)if(o.test(t)||o.test(s))return!1;if(this.includePatterns.length===0)return!0;for(let o of this.includePatterns)if(o.test(t)||o.test(s))return!0;return!1}addWatchPath(e){this.watchPaths.includes(e)||(this.watchPaths.push(e),this.isWatching&&this.watchDirectory(e))}removeWatchPath(e){let s=this.watchPaths.indexOf(e);if(s>-1&&(this.watchPaths.splice(s,1),this.watchers.has(e)))try{this.watchers.get(e).close(),this.watchers.delete(e),p&&console.log(`Removed watch path: ${e}`)}catch(t){p&&console.error(`Error removing watch path ${e}:`,t.message)}}getStatus(){return{isWatching:this.isWatching,watchPaths:[...this.watchPaths],activeWatchers:this.watchers.size,pendingChanges:this.pendingChanges.size}}setFileChangeCallback(e){this.onFileChange=e}};Ee.exports=L});var be=f((Ks,xe)=>{var cs=$(),ls=require("path"),Ls=require("fs"),Hs=require("os"),us=ue(),hs=fe(),ds=ye(),gs=Ce(),fs=ve(),m=process.env.CODEV_DEBUG==="True",H=class extends cs{constructor(){super({configDir:".",configFile:".claude.json",defaultModel:"Claude Sonnet 4.5",executablePaths:["cc.mjs","/tmp/claude-code/package/cc.mjs"],environmentVariables:e=>({ANTHROPIC_BASE_URL:`${e}/claude`,ANTHROPIC_API_KEY:"codev",DISABLE_TELEMETRY:!0,CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:!0,DISABLE_COST_WARNINGS:!0,DISABLE_NON_ESSENTIAL_MODEL_CALLS:!0,CODEV_SERVER:e,CLAUDE_CODE_ATTRIBUTION_HEADER:"0"}),defaultConfig:{numStartups:1,installMethod:"unknown",autoUpdates:!1,theme:"Coder Dark",customApiKeyResponses:{approved:["codev"]},shiftEnterKeyBindingInstalled:!0,hasCompletedOnboarding:!0,subscriptionNoticeCount:0,hasAvailableSubscription:!0,projects:{}}}),this.fileWatchService=null,this.shutdownInProgress=!1,this.initializeServices()}initializeServices(){this.httpClient=new hs({timeout:1e4}),this.authService=new ds({validateCredentials:!1}),this.sessionManager=new gs({onSessionSwitch:e=>{this.sendTerminationMessage(e)}}),this.messageQueue=new us({maxRetries:2,retryDelay:500,shutdownTimeout:3e3,onProcessMessage:e=>this.processMessage(e)}),this.initializeFileWatchService()}resloveSettingFilePath(e){return ls.join(e,this.config.configDir,".claude","settings.json")}initializeFileWatchService(){if(!process.env.SESSION_ID){m&&console.log("FileWatchService disabled: SESSION_ID environment variable not found");return}try{this.fileWatchService=new fs({watchPaths:this.getFileWatchPaths(),onFileChange:e=>this.handleFileChange(e),debounceTimeout:300}),m&&console.log("FileWatchService initialized with SESSION_ID:",process.env.SESSION_ID)}catch(e){m&&console.error("Failed to initialize FileWatchService:",e.message)}}getFileWatchPaths(){let e=[],s=process.cwd();e.push(s);let t=process.env.CODEV_WATCH_PATHS;if(t){let o=t.split(",").map(n=>n.trim());e.push(...o)}return e}handleFileChange(e){if(m&&console.log("File change detected:",e.data.relativePath),this.shutdownInProgress)return;let s={message:e,sessionId:e.data.sessionId||process.env.SESSION_ID};this.messageQueue.enqueue(s)}startFileWatching(){this.fileWatchService&&!this.fileWatchService.isWatching&&(this.fileWatchService.startWatching(),m&&console.log("File watching started"))}stopFileWatching(){this.fileWatchService&&this.fileWatchService.isWatching&&(this.fileWatchService.stopWatching(),m&&console.log("File watching stopped"))}onChildMessage(e){e&&e.type==="claude:send-msg"&&this.handleClaudeSendMessage(e.data),super.onChildMessage(e)}handleClaudeSendMessage(e){if(m&&console.log("Handling claude:send-msg message:",e),!e||typeof e!="object"){console.error(`handleClaudeSendMessage: Invalid message data. Expected object, got: ${typeof e}`);return}if(this.shutdownInProgress){m&&console.log("Shutdown in progress, ignoring new message");return}let s=e.sessionId||process.env.SESSION_ID;this.sessionManager.handleSessionSwitch(s),this.messageQueue.enqueue(e)}async processMessage(e){let s=e.data.message,t=e.data.sessionId||process.env.SESSION_ID;if(!t)throw new Error("No session ID available");let o;try{o=typeof s=="string"?JSON.parse(s):s}catch(a){throw new Error(`Failed to parse message data: ${a.message}`)}let n=`/conversations/${t}/@append?task_type=codev`,r=this.authService.hasCredentials()?this.authService.generateAuthHeaders(`${this.httpClient.baseUrl}${n}`,o):{};m&&(console.debug("Sending message to:",n),console.debug("Send Message: ",JSON.stringify(o))),e.type!=="CODEV_TERMINATE_SIGNAL"&&(this.sessionManager.currentSessionId=t)}sendTerminationMessage(e){let s={message:e,sessionId:e.sessionId||this.sessionManager.getCurrentSessionId()};this.messageQueue.enqueue(s)}async handleChildProcessExit(e,s){m&&console.log(`Child process exited with code: ${e}, signal: ${s}`),this.stopFileWatching();let t=this.messageQueue.getQueueSize(),o=this.sessionManager.terminateCurrentSession("process exited normally",e,s);if(o&&this.sendTerminationMessage(o),t>0||o){m&&console.log("Starting graceful shutdown of message queue...");try{let n=!s||s==="SIGTERM",r=this.messageQueue.getQueueSize(),a={timeoutMs:n?8e3:3e3,batchSize:Math.min(r,15),fastMode:!n||r>30};m&&console.log("Shutdown options:",a);let i=await this.messageQueue.gracefulShutdown(a);m&&console.log("Message queue shutdown completed:",i),i.failedMessages>0&&m&&console.warn(`Shutdown summary: ${i.processedMessages} sent, ${i.failedMessages} failed, ${i.remainingMessages} remaining`)}catch(n){m&&console.error("Error during message queue shutdown:",n.message)}}}handleChildProcessError(e){m&&console.error(`Child process error: ${e.message}`);let s=this.sessionManager.createErrorTermination(e);s&&this.sendTerminationMessage(s)}async forceFlushMessages(e=3e3){if(this.messageQueue.getQueueSize()===0)return{success:!0,message:"No messages to flush"};m&&console.log(`Force flushing ${this.messageQueue.getQueueSize()} messages...`);try{return await this.messageQueue.forceFlushAndShutdown(e)}catch(s){return m&&console.error("Force flush failed:",s.message),{success:!1,error:s.message}}}async launch(e={}){let{codevServer:s,auth_ak:t=null,auth_sk:o=null}=e;return this.httpClient.setBaseUrl(s),t&&o&&this.authService.setCredentials(t,o),this.startFileWatching(),super.launch(e)}};xe.exports=H});var _e=f((js,Ie)=>{var ms=$(),Ws=require("path"),K=class extends ms{constructor(){super({configDir:".gemini",configFile:"settings.json",defaultModel:"gemini-2.5-pro",executablePaths:["gemini/gemini.js","../dist/gemini/gemini.js"],environmentVariables:e=>({GOOGLE_GEMINI_BASE_URL:`${e}/gemini`,GEMINI_API_KEY:"coder",GOOGLE_API_KEY:"coder",GOOGLE_CLOUD_PROJECT:"coder",GOOGLE_CLOUD_LOCATION:"coder",DISABLE_TELEMETRY:!0,GEMINI_CODE_DISABLE_NONESSENTIAL_TRAFFIC:!0,DISABLE_COST_WARNINGS:!0,DISABLE_NON_ESSENTIAL_MODEL_CALLS:!0,USE_VERTEX:!0}),defaultConfig:{ide:{hasSeenNudge:!0},telemetry:{enabled:!1,logPrompts:!1},privacy:{usageStatisticsEnabled:!1},general:{disableUpdateNag:!0,preferredEditor:"vscode",previewFeatures:!0},ui:{hideBanner:!0,theme:"Default"},security:{auth:{selectedType:"vertex-ai"}}}})}};Ie.exports=K});var De=f((zs,ke)=>{var ps=$(),k=require("path"),w=require("fs"),Ss=require("os"),{spawn:ys}=require("child_process"),T=process.env.CODEV_DEBUG==="True",W=class extends ps{constructor(){super({configDir:".codex",configFile:"config.toml",defaultModel:"o4-mini",executablePaths:["codex.mjs","../dist/codex.mjs"],environmentVariables:e=>({OPENAI_BASE_URL:`${e}/codex`,OPENAI_API_KEY:"codev-proxy-key",DEBUG:T?"true":"false",CODEX_QUIET_MODE:"0",OPENAI_DISABLE_TELEMETRY:"true",CODEX_DISABLE_PROJECT_DOC:"0",CODEV_SERVER:e}),defaultConfig:{model:"gpt-5-codex",approvalMode:"suggest",fullAutoErrorMode:"ask-user",notify:[],history:{maxSize:1e3,saveHistory:!0,sensitivePatterns:[],persistence:"save-all"}}})}checkCodexAvailability(){try{let e=this.findExecutablePath();return w.existsSync(e)}catch{return!1}}resloveSettingFilePath(e){return k.join(e,this.config.configDir,"config.toml")}async ensureConfig(e,s=0){let t=k.join(Ss.homedir(),this.config.configDir,this.config.configFile),o=k.dirname(t);try{w.existsSync(o)||w.mkdirSync(o,{recursive:!0});let n=`${e}/codex`;if(w.existsSync(t)){let r=w.readFileSync(t,"utf8"),a=`openai_base_url = "${n}"`;/^openai_base_url\s*=/m.test(r)?r=r.replace(/^openai_base_url\s*=.*/m,a):r=r.trimEnd()+`
192
+ Terminating ...`),g.kill("SIGTERM"),setTimeout(()=>{g.killed||g.kill("SIGKILL")},8e3)})})}catch(r){throw r}}};ce.exports=U});var ue=f((qs,le)=>{var d=process.env.CODEV_DEBUG==="True",B=class{constructor(e={}){this.queue=[],this.processing=!1,this.shuttingDown=!1,this.shutdownTimeout=e.shutdownTimeout||5e3,this.maxRetries=e.maxRetries||3,this.retryDelay=e.retryDelay||1e3,this.onProcessMessage=e.onProcessMessage||null,this.shutdownPromise=null,this.currentlyProcessing=null}enqueue(e){if(this.shuttingDown)return d&&console.log("Queue is shutting down, skipping new messages"),null;let s={id:Date.now()+Math.random(),data:e,timestamp:Date.now(),retryCount:0,processing:!1};return this.queue.push(s),d&&console.log(`Message enqueued, queue length: ${this.queue.length}`),this.processQueue(),s.id}dequeue(){let e=this.queue.shift();return d&&e&&console.log(`Message dequeued, remaining queue length: ${this.queue.length}`),e}removeById(e){let s=this.queue.findIndex(t=>t.id===e);return s>-1?(this.queue.splice(s,1),d&&console.log(`Message ${e} removed from queue`),!0):!1}async processQueue(){if(!(this.processing||this.queue.length===0)){this.processing=!0;try{for(;this.queue.length>0&&!this.shuttingDown;){let e=this.queue[0];e.processing=!0;try{this.onProcessMessage&&await this.onProcessMessage(e),this.dequeue()}catch(s){if(d&&console.error(`Failed to process message: ${s.message}`),e.retryCount++,d&&console.log("Start Retry:",e.retryCount,"times..."),e.retryCount>=this.maxRetries)d&&console.error("Message exceeded max retries, removing from queue"),this.dequeue();else{e.processing=!1;let t=this.shuttingDown?100:this.retryDelay*e.retryCount;await new Promise(o=>setTimeout(o,t))}}}}finally{this.processing=!1}}}getQueueSize(){return this.queue.length}clear(){this.queue=[],d&&console.log("Message queue cleared")}setMessageProcessor(e){this.onProcessMessage=e}async waitForProcessingMessages(e=5e3){let s=this.queue.filter(o=>o.processing);if(s.length===0)return;d&&console.log(`Waiting for ${s.length} processing messages to complete (timeout: ${e}ms)`);let t=Date.now();for(;Date.now()-t<e;){if(this.queue.filter(n=>n.processing).length===0){d&&console.log(`All processing messages completed in ${Date.now()-t}ms`);return}await new Promise(n=>setTimeout(n,50))}if(d){let o=this.queue.filter(n=>n.processing);console.log(`Timeout waiting for processing messages. ${o.length} messages still processing`)}}async gracefulShutdown(e={}){if(this.shutdownPromise)return this.shutdownPromise;let{timeoutMs:s=this.shutdownTimeout,batchSize:t=10,fastMode:o=!1}=e;return this.shutdownPromise=new Promise(async n=>{this.shuttingDown=!0,await this.waitForProcessingMessages(Math.min(s*.3,3e3));let r=this.queue.filter(S=>!S.processing),a=r.length;d&&(console.log(`Starting graceful shutdown with ${a} pending messages (${this.queue.length-a} already processing)`),console.log(`Mode: ${o?"fast (parallel)":"sequential"}, timeout: ${s}ms`));let i=Date.now(),c=0,l=0;try{if(o){let S=await this.processAllParallel(s-(Date.now()-i),r);c=S.processed,l=S.failed}else{let S=await this.processInBatches(t,s-(Date.now()-i),r);c=S.processed,l=S.failed}}catch(S){d&&console.error("Error during shutdown processing:",S.message)}let h=Date.now()-i,g=this.queue.length;d&&(console.log(`Shutdown completed in ${h}ms:`),console.log(` - Total: ${a} messages`),console.log(` - Processed: ${c}`),console.log(` - Failed: ${l}`),console.log(` - Remaining: ${g}`)),n({totalMessages:a,processedMessages:c,failedMessages:l,remainingMessages:g,duration:h,allMessagesSent:g===0&&l===0})}),this.shutdownPromise}async processAllParallel(e){if(this.queue.length===0)return{processed:0,failed:0};d&&console.log(`Processing ${this.queue.length} messages in parallel...`);let s=[...this.queue];this.queue=[];let t=s.map(async i=>{try{return this.onProcessMessage&&await this.onProcessMessage(i),{success:!0,messageId:i.id}}catch(c){return d&&console.warn(`Message ${i.id} processing failed: ${c.message}`),{success:!1,messageId:i.id,error:c}}}),o=new Promise(i=>{setTimeout(()=>i({timedOut:!0}),e)}),n=await Promise.race([Promise.allSettled(t).then(i=>({results:i})),o]);if(n.timedOut)return d&&console.log(`Parallel processing timed out after ${e}ms`),{processed:0,failed:s.length};let r=n.results.filter(i=>i.status==="fulfilled"&&i.value?.success).length,a=s.length-r;return{processed:r,failed:a}}async processInBatches(e,s){if(this.queue.length===0)return{processed:0,failed:0};d&&console.log(`Processing ${this.queue.length} messages in batches of ${e}...`);let t=Date.now(),o=0,n=0;for(;this.queue.length>0&&Date.now()-t<s;){let r=this.queue.splice(0,e),a=r.map(async h=>{try{return this.onProcessMessage&&await this.onProcessMessage(h),{success:!0}}catch(g){return d&&console.warn(`Batch message processing failed: ${g.message}`),{success:!1,error:g}}}),c=(await Promise.allSettled(a)).filter(h=>h.status==="fulfilled"&&h.value?.success).length,l=r.length-c;o+=c,n+=l,d&&r.length>0&&console.log(`Batch completed: ${c}/${r.length} successful`),this.queue.length>0&&await new Promise(h=>setTimeout(h,10))}return this.queue.length>0&&(n+=this.queue.length,d&&console.log(`${this.queue.length} messages not processed due to timeout`),this.queue=[]),{processed:o,failed:n}}async forceFlushAndShutdown(e=2e3){this.shuttingDown=!0,await this.waitForProcessingMessages(Math.min(e*.4,1e3));let s=this.queue.filter(i=>!i.processing);d&&console.log(`Force flush: attempting to send ${s.length} pending messages within ${e}ms (${this.queue.length-s.length} already processing)`);let t=Date.now(),o=s.map(async i=>{try{return this.onProcessMessage&&Date.now()-t<e?(await this.onProcessMessage(i),{success:!0,messageId:i.id}):{success:!1,messageId:i.id,reason:"timeout"}}catch(c){return{success:!1,messageId:i.id,error:c.message}}}),n=e-(Date.now()-t),r=new Promise(i=>{setTimeout(()=>i({timedOut:!0}),Math.max(100,n))}),a=await Promise.race([Promise.allSettled(o).then(i=>({results:i})),r]);if(s.forEach(i=>{let c=this.queue.findIndex(l=>l.id===i.id);c>-1&&this.queue.splice(c,1)}),this.processing=!1,a.timedOut)return d&&console.log(`Force flush timed out after ${e}ms`),{success:!1,reason:"timeout",attemptedCount:s.length};{let i=a.results.filter(c=>c.status==="fulfilled"&&c.value.success).length;return d&&console.log(`Force flush completed: ${i}/${s.length} messages sent`),{success:i===s.length,successCount:i,totalCount:s.length,results:a.results}}}forceShutdown(){this.shuttingDown=!0,this.queue=[],this.processing=!1,d&&console.log("Force shutdown: Queue cleared")}};le.exports=B});var A=f((Us,Xe)=>{Xe.exports={name:"makecoder",version:"2.0.77",description:"MakeCoder: Unified AI agent CLI tool integrating Claude Code, Codex and Gemini CLI",main:"./dist/coder.js",bin:{coder:"./dist/coder.js"},scripts:{test:'echo "Error: no test specified" && exit 1',start:"node ./src/coder.js",build:"node scripts/build.js","build:clean":"node scripts/build.js --clean","build:dev":"node scripts/build.js --no-minify --sourcemap",postinstall:"node scripts/postinstall.js"},keywords:["cli","ai","claude","gemini","codex","agent"],author:"makecoder",license:"MIT",repository:{type:"git",url:"https://github.com/makecoderai/coder.git"},homepage:"https://github.com/makecoderai/coder",dependencies:{"node-fetch":"^3.3.2",open:"^10.1.0",zod:"^3.25.76"},optionalDependencies:{"makecoder-codex-linux-x64":"*","makecoder-codex-darwin-arm64":"*","makecoder-codex-win32-x64":"*"},engines:{node:">=20.0.0"},devDependencies:{chokidar:"^4.0.3"},files:["dist","claude","scripts/postinstall.js"]}});var fe=f((Bs,ge)=>{var es=require("http"),ss=require("https"),{URL:he}=require("url"),{version:ts}=A(),de=process.env.CODEV_DEBUG==="True",N=class{constructor(e={}){this.baseUrl=e.baseUrl||"",this.timeout=e.timeout||3e4,this.defaultHeaders={"Content-Type":"application/json","User-Agent":`codev-cli/${ts}`,...e.headers}}setBaseUrl(e){this.baseUrl=e}setDefaultHeaders(e){this.defaultHeaders={...this.defaultHeaders,...e}}async post(e,s,t={}){let o=this.resolveUrl(e),n={...this.defaultHeaders,...t.headers};return new Promise((r,a)=>{this.validateRequest(o,s,a);let i=this.serializeData(s,a);if(!i)return;n["Content-Length"]=Buffer.byteLength(i);let c=this.buildRequestOptions(o,"POST",n),l=this.getHttpModule(o);de&&console.debug(`HTTP POST to ${o} with data length: ${i.length}`);let h=l.request(c,g=>{this.handleResponse(g,r,a)});this.attachErrorHandlers(h,o,a),h.setTimeout(this.timeout),h.write(i),h.end()})}resolveUrl(e){return e.startsWith("http")?e:`${this.baseUrl}${e.startsWith("/")?"":"/"}${e}`}validateRequest(e,s,t){return!e||typeof e!="string"?(t(new Error(`Invalid URL: ${e}`)),!1):s?!0:(t(new Error("No data provided for HTTP POST")),!1)}serializeData(e,s){try{return typeof e=="string"?e:JSON.stringify(e)}catch(t){return s(new Error(`Failed to serialize data: ${t.message}`)),null}}buildRequestOptions(e,s,t){let o=new he(e),n=o.protocol==="https:";return{hostname:o.hostname,port:o.port||(n?443:80),path:o.pathname+o.search,method:s,headers:t}}getHttpModule(e){return new he(e).protocol==="https:"?ss:es}handleResponse(e,s,t){de&&console.debug(`HTTP response status: ${e.statusCode}`);let o="";e.on("data",n=>{o+=n}),e.on("end",()=>{e.statusCode>=200&&e.statusCode<300?s({statusCode:e.statusCode,data:o,headers:e.headers}):t(new Error(`HTTP request returned status ${e.statusCode}: ${o}`))})}attachErrorHandlers(e,s,t){e.on("error",o=>{t(new Error(`HTTP POST request failed: ${o.message}`))}),e.on("timeout",()=>{t(new Error(`HTTP POST request timed out for URL: ${s}`)),e.destroy()})}};ge.exports=N});var pe=f((Ns,me)=>{var os=require("crypto"),{URL:ns}=require("url"),V=class{static generateSignature(e,s,t,o){try{let n=new ns(e),r=Buffer.from(n.pathname),a=Buffer.from(r),i=s?typeof s=="string"?Buffer.from(s):Buffer.from(JSON.stringify(s)):Buffer.alloc(0),c=Buffer.concat([a,i,Buffer.from(o)]),l=os.createHmac("sha256",t);return l.update(c),l.digest("hex")}catch(n){throw new Error(`Failed to generate signature: ${n.message}`)}}static validateSignature(e,s,t,o,n){return this.generateSignature(e,s,t,o)===n}static generateTimestamp(){return Date.now().toString()}};me.exports=V});var ye=f((Vs,Se)=>{var rs=pe(),G=class{constructor(e={}){this.accessKey=null,this.secretKey=null,this.validateCredentials=e.validateCredentials!==!1}setCredentials(e,s){if(this.validateCredentials&&(!e||!s))throw new Error("Both access key and secret key are required");this.accessKey=e,this.secretKey=s}hasCredentials(){return!!(this.accessKey&&this.secretKey)}generateAuthHeaders(e,s=null){if(!this.hasCredentials())return{};try{return{AUTHORIZATION:`Bearer ${this.accessKey}.${this.secretKey}`}}catch(t){throw new Error(`Failed to generate auth headers: ${t.message}`)}}validateAuthHeaders(e,s,t,o){if(!this.hasCredentials())throw new Error("No credentials available for validation");return rs.validateSignature(e,s,this.secretKey,t,o)}clearCredentials(){this.accessKey=null,this.secretKey=null}getCredentials(){return{accessKey:this.accessKey,hasCredentials:this.hasCredentials()}}};Se.exports=G});var Ce=f((Gs,we)=>{var _=process.env.CODEV_DEBUG==="True",R=class{constructor(e={}){this.currentSessionId=null,this.previousSessionId=null,this.onSessionSwitch=e.onSessionSwitch||null,this.terminateSignal=e.terminateSignal||"CODEV_TERMINATE_SIGNAL"}handleSessionSwitch(e){if(!e)return _&&console.warn("Received empty session ID"),!1;let s=this.previousSessionId!==null&&this.previousSessionId!==e;return s&&(_&&console.log(`Session switch detected: ${this.previousSessionId} -> ${e}`),this.onSessionSwitch&&this.onSessionSwitch({type:this.terminateSignal,reason:"User switch session",agent:"claude",previousSessionId:this.previousSessionId,newSessionId:e})),this.previousSessionId=this.currentSessionId,this.currentSessionId=e,s}getCurrentSessionId(){return this.currentSessionId}getPreviousSessionId(){return this.previousSessionId}hasActiveSession(){return!!this.currentSessionId}terminateCurrentSession(e="Session terminated",s=null,t=null){if(!this.hasActiveSession())return _&&console.log("No active session to terminate"),null;let o={type:this.terminateSignal,reason:t?`terminated by signal: ${t}`:e,code:s,signal:t,timestamp:Date.now(),agent:"claude",sessionId:this.currentSessionId};return _&&console.log("Terminating session:",o),this.previousSessionId=null,this.currentSessionId=null,o}createErrorTermination(e){return this.hasActiveSession()?{type:this.terminateSignal,error:e.message,stack:e.stack,timestamp:Date.now(),agent:"claude",sessionId:this.currentSessionId}:null}reset(){_&&console.log("Resetting session manager"),this.currentSessionId=null,this.previousSessionId=null}setSessionSwitchCallback(e){this.onSessionSwitch=e}getSessionInfo(){return{currentSessionId:this.currentSessionId,previousSessionId:this.previousSessionId,hasActiveSession:this.hasActiveSession()}}};we.exports=R});var ve=f((Rs,Ee)=>{var v=require("fs"),b=require("path"),is=require("events"),as=require("crypto"),p=process.env.CODEV_DEBUG==="True",L=class extends is{constructor(e={}){super(),this.watchPaths=e.watchPaths||[],this.excludePatterns=e.excludePatterns||[/node_modules/,/\.git/,/\.DS_Store/,/\.tmp/,/\.log$/,/\.swp$/,/codev\.log/],this.includePatterns=e.includePatterns||[/\.(js|jsx|ts|tsx|py|java|c|cpp|h|hpp|go|rs|rb|php|html|css|scss|sass|less|json|xml|yaml|yml|md|txt)$/],this.watchers=new Map,this.isWatching=!1,this.debounceTimeout=e.debounceTimeout||300,this.pendingChanges=new Map,this.fileContentHashes=new Map,this.enableContentComparison=e.enableContentComparison!==!1,this.onFileChange=e.onFileChange||null}calculateFileHash(e){try{let s=v.readFileSync(e,"utf8");return as.createHash("sha256").update(s).digest("hex")}catch{return null}}hasContentChanged(e){if(!this.enableContentComparison)return!0;let s=this.calculateFileHash(e),t=this.fileContentHashes.get(e);return s===null?t!==void 0?(this.fileContentHashes.delete(e),!0):!1:t===void 0||s!==t?(this.fileContentHashes.set(e,s),!0):!1}preloadFileHashes(e){if(!(!this.enableContentComparison||!v.existsSync(e)))try{let s=v.readdirSync(e,{withFileTypes:!0});for(let t of s){let o=b.join(e,t.name);t.isFile()&&this.shouldWatchFile(o)?(this.calculateFileHash(o),this.fileContentHashes.set(o,this.calculateFileHash(o))):t.isDirectory()&&!this.shouldExcludeDirectory(o)&&this.preloadFileHashes(o)}}catch(s){p&&console.warn(`Failed to preload hashes for ${e}:`,s.message)}}shouldExcludeDirectory(e){let s=e.replace(/\\/g,"/");for(let t of this.excludePatterns)if(t.test(s)||t.test(b.basename(e)))return!0;return!1}startWatching(e=null){if(this.isWatching){p&&console.log("FileWatchService is already watching");return}let s=e||this.watchPaths;if(s.length===0){p&&console.log("No watch paths specified");return}this.isWatching=!0;for(let t of s)this.enableContentComparison&&this.preloadFileHashes(t),this.watchDirectory(t);p&&(console.log(`FileWatchService started watching ${s.length} paths`),this.enableContentComparison&&console.log(`Preloaded hashes for ${this.fileContentHashes.size} files`))}stopWatching(){if(this.isWatching){this.isWatching=!1;for(let[e,s]of this.watchers)try{s.close(),p&&console.log(`Stopped watching: ${e}`)}catch(t){p&&console.error(`Error stopping watcher for ${e}:`,t.message)}this.watchers.clear(),this.pendingChanges.clear(),this.fileContentHashes.clear(),p&&console.log("FileWatchService stopped watching all paths")}}watchDirectory(e){if(!v.existsSync(e)){p&&console.warn(`Watch path does not exist: ${e}`);return}if(!v.statSync(e).isDirectory()){p&&console.warn(`Watch path is not a directory: ${e}`);return}try{let t=v.watch(e,{recursive:!0,persistent:!1},(o,n)=>{if(!n)return;let r=b.join(e,n);this.handleFileChange(o,r,e)});this.watchers.set(e,t),p&&console.log(`Started watching directory: ${e}`),t.on("error",o=>{p&&console.error(`Watcher error for ${e}:`,o.message),this.watchers.delete(e)})}catch(t){p&&console.error(`Failed to start watching ${e}:`,t.message)}}handleFileChange(e,s,t){if(!this.shouldWatchFile(s))return;let o=`${e}:${s}`;this.pendingChanges.has(o)&&clearTimeout(this.pendingChanges.get(o)),this.pendingChanges.set(o,setTimeout(()=>{this.pendingChanges.delete(o),this.processFileChange(e,s,t)},this.debounceTimeout))}processFileChange(e,s,t){if(!this.isWatching)return;let o="modified",n=!1;try{v.statSync(s),n=!0,e==="rename"?o="created":e==="change"&&(o="modified")}catch{e==="rename"&&(o="deleted")}if(n&&(o==="modified"||o==="created")&&!this.hasContentChanged(s)){p&&console.log(`Ignoring false change for: ${b.relative(t,s)}`);return}!n&&o==="deleted"&&this.fileContentHashes.delete(s);let r={type:"CODEV_FILE_CHANGE_DETECTTED",data:{eventType:e,changeType:o,filePath:s,relativePath:b.relative(t,s),watchPath:t,fileExists:n,timestamp:Date.now(),sessionId:process.env.SESSION_ID||"default"}};if(p&&console.log(`File ${o}: ${r.data.relativePath}`),this.emit("fileChange",r),this.onFileChange&&typeof this.onFileChange=="function")try{this.onFileChange(r)}catch(a){p&&console.error("Error in file change callback:",a.message)}}shouldWatchFile(e){let s=b.basename(e),t=e.replace(/\\/g,"/");for(let o of this.excludePatterns)if(o.test(t)||o.test(s))return!1;if(this.includePatterns.length===0)return!0;for(let o of this.includePatterns)if(o.test(t)||o.test(s))return!0;return!1}addWatchPath(e){this.watchPaths.includes(e)||(this.watchPaths.push(e),this.isWatching&&this.watchDirectory(e))}removeWatchPath(e){let s=this.watchPaths.indexOf(e);if(s>-1&&(this.watchPaths.splice(s,1),this.watchers.has(e)))try{this.watchers.get(e).close(),this.watchers.delete(e),p&&console.log(`Removed watch path: ${e}`)}catch(t){p&&console.error(`Error removing watch path ${e}:`,t.message)}}getStatus(){return{isWatching:this.isWatching,watchPaths:[...this.watchPaths],activeWatchers:this.watchers.size,pendingChanges:this.pendingChanges.size}}setFileChangeCallback(e){this.onFileChange=e}};Ee.exports=L});var be=f((Ks,xe)=>{var cs=$(),ls=require("path"),Ls=require("fs"),Hs=require("os"),us=ue(),hs=fe(),ds=ye(),gs=Ce(),fs=ve(),m=process.env.CODEV_DEBUG==="True",H=class extends cs{constructor(){super({configDir:".",configFile:".claude.json",defaultModel:"Claude Sonnet 4.5",executablePaths:["cc.mjs","/tmp/claude-code/package/cc.mjs"],environmentVariables:e=>({ANTHROPIC_BASE_URL:`${e}/claude`,ANTHROPIC_API_KEY:"codev",DISABLE_TELEMETRY:!0,CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:!0,DISABLE_COST_WARNINGS:!0,DISABLE_NON_ESSENTIAL_MODEL_CALLS:!0,CODEV_SERVER:e,CLAUDE_CODE_ATTRIBUTION_HEADER:"0"}),defaultConfig:{numStartups:1,installMethod:"unknown",autoUpdates:!1,theme:"Coder Dark",customApiKeyResponses:{approved:["codev"]},shiftEnterKeyBindingInstalled:!0,hasCompletedOnboarding:!0,subscriptionNoticeCount:0,hasAvailableSubscription:!0,projects:{}}}),this.fileWatchService=null,this.shutdownInProgress=!1,this.initializeServices()}initializeServices(){this.httpClient=new hs({timeout:1e4}),this.authService=new ds({validateCredentials:!1}),this.sessionManager=new gs({onSessionSwitch:e=>{this.sendTerminationMessage(e)}}),this.messageQueue=new us({maxRetries:2,retryDelay:500,shutdownTimeout:3e3,onProcessMessage:e=>this.processMessage(e)}),this.initializeFileWatchService()}resloveSettingFilePath(e){return ls.join(e,this.config.configDir,".claude","settings.json")}initializeFileWatchService(){if(!process.env.SESSION_ID){m&&console.log("FileWatchService disabled: SESSION_ID environment variable not found");return}try{this.fileWatchService=new fs({watchPaths:this.getFileWatchPaths(),onFileChange:e=>this.handleFileChange(e),debounceTimeout:300}),m&&console.log("FileWatchService initialized with SESSION_ID:",process.env.SESSION_ID)}catch(e){m&&console.error("Failed to initialize FileWatchService:",e.message)}}getFileWatchPaths(){let e=[],s=process.cwd();e.push(s);let t=process.env.CODEV_WATCH_PATHS;if(t){let o=t.split(",").map(n=>n.trim());e.push(...o)}return e}handleFileChange(e){if(m&&console.log("File change detected:",e.data.relativePath),this.shutdownInProgress)return;let s={message:e,sessionId:e.data.sessionId||process.env.SESSION_ID};this.messageQueue.enqueue(s)}startFileWatching(){this.fileWatchService&&!this.fileWatchService.isWatching&&(this.fileWatchService.startWatching(),m&&console.log("File watching started"))}stopFileWatching(){this.fileWatchService&&this.fileWatchService.isWatching&&(this.fileWatchService.stopWatching(),m&&console.log("File watching stopped"))}onChildMessage(e){e&&e.type==="claude:send-msg"&&this.handleClaudeSendMessage(e.data),super.onChildMessage(e)}handleClaudeSendMessage(e){if(m&&console.log("Handling claude:send-msg message:",e),!e||typeof e!="object"){console.error(`handleClaudeSendMessage: Invalid message data. Expected object, got: ${typeof e}`);return}if(this.shutdownInProgress){m&&console.log("Shutdown in progress, ignoring new message");return}let s=e.sessionId||process.env.SESSION_ID;this.sessionManager.handleSessionSwitch(s),this.messageQueue.enqueue(e)}async processMessage(e){let s=e.data.message,t=e.data.sessionId||process.env.SESSION_ID;if(!t)throw new Error("No session ID available");let o;try{o=typeof s=="string"?JSON.parse(s):s}catch(a){throw new Error(`Failed to parse message data: ${a.message}`)}let n=`/conversations/${t}/@append?task_type=codev`,r=this.authService.hasCredentials()?this.authService.generateAuthHeaders(`${this.httpClient.baseUrl}${n}`,o):{};m&&(console.debug("Sending message to:",n),console.debug("Send Message: ",JSON.stringify(o))),e.type!=="CODEV_TERMINATE_SIGNAL"&&(this.sessionManager.currentSessionId=t)}sendTerminationMessage(e){let s={message:e,sessionId:e.sessionId||this.sessionManager.getCurrentSessionId()};this.messageQueue.enqueue(s)}async handleChildProcessExit(e,s){m&&console.log(`Child process exited with code: ${e}, signal: ${s}`),this.stopFileWatching();let t=this.messageQueue.getQueueSize(),o=this.sessionManager.terminateCurrentSession("process exited normally",e,s);if(o&&this.sendTerminationMessage(o),t>0||o){m&&console.log("Starting graceful shutdown of message queue...");try{let n=!s||s==="SIGTERM",r=this.messageQueue.getQueueSize(),a={timeoutMs:n?8e3:3e3,batchSize:Math.min(r,15),fastMode:!n||r>30};m&&console.log("Shutdown options:",a);let i=await this.messageQueue.gracefulShutdown(a);m&&console.log("Message queue shutdown completed:",i),i.failedMessages>0&&m&&console.warn(`Shutdown summary: ${i.processedMessages} sent, ${i.failedMessages} failed, ${i.remainingMessages} remaining`)}catch(n){m&&console.error("Error during message queue shutdown:",n.message)}}}handleChildProcessError(e){m&&console.error(`Child process error: ${e.message}`);let s=this.sessionManager.createErrorTermination(e);s&&this.sendTerminationMessage(s)}async forceFlushMessages(e=3e3){if(this.messageQueue.getQueueSize()===0)return{success:!0,message:"No messages to flush"};m&&console.log(`Force flushing ${this.messageQueue.getQueueSize()} messages...`);try{return await this.messageQueue.forceFlushAndShutdown(e)}catch(s){return m&&console.error("Force flush failed:",s.message),{success:!1,error:s.message}}}async launch(e={}){let{codevServer:s,auth_ak:t=null,auth_sk:o=null}=e;return this.httpClient.setBaseUrl(s),t&&o&&this.authService.setCredentials(t,o),this.startFileWatching(),super.launch(e)}};xe.exports=H});var _e=f((js,Ie)=>{var ms=$(),Ws=require("path"),K=class extends ms{constructor(){super({configDir:".gemini",configFile:"settings.json",defaultModel:"gemini-2.5-pro",executablePaths:["gemini/gemini.js","../dist/gemini/gemini.js"],environmentVariables:e=>({GOOGLE_GEMINI_BASE_URL:`${e}/gemini`,GEMINI_API_KEY:"coder",GOOGLE_API_KEY:"coder",GOOGLE_CLOUD_PROJECT:"coder",GOOGLE_CLOUD_LOCATION:"coder",DISABLE_TELEMETRY:!0,GEMINI_CODE_DISABLE_NONESSENTIAL_TRAFFIC:!0,DISABLE_COST_WARNINGS:!0,DISABLE_NON_ESSENTIAL_MODEL_CALLS:!0,USE_VERTEX:!0}),defaultConfig:{ide:{hasSeenNudge:!0},telemetry:{enabled:!1,logPrompts:!1},privacy:{usageStatisticsEnabled:!1},general:{disableUpdateNag:!0,preferredEditor:"vscode",previewFeatures:!0},ui:{hideBanner:!0,theme:"Default"},security:{auth:{selectedType:"vertex-ai"}}}})}};Ie.exports=K});var De=f((zs,ke)=>{var ps=$(),k=require("path"),w=require("fs"),Ss=require("os"),{spawn:ys}=require("child_process"),T=process.env.CODEV_DEBUG==="True",W=class extends ps{constructor(){super({configDir:".codex",configFile:"config.toml",defaultModel:"o4-mini",executablePaths:["codex.mjs","../dist/codex.mjs"],environmentVariables:e=>({OPENAI_BASE_URL:`${e}/codex`,OPENAI_API_KEY:"codev-proxy-key",DEBUG:T?"true":"false",CODEX_QUIET_MODE:"0",OPENAI_DISABLE_TELEMETRY:"true",CODEX_DISABLE_PROJECT_DOC:"0",CODEV_SERVER:e}),defaultConfig:{model:"gpt-5-codex",approvalMode:"suggest",fullAutoErrorMode:"ask-user",notify:[],history:{maxSize:1e3,saveHistory:!0,sensitivePatterns:[],persistence:"save-all"}}})}checkCodexAvailability(){try{let e=this.findExecutablePath();return w.existsSync(e)}catch{return!1}}resloveSettingFilePath(e){return k.join(e,this.config.configDir,"config.toml")}async ensureConfig(e,s=0){let t=k.join(Ss.homedir(),this.config.configDir,this.config.configFile),o=k.dirname(t);try{w.existsSync(o)||w.mkdirSync(o,{recursive:!0});let n=`${e}/codex`;if(w.existsSync(t)){let r=w.readFileSync(t,"utf8"),a=`openai_base_url = "${n}"`;/^openai_base_url\s*=/m.test(r)?r=r.replace(/^openai_base_url\s*=.*/m,a):r=r.trimEnd()+`
193
193
  `+a+`
194
194
  `,w.writeFileSync(t,r),T&&console.log(`Updated openai_base_url in ${t}`)}else{let r=this.config.defaultConfig||{},a=this.generateTOMLConfig(r,n);w.writeFileSync(t,a),T&&console.log(`Created Codex config file: ${t}`)}s>0&&await new Promise(r=>setTimeout(r,s))}catch(n){console.warn(`Failed to update ${this.config.configFile}: ${n.message}`)}}generateTOMLConfig(e,s){return`model = "${e.model||"gpt-5-codex"}"
195
195
  openai_base_url = "${s}"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makecoder",
3
- "version": "2.0.75",
3
+ "version": "2.0.77",
4
4
  "description": "MakeCoder: Unified AI agent CLI tool integrating Claude Code, Codex and Gemini CLI",
5
5
  "main": "./dist/coder.js",
6
6
  "bin": {
@@ -35,9 +35,9 @@
35
35
  "zod": "^3.25.76"
36
36
  },
37
37
  "optionalDependencies": {
38
- "makecoder-codex-darwin-arm64": "2.0.75",
39
- "makecoder-codex-linux-x64": "2.0.75",
40
- "makecoder-codex-win32-x64": "2.0.75"
38
+ "makecoder-codex-darwin-arm64": "2.0.77",
39
+ "makecoder-codex-linux-x64": "2.0.77",
40
+ "makecoder-codex-win32-x64": "2.0.77"
41
41
  },
42
42
  "engines": {
43
43
  "node": ">=20.0.0"
@@ -1,137 +0,0 @@
1
- # 飞书渠道接入
2
-
3
- 接入飞书(Feishu/Lark)企业自建应用,完成机器人配置。
4
-
5
- ---
6
-
7
- ## 常见踩坑
8
-
9
- ### 事件订阅保存失败
10
-
11
- **现象**:在飞书开放平台配置「长连接」事件订阅时保存失败。
12
-
13
- **原因**:「长连接」模式要求 OpenClaw 网关已启动且已添加 Feishu 渠道。
14
-
15
- **解决方案**:确保先完成 Step 5(插件安装 + 网关重启),再回来配置事件订阅。
16
-
17
- ---
18
-
19
- ## 飞书权限列表
20
-
21
- 在 Step 4 权限管理「批量导入」时使用以下 JSON:
22
-
23
- ```json
24
- {
25
- "scopes": {
26
- "tenant": [
27
- "aily:file:read",
28
- "aily:file:write",
29
- "application:application.app_message_stats.overview:readonly",
30
- "application:application:self_manage",
31
- "application:bot.menu:write",
32
- "cardkit:card:write",
33
- "contact:user.employee_id:readonly",
34
- "corehr:file:download",
35
- "docs:document.content:read",
36
- "event:ip_list",
37
- "im:chat",
38
- "im:chat.access_event.bot_p2p_chat:read",
39
- "im:chat.members:bot_access",
40
- "im:message",
41
- "im:message.group_at_msg:readonly",
42
- "im:message.group_msg",
43
- "im:message.p2p_msg:readonly",
44
- "im:message:readonly",
45
- "im:message:send_as_bot",
46
- "im:resource",
47
- "sheets:spreadsheet",
48
- "wiki:wiki:readonly"
49
- ],
50
- "user": [
51
- "aily:file:read",
52
- "aily:file:write",
53
- "im:chat.access_event.bot_p2p_chat:read"
54
- ]
55
- }
56
- }
57
- ```
58
-
59
- ---
60
-
61
- ## Step 4:创建飞书应用
62
-
63
- > 若用户明确指定使用已有应用,跳过创建,直接让用户提供凭据进入 Step 5。
64
-
65
- 请用户按以下步骤在飞书开放平台手动完成应用创建:
66
-
67
- 1. 打开 [飞书开放平台](https://open.feishu.cn/app?lang=zh-CN),登录后点击「创建企业自建应用」
68
- 2. 填写应用名称 `OpenClaw`、描述 `OpenClaw`,随机选择图标,完成创建
69
- 3. 在「凭证与基础信息」页面找到并复制 **App ID**(格式 `cli_xxx`)和 **App Secret**
70
- 4. 在「应用能力 > 添加应用能力」页面添加机器人能力
71
- 5. 在「开发配置 > 权限管理」页面点击「批量导入」,粘贴上方「飞书权限列表」中的 JSON 并确认
72
-
73
- 完成后,请将 **App ID** 和 **App Secret** 粘贴给我。
74
-
75
- **等待用户提供 App ID 和 App Secret,收到后继续执行 Step 5。**
76
-
77
- ---
78
-
79
- ## Step 5:安装插件,写入飞书凭据,重启网关
80
-
81
- 首先执行插件安装(如插件已存在则执行 update):
82
-
83
- ```bash
84
- openclaw plugins install @openclaw/feishu
85
- # 若插件已存在:
86
- # openclaw plugins update @openclaw/feishu
87
- ```
88
-
89
- 安装完成后,使用 Read + Edit/Write 工具修改 `~/.openclaw/openclaw.json`,填写 `channels.feishu`:
90
-
91
- ```json
92
- "channels": {
93
- "feishu": {
94
- "appId": "<APP_ID>",
95
- "appSecret": "<APP_SECRET>",
96
- "enabled": true,
97
- "requireMention": true,
98
- "allowFrom": [],
99
- "chunkMode": "length",
100
- "connectionMode": "websocket",
101
- "dmPolicy": "pairing",
102
- "domain": "feishu",
103
- "groupPolicy": "open"
104
- }
105
- }
106
- ```
107
-
108
- 写入完成后重启网关:
109
-
110
- ```bash
111
- openclaw gateway restart
112
- ```
113
-
114
- ---
115
-
116
- ## Step 6:配置飞书事件订阅
117
-
118
- > 确保 Step 5 已完成(网关已启动),否则长连接保存会失败。详见上方"事件订阅保存失败"踩坑。
119
-
120
- 请用户在飞书开放平台「事件与回调」页面手动完成以下配置:
121
-
122
- 1. 在「开发配置 > 事件与回调」页面点击「事件配置」,点击「订阅方式」选择「使用长连接接收事件」,然后点击「添加事件」 输入`im.message.receive_v1`保存
123
- 2. 在「开发配置 > 事件与回调」页面点击「回调配置」,点击「订阅方式」选择「使用长连接接收事件」
124
- 3. 在「应用发布 > 版本管理与发布」页面进行发布版本
125
-
126
- 完成后请告知我,我将继续执行后续步骤。
127
-
128
- **等待用户确认完成,收到确认后再继续执行 Step 7。**
129
-
130
- ---
131
-
132
- ## Step 7:提示用户将机器人加入群组
133
-
134
- 将下列步骤提示给用户:
135
-
136
- 1. 打开飞书APP 进入目标群聊 → 右上角「设置」→「群机器人」→「添加机器人」→ 搜索 `OpenClaw` 并添加
137
- 2. @机器人发送消息
@@ -1,60 +0,0 @@
1
- # QQ 渠道接入
2
-
3
- 接入 QQ 机器人(QQBot),完成 OpenClaw 渠道配置。
4
-
5
- ---
6
-
7
- ## Step 4:创建 QQ 机器人
8
-
9
- 请用户按以下步骤在 QQ 开放平台手动完成机器人创建:
10
-
11
- 1. 打开 [QQ 机器人开放平台](https://q.qq.com/qqbot/openclaw/index.html),完成登录
12
- 2. 点击【创建机器人】
13
- 3. 按照页面引导填写机器人信息,完成创建
14
- 4. 在机器人详情页找到并复制 **AppID** 和 **AppSecret**
15
-
16
- 完成后,请将 **AppID** 和 **AppSecret** 粘贴给我。
17
-
18
- **等待用户提供 AppID 和 AppSecret,收到后继续执行 Step 5。**
19
-
20
- ---
21
-
22
- ## Step 5:安装插件,写入 QQ 凭据,重启网关
23
-
24
- 首先执行插件安装(如插件已存在则执行 update):
25
-
26
- ```bash
27
- openclaw plugins install @tencent-connect/openclaw-qqbot@latest
28
- # 若插件已存在:
29
- # openclaw plugins update @tencent-connect/openclaw-qqbot
30
- ```
31
-
32
- 安装完成后,使用 Read + Edit/Write 工具修改 `~/.openclaw/openclaw.json`,填写 `channels.qqbot`:
33
-
34
- ```json
35
- "channels": {
36
- "qqbot": {
37
- "enabled": true,
38
- "allowFrom": [
39
- "*"
40
- ],
41
- "appId": "<APP_ID>",
42
- "clientSecret": "<APP_SECRET>"
43
- }
44
- }
45
- ```
46
-
47
- 写入完成后重启网关:
48
-
49
- ```bash
50
- openclaw gateway restart
51
- ```
52
-
53
- ---
54
-
55
- ## Step 6:提示用户配置完成
56
-
57
- 将下列步骤提示给用户:
58
-
59
- 1. QQ 机器人渠道已创建成功!
60
- 2. 在 QQ 中找到你的机器人,直接发送消息即可开始使用
@@ -1,64 +0,0 @@
1
- # 企业微信渠道接入
2
-
3
- 接入企业微信智能机器人(API 模式),完成 OpenClaw 渠道配置。
4
-
5
- ---
6
-
7
- ## Step 4:创建企业微信智能机器人
8
-
9
- 请按以下步骤在企业微信手动完成机器人创建:
10
-
11
- 1. 打开**企业微信 APP**,点击底部导航**工作台**
12
- 2. 进入**智能机器人**,点击右上角【**创建机器人**】
13
- 3. 点击底部【**手动创建**】
14
- 4. 滚动到最底部,点击【**API 模式创建**】
15
- 5. 填写机器人**名称**,选择**可见范围**
16
- 6. **连接方式**选择**使用长连接**
17
- 7. 复制配置信息中的 **Bot ID** 和 **Secret**
18
- 8. 根据需要调整**可使用权限**中的授权范围
19
- 9. 点击**保存**
20
-
21
- 完成后,请将 **Bot ID** 和 **Secret** 粘贴给我。
22
-
23
- **等待用户提供 Bot ID 和 Secret,收到后继续执行 Step 5。**
24
-
25
- ---
26
-
27
- ## Step 5:安装插件,写入企业微信凭据,重启网关
28
-
29
- 首先执行插件安装(注意需要安装指定2.4.0版本):
30
-
31
- ```bash
32
- openclaw plugins install @sunnoy/wecom@2.4.0
33
- ```
34
-
35
- 安装完成后,使用 Read + Edit/Write 工具修改 `~/.openclaw/openclaw.json`,填写 `channels.wecom`:
36
-
37
- ```json
38
- "channels": {
39
- "wecom": {
40
- "enabled": true,
41
- "botId": "<BOT_ID>",
42
- "secret": "<SECRET>",
43
- "allowFrom": [],
44
- "dmPolicy": "pairing"
45
- }
46
- }
47
- ```
48
-
49
- 写入完成后重启网关:
50
-
51
- ```bash
52
- openclaw gateway restart
53
- ```
54
-
55
- ---
56
-
57
- ## Step 6:提示用户将机器人加入群聊
58
-
59
- 将下列步骤提示给用户:
60
-
61
- 1. 打开**企业微信 APP**,进入目标群聊
62
- 2. 点击右上角「**...**」→「**群机器人**」→「**添加机器人**」
63
- 3. 搜索刚创建的机器人名称并添加
64
- 4. @机器人发送消息即可使用
@@ -1,164 +0,0 @@
1
- # 微信渠道接入
2
-
3
- 接入微信ClawBot,完成 OpenClaw 机器人配置。
4
-
5
- ## 核心原则
6
-
7
- - **严格按步骤走,不要加戏。**
8
- - **二维码字符图和备用链接必须写进文字回复,不能只留在 bash 工具输出里。**
9
- - **不要自动轮询。** 给完二维码等用户说"扫完了"再轮询。
10
-
11
- ---
12
-
13
- ## 常见踩坑
14
-
15
- ### 扫码成功但 OpenClaw 仍显示 `no token`
16
-
17
- **原因**:凭证文件尚未写入,或网关未重启。
18
-
19
- **解决方案**:检查 `~/.openclaw/openclaw-weixin/accounts/` 下的账号文件,若已存在则重启网关:
20
-
21
- ```bash
22
- openclaw gateway restart
23
- ```
24
-
25
- ---
26
-
27
- ## Step 4:检查插件,未装则装
28
-
29
- ```bash
30
- ls ~/.openclaw/extensions/openclaw-weixin/package.json 2>/dev/null && echo "INSTALLED" || echo "NOT_INSTALLED"
31
- ```
32
-
33
- - `INSTALLED` → 跳到 Step 5
34
- - `NOT_INSTALLED` → 安装:
35
-
36
- ```bash
37
- openclaw plugins install @tencent-weixin/openclaw-weixin@legacy
38
- ```
39
-
40
- 装完验证 `ls ~/.openclaw/extensions/openclaw-weixin/package.json`,确认 `INSTALLED` 后继续。
41
-
42
- ---
43
-
44
- ## Step 5:获取二维码并渲染
45
-
46
- **5a. 获取二维码数据:**
47
-
48
- ```bash
49
- curl -s "https://ilinkai.weixin.qq.com/ilink/bot/get_bot_qrcode?bot_type=3"
50
- ```
51
-
52
- 从返回 JSON 提取:
53
-
54
- - `qrcode` — 保存,Step 6 轮询用
55
- - `qrcode_img_content` — 二维码页面链接
56
-
57
- **5b. 用 qrcode-terminal 渲染字符二维码:**
58
-
59
- ```bash
60
- node -e "
61
- const qt = require(require('path').join(require('os').homedir(), '.openclaw/extensions/openclaw-weixin/node_modules/qrcode-terminal'));
62
- qt.generate('<qrcode_img_content>', {small: true}, function(qr){ console.log(qr); });
63
- "
64
- ```
65
-
66
- **5c. 将以下内容完整写进文字回复(把实际字符二维码和链接替换进去):**
67
-
68
- ---
69
-
70
- 使用**微信**扫一扫下面的二维码:
71
-
72
- ```
73
- <上一步命令输出的字符二维码,原样粘贴>
74
- ```
75
-
76
- 如果二维码无法识别,请在**电脑浏览器**打开以下链接后扫码:
77
- `<qrcode_img_content 的值>`
78
-
79
- 扫完在手机上确认登录,完成后告诉我"ok"。⏱ 有效期约 1 分钟。
80
-
81
- ---
82
-
83
- 然后**停下来,等用户确认**。
84
-
85
- ---
86
-
87
- ## Step 6:用户确认后 → 轮询状态
88
-
89
- ```bash
90
- curl -s "https://ilinkai.weixin.qq.com/ilink/bot/get_qrcode_status?qrcode=<qrcode>"
91
- ```
92
-
93
- | status | 处理 |
94
- | ----------- | ------------------------------------------------------------------ |
95
- | `wait` | 等 3 秒再 poll |
96
- | `scaned` | 告诉用户"已扫码,请在手机上确认登录" |
97
- | `confirmed` | 成功!提取 `ilink_bot_id`、`bot_token`、`baseurl`、`ilink_user_id` |
98
- | `expired` | 从 Step 5 重来 |
99
-
100
- ---
101
-
102
- ## Step 7:写入凭证(confirmed 后必须执行)
103
-
104
- 将 `ilink_bot_id` 中的 `@` → `-`、`.` → `-` 得到 `accountId`(例:`a34b410e2e6f@im.bot` → `a34b410e2e6f-im-bot`)。
105
-
106
- 用 Write 工具直接写入以下两个文件(将实际值填入):
107
-
108
- **文件 1**:`~/.openclaw/openclaw-weixin/accounts/<accountId>.json`
109
- ```json
110
- {
111
- "token": "<ilink_bot_id>:<bot_token>",
112
- "savedAt": "<当前 ISO 时间>",
113
- "baseUrl": "<baseurl>",
114
- "userId": "<ilink_user_id>"
115
- }
116
- ```
117
-
118
- **文件 2**:`~/.openclaw/openclaw-weixin/accounts.json`
119
-
120
- 先读取现有内容(若文件不存在则视为空数组),将 `<accountId>` 加入数组后写回:
121
- ```json
122
- ["<accountId>"]
123
- ```
124
-
125
- 写完后执行权限修正:
126
- ```bash
127
- chmod 600 ~/.openclaw/openclaw-weixin/accounts/<accountId>.json
128
- ```
129
-
130
- ---
131
-
132
- ## Step 8:重启 Gateway
133
-
134
- ```bash
135
- openclaw gateway restart
136
- ```
137
-
138
- ---
139
-
140
- ## Step 9:验证并提示用户
141
-
142
- 执行 `openclaw status` 确认 channel 状态为 `OK`,然后输出:
143
-
144
- ---
145
-
146
- ## 微信连接结果
147
-
148
- - ✅ 状态:已绑定成功
149
- - ✅ Gateway:已重启
150
- - ilink_bot_id: `<ilink_bot_id>`
151
- - ilink_user_id: `<ilink_user_id>`
152
-
153
- 现在可以直接在微信里发消息了 🎉
154
-
155
- ---
156
-
157
- 到此为止。不要再做任何额外操作。
158
-
159
- ## 绝对禁止
160
-
161
- - 禁止自动开轮询(等用户说"扫完了 / ok")
162
- - 禁止手动改写 `openclaw.json`
163
- - 禁止跳过写凭证步骤(不写凭证插件无法连接)
164
- - 禁止把二维码和链接只放在 bash 工具输出里——必须原样写进文字消息
@@ -1,127 +0,0 @@
1
- ---
2
- name: claw
3
- description: 安装并配置 OpenClaw,可选择接入飞书(feishu)、微信(weixin)、企业微信(wecom)或 QQ 渠道。用法:/claw [feishu|weixin|wecom|qq]。当用户需要将 OpenClaw 与即时通讯平台集成时使用此命令。
4
- ---
5
-
6
- # OpenClaw 安装与渠道接入
7
-
8
- 完成 OpenClaw 安装配置,并引导接入指定渠道。
9
-
10
- ---
11
-
12
- ## 参数解析
13
-
14
- 从命令参数中提取渠道名称(`$ARGUMENTS`):
15
-
16
- - 有效渠道:`feishu`、`weixin`、`wecom`、`qq`
17
- - 若参数不在上述列表中(且不为空),输出错误:**「未知渠道:<参数>,支持的渠道为 feishu / weixin / wecom / qq」**,然后停止执行
18
- - 若参数为空,暂不处理,等安装完成后提示
19
-
20
- ---
21
-
22
- ## Step 1:检测并安装 OpenClaw
23
-
24
- 检查是否已安装:
25
-
26
- ```bash
27
- openclaw --version
28
- ```
29
-
30
- 若未安装,执行下面命令安装:
31
-
32
- ```bash
33
- npm install -g openclaw@2026.3.13 --registry=https://registry.npmmirror.com
34
- ```
35
-
36
- 安装后验证:
37
-
38
- ```bash
39
- openclaw --version
40
- ```
41
-
42
- ---
43
-
44
- ## Step 1.5:检查新手引导配置状态
45
-
46
- 使用 Read 工具读取 `~/.openclaw/openclaw.json`。
47
-
48
- **判断逻辑:**
49
-
50
- - 若文件**不存在**或读取失败 → 继续执行 Step 2 和 Step 3(新手引导)
51
- - 若文件**存在**,检查以下条件是否**同时满足**:
52
- 1. `models.providers` 数组非空(已配置模型提供者)
53
- 2. `gateway.port` 存在(网关已配置)
54
-
55
- 若以上条件**全部满足** → 提示用户「检测到新手引导已完成,跳过新手配置」,然后**直接跳至渠道选择步骤**。
56
-
57
- 否则 → 继续执行 Step 2 和 Step 3。
58
-
59
- ---
60
-
61
- ## Step 2:读取用户凭据
62
-
63
- 1. 读取 `~/.coder/config.json`(注意:是 `.coder` 目录,不是 `.codev`)
64
- 2. 提取 `auth.ak` 和 `auth.sk` 字段的**原始值**,不做任何修改
65
- 3. 构造 `API_KEY = {auth.ak}.{auth.sk}`(直接拼接,中间加一个英文句点),记录备用
66
- 4. 向用户确认构造结果:输出 `API_KEY 前缀为:{auth.ak}` 以便核对
67
-
68
- ---
69
-
70
- ## Step 3:运行新手引导
71
-
72
- ```bash
73
- openclaw onboard --non-interactive --accept-risk \
74
- --auth-choice custom-api-key \
75
- --custom-base-url "https://makecoder.com/bigapis/codev/v1/claude" \
76
- --custom-model-id "Claude Sonnet 4.6" \
77
- --custom-api-key "<Step 2 中的 API_KEY>" \
78
- --secret-input-mode plaintext \
79
- --custom-compatibility anthropic \
80
- --gateway-port 18789 \
81
- --gateway-bind loopback \
82
- --install-daemon \
83
- --daemon-runtime node \
84
- --skip-skills
85
- ```
86
-
87
- 命令完成后,修改 `~/.openclaw/openclaw.json`,对 `models.providers.models` 数组中**每一个**模型对象,设置或覆盖以下字段(已存在则覆盖为 18000,不存在则新增):
88
-
89
- ```json
90
- "contextWindow": 18000,
91
- "maxTokens": 18000
92
- ```
93
-
94
- ---
95
-
96
- ## 渠道选择
97
-
98
- OpenClaw 安装配置完成后,根据参数决定下一步:
99
-
100
- ### 若参数已提供(feishu / weixin / wecom / qq)
101
-
102
- 直接跳转执行对应渠道的安装流程(见下方各渠道章节)。
103
-
104
- ### 若参数未提供
105
-
106
- 调用 `AskUserQuestion` 工具询问用户选择渠道,问题和选项如下:
107
-
108
- - **question**:`OpenClaw 已安装配置完成!请选择要接入的渠道:`
109
- - **header**:`渠道选择`
110
- - **options**:
111
- - `{ label: "feishu(飞书)", description: "飞书智能机器人" }`
112
- - `{ label: "weixin(微信)", description: "微信 ClawBot" }`
113
- - `{ label: "wecom(企业微信)", description: "企业微信智能机器人" }`
114
- - `{ label: "qq(QQ)", description: "QQ 机器人" }`
115
-
116
- 根据用户所选选项的 label 前缀(feishu / weixin / wecom / qq)执行对应渠道流程。
117
-
118
- ---
119
-
120
- ## 渠道安装流程
121
-
122
- 根据选定渠道,读取并执行对应渠道文件中的步骤:
123
-
124
- - **feishu**:执行 `~/.claude/claw/channels/feishu.md` 中的全部步骤
125
- - **weixin**:执行 `~/.claude/claw/channels/weixin.md` 中的全部步骤
126
- - **wecom**:执行 `~/.claude/claw/channels/wecom.md` 中的全部步骤
127
- - **qq**:执行 `~/.claude/claw/channels/qq.md` 中的全部步骤