| 2626 | ${J}`);else N("No stdout output captured");if(M)N(`stderr output (${M.length} chars): ${M}`);else N("No stderr output captured");H6(Error(`Failed to create shell snapshot: ${H.message}`));let P=X?.signal?HI8.constants.signals[X.signal]:void 0;d("tengu_shell_snapshot_failed",{stderr_length:M?.length||0,has_error_code:!!X?.code,error_signal_number:P,error_killed:X?.killed}),_(void 0)}else{let X;try{X=(await elz(w)).size}catch{}if(X!==void 0)N(`Shell snapshot created successfully (${X} bytes)`),pq(async()=>{try{await X8().unlink(w),N(`Cleaned up session snapshot: ${w}`)}catch(P){N(`Error cleaning up session snapshot: ${P}`)}}),_(w);else{N(`Shell snapshot file not found after creation: ${w}`),N(`Checking if parent directory still exists: ${O}`);try{let P=await X8().readdir(O);N(`Directory contains ${P.length} files`)}catch{N(`Parent directory does not exist or is not accessible: ${O}`)}d("tengu_shell_unknown_error",{}),_(void 0)}}})}catch(z){if(N(`Unexpected error during snapshot creation: ${z}`),z instanceof Error)N(`Error stack trace: ${z.stack}`);H6(z),d("tengu_shell_snapshot_error",{}),_(void 0)}})};var qzK=y(()=>{Df();k8();c9();I7();_8();ju();m8();bK();e7();E8();vK();KC();bw6();NX();Knz=[".git",".svn",".hg",".bzr",".jj",".sl"]});function JI8(q,K){let _=q.lastIndexOf(" -");if(_>0){let z=q.substring(0,_),Y=q.substring(_+1);return`${E4([z])} ${Y} ${E4([K])}`}else return`${E4([q])} ${E4([K])}`}var fa1=y(()=>{NX()});function Za1(q){if(/\d\s*<<\s*\d/.test(q)||/\[\[\s*\d+\s*<<\s*\d+\s*\]\]/.test(q)||/\$\(\(.*<<.*\)\)/.test(q))return!1;return/<<-?\s*(?:(['"]?)(\w+)\1|\\(\w+))/.test(q)}function Anz(q){let K=/'(?:[^'\\]|\\.)*\n(?:[^'\\]|\\.)*'/,_=/"(?:[^"\\]|\\.)*\n(?:[^"\\]|\\.)*"/;return K.test(q)||_.test(q)}function KzK(q,K=!0){if(Za1(q)||Anz(q)){let z=`'${q.replace(/'/g,`'"'"'`)}'`;if(Za1(q))return z;return K?`${z} < /dev/null`:z}if(K)return E4([q,"<","/dev/null"]);return E4([q])}function Onz(q){return/(?:^|[\s;&|])<(?![<(])\s*\S+/.test(q)}function _zK(q){if(Za1(q))return!1;if(Onz(q))return!1;return!0}function zzK(q){return q.replace(wnz,"$1/dev/null")}var wnz;var YzK=y(()=>{NX();wnz=/(\d?&?>+\s*)[Nn][Uu][Ll](?=\s|$|[|&;)\n])/g});function MI8(){return $zK}function AzK(){$zK.clear()}var $zK;var XI8=y(()=>{$zK=new Map});function jzK(){if(!OzK||wzK===null)return null;return`${OzK},${wzK},0`}var OzK=null,wzK=null;var HzK=y(()=>{c9();_8();y8();XK();E8();vK()});import{access as jnz}from"fs/promises";import{tmpdir as Hnz}from"os";import{join as Jnz}from"path";import{join as PI8}from"path/posix";function Mnz(q){if(process.env.CLAUDE_CODE_SHELL_PREFIX)return"{ shopt -u extglob || setopt NO_EXTENDED_GLOB; } >/dev/null 2>&1 || true";if(q.includes("bash"))return"shopt -u extglob 2>/dev/null || true";else if(q.includes("zsh"))return"setopt NO_EXTENDED_GLOB 2>/dev/null || true";return null}async function JzK(q,K){let _,z=K?.skipSnapshot?Promise.resolve(void 0):e_K(q).catch(($)=>{N(`Failed to create shell snapshot: ${$}`);return}),Y;return{type:"bash",shellPath:q,detached:!0,async buildExecCommand($,A){let O=await z;if(O)try{await jnz(O)}catch{N(`Snapshot file missing, falling back to login shell: ${O}`),O=void 0}Y=O,_=A.sandboxTmpDir;let w=Hnz(),H=Z1()==="windows"?ff(w):w,J=A.useSandbox?PI8(A.sandboxTmpDir,`cwd-${A.id}`):PI8(H,`claude-${A.id}-cwd`),M=A.useSandbox?PI8(A.sandboxTmpDir,`cwd-${A.id}`):Jnz(w,`claude-${A.id}-cwd`),X=zzK($),P=_zK(X),W=KzK(X,P);if(X.includes("|")&&P)W=o_K(X);let D=[];if(O){let T=Z1()==="windows"?ff(O):O;D.push(`source ${E4([T])} 2>/dev/null || true`)}let f=await g5K();if(f)D.push(f);let G=Mnz(q);if(G)D.push(G);D.push(`eval ${W}`),D.push(`pwd -P >| ${E4([J])}`);let Z=D.join(" && ");if(process.env.CLAUDE_CODE_SHELL_PREFIX)Z=JI8(process.env.CLAUDE_CODE_SHELL_PREFIX,Z);return{commandString:Z,cwdFilePath:M}},getSpawnArgs($){let A=Y!==void 0;if(A)N("Spawning shell without login (-l flag skipped)");return["-c",...A?[]:["-l"],$]},async getEnvironmentOverrides($){let A=$.includes("tmux"),O=jzK(),w={};if(O)w.TMUX=O;if(_){let j=_;if(Z1()==="windows")j=ff(j);w.TMPDIR=j,w.CLAUDE_CODE_TMPDIR=j,w.TMPPREFIX=PI8(j,"zsh")}for(let[j,H]of MI8())w[j]=H;return w}}}var MzK=y(()=>{s_K();qzK();fa1();NX();YzK();_8();vK();tE6();XI8();HzK();NB()});import{realpath as XzK,stat as Xnz}from"fs/promises";async function PzK(q){try{return(await Xnz(q)).isFile()?q:null}catch{return null}}async function Pnz(){let q=await TO("pwsh");if(q){if(Z1()==="linux"){let _=await XzK(q).catch(()=>q);if(q.startsWith("/snap/")||_.startsWith("/snap/")){let z=await PzK("/opt/microsoft/powershell/7/pwsh")??await PzK("/usr/bin/pwsh");if(z){let Y=await XzK(z).catch(()=>z);if(!z.startsWith("/snap/")&&!Y.startsWith("/snap/"))return z}}}return q}let K=await TO("powershell");if(K)return K;return null}function Pa(){if(!Ga1)Ga1=Pnz();return Ga1}async function WzK(){let q=await Pa();if(!q)return null;return q.split(/[/\\]/).pop().toLowerCase().replace(/\.exe$/,"")==="pwsh"?"core":"desktop"}var Ga1=null;var GL6=y(()=>{vK();rk()});import{tmpdir as Wnz}from"os";import{join as Dnz}from"path";import{join as fnz}from"path/posix";function Ta1(q){return["-NoProfile","-NonInteractive","-Command",q]}function Znz(q){return Buffer.from(q,"utf16le").toString("base64")}function DzK(q){let K;return{type:"powershell",shellPath:q,detached:!1,async buildExecCommand(_,z){K=z.useSandbox?z.sandboxTmpDir:void 0;let Y=z.useSandbox&&z.sandboxTmpDir?fnz(z.sandboxTmpDir,`claude-pwd-ps-${z.id}`):Dnz(Wnz(),`claude-pwd-ps-${z.id}`),A=` |
| 2627 | ; $_ec = if ($null -ne $LASTEXITCODE) { $LASTEXITCODE } elseif ($?) { 0 } else { 1 } |
| 2628 | ; (Get-Location).Path | Out-File -FilePath '${Y.replace(/'/g,"''")}' -Encoding utf8 -NoNewline |
| 2629 | ; exit $_ec`,O=_+A;return{commandString:z.useSandbox?[`'${q.replace(/'/g,"'\\''")}'`,"-NoProfile","-NonInteractive","-EncodedCommand",Znz(O)].join(" "):O,cwdFilePath:Y}},getSpawnArgs(_){return Ta1(_)},async getEnvironmentOverrides(){let _={};for(let[z,Y]of MI8())_[z]=Y;if(K)_.TMPDIR=K,_.CLAUDE_CODE_TMPDIR=K;return _}}}var va1=y(()=>{XI8()});import{execFileSync as Gnz,spawn as Tnz}from"child_process";import{constants as p68,readFileSync as vnz,unlinkSync as knz}from"fs";import{mkdir as Vnz,open as Nnz,realpath as fzK}from"fs/promises";import{isAbsolute as ynz,resolve as Enz}from"path";import{join as Lnz}from"path/posix";import{accessSync as Rnz}from"fs";function ka1(q){try{return Rnz(q,p68.X_OK),!0}catch(K){try{return Gnz(q,["--version"],{timeout:1000,stdio:"ignore"}),!0}catch{return!1}}}async function Snz(){let q=process.env.CLAUDE_CODE_SHELL;if(q)if((q.includes("bash")||q.includes("zsh"))&&ka1(q))return N(`Using shell override: ${q}`),q;else N(`CLAUDE_CODE_SHELL="${q}" is not a valid bash/zsh path, falling back to detection`);let K=process.env.SHELL,_=K&&(K.includes("bash")||K.includes("zsh")),z=K?.includes("bash"),[Y,$]=await Promise.all([TO("zsh"),TO("bash")]),A=["/bin","/usr/bin","/usr/local/bin","/opt/homebrew/bin"],w=(z?["bash","zsh"]:["zsh","bash"]).flatMap((H)=>A.map((J)=>`${J}/${H}`));if(z){if($)w.unshift($);if(Y)w.push(Y)}else{if(Y)w.unshift(Y);if($)w.push($)}if(_&&ka1(K))w.unshift(K);let j=w.find((H)=>H&&ka1(H));if(!j){let H="No suitable shell found. Claude CLI requires a Posix shell environment. Please ensure you have a valid shell installed and the SHELL environment variable set.";throw H6(Error(H)),Error(H)}return j}async function Cnz(){let q=await Snz();return{provider:await JzK(q)}}async function TL6(q,K,_,z){let{timeout:Y,onProgress:$,preventCwdChanges:A,shouldUseSandbox:O,shouldAutoBackground:w,onStdout:j}=z??{},H=Y||hnz,J=await Inz[_](),M=Math.floor(Math.random()*65536).toString(16).padStart(4,"0"),X=Lnz(process.env.CLAUDE_CODE_TMPDIR||"/tmp",Na1()),{commandString:P,cwdFilePath:W}=await J.buildExecCommand(q,{id:M,sandboxTmpDir:O?X:void 0,useSandbox:O??!1}),D=P,f=C$8();try{await fzK(f)}catch{let B=r1();N(`Shell CWD "${f}" no longer exists, recovering to "${B}"`);try{await fzK(B),o58(B),f=B}catch{return ZzK(`Working directory "${f}" no longer exists. Please restart Claude from an existing directory.`)}}if(K.aborted)return Va1();let G=J.shellPath,Z=O&&_==="powershell",T=Z?"/bin/sh":G;if(O){D=await M7.wrapWithSandbox(D,T,void 0,K);try{await X8().mkdir(X,{mode:448})}catch(B){N(`Failed to create ${X} directory: ${B}`)}}let v=Z?"/bin/sh":G,V=Z?["-c",D]:J.getSpawnArgs(D),E=await J.getEnvironmentOverrides(q),S=!!j,R=aL("local_bash"),x=new JO(R,$??null,!S);await Vnz(vL6(),{recursive:!0});let I;if(!S){let B=p68.O_NOFOLLOW??0;I=await Nnz(x.path,process.platform==="win32"?"w":p68.O_WRONLY|p68.O_CREAT|p68.O_APPEND|B)}try{let B=Tnz(v,V,{env:{...Ym(),SHELL:_==="bash"?G:void 0,GIT_EDITOR:"true",CLAUDECODE:"1",...E,...{}},cwd:f,stdio:S?["pipe","pipe","pipe"]:["pipe",I?.fd,I?.fd],detached:J.detached,windowsHide:!0}),p=WI8(B,K,H,x,w);if(I!==void 0)try{await I.close()}catch{}if(B.stdout&&j)B.stdout.on("data",(g)=>{j(typeof g==="string"?g:g.toString())});let C=Z1()==="windows"?w_6(W):W;return p.result.then(async(g)=>{if(O)M7.cleanupAfterCommand();if(g&&!A&&!g.backgroundTaskId)try{let F=vnz(C,{encoding:"utf8"}).trim();if(Z1()==="windows")F=w_6(F);if(F.normalize("NFC")!==f)QO(F,f),sE6(),l5K(f,F)}catch{d("tengu_shell_set_cwd",{success:!1})}try{knz(C)}catch{}}),p}catch(B){if(I!==void 0)try{await I.close()}catch{}return x.clear(),N(`Shell exec error: ${d6(B)}`),Va1(void 0,{code:126,stderr:d6(B)})}}function QO(q,K){let _=ynz(q)?q:Enz(K||X8().cwd(),q),z;try{z=X8().realpathSync(_)}catch(Y){if(_7(Y))throw Error(`Path "${_}" does not exist`);throw Y}o58(z);try{d("tengu_shell_set_cwd",{success:!0})}catch(Y){}}var hnz=1800000,bnz,xnz,Inz;var tN=y(()=>{F4();k8();v8();GN();I7();_8();y8();e7();E8();ya1();Ij();ZL6();rk();M68();Tz();vK();K$();tE6();MzK();GL6();va1();bw6();NB();bnz=_1(Cnz),xnz=_1(async()=>{let q=await Pa();if(!q)throw Error("PowerShell is not available");return DzK(q)}),Inz={bash:async()=>(await bnz()).provider,powershell:xnz}});function BX(q=L.boolean()){return L.preprocess((K)=>K==="true"?!0:K==="false"?!1:K,q)}var TK6=y(()=>{x7()});function eN(q=L.number()){return L.preprocess((K)=>{if(typeof K==="string"&&/^-?\d+(\.\d+)?$/.test(K)){let _=Number(K);if(Number.isFinite(_))return _}return K},q)}var B68=y(()=>{x7()});function kL6(q){let K=z6(30),{output:_,fullOutput:z,elapsedTimeSeconds:Y,totalLines:$,totalBytes:A,timeoutMs:O,verbose:w}=q,j;if(K[0]!==z)j=VY(z.trim()),K[0]=z,K[1]=j;else j=K[1];let H=j,J,M;if(K[2]!==_||K[3]!==H||K[4]!==w)J=VY(_.trim()).split(` |
| 2630 | `).filter(mnz),M=w?H:J.slice(-5).join(` |
| 2631 | `),K[2]=_,K[3]=H,K[4]=w,K[5]=J,K[6]=M;else J=K[5],M=K[6];let X=M;if(!J.length){let S;if(K[7]===Symbol.for("react.memo_cache_sentinel"))S=qy.default.createElement(k,{dimColor:!0},"Running… "),K[7]=S;else S=K[7];let R;if(K[8]!==Y||K[9]!==O)R=qy.default.createElement(s8,null,qy.default.createElement(I0,null,S,qy.default.createElement(Hj6,{elapsedTimeSeconds:Y,timeoutMs:O}))),K[8]=Y,K[9]=O,K[10]=R;else R=K[10];return R}let P=$?Math.max(0,$-5):0,W="";if(!w&&A&&$)W=`~${$} lines`;else if(!w&&P>0)W=`+${P} lines`;let D=w?void 0:Math.min(5,J.length),f;if(K[11]!==X)f=qy.default.createElement(k,{dimColor:!0},X),K[11]=X,K[12]=f;else f=K[12];let G;if(K[13]!==D||K[14]!==f)G=qy.default.createElement(u,{height:D,flexDirection:"column",overflow:"hidden"},f),K[13]=D,K[14]=f,K[15]=G;else G=K[15];let Z;if(K[16]!==W)Z=W?qy.default.createElement(k,{dimColor:!0},W):null,K[16]=W,K[17]=Z;else Z=K[17];let T;if(K[18]!==Y||K[19]!==O)T=qy.default.createElement(Hj6,{elapsedTimeSeconds:Y,timeoutMs:O}),K[18]=Y,K[19]=O,K[20]=T;else T=K[20];let v;if(K[21]!==A)v=A?qy.default.createElement(k,{dimColor:!0},m4(A)):null,K[21]=A,K[22]=v;else v=K[22];let V;if(K[23]!==Z||K[24]!==T||K[25]!==v)V=qy.default.createElement(u,{flexDirection:"row",gap:1},Z,T,v),K[23]=Z,K[24]=T,K[25]=v,K[26]=V;else V=K[26];let E;if(K[27]!==G||K[28]!==V)E=qy.default.createElement(s8,null,qy.default.createElement(I0,null,qy.default.createElement(u,{flexDirection:"column"},G,V))),K[27]=G,K[28]=V,K[29]=E;else E=K[29];return E}function mnz(q){return q}var qy;var DI8=y(()=>{q8();CT();s6();U7();gK();$K6();xb8();qy=O6(D6(),1)});import{randomBytes as pnz}from"crypto";function VL6(q){let K=q.trim(),_=K.match(/^\s*sed\s+/);if(!_)return null;let z=K.slice(_[0].length),Y=o$(z);if(!Y.success)return null;let $=Y.tokens,A=[];for(let T of $)if(typeof T==="string")A.push(T);else if(typeof T==="object"&&T!==null&&"op"in T&&T.op==="glob")return null;let O=!1,w=!1,j=null,H=null,J=0;while(J<A.length){let T=A[J];if(T==="-i"||T==="--in-place"){if(O=!0,J++,J<A.length){let v=A[J];if(typeof v==="string"&&!v.startsWith("-")&&(v===""||v.startsWith(".")))J++}continue}if(T.startsWith("-i")){O=!0,J++;continue}if(T==="-E"||T==="-r"||T==="--regexp-extended"){w=!0,J++;continue}if(T==="-e"||T==="--expression"){if(J+1<A.length&&typeof A[J+1]==="string"){if(j!==null)return null;j=A[J+1],J+=2;continue}return null}if(T.startsWith("--expression=")){if(j!==null)return null;j=T.slice(13),J++;continue}if(T.startsWith("-"))return null;if(j===null)j=T;else if(H===null)H=T;else return null;J++}if(!O||!j||!H)return null;if(!j.match(/^s\//))return null;let X=j.slice(2),P="",W="",D="",f="pattern",G=0;while(G<X.length){let T=X[G];if(T==="\\"&&G+1<X.length){if(f==="pattern")P+=T+X[G+1];else if(f==="replacement")W+=T+X[G+1];else D+=T+X[G+1];G+=2;continue}if(T==="/"){if(f==="pattern")f="replacement";else if(f==="replacement")f="flags";else return null;G++;continue}if(f==="pattern")P+=T;else if(f==="replacement")W+=T;else D+=T;G++}if(f!=="flags")return null;if(!/^[gpimIM1-9]*$/.test(D))return null;return{filePath:H,pattern:P,replacement:W,flags:D,extendedRegex:w}}function yzK(q,K){let _="";if(K.flags.includes("g"))_+="g";if(K.flags.includes("i")||K.flags.includes("I"))_+="i";if(K.flags.includes("m")||K.flags.includes("M"))_+="m";let z=K.pattern.replace(/\\\//g,"/");if(!K.extendedRegex)z=z.replace(/\\\\/g,GzK).replace(/\\\+/g,TzK).replace(/\\\?/g,vzK).replace(/\\\|/g,kzK).replace(/\\\(/g,VzK).replace(/\\\)/g,NzK).replace(/\+/g,"\\+").replace(/\?/g,"\\?").replace(/\|/g,"\\|").replace(/\(/g,"\\(").replace(/\)/g,"\\)").replace(Bnz,"\\\\").replace(gnz,"+").replace(Fnz,"?").replace(Unz,"|").replace(Qnz,"(").replace(dnz,")");let $=`___ESCAPED_AMPERSAND_${pnz(8).toString("hex")}___`,A=K.replacement.replace(/\\\//g,"/").replace(/\\&/g,$).replace(/&/g,"$$&").replace(new RegExp($,"g"),"&");try{let O=new RegExp(z,_);return q.replace(O,A)}catch{return q}}var GzK="\x00BACKSLASH\x00",TzK="\x00PLUS\x00",vzK="\x00QUESTION\x00",kzK="\x00PIPE\x00",VzK="\x00LPAREN\x00",NzK="\x00RPAREN\x00",Bnz,gnz,Fnz,Unz,Qnz,dnz;var g68=y(()=>{NX();Bnz=new RegExp(GzK,"g"),gnz=new RegExp(TzK,"g"),Fnz=new RegExp(vzK,"g"),Unz=new RegExp(kzK,"g"),Qnz=new RegExp(VzK,"g"),dnz=new RegExp(NzK,"g")});function NL6(q){let K=z6(9),_;if(K[0]!==q)_=q===void 0?{}:q,K[0]=q,K[1]=_;else _=K[1];let{onBackground:z}=_,Y=jz(),$=s7(),A;if(K[2]!==z||K[3]!==$||K[4]!==Y)A=()=>{ZI8(()=>Y.getState(),$),z?.()},K[2]=z,K[3]=$,K[4]=Y,K[5]=A;else A=K[5];let O=A,w;if(K[6]===Symbol.for("react.memo_cache_sentinel"))w={context:"Task"},K[6]=w;else w=K[6];P1("task:background",O,w);let j=R5("task:background","Task","ctrl+b"),H=a1.terminal==="tmux"&&j==="ctrl+b"?"ctrl+b ctrl+b (twice)":j;if(i6(process.env.CLAUDE_CODE_DISABLE_BACKGROUND_TASKS))return null;let J;if(K[7]!==H)J=gH.createElement(u,{paddingLeft:5},gH.createElement(k,{dimColor:!0},gH.createElement(t8,{shortcut:H,action:"run in background",parens:!0}))),K[7]=H,K[8]=J;else J=K[8];return J}function LzK(q,{verbose:K,theme:_}){let{command:z}=q;if(!z)return null;let Y=VL6(z);if(Y)return K?Y.filePath:_3(Y.filePath);if(!K){let $=z.split(` |