| 7734 | `);if(z){let w=N8();pN6(z,w)}}async function*hH6(q,K,_,z,Y,$,A,O=PO,w,j){N(`executePermissionRequestHooks called for tool: ${q}`);let H={...C$(Y,void 0,z),hook_event_name:"PermissionRequest",tool_name:q,tool_input:_,permission_suggestions:$};yield*GR({hookInput:H,toolUseID:K,matchQuery:q,signal:A,timeoutMs:O,toolUseContext:z,requestPrompt:w,toolInputSummary:j})}async function qv6(q,K,_=PO){let z={...C$(void 0),hook_event_name:"ConfigChange",source:q,file_path:K},Y=await ob({hookInput:z,timeoutMs:_,matchQuery:q});if(q==="policy_settings")return Y.map(($)=>({...$,blocked:!1}));return Y}async function LgK(q,K){let _=await ob({hookInput:q,timeoutMs:K});if(_.length>0)sE6();let z=_.flatMap(($)=>$.watchPaths??[]),Y=_.map(($)=>$.systemMessage).filter(($)=>!!$);return{results:_,watchPaths:z,systemMessages:Y}}function Yo1(q,K,_=PO){let z={...C$(void 0),hook_event_name:"CwdChanged",old_cwd:q,new_cwd:K};return LgK(z,_)}function $o1(q,K,_=PO){let z={...C$(void 0),hook_event_name:"FileChanged",file_path:q,event:K};return LgK(z,_)}function Wr6(){let q=bQ()?.InstructionsLoaded;if(q&&q.length>0)return!0;let K=sR()?.InstructionsLoaded;if(K&&K.length>0)return!0;return!1}async function Dr6(q,K,_,z){let{globs:Y,triggerFilePath:$,parentFilePath:A,timeoutMs:O=PO}=z??{},w={...C$(void 0),hook_event_name:"InstructionsLoaded",file_path:q,memory_type:K,load_reason:_,globs:Y,trigger_file_path:$,parent_file_path:A};await ob({hookInput:w,timeoutMs:O,matchQuery:_})}function RgK(q,K){if(q.blocked&&!q.succeeded)return{blockingError:{blockingError:q.output||"Elicitation blocked by hook",command:q.command}};if(!q.output.trim())return{};let _=q.output.trim();if(!_.startsWith("{"))return{};try{let z=lS6().parse(JSON.parse(_));if(rb(z))return{};if(!Cd(z))return{};if(z.decision==="block"||q.blocked)return{blockingError:{blockingError:z.reason||"Elicitation blocked by hook",command:q.command}};let Y=z.hookSpecificOutput;if(!Y||Y.hookEventName!==K)return{};if(!Y.action)return{};let A={response:{action:Y.action,content:Y.content}};if(Y.action==="decline")A.blockingError={blockingError:z.reason||(K==="Elicitation"?"Elicitation denied by hook":"Elicitation result blocked by hook"),command:q.command};return A}catch{return{}}}async function wg1({serverName:q,message:K,requestedSchema:_,permissionMode:z,signal:Y,timeoutMs:$=PO,mode:A,url:O,elicitationId:w}){let j={...C$(z),hook_event_name:"Elicitation",mcp_server_name:q,message:K,mode:A,url:O,elicitation_id:w,requested_schema:_},H=await ob({hookInput:j,matchQuery:q,signal:Y,timeoutMs:$}),J,M;for(let X of H){let P=RgK(X,"Elicitation");if(P.blockingError)M=P.blockingError;if(P.response)J=P.response}return{elicitationResponse:J,blockingError:M}}async function jg1({serverName:q,action:K,content:_,permissionMode:z,signal:Y,timeoutMs:$=PO,mode:A,elicitationId:O}){let w={...C$(z),hook_event_name:"ElicitationResult",mcp_server_name:q,elicitation_id:O,mode:A,action:K,content:_},j=await ob({hookInput:w,matchQuery:q,signal:Y,timeoutMs:$}),H,J;for(let M of j){let X=RgK(M,"ElicitationResult");if(X.blockingError)J=X.blockingError;if(X.response)H=X.response}return{elicitationResultResponse:H,blockingError:J}}async function H_7(q,K,_=5000,z=!1){if(j68())return;if(Qq8()){N("Skipping StatusLine command execution - workspace trust not accepted");return}let Y;if(fb())Y=v1("policySettings")?.statusLine;else Y=Z7()?.statusLine;if(!Y||Y.type!=="command")return;let $=K||AbortSignal.timeout(_);try{let A=g6(q),O=await hQ8(Y,"StatusLine","statusLine",A,$,vy());if(O.aborted)return;if(O.status===0){let w=O.stdout.trim().split(` |
| 7737 | `).map((w)=>w.trim()).filter(Boolean)}catch($){return N(`File suggestion helper failed: ${$}`,{level:"error"}),[]}}async function rhY({hook:q,messages:K,hookName:_,toolUseID:z,hookEvent:Y,timeoutMs:$,signal:A}){let O=q.timeout??$,{signal:w,cleanup:j}=Ty(A,{timeoutMs:O});try{if(w.aborted)return j(),{outcome:"cancelled",hook:q};let H=await new Promise((J,M)=>{let X=()=>M(Error("Function hook cancelled"));w.addEventListener("abort",X),Promise.resolve(q.callback(K,w)).then((P)=>{w.removeEventListener("abort",X),J(P)}).catch((P)=>{w.removeEventListener("abort",X),M(P)})});if(j(),H)return{outcome:"success",hook:q};return{blockingError:{blockingError:q.errorMessage,command:"function"},outcome:"blocking",hook:q}}catch(H){if(j(),H instanceof Error&&(H.message==="Function hook cancelled"||H.name==="AbortError"))return{outcome:"cancelled",hook:q};return H6(H),{message:V4({type:"hook_error_during_execution",hookName:_,toolUseID:z,hookEvent:Y,content:H instanceof Error?H.message:"Function hook execution error"}),outcome:"non_blocking_error",hook:q}}}async function ohY({toolUseID:q,hook:K,hookEvent:_,hookInput:z,signal:Y,hookIndex:$,toolUseContext:A}){let O=A?{getAppState:A.getAppState,updateAttributionState:A.updateAttributionState}:void 0,w=await K.callback(z,q,Y,$,O);if(rb(w))return{outcome:"success",hook:K};return{...A_7({json:w,command:"callback",hookName:`${_}:Callback`,toolUseID:q,hookEvent:_,expectedHookEvent:_,stdout:void 0,stderr:void 0,exitCode:void 0}),outcome:"success",hook:K}}function NJ6(){let q=bQ()?.WorktreeCreate;if(q&&q.length>0)return!0;let K=sR()?.WorktreeCreate;if(!K||K.length===0)return!1;let _=fb();return K.some((z)=>!(_&&("pluginRoot"in z)))}async function dq8(q){let K={...C$(void 0),hook_event_name:"WorktreeCreate",name:q},_=await ob({hookInput:K,timeoutMs:PO}),z=_.find(($)=>$.succeeded&&$.output.trim().length>0);if(!z){let $=_.filter((A)=>!A.succeeded).map((A)=>`${A.command}: ${A.output.trim()||"no output"}`);throw Error(`WorktreeCreate hook failed: ${$.join("; ")||"no successful output"}`)}return{worktreePath:z.output.trim()}}async function SQ8(q){let K=bQ()?.WorktreeRemove,_=sR()?.WorktreeRemove,z=K&&K.length>0,Y=_&&_.length>0;if(!z&&!Y)return!1;let $={...C$(void 0),hook_event_name:"WorktreeRemove",worktree_path:q},A=await ob({hookInput:$,timeoutMs:PO});if(A.length===0)return!1;for(let O of A)if(!O.succeeded)N(`WorktreeRemove hook failed [${O.command}]: ${O.output.trim()}`,{level:"error"});return!0}function TgK(q){return q.map(({hook:K})=>{if(K.type==="command")return{type:"command",command:K.command};else if(K.type==="prompt")return{type:"prompt",prompt:K.prompt};else if(K.type==="http")return{type:"http",command:K.url};else if(K.type==="function")return{type:"function",name:"function"};else if(K.type==="callback")return{type:"callback",name:"callback"};return{type:"unknown"}})}var PO=600000,chY=1500;var y$=y(()=>{bK();ya1();ZL6();I7();fa1();tE6();bw6();vK();NB();GL6();PA8();va1();mu();aV();v8();V1();Vj6();_K();U1();k8();nu();BZ();w46();Y_7();x3();Uw6();_8();oY();Gf();E8();nS6();_B8();p2();i1();y18();lP();ww6();Bq();OgK();HgK();fgK();zo();l8();m8();y8()});var pgK={};T8(pgK,{worktreeBranchName:()=>yJ6,validateWorktreeSlug:()=>VR6,restoreWorktreeSession:()=>CQ8,removeAgentWorktree:()=>QK6,parsePRReference:()=>xQ8,killTmuxSession:()=>NR6,keepWorktree:()=>yR6,isTmuxAvailable:()=>D_7,hasWorktreeChanges:()=>v67,getTmuxInstallInstructions:()=>f_7,getCurrentWorktreeSession:()=>n2,generateTmuxSessionName:()=>bQ8,execIntoTmuxWorktree:()=>$SY,createWorktreeForSession:()=>b88,createTmuxSessionForWorktree:()=>Z_7,createAgentWorktree:()=>c88,copyWorktreeIncludeFiles:()=>mgK,cleanupWorktree:()=>ER6,cleanupStaleAgentWorktrees:()=>G_7});import{spawnSync as Dk}from"child_process";import{copyFile as SgK,mkdir as M_7,readdir as ahY,readFile as shY,stat as CgK,symlink as thY,utimes as ehY}from"fs/promises";import{basename as J_7,dirname as xgK,join as ab}from"path";function VR6(q){if(q.length>hgK)throw Error(`Invalid worktree name: must be ${hgK} characters or fewer (got ${q.length})`);for(let K of q.split("/")){if(K==="."||K==="..")throw Error(`Invalid worktree name "${q}": must not contain "." or ".." path segments`);if(!qSY.test(K))throw Error(`Invalid worktree name "${q}": each "/"-separated segment must be non-empty and contain only letters, digits, dots, underscores, and dashes`)}}async function KSY(q){await M_7(q,{recursive:!0})}async function _SY(q,K,_){for(let z of _){if(yB(z)){N(`Skipping symlink for "${z}": path traversal detected`,{level:"warn"});continue}let Y=ab(q,z),$=ab(K,z);try{await thY(Y,$,"dir"),N(`Symlinked ${z} from main repository to worktree to avoid disk bloat`)}catch(A){let O=s1(A);if(O!=="ENOENT"&&O!=="EEXIST")N(`Failed to symlink ${z} (${O??"unknown"}): ${d6(A)}`,{level:"warn"})}}}function n2(){return TR}function CQ8(q){TR=q}function bQ8(q,K){return`${J_7(q)}_${K}`.replace(/[/.]/g,"_")}function X_7(q){return ab(q,".claude","worktrees")}function IgK(q){return q.replaceAll("/","+")}function yJ6(q){return`worktree-${IgK(q)}`}function ugK(q,K){return ab(X_7(q),IgK(K))}async function P_7(q,K,_){let z=ugK(q,K),Y=yJ6(K),$=await pR7(z);if($)return{worktreePath:z,worktreeBranch:Y,headCommit:$,existed:!0};await M_7(X_7(q),{recursive:!0});let A={...process.env,...zSY},O,w=null;if(_?.prNumber){let{code:X,stderr:P}=await S7(L7(),["fetch","origin",`pull/${_.prNumber}/head`],{cwd:q,stdin:"ignore",env:A});if(X!==0)throw Error(`Failed to fetch PR #${_.prNumber}: ${P.trim()||'PR may not exist or the repository may not have a remote named "origin"'}`);O="FETCH_HEAD"}else{let[X,P]=await Promise.all([dT(),QT(q)]),W=`origin/${X}`,D=P?await Be(P,`refs/remotes/origin/${X}`):null;if(D)O=W,w=D;else{let{code:f}=await S7(L7(),["fetch","origin",X],{cwd:q,stdin:"ignore",env:A});O=f===0?W:"HEAD"}}if(!w){let{stdout:X,code:P}=await S7(L7(),["rev-parse",O],{cwd:q});if(P!==0)throw Error(`Failed to resolve base branch "${O}": git rev-parse failed`);w=X.trim()}let j=N7().worktree?.sparsePaths,H=["worktree","add"];if(j?.length)H.push("--no-checkout");H.push("-B",Y,z,O);let{code:J,stderr:M}=await S7(L7(),H,{cwd:q});if(J!==0)throw Error(`Failed to create worktree: ${M}`);if(j?.length){let X=async(G)=>{throw await S7(L7(),["worktree","remove","--force",z],{cwd:q}),Error(G)},{code:P,stderr:W}=await S7(L7(),["sparse-checkout","set","--cone","--",...j],{cwd:z});if(P!==0)await X(`Failed to configure sparse-checkout: ${W}`);let{code:D,stderr:f}=await S7(L7(),["checkout","HEAD"],{cwd:z});if(D!==0)await X(`Failed to checkout sparse worktree: ${f}`)}return{worktreePath:z,worktreeBranch:Y,headCommit:w,baseBranch:O,existed:!1}}async function mgK(q,K){let _;try{_=await shY(ab(q,".worktreeinclude"),"utf-8")}catch{return[]}let z=_.split(/\r?\n/).map((J)=>J.trim()).filter((J)=>J.length>0&&!J.startsWith("#"));if(z.length===0)return[];let Y=await S7(L7(),["ls-files","--others","--ignored","--exclude-standard","--directory"],{cwd:q});if(Y.code!==0||!Y.stdout.trim())return[];let $=Y.stdout.trim().split(` |