@hasna/hooks 0.12.2 → 0.12.4

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.
@@ -0,0 +1,20 @@
1
+ var{defineProperty:fZ,getOwnPropertyNames:t0,getOwnPropertyDescriptor:e0}=Object,Z2=Object.prototype.hasOwnProperty;function $2(Z){return this[Z]}var J2=(Z)=>{var J=(B0??=new WeakMap).get(Z),$;if(J)return J;if(J=fZ({},"__esModule",{value:!0}),Z&&typeof Z==="object"||typeof Z==="function"){for(var X of t0(Z))if(!Z2.call(J,X))fZ(J,X,{get:$2.bind(Z,X),enumerable:!($=e0(Z,X))||$.enumerable})}return B0.set(Z,J),J},B0;var X2=(Z)=>Z;function z2(Z,J){this[Z]=X2.bind(null,J)}var K2=(Z,J)=>{for(var $ in J)fZ(Z,$,{get:J[$],enumerable:!0,configurable:!0,set:z2.bind(J,$)})};var Y4={};K2(Y4,{version:()=>K4,evaluate:()=>Q4,abi:()=>z4});module.exports=J2(Y4);var SZ=require("node:os"),Y0=require("node:path");var R=require("node:path");var P=require("node:path"),W=require("node:fs"),U0=require("node:child_process"),V0={missing:"No verified @hasna/trash guard was found on PATH.",unsafe_executable:"The Trash candidate is not an owned executable file or is writable by group or others.",unsafe_manifest:"The Trash package manifest is not a safe owned regular file.",unsafe_directory:"A Trash PATH or package directory is not owned safely or is writable by group or others.",unsafe_interpreter:"The Trash interpreter is missing, unsupported, or not a safe owned executable on its actual PATH.",unrecognized_package:"The candidate is not the registered @hasna/trash executable.",identity_failed:"The installed Trash identity probe failed or exceeded its deadline.",unsupported_protocol:"The installed Trash version does not expose the required guard protocol."};function GZ(Z){return Z===0||Z===process.getuid?.()}function IZ(Z,J=!1){let $=Z;for(let X=0;X<32;X++){if(!P.isAbsolute($)||$.length>4096||!HZ("/"))return!1;let z=$.split("/"),Q=z.pop();if(!Q||Q==="."||Q==="..")return!1;let Y="/";for(let H of z){if(!H||H===".")continue;if(H===".."){Y=P.dirname(Y);continue}let B=P.join(Y,H),U=W.lstatSync(B);if(J&&B==="/bin"&&U.isSymbolicLink()&&U.uid===0){let V=W.realpathSync(B);if(!HZ(V))return!1;Y=V;continue}if(!U.isDirectory()||!GZ(U.uid)||U.mode&18)return!1;Y=B}let G=P.join(Y,Q),K=W.lstatSync(G);if(!GZ(K.uid))return!1;if(K.isSymbolicLink()){let H=W.readlinkSync(G);$=P.isAbsolute(H)?H:Y+"/"+H;continue}return K.isFile()&&Boolean(K.mode&73)&&!(K.mode&18)}return!1}function Q2(Z){if(!P.isAbsolute(Z)||P.resolve(Z)!==(Z.replace(/\/+$/,"")||"/"))return!1;for(let J=P.resolve(Z);;J=P.dirname(J)){try{return W.lstatSync(J),HZ(J)}catch($){if($.code!=="ENOENT")return!1}if(P.dirname(J)===J)return!1}}function Y2(Z,J){let $=W.openSync(Z,W.constants.O_RDONLY|W.constants.O_NONBLOCK|W.constants.O_NOFOLLOW),X;try{if(!W.fstatSync($).isFile())return!1;let Q=Buffer.alloc(256),Y=W.readSync($,Q,0,Q.length,0);X=Q.subarray(0,Y).toString("utf8").split(`
2
+ `)[0]}finally{W.closeSync($)}let z=/^#!(\/[A-Za-z0-9_./-]+)$/.exec(X);if(z&&z[1]!=="/usr/bin/env")return IZ(z[1],!0);if(X!=="#!/usr/bin/env bun"||!IZ("/usr/bin/env",!0))return!1;for(let Q of J.split(":").slice(0,64)){if(!Q2(Q))return!1;let Y=P.resolve(Q,"bun");try{if(!W.statSync(Y).isFile())continue;W.accessSync(Y,W.constants.X_OK)}catch{continue}return IZ(Y,!0)}return!1}function HZ(Z){let J=Z;for(;;){let $=W.lstatSync(J);if(!$.isDirectory()||!GZ($.uid)||($.mode&18)!==0)return!1;let X=P.dirname(J);if(X===J)return!0;J=X}}function BZ(Z=process.env){let J=Z.PATH??"",$=Date.now()+2000,X="missing",z=(Q)=>{if(X==="missing"||X==="unrecognized_package"||Q.startsWith("unsafe_"))X=Q};for(let Q of J.split(":").slice(0,64)){if(!P.isAbsolute(Q)||Date.now()>=$)continue;let Y=P.resolve(Q,"trash");try{let G=W.statSync(Y);if(!G.isFile()||!GZ(G.uid)||(G.mode&73)===0||(G.mode&18)!==0){z("unsafe_executable");continue}let K=W.realpathSync(Y);if(!HZ(P.resolve(Q))||!HZ(P.dirname(K))){z("unsafe_directory");continue}if(!IZ(Y)){z("unsafe_directory");continue}let H=P.resolve(P.dirname(K),"../.."),B=P.join(H,"package.json"),U=W.statSync(B);if(!U.isFile()||!GZ(U.uid)||U.size>16384||(U.mode&18)!==0||W.lstatSync(B).isSymbolicLink()){z("unsafe_manifest");continue}let V=JSON.parse(W.readFileSync(B,"utf8"));if(V.name!=="@hasna/trash"||typeof V.version!=="string"||typeof V.bin?.trash!=="string"||W.realpathSync(P.resolve(H,V.bin.trash))!==K){z("unrecognized_package");continue}try{if(!Y2(K,J)){z("unsafe_interpreter");continue}}catch{z("unsafe_interpreter");continue}let C=$-Date.now();if(C<=0){z("identity_failed");break}let _=U0.spawnSync(Y,["--identity"],{encoding:"utf8",timeout:C,maxBuffer:2048,env:{PATH:J},stdio:["ignore","pipe","pipe"]});if(_.error||_.status!==0||Date.now()>=$){z("identity_failed");continue}let O=JSON.parse(_.stdout);if(O.name==="@hasna/trash"&&O.version===V.version&&O.guardProtocol==="hasna.trash.guard.v1")return{ok:!0,path:Y,version:V.version};z("unsupported_protocol")}catch{}}return{ok:!1,code:X}}function DZ(Z=process.env){let J=BZ(Z);return J.ok?J.path:null}function $Z(Z){let J=Z.tool_input?.command;return typeof J==="string"?J:""}var M0=["/","/bin","/boot","/dev","/etc","/home","/lib","/lib32","/lib64","/libx32","/opt","/proc","/root","/run","/sbin","/srv","/sys","/usr","/var","/Applications","/Library","/System","/Users","/Volumes","/private"];var H2=600000,B2="Delete via trash guard (rm intercepted and made recoverable)",U2=[".hasna/repos/clones","workspace/repos"],V2=[".hasna",".ssh",".aws"],F0={rmdir:"`rmdir` is a delete that trash-guard does not rewrite (it takes rmdir's flags, not rm's). Re-run it as `rm -d -- <path>` for an empty directory, or `rm -r -- <path>` for a non-empty one, and it is redirected into trash.",unlink:"`unlink` is a delete that trash-guard does not rewrite. Re-run it as `rm -- <path>` and it is redirected into trash.",shred:"`shred` destroys content irrecoverably and is never allowed. Re-run it as `rm -- <path>` and it is redirected into trash."},M2=new Set(["sh","bash","zsh","dash","ksh","ash","eval","source",".","su","runuser","env"]),F2={sudo:["-u","--user","-g","--group","-p","--prompt","-C","--chdir","-h","--host","-r","--role","-t","--type","-U","--other-user"],doas:["-u","-C"],env:["-u","--unset","-C","--chdir","-S","--split-string"],nice:["-n","--adjustment"],ionice:["-c","--class","-n","--classdata","-p","--pid"],stdbuf:["-i","-o","-e","--input","--output","--error"],time:["-f","--format","-o","--output"],timeout:["-s","--signal","-k","--kill-after"],nohup:[],setsid:[],command:[],builtin:[],exec:["-a"]},q2={timeout:1},N2=new Set(["busybox","toybox"]),_2=new Set(["!","{","}","then","do","else","elif","if","while","until","for","case","esac","fi","done","select","function"]),j2=new Set(["-C","-c","--git-dir","--work-tree","--namespace","--exec-path","--config-env"]),W2=/(^|[^A-Za-z0-9_.-])(rm|rmdir|unlink|shred)(?![A-Za-z0-9_.-])/;function VZ(Z){return W2.test(A(Z))}function FZ(Z){return Z.map((J)=>J.replace(/^-[iv0]*S|^--split-string=/," ")).join(" ")}var j0=/^[A-Za-z_][A-Za-z0-9_]*=/;function MZ(Z){let J=Z.lastIndexOf("/");return J>=0?Z.slice(J+1):Z}function W0(Z,J){let $=Z.indexOf("'",J+1);return $===-1?-1:$+1}function wZ(Z,J){let $=J+1;while($<Z.length){if(Z[$]==="\\"){$+=2;continue}if(Z[$]==="`")return $+1;$++}return-1}function T0(Z,J){let $=J+1;while($<Z.length){let X=Z[$];if(X==="\\"){$+=2;continue}if(X==='"')return $+1;if(X==="`"){let z=wZ(Z,$);if(z<0)return-1;$=z;continue}if(X==="$"&&Z[$+1]==="("){let z=qZ(Z,$+1);if(z<0)return-1;$=z;continue}$++}return-1}function JZ(Z,J){if(Z[J]!=="<"||Z[J+1]!=="<"||Z[J+2]==="<")return null;let $=J+2,X=Z[$]==="-";if(X)$++;while(Z[$]===" "||Z[$]==="\t")$++;let z="",Q=!1;while($<Z.length&&!/[\s;|&<>()]/.test(Z[$])){let Y=Z[$];if(Y==="'"||Y==='"'){let G=Z.indexOf(Y,$+1);if(G<0)return null;z+=Z.slice($+1,G),Q=!0,$=G+1;continue}if(Y==="\\"){if($+1>=Z.length)return null;z+=Z[$+1],Q=!0,$+=2;continue}z+=Y,$++}return z?{delimiter:z,stripTabs:X,quoted:Q,end:$}:null}function LZ(Z,J,$){let X=J+1;for(let z of $)for(;;){if(X>Z.length)return-1;let Q=Z.indexOf(`
3
+ `,X),Y=Q===-1?Z.length:Q,G=Z.slice(X,Y);if(G.endsWith("\r"))G=G.slice(0,-1);let K=z.stripTabs?G.length-G.replace(/^\t+/,"").length:0;if(z.stripTabs)G=G.slice(K);if(G===z.delimiter){X=Y+1;break}if(G.startsWith(z.delimiter)&&/^\s*\)/.test(G.slice(z.delimiter.length))){if(z===$[$.length-1])return X+K+z.delimiter.length;return-1}if(Q===-1)return-1;X=Q+1}return X-1}function qZ(Z,J){let $=Z.length,X=Z[J+1]==="(",z=0,Q=J,Y=[];while(Q<$){let G=Z[Q];if(G==="\\"){Q+=2;continue}if(G==="'"){let K=W0(Z,Q);if(K<0)return-1;Q=K;continue}if(G==='"'){let K=T0(Z,Q);if(K<0)return-1;Q=K;continue}if(G==="`"){let K=wZ(Z,Q);if(K<0)return-1;Q=K;continue}if(!X&&G==="<"&&Z[Q+1]==="<"){if(Z[Q+2]==="<"){Q+=3;continue}let K=JZ(Z,Q);if(!K)return-1;Y.push(K),Q=K.end;continue}if(G===`
4
+ `&&Y.length>0){let K=LZ(Z,Q,Y);if(K<0)return-1;Y=[],Q=K;continue}if(!X&&G==="#"&&/[\s;&|(]/.test(Z[Q-1])){let K=Z.indexOf(`
5
+ `,Q);if(K<0)return-1;Q=K;continue}if(G==="(")z++;else if(G===")"){if(z--,z===0)return Y.length>0?-1:Q+1}Q++}return-1}function r(Z){let J=[],$=[],X=[],z=new Set,Q=-1,Y=!1,G=!0,K=0,H=Z.length,B=(M)=>{if(Q>=0){let j=X.length;if(X.push({text:Z.slice(Q,M),start:Q,end:M}),Y)z.add(j);Q=-1,Y=!1}},U=(M)=>{if(B(M),X.length>0)J.push({words:X,redirects:z});X=[],z=new Set,Y=!1},V=(M)=>W0(Z,M),C=(M)=>wZ(Z,M),_=(M)=>qZ(Z,M),O=(M)=>T0(Z,M);while(K<H){let M=Z[K];if(M===" "||M==="\t"||M==="\r"){B(K),K++;continue}if(M===`
6
+ `){U(K),K++;continue}if(M===";"){U(K),K++;continue}if(M==="&"){U(K),K+=Z[K+1]==="&"?2:1;continue}if(M==="|"){U(K),K+=Z[K+1]==="|"?2:1;continue}if(M==="("||M===")"){U(K),K++;continue}if(M==="<"&&Z[K+1]==="<"&&Z[K+2]!=="<"){let j=Z.slice(K+2).match(/^-?[ \t]*(['"]?)([A-Za-z_][A-Za-z0-9_]*)\1/);if(!j){G=!1,K=H;continue}let c=Z.indexOf(`
7
+ `,K+2+j[0].length);if(c===-1){G=!1,K=H;continue}let p=Z.slice(c+1),a=T2(p,j[2]);if(a===-1){G=!1,K=H;continue}B(K),K=c+1+a+j[2].length;continue}if(M===">"||M==="<"){if(Q>=0&&/^\d+$/.test(Z.slice(Q,K)))Q=-1;if(B(K),Y=!0,K++,Z[K]===M||Z[K]==="&"||M===">"&&Z[K]==="|"||M==="<"&&Z[K]===">")K++;continue}if(M==="'"){if(Q<0)Q=K;let j=V(K);if(j<0)G=!1,K=H;else K=j;continue}if(M==='"'){if(Q<0)Q=K;let j=O(K);if(j<0)G=!1,K=H;else K=j;continue}if(M==="`"){if(Q<0)Q=K;let j=C(K);if(j<0)G=!1,K=H;else $.push(Z.slice(K+1,j-1)),K=j;continue}if(M==="$"&&Z[K+1]==="("){if(Q<0)Q=K;let j=_(K+1);if(j<0)G=!1,K=H;else $.push(Z.slice(K+2,j-1)),K=j;continue}if(M==="\\"){if(Q<0)Q=K;if(K+1>=H)G=!1,K=H;else K+=2;continue}if(Q<0)Q=K;K++}return U(H),{segments:J,trustworthy:G,substitutions:$}}function T2(Z,J){let $=0;while($<=Z.length){let X=Z.indexOf(J,$);if(X===-1)return-1;let z=X===0||Z[X-1]===`
8
+ `,Q=X+J.length,Y=Q===Z.length||Z[Q]===`
9
+ `||Z[Q]==="\r";if(z&&Y)return X;$=X+1}return-1}function A(Z){let J="",$=0;while($<Z.length){let X=Z[$];if(X==="\\"){if($+1<Z.length)J+=Z[$+1];$+=2;continue}if(X==="'"){let z=Z.indexOf("'",$+1);if(z===-1){J+=Z.slice($+1);break}J+=Z.slice($+1,z),$=z+1;continue}if(X==='"'){$++;while($<Z.length&&Z[$]!=='"'){if(Z[$]==="\\"&&$+1<Z.length){J+=Z[$+1],$+=2;continue}J+=Z[$],$++}$++;continue}J+=X,$++}return J}function l(Z){let J=0,$=0;while(J<Z.words.length&&$++<32){if(Z.redirects.has(J)){J++;continue}let X=Z.words[J].text,z=A(X);if(j0.test(z)&&!z.startsWith("-")){J++;continue}if(_2.has(z)){J++;continue}let Q=MZ(z);if(Q==="command")for(let G of Z.words.filter((K,H)=>H>J&&!Z.redirects.has(H))){let K=A(G.text);if(K==="--"||!K.startsWith("-"))break;if(/^-[pvV]*[vV][pvV]*$/.test(K))return-1}let Y=F2[Q];if(Y){let G=J;J++;while(J<Z.words.length){if(Z.redirects.has(J)){J++;continue}let H=A(Z.words[J].text);if(!H.startsWith("-")||H==="-")break;if(H==="--"){J++;break}if(Q==="env"&&(/^-[iv0]*S/.test(H)||/^--split-string(?:=|$)/.test(H)))return G;if(J++,Y.includes(H)||Q==="exec"&&/^-[cl]*a$/.test(H)){while(Z.redirects.has(J))J++;J++}}let K=q2[Q]??0;while(K>0&&J<Z.words.length){let H=A(Z.words[J].text);if(H.startsWith("-")&&H!=="-")break;J++,K--}continue}return J}return-1}function C2(Z,J){let $=[],X=!1;for(let z=J+1;z<Z.words.length;z++){if(Z.redirects.has(z))continue;let Q=A(Z.words[z].text);if(!X){if(Q==="--"){X=!0;continue}if(Q.startsWith("-")&&Q!=="-")continue}$.push(Z.words[z])}return $}function I2(Z){return U2.map((J)=>R.join(Z,...J.split("/")))}function D2(Z,J){if(Z==="~"||Z==="$HOME"||Z==="${HOME}")return J;if(Z.startsWith("~/"))return R.join(J,Z.slice(2));if(Z.startsWith("$HOME/"))return R.join(J,Z.slice(6));if(Z.startsWith("${HOME}/"))return R.join(J,Z.slice(8));return Z}function kZ(Z,J,$){let X=A(Z);if(!X)return null;if(X.includes("`"))return null;if(X==="$HOME"||X==="${HOME}"||X==="$HOME/"||X==="${HOME}/")return $;if(X.replace(/\$\{HOME\}/g,"").replace(/\$HOME/g,"").includes("$"))return null;if(/[*?[\]]/.test(X))return null;if(X.startsWith("~")){let G=D2(X,$);if(G===X)return null;X=G}let Y=(R.isAbsolute(X)?R.normalize(X):R.resolve(J,X)).replace(/\/+$/,"");return Y===""?"/":Y}function UZ(Z,J){return Z===J||Z.startsWith(`${J}${R.sep}`)}function L2(Z,J){let $=`${R.join(J,".hasna","scratchpad","scratch")}${R.sep}`;if(!Z.startsWith($))return!1;let[X,z]=Z.slice($.length).split(R.sep);if(!X||!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(X)||X.endsWith(".")||!z)return!1;let Q=z.normalize("NFKC").toLowerCase();return Q!=="meta.json"&&Q!==".lock"}function A2(Z,J){if(Z===J)return`\`${Z}\` is the home directory itself, which is never deleted or trashed. Delete a specific file or directory inside it instead.`;for(let $ of M0){if(Z!==$&&!UZ($,Z))continue;return $==="/"?`\`${Z}\` is the filesystem root, which is never deleted.`:`\`${Z}\` is the system root \`${$}\` (or an ancestor of it), which is never deleted or trashed.`}for(let $ of V2){let X=R.join(J,$);if($===".hasna"&&L2(Z,J))continue;if(!UZ(Z,X)&&!UZ(X,Z))continue;return`\`${Z}\` is the protected \`~/${$}\` path (or contains it), which is never deleted or trashed. Delete a specific file inside it, and only when you are sure.`}return null}function P2(Z,J,$){let X=I2($);if(X.some((z)=>UZ(J,z)))return!0;for(let z of Z){let Q=kZ(z.text,J,$);if(Q&&X.some((Y)=>UZ(Q,Y)))return!0}return!1}function NZ(Z,J){let $={cwd:J.cwd,home:J.home,depth:J.depth??0},X={rmHits:[],handoffHits:[],refusals:[],protectedHits:[],trustworthy:!0},z=r(Z);if(X.trustworthy=z.trustworthy,!z.trustworthy)return X;let Q=$.cwd;for(let Y of z.segments){let G=l(Y);if(G<0)continue;let K=MZ(A(Y.words[G].text));if(K==="cd"){let U=Y.words[G+1];if(U){let V=kZ(U.text,Q,$.home);if(V)Q=V;else Q=$.cwd}continue}let H=F0[K];if(H){X.refusals.push({reason:H});continue}if(K==="rm"){let U=C2(Y,G);if(U.length===0)continue;let V={word:Y.words[G],operands:U};if(P2(V.operands,Q,$.home)){X.handoffHits.push(V);continue}X.rmHits.push(V);for(let C of V.operands){let _=kZ(C.text,Q,$.home);if(!_)continue;let O=A2(_,$.home);if(O){X.protectedHits.push({reason:O});break}}continue}if(N2.has(K)){let U=Y.words.findIndex((C,_)=>_>G&&!A(C.text).startsWith("-")),V=U>=0?MZ(A(Y.words[U].text)):"";if(V==="rm"||V in F0)X.refusals.push({reason:`\`${K} ${V}\` runs the ${K} applet, whose own \`rm\` is not GNU \`rm\` and cannot be rewritten in place. Run the delete as \`rm -- <path>\`, which is redirected into trash.`});continue}if(K==="git"){let U=xZ(Y,G);if(U==="rm"||U==="clean"){if(!(U==="rm"?E2(Y,G):C0(Y,G)))X.refusals.push({reason:U==="rm"?"`git rm` is refused: without `--cached` it deletes the working-tree file, and its semantics are not `rm`'s. Use `rm -- <path>` (intercepted and redirected into trash) to remove the file, or `git rm --cached -- <path>` to unstage it without deleting.":"`git clean` deletes untracked files irrecoverably and is refused. Remove them explicitly with `rm -- <path>` (intercepted and redirected into trash), or preview with `git clean -n`."})}continue}if(K==="find"){let U=Y.words.map((_)=>A(_.text));if(U.indexOf("-delete")>=0){X.refusals.push({reason:"`find -delete` deletes files irrecoverably and is refused. List the paths first (`find … -print`), then remove them explicitly with `rm -- <path>` so the delete is redirected into trash."});continue}let C=U.findIndex((_)=>_==="-exec"||_==="-execdir"||_==="-ok");if(C>=0&&U.slice(C).some((_)=>_==="rm"||_==="rmdir"||_==="unlink"||_==="shred")){X.refusals.push({reason:"`find -exec <delete>` is refused: the delete runs through find, not through `rm`, and cannot be redirected into trash. Remove the paths explicitly with `rm -- <path>`."});continue}continue}if(K==="xargs"&&Y.words.some((U)=>A(U.text)==="rm")){X.refusals.push({reason:"`xargs rm` takes its targets from stdin, so this hook cannot verify what would be deleted. Pipe the paths into an explicit `rm -- <path> …` instead, which is redirected into trash."});continue}let B=K==="env"?FZ(Y.words.map((U)=>A(U.text))):O2(Y);if(M2.has(K)&&VZ(B)){X.refusals.push({reason:`\`${K}\` runs a command string this hook cannot rewrite in place. Run the delete directly as \`rm -- <path>\` (intercepted and redirected into trash), or as a script that uses \`trash guard\` itself.`});continue}}if($.depth<3)for(let Y of z.substitutions){let G=NZ(Y,{cwd:Q,home:$.home,depth:$.depth+1});if(G.rmHits.length>0||G.refusals.length>0||G.handoffHits.length>0||G.protectedHits.length>0){X.refusals.push({reason:"This command runs a delete inside a command substitution `$(…)`, which this hook cannot rewrite. Run the delete as a separate `rm -- <path>` command, which is redirected into trash."});break}}else if(z.substitutions.some((Y)=>VZ(Y)))X.refusals.push({reason:"This command nests a delete inside command substitutions deeper than this hook will follow. Run the delete as a separate `rm -- <path>` command."});return X}function O2(Z){return Z.words.map((J)=>J.text).join(" ")}function xZ(Z,J){let $=J+1;while($<Z.words.length){let X=A(Z.words[$].text);if(!X.startsWith("-"))return X;if($++,j2.has(X))$++}return null}function E2(Z,J){if(Z.words.slice(J+1).map((X)=>A(X.text)).includes("--cached"))return!0;return C0(Z,J)}function C0(Z,J){let $=Z.words.slice(J+1).map((X)=>A(X.text));return $.includes("-n")||$.includes("--dry-run")}function q0(Z){if(/^[A-Za-z0-9_\-./+=:,@%^]+$/.test(Z))return Z;return`'${Z.replace(/'/g,"'\\''")}'`}function R2(Z,J,$,X){let z=X?["/usr/bin/env","-i",`HOME=${X.home}`,`PATH=${X.path}`,`HASNA_TRASH_AGENT=${X.agent}`,X.runtime,"--config=/dev/null","--no-env-file","--no-macros","--no-install",$,"guard"].map(q0).join(" "):`${q0($)} guard`,Q=[...J].sort((G,K)=>K.word.start-G.word.start),Y=Z;for(let G of Q)Y=`${Y.slice(0,G.word.start)}${z}${Y.slice(G.word.end)}`;return Y}function v2(Z,J,$,X,z){if(!J||J===Z)return!1;if($.length===0)return!1;let Q=NZ(J,{cwd:X,home:z});if(!Q.trustworthy)return!1;if(Q.rmHits.length>0||Q.handoffHits.length>0)return!1;return Q.refusals.length===0}function y2(Z,J){let $={};for(let[X,z]of Object.entries(Z??{}))$[X]=z;if($.command=J,typeof $.description!=="string"||$.description.trim()==="")$.description=B2;if(typeof $.timeout!=="number"||!Number.isFinite($.timeout)||$.timeout<=0)$.timeout=H2;if(typeof $.run_in_background!=="boolean")$.run_in_background=!1;if("dangerouslyDisableSandbox"in $&&typeof $.dangerouslyDisableSandbox!=="boolean")delete $.dangerouslyDisableSandbox;return $}function S2(Z,J,$,X,z){if(typeof Z.command!=="string"||Z.command.trim()==="")return!1;if(typeof Z.description!=="string"||Z.description.trim()==="")return!1;if(typeof Z.timeout!=="number"||!Number.isFinite(Z.timeout)||Z.timeout<=0)return!1;if(typeof Z.run_in_background!=="boolean")return!1;if("dangerouslyDisableSandbox"in Z&&typeof Z.dangerouslyDisableSandbox!=="boolean")return!1;return v2(J,Z.command,$,X,z)}function b2(Z){let J=new Set(["export","set","unset","readonly","declare","typeset","local","alias","unalias","read","readarray","mapfile","getopts","trap","enable","function","env","sudo","doas","stdbuf"]);return r(Z).segments.some((X)=>{let z=l(X);if(X.words.slice(0,z<0?X.words.length:z).some((G)=>j0.test(A(G.text))||J.has(MZ(A(G.text)))))return!0;if(z<0)return!1;let Y=X.words[z];return J.has(MZ(A(Y.text)))||/^\s*\(\s*\)\s*\{/.test(Z.slice(Y.end))})}function h(Z){return{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:Z}}}function f2(Z){return{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:Z}}}function k2(Z){try{if(Z.inspectTrash){let J=Z.inspectTrash();return J.ok?{path:J.path,error:null}:{path:null,error:`${J.code}: ${V0[J.code]}`}}return{path:Z.findTrash(),error:null}}catch(J){return{path:null,error:J instanceof Error?J.message:String(J)}}}var w2="[trash-guard] No verified @hasna/trash guard was found on PATH. This deletion is refused. Install the current @hasna/trash package with Bun and run its setup; the operating-system trash utility is not a compatible guard.";function I0(Z,J){if(Z.hook_event_name!=="PreToolUse")return{continue:!0};if(["apply_patch","ApplyPatch","functions.apply_patch"].includes(Z.tool_name??"")){let H=Z.tool_input?.command;if(typeof H!=="string")return h("[trash-guard] Unreadable patch input; deletion safety cannot be checked.");if(/^\s*\*\*\* Delete File:/m.test(H))return h("[trash-guard] Delete File would bypass recoverable deletion. First use `trash put -- <path>` or the trash_put MCP tool, then submit any remaining edits without the deletion block.");return{continue:!0}}if(Z.tool_name!=="Bash")return{continue:!0};if(typeof Z.tool_input?.command!=="string")return h("[trash-guard] The Bash tool call carried no readable `command`, so this hook cannot verify what would run. Refusing a call it cannot verify. Re-run the delete explicitly as `rm -- <path>` so it can be redirected into trash.");let X=$Z(Z);if(!X.trim())return{continue:!0};let z=NZ(X,{cwd:J.cwd,home:J.home});if(z.refusals.length>0)return h(`[trash-guard] ${z.refusals[0].reason}`);if(z.protectedHits.length>0)return h(`[trash-guard] ${z.protectedHits[0].reason}`);if(!z.trustworthy)return VZ(X)?h("[trash-guard] This command could not be parsed to the end (unterminated quote, substitution or here-document), so a delete inside it cannot be redirected. Re-run the delete as a plain `rm -- <path>` command."):{continue:!0};if(z.rmHits.length===0){if(z.handoffHits.length>0)return{continue:!0};return{continue:!0}}if(z.handoffHits.length>0)return h("[trash-guard] This command mixes a delete under the protected repo-checkout roots (owned by workspace-repos-guard) with a delete outside them, and a partial rewrite would leave one of them unredirected. Re-run them as separate commands, so each delete is handled by the hook that owns it.");let Q=k2(J);if(Q.error!==null)return h(`[trash-guard] The guard could not resolve the \`trash\` binary (${Q.error}), so this \`rm\` cannot be redirected into a recoverable delete — and an unrecoverable delete is never allowed, so the command is refused rather than run. Fix the environment (PATH, permissions) and re-run the same command.`);if(Q.path===null)return h(w2);let Y=Q.path;if(J.execution&&b2(X))return h("[trash-guard] A deletion combined with shell environment changes cannot use the verified native execution context. Run the deletion as a separate plain rm command.");let G=R2(X,z.rmHits,Y,J.execution),K=y2(Z.tool_input,G);if(J.execution)K.hasna_execution="hasna.hooks.execution.v1";if(!S2(K,X,z.rmHits,J.cwd,J.home))return h("[trash-guard] The rewrite of this command did not verify (the delete could not be redirected cleanly), so the command is refused rather than run unredirected. Re-run the delete as a plain `rm -- <path>` command.");return f2(K)}var y=require("node:fs"),mZ=require("node:os"),T=require("node:path");var x2=new Set(["Write","Edit","MultiEdit","NotebookEdit"]),g2=new Set(["apply_patch","ApplyPatch","functions.apply_patch"]),h2=["hasna","hasnaxyz","hasna-products"],_Z="workspace-repos-guard";function u2(Z){return T.join(Z,".hasna","repos","clones")}function l2(Z){return T.join(Z,"workspace","repos")}function P0(Z){return[u2(Z),l2(Z)]}function m2(Z){return T.join(Z,".hasna","hooks","config","workspace-repos-guard-orgs")}var c2=/^[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?$/;function gZ(Z){let J=process.getuid?.();return J!==void 0&&(Z.uid===0||Z.uid===J)&&(Z.mode&18)===0}function p2(Z){let J=m2(Z),$;try{let z=y.openSync(J,y.constants.O_RDONLY|y.constants.O_NOFOLLOW);try{let Y=y.fstatSync(z);if(!Y.isFile()||!gZ(Y)||Y.size>4096)return null;$=y.readFileSync(z,"utf8")}finally{y.closeSync(z)}let Q=T.normalize(Z);for(let Y=T.dirname(J);Y!==Q;Y=T.dirname(Y)){let G=y.lstatSync(Y);if(!G.isDirectory()||!gZ(G)||Y===T.dirname(Y))return null}if(!gZ(y.statSync(Q)))return null}catch{return null}let X=$.replace(/#[^\n]*/g,"").split(/[\s,]+/).filter(Boolean);return X.length>0&&X.every((z)=>c2.test(z))?new Set(X):null}function d2(Z=process.env,J=mZ.homedir()){let $=Z.WORKSPACE_REPOS_GUARD_ORGS;if(typeof $==="string"&&$.trim())return new Set($.split(",").map((X)=>X.trim()).filter(Boolean));return p2(J)??new Set(h2)}function hZ(Z,J,$,X){if(X==="read")return{blocked:!1};let z=T.relative(J,Z);if(z===""){if(X==="delete")return{blocked:!0,reason:`[${_Z}] delete of the protected repo-checkout root is forbidden: ${J}`};return{blocked:!0,reason:`[${_Z}] writes directly to the protected repo-checkout root are forbidden: ${J}`}}if(z.startsWith(`..${T.sep}`)||z===".."||T.isAbsolute(z))return{blocked:!1};let Q=z.split(T.sep).filter(Boolean);if(X==="delete")return{blocked:!0,reason:`[${_Z}] delete under the protected repo-checkout root (${J}) is forbidden at any depth: ${Z}`};if(Q.length<=1)return{blocked:!0,reason:`[${_Z}] writing would create a top-level entry directly under the protected repo-checkout root (${J}); only GitHub-org folders belong there: ${Z}`};let Y=Q[0];if(!$.has(Y))return{blocked:!0,reason:`[${_Z}] '${Y}' is not an allowed GitHub org under the protected repo-checkout root (${J}); allowed: ${[...$].join(", ")}: ${Z}`};return{blocked:!1}}var O0=/\b(?:-o|--output|-O|--output-document|-out)\b/,i2=/\d*[<>]&\s*(?:\d+|-)(?=$|[\s;&|)])/g,s2=/(?:\d+|&)?(?:>>|>\||>&|<>|>)\s*([^\s;&|<>()\x60]*)/g;function E0(Z){return Z.replace(i2," ")}function a2(Z){let J=[],$=null,X=0,z=0,Q=!1,Y=0;for(let G=0;G<Z.length;G++){let K=Z[G];if($==="'"){if(K==="'")$=null;continue}if(K==="\\"){G++;continue}if(K==="("){X++;continue}if(K===")"){if(--X<0)return[Z];continue}if(K==="$"&&Z[G+1]==="{"){z++,G++;continue}if(K==="}"&&z>0){z--;continue}if(K==="`"){Q=!Q;continue}if($==='"'){if(K==='"')$=null;continue}if(K==="'"||K==='"'){$=K;continue}if(K!=="|"||X>0||z>0||Q||Z[G-1]===">")continue;if(J.push(Z.slice(Y,G)),Z[G+1]==="&")G++;Y=G+1}if($||X!==0||z!==0||Q)return[Z];return J.push(Z.slice(Y)),J}function n2(Z){let J=[],$="",X="",z=null,Q=!1,Y=()=>{if(!Q)return;let G=X.replace(/^"?\$\{?HOME\}?"?(?=\/|$)/,""),K=$.startsWith("~")&&!/^~(?:\/|$)/.test(X);J.push({text:K?`./${$}`:$,opaque:/[$\x60*?[]/.test(G)||/[()]/.test(G)}),$="",X="",Q=!1};for(let G=0;G<Z.length;G++){let K=Z[G];if(z==="'"){if(K==="'")z=null;else $+=K;X+=K;continue}if(K==="\\"&&G+1<Z.length){let H=Z[G+1];$+=z==='"'&&!/[$\x60"\\\n]/.test(H)?K+H:H,X+=K+H,Q=!0,G++;continue}if(z==='"'){if(K==='"')z=null;else $+=K;X+=K;continue}if(/\s/.test(K)){Y();continue}if(Q=!0,X+=K,K==="'"||K==='"')z=K;else $+=K}if(z)X+="$";return Y(),J}function uZ(Z,J,$){let X=Z[J];return X==="--help"||X==="--version"||$&&(X==="-h"||X==="-V")}function r2(Z){let J=Z.trim();if(!J)return"read";let $=r(J);if(!$.trustworthy||$.substitutions.length||/\$\{[^}]*[|;()]|[<>]\(/.test(J))return D0(J);let X=$.segments.map((z)=>{let Q=l(z);if(Q<0)return"read";let Y=z.words.filter((K,H)=>H>=Q&&!z.redirects.has(H)).map((K)=>A(K.text)),G=Y[0].split("/").pop();if(["rm","rmdir","shred"].includes(G??""))return uZ(Y,1,!1)?"read":"delete";if(["unlink","rmtree","del"].includes(G??""))return"delete";if(G==="trash"){let K=1;while(K<Y.length&&Y[K].startsWith("-")){let H=Y[K++];if(["--help","-h","--version","-V","--identity"].includes(H))return"read";if(["--agent","--spool","--files","--info","--config"].includes(H))K++;else if(!["--json","--local"].includes(H))return"delete"}if(K===Y.length||["status","doctor","list","info","get","pending","station","setup","backup","storage","retrieval","backup-storage","backup-inspect","backup-refresh","help"].includes(Y[K]))return"read";if(["restore","restore-capsule"].includes(Y[K]))return"write";if(["put","rm","delete","remove"].includes(Y[K])&&uZ(Y,K+1,!0))return"read";return"delete"}if(G==="git"){let K=xZ(z,Q);if(K==="clean"||K==="rm")return Y[1]===K&&uZ(Y,2,!0)?"read":"delete";return K==="clone"||K==="init"?"write":"read"}if(G==="env"&&VZ(FZ(Y)))return"delete";if(["sh","bash","zsh","dash","ksh","ash","eval","source",".","su","runuser","env","xargs","find","busybox","toybox"].includes(G??""))return D0(Y.join(" "));if(["mkdir","mkfile","touch","mv","cp","ln","tee","install","dd","rsync","scp","truncate"].includes(G??""))return"write";if(G==="curl"||G==="wget")return O0.test(Y.join(" "))?"write":"read";if(G==="sed"&&Y.slice(1).some((K)=>/^-i|^--in-place(?:=|$)/.test(K)))return"write";if(["python","python3","node","bun"].includes(G??"")&&Y.some((K)=>K==="-c"||K==="-e"))return"write";return"read"});return X.includes("delete")?"delete":X.includes("write")?"write":"read"}function D0(Z){let J=Z.trim();if(!J)return"read";if(/(?:^|\s)\\?(?:[^\s;&|<>()]*\/)?(?:rm|rmdir|unlink|shred|trash|rmtree|del)(?:\s|$)/.test(J))return"delete";if(/\bgit\b/.test(J)){if(/\bgit\b[^;&|]*\b(?:clean|rm)\b/.test(J))return"delete";if(/\bgit\b[^;&|]*\b(?:clone|init)\b/.test(J))return"write";return"read"}if(/(?:^|\s)\\?(?:[^\s;&|<>()]*\/)?(?:mkdir|mkfile|touch|mv|cp|ln|tee|install|dd)(?:\s|$)/.test(J))return"write";if(/\b(?:curl|wget)\b/.test(J)){if(O0.test(J))return"write";return"read"}if(/\bsed\b/.test(J)){if(/(?:^|\s)-i\S*(?:\s|$)|--in-place(?:\s|$)/.test(J))return"write"}else if(/\b(?:rsync|scp|truncate)\b/.test(J))return"write";else if(/(?:^|\s)(?:python3?|node|bun)\b[^;&|]*\s+-[ce](?:\s|$)/.test(J))return"write";if(/(?:^|[;&|])\s*echo\b/.test(J)||/>/.test(E0(J)))return"write";return"read"}function WZ(Z,J){let $=Z.trim(),X=$.match(/^(['"])([\s\S]*)\1$/);if(X)$=X[2];if($=$.replace(/^"*\$HOME"*\//,"$HOME/"),$=$.replace(/^"*\$\{HOME\}"*\//,"${HOME}/"),$==="~")return J;if($.startsWith("~/"))return T.join(J,$.slice(2));if($==="$HOME"||$==="${HOME}")return J;if($.startsWith("$HOME/"))return T.join(J,$.slice(6));if($.startsWith("${HOME}/"))return T.join(J,$.slice(8));let z=$.match(new RegExp(`^"*${lZ(J)}"*/`));if(z)return J+"/"+$.slice(z[0].length);return Z}function o2(Z){let J=Z.trim();while(J.startsWith("(")||J.startsWith("{"))J=J.slice(1).trim();while(J.endsWith(")")||J.endsWith("}"))J=J.slice(0,-1).trim();return J}function lZ(Z){return Z.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function L0(Z,J,$){if(Z===void 0)return[$];let X=WZ(Z,$),z=X.match(/^(['"])(.*)\1$/);if(z)X=z[2];if(!X||X==="-"||/[$\x60*?[\]{}~\\'"]/.test(X))return null;return[...new Set(J.map((Q)=>T.resolve(Q,X)))]}var t2=/(?:^|\s)(\.\.?|[^\s"';&|<>()\x60/]+(?:\/[^\s"';&|<>()\x60]*)?)\s*$/;function e2(Z){let J=Z.split(`
10
+ `),$=[],X=[],z=0;while(z<J.length){let Q=z,Y=J[z++].replace(/\r$/,""),G=[];for(let K=0;K<Y.length;K++){let H=Y[K],B=X[X.length-1];if(H==="\\"){K++;continue}if(H==="$"&&Y[K+1]==="("&&Y[K+2]==="("){let U=Y.indexOf("))",K+3);if(U<0)return null;K=U+1;continue}if(H==="$"&&Y[K+1]==="("){X.push(0),K++;continue}if(H==="$"&&Y[K+1]==="[")return null;if(H==="$"&&Y[K+1]==="{"){let U=Y.indexOf("}",K+2);if(U<0||/['"\x60$]|<</.test(Y.slice(K+2,U)))return null;K=U;continue}if(H==="`"){let U=Y.indexOf("`",K+1);if(U<0)return null;K=U;continue}if(B==='"'){if(H==='"')X.pop();continue}if(H==="'"){let U=Y.indexOf("'",K+1);if(U<0)return null;K=U;continue}if(H==='"'){X.push('"');continue}if(H==="#"&&(K===0||/[\s;&|()]/.test(Y[K-1])))break;if(H==="("&&Y[K+1]==="("&&(K===0||/[\s;&|(]/.test(Y[K-1]))){let U=Y.indexOf("))",K+2);if(U<0)return null;K=U+1;continue}if(typeof B==="number"&&(H==="("||H===")")){if(H==="(")X[X.length-1]=B+1;else if(B===0)X.pop();else X[X.length-1]=B-1;continue}if(H==="<"&&Y[K+1]==="<"){if(Y[K+2]==="<"){K+=2;continue}let U=JZ(Y,K);if(!U)return null;G.push({marker:U,from:K}),K=U.end-1}}for(let{marker:K,from:H}of G){let B=z;for(;;){if(z>=J.length)return null;let U=J[z++].replace(/\r$/,"");if(K.stripTabs)U=U.replace(/^\t+/,"");if(U===K.delimiter)break}$.push({line:Q,from:H,to:K.end,start:B,end:z-1,quoted:K.quoted})}}return X.length===0?$:null}var Z3=new Set(["sh","bash","zsh","dash","ksh","mksh","ash","fish","csh","tcsh","nu","xonsh","elvish","busybox","toybox","ssh","su","runuser","sudo","doas","pkexec","xargs","parallel","expect","script","at","batch","crontab","watch","flock","chroot","nsenter","unshare","docker","podman","kubectl","lxc","python","pypy","node","nodejs","bun","deno","tsx","ts-node","zx","npx","bunx","pnpx","perl","ruby","irb","php","lua","luajit","osascript","pwsh","powershell","Rscript","R","julia","tclsh","wish","awk","gawk","mawk","nawk","sed","make","gmake","gdb","lldb","sqlite3","psql","mysql","sftp","ftp","lftp","vim","vi","nvim","ex","ed","emacs","chmod"]),$3=new Set([".","source","eval","env","alias","hash"]),J3=new Set(["tee","cp","mv","install","ln"]),X3=new Set(["cat","tac","tee","head","tail","wc","cut","tr","nl","rev","fold","fmt","paste","uniq","grep","egrep","fgrep","jq","diff","cmp","comm","iconv","od","xxd","hexdump","base64","base32","md5sum","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","b2sum","cksum","echo","printf","true","false",":","test","[","read","cd","pwd","ls","mkdir","touch","stat","sleep","cp","mv","ln","rm","rmdir","unlink","shred","trash","todos","conversations","mementos","knowledge","files","asks"]),z3=new Set(["add","commit","tag","notes","status","diff","log","show","rev-parse","branch","switch","push","fetch","hash-object","apply"]),K3=new Set(["pr","issue","api","release","gist"]),Q3=/^[A-Za-z_][A-Za-z0-9_]*\+?=/;function Y3(Z,J){let $=Z[J];if($==="gh")return K3.has(Z[J+1]??"");if($!=="git")return X3.has($);for(let X=J+1;X<Z.length;X++){let z=Z[X];if(z==="-C")X++;else if(z==="--no-pager"||z==="-P")continue;else return!z.startsWith("-")&&z3.has(z)}return!1}var jZ=(Z)=>Z.split("/").pop()??"";function G3(Z,J){for(let $=J+1;$<Z.length;$++){let X=Z[$];if(X==="\\")$++;else if(X==='"')return $;else if(X==="$"&&Z[$+1]==="("){if($=R0(Z,$+1),$<0)return-1}else if(X==="`"){if($=Z.indexOf("`",$+1),$<0)return-1}}return-1}function R0(Z,J){let $=0;for(let X=J;X<Z.length;X++){let z=Z[X];if(z==="\\")X++;else if(z==="'"||z==="`"){if(X=Z.indexOf(z,X+1),X<0)return-1}else if(z==='"'){if(X=G3(Z,X),X<0)return-1}else if(z==="(")$++;else if(z===")"&&--$===0)return X}return-1}function H3(Z){let J=[],$=!1;for(let X=0;X<Z.length;X++){let z=Z[X];if(z==="\\")X++;else if(z==="'"&&!$){let Q=Z.indexOf("'",X+1);if(Q<0)return null;X=Q}else if(z==='"')$=!$;else if(z==="$"&&Z[X+1]==="("){let Q=R0(Z,X+1);if(Q<0)return null;let Y=Z.slice(X+2,Q);if(Z[X+2]==="("){if(/\$\(|\x60/.test(Y))return null}else J.push(Y);X=Q}else if(z==="`"){let Q=Z.indexOf("`",X+1);if(Q<0)return null;J.push(Z.slice(X+1,Q)),X=Q}}return $?null:J}function B3(Z){if(/[<>]\(/.test(Z))return!0;let J=[],$=[Z];for(let z=0;$.length>0;z++){if(z>64)return!0;let Q=$.shift(),Y=r(Q),G=H3(Q);if(!Y.trustworthy||!G)return!0;J.push(...Y.segments),$.push(...new Set([...Y.substitutions,...G]))}let X=new Set;for(let z of J){let Q=z.words.map((K)=>A(K.text));for(let K of z.redirects)X.add(jZ(Q[K]??""));let Y=l(z);if(Y<0)continue;let G=jZ(Q[Y]);if(J3.has(G)){for(let K of Q.slice(Y+1))if(!K.startsWith("-"))X.add(jZ(K))}if(G==="dd"){for(let K of Q)if(K.startsWith("of="))X.add(jZ(K.slice(3)))}}X.delete("");for(let z of J){for(let H of z.words){let B=jZ(A(H.text));if(Z3.has(B)||/^(?:python|pypy|node|perl|ruby|php|lua)[0-9.]+$/.test(B))return!0}let Q=l(z),Y=z.words.map((H,B)=>({text:A(H.text),at:B})).filter(({at:H})=>!z.redirects.has(H));if(Y.some(({text:H,at:B})=>(Q<0||B<Q)&&Q3.test(H)))return!0;if(Q<0)continue;let G=z.words[Q].text,K=A(G);if(/[$\x60]/.test(G)||K.includes("/")||$3.has(K)||X.has(K))return!0;if(!Y3(Y.filter(({at:H})=>H>=Q).map(({text:H})=>H),0))return!0}return!1}function U3(Z){if(!Z.includes("<<"))return null;let J=e2(Z);if(!J||J.length===0)return null;let $=Z.split(`
11
+ `),X=[...$],z=[];for(let Y of J){let G=$.slice(Y.start,Y.end);if(!Y.quoted&&G.some((K)=>/\$\(|\x60/.test(K)))return null;z.push(G.join(`
12
+ `));for(let K=Y.start;K<=Y.end;K++)X[K]=""}let Q=[...X];for(let Y of[...J].reverse()){let G=Q[Y.line];Q[Y.line]=G.slice(0,Y.from)+" ".repeat(Y.to-Y.from)+G.slice(Y.to)}return B3(Q.join(`
13
+ `))?null:{outer:X.join(`
14
+ `),bodies:z}}var V3="/";function v0(Z,J,$){if(!Z)return[];let X=U3(Z);if(!X)return A0(Z,J,$);return[...A0(X.outer,J,$),...X.bodies.flatMap((z)=>v0(z,J,V3))]}function A0(Z,J,$){if(!Z)return[];let X=P0(J),z=(U)=>X.some((V)=>U===V||U.startsWith(`${V}${T.sep}`)),Q=Z.split(/(\s*&&\s*|\s*\|\|\s*|;\s*|\n+)/),Y=[],G=[$],K=new Set([$]),H=!0,B=[];for(let U=0;U<Q.length;U+=2){let V=U===0?"":Q[U-1].trim();if(V==="||")H=!1;else if(V!=="&&")H=!0;if(V!=="&&"||!H)G=[...K];let C=Q[U],_=(C.match(/^[\s({]*/)?.[0].match(/\(/g)??[]).length,O=(C.match(/[\s)}]*$/)?.[0].match(/\)/g)??[]).length;for(let N=0;N<_;N++)B.push({current:[...G],reachable:new Set(K),certain:H});let M=o2(C),j=M.match(/^cd(?:\s+(?:-[A-Za-z@]+|--))*(?:\s+([^\s;&|<>()\x60]+))?$/),c=j?null:M.match(/(?:^|\s)cd(?:\s+(?:-[A-Za-z]+|--))*\s+([^\s;&|<>()\x60]+)/);if(c){for(let N of L0(c[1],G,J)??[])K.add(N);H=!1,G=[...K]}let p=lZ(J),a=X.map((N)=>lZ(N.slice(J.length+1))).join("|"),L=new RegExp(`(?:~|\\$HOME"*|\\$\\{HOME\\}"*|${p}"*)/(?:${a})`),v=new RegExp(`(${L.source})([^\\s"';&|<>()\`]*|$)`,"g"),k=(N)=>{let u=[],b;v.lastIndex=0;while((b=v.exec(N))!==null)u.push(T.normalize(WZ(b[0],J)).replace(/\/+$/,""));return u},w=a2(M).map((N)=>{let u=[],b=!1,e=E0(N).replace(s2,(QZ,n)=>{if(!n||/[$\x60]/.test(n))b=!0;if(n)u.push(n);return" "}),KZ=r2(e);return{commandPart:e,operands:u,op:b&&KZ==="read"?"write":KZ}}),r0=w.some((N)=>N.op==="delete")?"delete":w.some((N)=>N.op==="write")?"write":"read",G0=G.filter(z);for(let N of w){let u=!1;for(let E of k(N.commandPart))u=!0,Y.push({path:E,op:r0});for(let E of N.operands){let g=k(E);for(let f of g)Y.push({path:f,op:"write"});if(g.length>0)continue;for(let f of G0)Y.push({path:T.normalize(T.resolve(f,WZ(E,J))),op:"write"})}if(u||N.op==="read")continue;let b=n2(N.commandPart),e=1,KZ=(b[0]?.text??"").split("/").pop();if(KZ==="trash"&&["put","rm","delete","remove"].includes(b[1]?.text??""))e=2;if(KZ==="git"){let E=b.findIndex((g,f)=>f>0&&(g.text==="rm"||g.text==="clean"));if(E>0)e=E+1}let QZ=!1,n=b.slice(e).flatMap((E)=>{if(!QZ&&E.text==="--")return QZ=!0,[];if(!QZ&&E.text.startsWith("-"))return[];return QZ=!0,[E.opaque?".":E.text]}),o0=N.op==="delete"||/(?:^|\s)\\?(?:[^\s;&|<>()]*\/)?(?:mkdir|mkfile|touch|tee|truncate|install|mv)(?:\s|$)/.test(N.commandPart)||/(?:^|\s)sed(?:\s|$)/.test(N.commandPart)&&/(?:^|\s)(?:-i\S*|--in-place\S*)(?:\s|$)/.test(N.commandPart),YZ=[];if(o0)for(let E of n.length>0?n:["."])YZ.push({operand:E,op:N.op});else{let E=N.commandPart.match(t2),g=b.at(-1);if(YZ.push({operand:E?E[1]:!g||g.opaque?".":g.text,op:N.op}),/(?:^|\s)(?:cp|ln|install|mv)(?:\s|$)/.test(N.commandPart))b.forEach((f,H0)=>{let ZZ,bZ=f.text.match(/^-[A-Za-z]*?t(.*)$/),CZ=f.text.match(/^(--t[a-z-]*)(?:=(.*))?$/);if(bZ&&!f.text.startsWith("--"))ZZ=bZ[1]?{text:bZ[1],opaque:f.opaque}:b[H0+1];else if(CZ&&"--target-directory".startsWith(CZ[1]))ZZ=CZ[2]!==void 0?{text:CZ[2],opaque:f.opaque}:b[H0+1];if(ZZ)YZ.push({operand:ZZ.opaque||!ZZ.text?".":ZZ.text,op:N.op})});if(/(?:^|\s)(?:python3?|node|bun)\b[^;&|]*\s+-[ce](?:\s|$)/.test(N.commandPart))YZ.push({operand:".",op:N.op})}for(let E of G0)for(let{operand:g,op:f}of YZ)Y.push({path:T.normalize(T.resolve(E,WZ(g,J))),op:f})}if(j){let N=L0(j[1],G,J);if(N){for(let u of N)K.add(u);if(H)G=N}else H=!1}for(let N=0;N<O&&B.length>0;N++)({current:G,reachable:K,certain:H}=B.pop())}return Y}var M3=/^\s*\*\*\*\s+(Add File|Update File|Delete File):\s+(\S+)\s*$/gm;function F3(Z,J){let $=[],X;while((X=M3.exec(Z))!==null){let z=X[1]==="Delete File"?"delete":"write";$.push({path:T.normalize(T.resolve(J,X[2])),op:z})}return $}function y0(Z,J={}){let $=[];if(Z.hook_event_name!=="PreToolUse")return{output:{continue:!0},warnings:$};let X=typeof Z.tool_name==="string"?Z.tool_name:"",z=J.home??mZ.homedir(),Q=P0(z),Y=d2(process.env,z);if(X==="Bash"){let V=$Z(Z);if(!V)return{output:{continue:!0},warnings:$};let C=typeof Z.cwd==="string"&&Z.cwd?Z.cwd:process.cwd(),_=v0(V,z,C);for(let O of _)for(let M of Q){let j=hZ(O.path,M,Y,O.op);if(j.blocked)return{output:{decision:"block",reason:j.reason},warnings:$}}return{output:{continue:!0},warnings:$}}let G=Z.tool_input??{},K=typeof Z.cwd==="string"&&Z.cwd?Z.cwd:process.cwd();if(g2.has(X)){let V=typeof G.patch==="string"?G.patch:"";if(!V)return{output:{continue:!0},warnings:$};let C=F3(V,K);for(let _ of C)for(let O of Q){let M=hZ(_.path,O,Y,_.op);if(M.blocked)return{output:{decision:"block",reason:M.reason},warnings:$}}return{output:{continue:!0},warnings:$}}if(!x2.has(X))return{output:{continue:!0},warnings:$};let H=typeof G.file_path==="string"?G.file_path:typeof G.path==="string"?G.path:typeof G.notebook_path==="string"?G.notebook_path:null;if(!H)return{output:{continue:!0},warnings:$};let B=WZ(H,z),U=T.isAbsolute(B)?T.normalize(B):T.resolve(K,B);for(let V of Q){let C=hZ(U,V,Y,"write");if(C.blocked)return{output:{decision:"block",reason:C.reason},warnings:$}}return{output:{continue:!0},warnings:$}}var q3=new Set(["id","node_id","databaseId","fullDatabaseId","number","state","state_reason","stateReason","status","conclusion","bucket","name","login","sha","oid","abbreviatedOid","ref","headRefName","baseRefName","headRefOid","baseRefOid","head_sha","headSha","head_branch","headBranch","merged","mergeable","mergeable_state","mergeStateStatus","draft","isDraft","locked","isLocked","title","displayTitle","display_title","created_at","updated_at","closed_at","merged_at","started_at","completed_at","submitted_at","pushed_at","published_at","createdAt","updatedAt","closedAt","mergedAt","startedAt","completedAt","submittedAt","pushedAt","publishedAt","tag_name","tagName","total_count","totalCount","count","additions","deletions","changes","changed_files","changedFiles","filename","path","event","workflow","workflowName","workflow_id","workflowDatabaseId","run_id","run_number","run_attempt","attempt","check_suite_id","default_branch","defaultBranch","full_name","fullName","nameWithOwner","private","isPrivate","visibility","archived","isArchived","fork","isFork","isRequired","is_required","required","context","type","__typename","role","permission","size","reviewDecision","author_association","authorAssociation","isCrossRepository","maintainerCanModify","maintainer_can_modify","commentsCount","language","digest","size_in_bytes","run_started_at","date","wait_timer","ahead_by","behind_by","total_commits","expired","current_user_can_approve","environment","html_url"]),N3=new Set(["payload","client_payload","inputs","config","metadata","output","properties","custom_properties","variables"]),k0=new Set(["length","utf8bytelength","not","type","any","all","isempty","empty","test","startswith","endswith","contains","inside","has","in","index","rindex","indices","floor","ceil","round","fabs","sqrt","isinfinite","isnan","isnormal","infinite","nan","true","false","null"]),w0=new Set(["tostring","tojson","ascii_downcase","ascii_upcase","ltrimstr","rtrimstr","trim","ltrim","rtrim","sort","unique","reverse","first","last","min","max","add","flatten","join","split","values","nulls","strings","numbers","booleans","arrays","objects","iterables","scalars","sort_by","group_by","unique_by","min_by","max_by","select","limit","to_entries","from_entries"]),_3=new Set(["test","startswith","endswith","contains","inside","has","in","index","rindex","indices","ltrimstr","rtrimstr","join","split","flatten","limit"]),j3=new Set(["@text","@json","@csv","@tsv","@sh","@base64","@uri","@html"]);class dZ extends Error{}var I=()=>{throw new dZ};function cZ(Z,J){let $=[],X="",z=J+1;while(z<Z.length){let Q=Z[z];if(Q==='"'){if(X)$.push(X);return{end:z+1,parts:$}}if(Q==="\\"){let Y=Z[z+1];if(Y==="("){let G=1,K=z+2;while(K<Z.length&&G>0){let H=Z[K];if(H==='"'){K=cZ(Z,K).end;continue}if(H==="(")G++;else if(H===")")G--;K++}if(G!==0)I();if(X)$.push(X),X="";$.push({src:Z.slice(z+2,K-1)}),z=K;continue}if(Y===void 0)I();X+=Y,z+=2;continue}X+=Q,z++}return I()}function x0(Z){let J=[],$=0,X=["?//","|=","+=","-=","*=","/=","%=","//=","==","!=","<=",">=","//","|",",","+","-","*","/","%","<",">","=","(",")","[","]","{","}",":",";","?"];while($<Z.length){let z=Z[$];if(/\s/.test(z)){$++;continue}if(z==="#")I();if(z==='"'){let K=cZ(Z,$);J.push({t:"str",parts:K.parts}),$=K.end;continue}if(z==="."){if(Z[$+1]===".")I();let K=/^[A-Za-z_][A-Za-z0-9_]*/.exec(Z.slice($+1));if(K){J.push({t:"field",name:K[0]}),$+=1+K[0].length;continue}if(Z[$+1]==='"'){let H=cZ(Z,$+1);if(H.parts.some((B)=>typeof B!=="string"))I();J.push({t:"field",name:H.parts.join("")}),$=H.end;continue}J.push({t:"dot"}),$++;continue}if(z==="$"||z==="@"){let K=/^[@$][A-Za-z_][A-Za-z0-9_]*/.exec(Z.slice($));if(!K||z==="$")I();J.push({t:"fmt",name:K[0]}),$+=K[0].length;continue}let Q=/^[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?/.exec(Z.slice($));if(Q){J.push({t:"num"}),$+=Q[0].length;continue}let Y=/^[A-Za-z_][A-Za-z0-9_]*(?:::[A-Za-z_][A-Za-z0-9_]*)*/.exec(Z.slice($));if(Y){J.push({t:"ident",name:Y[0]}),$+=Y[0].length;continue}let G=X.find((K)=>Z.startsWith(K,$));if(!G)I();J.push({t:"op",v:G}),$+=G.length}return J}var W3=new Set(["if","then","elif","else","end","as","def","reduce","foreach","try","catch","label","import","include","and","or","__loc__","error","input","inputs","debug","stderr","env","halt","halt_error","input_filename","input_line_number","recurse","paths","leaf_paths","getpath","setpath","delpaths","del","path","splits","sub","gsub","capture","match","scan","keys","keys_unsorted","map_values","with_entries","tostream","fromstream","truncate_stream","walk","tonumber","implode","explode","ascii","fromjson"]);class iZ{tokens;at=0;constructor(Z){this.tokens=Z}parse(){if(this.tokens.length===0)I();let Z=this.pipe();if(this.at!==this.tokens.length)I();return Z}peek(){return this.tokens[this.at]}isOp(Z){let J=this.peek();return!!J&&J.t==="op"&&J.v===Z}isIdent(Z){let J=this.peek();return!!J&&J.t==="ident"&&J.name===Z}expectOp(Z){if(!this.isOp(Z))I();this.at++}pipe(){let Z=this.comma();if(this.isIdent("as"))I();if(this.isOp("|"))this.at++,Z={k:"pipe",a:Z,b:this.pipe()};return Z}comma(){let Z=this.alt();while(this.isOp(","))this.at++,Z={k:"comma",a:Z,b:this.alt()};return Z}alt(){let Z=this.or();if(this.isOp("//"))return this.at++,{k:"alt",a:Z,b:this.alt()};return Z}or(){let Z=this.and();while(this.isIdent("or"))this.at++,Z={k:"bool",a:Z,b:this.and()};return Z}and(){let Z=this.cmp();while(this.isIdent("and"))this.at++,Z={k:"bool",a:Z,b:this.cmp()};return Z}cmp(){let Z=this.add();for(let J of["==","!=","<=",">=","<",">"])if(this.isOp(J))return this.at++,{k:"bool",a:Z,b:this.add()};for(let J of["=","|=","+=","-=","*=","/=","%=","//=","?//"])if(this.isOp(J))I();return Z}add(){let Z=this.mul();while(this.isOp("+")||this.isOp("-"))this.at++,Z={k:"arith",a:Z,b:this.mul()};return Z}mul(){let Z=this.unary();while(this.isOp("*")||this.isOp("/")||this.isOp("%"))this.at++,Z={k:"arith",a:Z,b:this.unary()};return Z}unary(){if(this.isOp("-"))return this.at++,{k:"neg",of:this.postfix()};return this.postfix()}objectValue(){let Z=this.unary();if(this.isOp("|"))this.at++,Z={k:"pipe",a:Z,b:this.objectValue()};return Z}postfix(){let Z=this.primary();for(;;){let J=this.peek();if(!J)return Z;if(J.t==="field"){this.at++,Z={k:"field",name:J.name,of:Z};continue}if(J.t==="dot"&&this.tokens[this.at+1]?.t==="op"&&this.tokens[this.at+1].v==="["){this.at++;continue}if(J.t==="op"&&J.v==="?"){this.at++,Z={k:"opt",of:Z};continue}if(J.t==="op"&&J.v==="["){Z=this.bracket(Z);continue}return Z}}bracket(Z){if(this.expectOp("["),this.isOp("]"))return this.at++,{k:"iter",of:Z};if(this.isOp(":")){if(this.at++,!this.isOp("]"))this.pipe();return this.expectOp("]"),{k:"slice",of:Z}}let J=this.pipe();if(this.isOp(":")){if(this.at++,!this.isOp("]"))this.pipe();return this.expectOp("]"),{k:"slice",of:Z}}return this.expectOp("]"),{k:"index",of:Z,key:J}}primary(){let Z=this.peek();if(!Z)return I();switch(this.at++,Z.t){case"dot":return{k:"dot"};case"field":return{k:"field",name:Z.name};case"num":return{k:"lit"};case"str":return this.stringNode(Z.parts);case"fmt":{if(!j3.has(Z.name))I();let J=this.peek();if(J?.t==="str")return this.at++,{k:"fmt",name:Z.name,str:this.stringNode(J.parts)};return{k:"fmt",name:Z.name}}case"ident":{if(W3.has(Z.name))I();if(Z.name==="map"||k0.has(Z.name)||w0.has(Z.name)){let J=[];if(this.isOp("(")){this.at++,J.push(this.pipe());while(this.isOp(";"))this.at++,J.push(this.pipe());this.expectOp(")")}return{k:"call",name:Z.name,args:J}}return I()}case"op":{if(Z.v==="("){let J=this.pipe();return this.expectOp(")"),J}if(Z.v==="["){if(this.isOp("]"))return this.at++,{k:"array"};let J=this.pipe();return this.expectOp("]"),{k:"array",of:J}}if(Z.v==="{")return this.object();return I()}}return I()}stringNode(Z){let J=[];for(let $ of Z){if(typeof $==="string")continue;J.push(new iZ(x0($.src)).parse())}return J.length===0?{k:"str",parts:J,text:Z.join("")}:{k:"str",parts:J}}object(){let Z=[];if(this.isOp("}"))return this.at++,{k:"object",entries:Z};for(;;){let J=this.peek();if(!J)I();this.at++;let $;if(J.t==="ident")$=J.name;else if(J.t==="str"){if(J.parts.some((X)=>typeof X!=="string"))I();$=J.parts.join("")}else I();if(this.isOp(":"))this.at++,Z.push({key:"static",value:this.objectValue()});else Z.push({key:"static",value:{k:"field",name:$}});if(this.isOp(",")){this.at++;continue}return this.expectOp("}"),{k:"object",entries:Z}}}}function sZ(Z){if(typeof Z==="object"&&"union"in Z)return Z.union.every(sZ);return Z==="safe"||typeof Z==="object"&&q3.has(Z.leaf)}var TZ=(...Z)=>Z.every(sZ)?"safe":"tainted";function pZ(...Z){let J=[];for(let $ of Z)if(typeof $==="object"&&"union"in $)J.push(...$.union);else J.push($);return J.length===1?J[0]:{union:J}}function AZ(Z,J){return typeof Z==="object"&&"union"in Z?pZ(...Z.union.map(J)):J(Z)}var PZ=(Z)=>typeof Z==="object"&&("leaf"in Z)&&N3.has(Z.leaf),d=(Z)=>AZ(Z,(J)=>J==="safe"?"safe":J==="tainted"||PZ(J)?"tainted":"unknown");function S0(Z){return Z.k==="lit"||Z.k==="str"&&Z.parts.length===0||Z.k==="call"&&["true","false","null"].includes(Z.name)&&Z.args.length===0}function b0(Z,J,$){return AZ(Z,(X)=>{if(X==="safe"||X==="tainted")return X;if(PZ(X))return"tainted";if(X==="root"&&$.rootScalars.has(J))return"safe";return{leaf:J}})}function D(Z,J,$){switch(Z.k){case"dot":return J;case"field":return b0(Z.of?D(Z.of,J,$):J,Z.name,$);case"iter":return d(D(Z.of,J,$));case"index":{let X=D(Z.of,J,$);if(Z.key.k==="str"&&Z.key.text!==void 0)return b0(X,Z.key.text,$);if(Z.key.k==="lit")return d(X);return D(Z.key,J,$),"tainted"}case"slice":return AZ(D(Z.of,J,$),(X)=>X==="root"?"unknown":PZ(X)?"tainted":X);case"opt":return D(Z.of,J,$);case"lit":return"safe";case"str":return TZ(...Z.parts.map((X)=>D(X,J,$)));case"fmt":return Z.str?D(Z.str,J,$):J;case"array":return Z.of?TZ(D(Z.of,J,$)):"safe";case"object":return TZ(...Z.entries.map((X)=>D(X.value,J,$)));case"pipe":return D(Z.b,D(Z.a,J,$),$);case"comma":return pZ(D(Z.a,J,$),D(Z.b,J,$));case"alt":return pZ(D(Z.a,J,$),D(Z.b,J,$));case"bool":return D(Z.a,J,$),D(Z.b,J,$),"safe";case"arith":return TZ(D(Z.a,J,$),D(Z.b,J,$));case"neg":return D(Z.of,J,$);case"call":return T3(Z,J,$)}}var f0=(Z)=>AZ(Z,(J)=>J==="root"?"unknown":PZ(J)?"tainted":J);function T3(Z,J,$){let{name:X,args:z}=Z;if(_3.has(X)&&X!=="limit"&&!z.every(S0))I();switch(X){case"map":if(z.length!==1)I();return TZ(D(z[0],d(J),$));case"select":if(z.length!==1)I();return D(z[0],J,$),J;case"limit":if(z.length!==2||!S0(z[0]))I();return D(z[1],J,$);case"first":case"last":if(z.length>1)I();return z.length===1?D(z[0],J,$):d(J);case"min":case"max":return d(J);case"sort_by":case"group_by":case"unique_by":if(z.length!==1)I();return D(z[0],d(J),$),f0(J);case"min_by":case"max_by":if(z.length!==1)I();return D(z[0],d(J),$),d(J);case"any":case"all":case"isempty":for(let Q of z)D(Q,"unknown",$);return"safe"}if(k0.has(X))return"safe";if(w0.has(X))return f0(J);return I()}function g0(Z,J={}){if(typeof Z!=="string"||!Z.trim()||Z.length>4096)return!1;try{let $=new iZ(x0(Z)).parse();return sZ(D($,"root",{rootScalars:J.rootScalars??new Set}))}catch($){if($ instanceof dZ)return!1;return!1}}var J0="composite output withheld: signed-link shape; use bounded scalar projections per class disposition 799310",q={refused:!1},F=(Z)=>({refused:!0,rule:Z}),aZ=new Set(["additions","assignees","author","baseRefName","baseRefOid","changedFiles","closed","closedAt","createdAt","deletions","files","fullDatabaseId","headRefName","headRefOid","headRepository","headRepositoryOwner","id","isCrossRepository","isDraft","labels","maintainerCanModify","mergeCommit","mergeStateStatus","mergeable","mergedAt","mergedBy","number","potentialMergeCommit","reactionGroups","reviewDecision","reviewRequests","state","title","updatedAt","url"]),nZ=new Set(["assignees","author","closed","closedAt","createdAt","id","isPinned","labels","number","reactionGroups","state","stateReason","subIssuesSummary","title","updatedAt","url"]),h0=new Set(["apiUrl","author","createdAt","databaseId","id","isDraft","isImmutable","isLatest","isPrerelease","name","publishedAt","tagName","tarballUrl","targetCommitish","uploadUrl","url","zipballUrl"]),u0=new Set(["answerChosenAt","answerChosenBy","answered","author","closed","closedAt","createdAt","id","labels","locked","number","reactionGroups","state","stateReason","title","updatedAt","url"]),C3=new Set(["assignees","author","authorAssociation","closedAt","commentsCount","createdAt","id","isDraft","isLocked","isPullRequest","labels","number","repository","state","title","updatedAt","url"]),I3=new Set(["author","committer","id","parents","repository","sha","url"]),D3=new Set(["bucket","completedAt","event","name","startedAt","state","workflow"]);function c0(Z){let J=[];for(let $=0;$<Z.length;$++){let X=Z[$];if(X==="\\"){$++;continue}if(X==="'"){let z=Z.indexOf("'",$+1);if(z<0)return!1;$=z;continue}if(X==='"'){$++;while($<Z.length&&Z[$]!=='"')$+=Z[$]==="\\"?2:1;continue}if(X==="{"){J.push({list:!1});continue}if(J.length===0)continue;if(X===","||X==="."&&Z[$+1]===".")J[J.length-1].list=!0;else if(X==="}"&&J.pop().list)return!0}return!1}function XZ(Z){let J="",$=!1,X=0,z=(Q)=>Z[Q]==="`"||Z[Q]==="$"&&/[A-Za-z_{(@*#?$!0-9-]/.test(Z[Q+1]??"");while(X<Z.length){let Q=Z[X];if(Q==="\\"){J+=Z[X+1]??"",X+=2;continue}if(Q==="$"&&Z[X+1]==="'"){$=!0,J+=Q,X++;continue}if(Q==="'"){let Y=Z.indexOf("'",X+1);if(Y<0){$=!0,J+=Z.slice(X+1);break}J+=Z.slice(X+1,Y),X=Y+1;continue}if(Q==='"'){X++;while(X<Z.length&&Z[X]!=='"'){if(Z[X]==="\\"&&/[$`"\\\n]/.test(Z[X+1]??"")){J+=Z[X+1],X+=2;continue}if(z(X))$=!0;J+=Z[X],X++}if(X>=Z.length)$=!0;X++;continue}if(z(X)||Q==="*"||Q==="?"||Q==="[")$=!0;J+=Q,X++}if(!$&&Z.includes("{")&&c0(Z))$=!0;return{value:J,opaque:$,raw:Z}}var o=(Z)=>Z.slice(Z.lastIndexOf("/")+1);function tZ(Z,J="word"){let $=[],X=!1;for(let z=0;z<Z.length;z++){let Q=Z[z];if(Q==="\\"){z++;continue}if(J==="word"&&Q==="'"&&!X){let Y=Z.indexOf("'",z+1);if(Y<0)return{bodies:$,complete:!1};z=Y;continue}if(J==="word"&&Q==='"'){X=!X;continue}if(Q==="`"){let Y=z+1;while(Y<Z.length&&Z[Y]!=="`")Y+=Z[Y]==="\\"?2:1;if(Y>=Z.length)return{bodies:$,complete:!1};$.push(Z.slice(z+1,Y)),z=Y;continue}if(Q==="$"&&Z[z+1]==="("){let Y=qZ(Z,z+1);if(Y<0)return{bodies:$,complete:!1};$.push(Z.slice(z+2,Y-1)),z=Y-1}}return{bodies:$,complete:!0}}function zZ(Z,J){let $=new Set(J.values),X={flags:[],positionals:[]},z=(Q,Y)=>({value:Q,opaque:Y.opaque,raw:Y.raw});for(let Q=0;Q<Z.length;Q++){let Y=Z[Q],G=Y.value;if(G==="--"){X.positionals.push(...Z.slice(Q+1));break}if(G.startsWith("--")&&G.length>2){let K=G.indexOf("="),H=K>=0?G.slice(0,K):G;if(K>=0)X.flags.push({name:H,value:z(G.slice(K+1),Y),inline:!0});else if($.has(H)){let B=Z[Q+1];X.flags.push(B?{name:H,value:B}:{name:H,missing:!0}),Q++}else X.flags.push({name:H});continue}if(G.startsWith("-")&&G.length>1){for(let K=1;K<G.length;K++){let H="-"+G[K],B=G.slice(K+1);if(B.startsWith("=")){X.flags.push({name:H,value:z(B.slice(1),Y),inline:!0});break}if(!$.has(H)){X.flags.push({name:H});continue}if(B)X.flags.push({name:H,value:z(B,Y),inline:!0});else{let U=Z[Q+1];X.flags.push(U?{name:H,value:U}:{name:H,missing:!0}),Q++}break}continue}X.positionals.push(Y)}return X}function S(Z,...J){let $=!1;for(let X of Z.flags){if(!J.includes(X.name))continue;if(!X.inline){$=!0;continue}let z=X.value;$=!z.opaque&&["1","t","T","TRUE","true","True"].includes(z.value)}return $}var s=(Z,...J)=>Z.flags.filter(($)=>J.includes($.name)),x=["-R","--repo","-q","--jq","-t","--template","--json"],t={"pr view":{values:x},"issue view":{values:x},"release view":{values:x},"discussion view":{values:[...x,"--after","-L","--limit","--order"]},"pr list":{values:[...x,"--app","-a","--assignee","-A","--author","-B","--base","-H","--head","-l","--label","-L","--limit","-S","--search","-s","--state"]},"issue list":{values:[...x,"--app","-a","--assignee","-A","--author","-l","--label","-L","--limit","--mention","-m","--milestone","-S","--search","-s","--state"]},"discussion list":{values:[...x,"--after","-A","--author","-c","--category","-l","--label","-L","--limit","--order","-S","--search","--sort","-s","--state"]},"release list":{values:[...x,"-L","--limit","-O","--order"]},"pr status":{values:x},"issue status":{values:x},"pr checks":{values:[...x,"-i","--interval"]},"pr diff":{values:["-R","--repo"]},search:{values:[...x,"--app","--assignee","--author","--author-date","--author-email","--author-name","--base","--checks","--closed","--commenter","--committer","--committer-date","--committer-email","--committer-name","--created","--hash","--head","--interactions","--involves","--label","--language","--limit","-L","--match","--mentions","--merged-at","--milestone","--no-assignee","--no-label","--no-milestone","--no-project","--order","--owner","--parent","--project","--reactions","--review","--review-requested","--reviewed-by","--sort","--state","--team-mentions","--tree","--updated","--visibility","--extension","--filename","--size","--forks","--good-first-issue","--help-wanted-issues","--number-topics","--stars","--topic","--followers","--include-forks","--license"]},"project item-list":{values:["--format","-L","--limit","--owner","-q","--jq","-t","--template","--query","--field","--field-id"]},api:{values:["-X","--method","-H","--header","-f","--raw-field","-F","--field","-q","--jq","-t","--template","-p","--preview","--input","--hostname","--cache"]},group:{values:["-R","--repo"]}},L3=new Set(["auth","browse","codespace","cs","gist","org","repo","skill","cache","run","workflow","co","agent-task","alias","attestation","completion","config","copilot","extension","ext","extensions","gpg-key","label","licenses","preview","ruleset","secret","ssh-key","variable","help","version","accessibility","actions","environment","exit-codes","formatting","mintty","reference","telemetry"]),A3=new Set(["pr","issue","release","discussion","search","project","api","status"]),P3=new Set(["create","new","checkout","co","close","comment","edit","lock","merge","ready","reopen","revert","review","unlock","update-branch"]),O3=new Set(["create","new","close","comment","delete","develop","edit","lock","pin","reopen","transfer","unlock","unpin"]),E3=new Set(["create","new","delete","delete-asset","download","edit","upload","verify","verify-asset"]),R3=new Set(["create","new","close","comment","delete","edit","lock","reopen","unlock","answer","unanswer"]);function vZ(Z,J){let $=s(Z,"--json"),X=[],z=!1;for(let Q of $){if(Q.missing){if(J.appendsArgs)z=!0;continue}if(!Q.value)continue;if(Q.value.opaque)z=!0;X.push(...Q.value.value.split(",").map((Y)=>Y.trim()).filter(Boolean))}return{present:$.length>0,opaque:z,fields:X}}function X0(Z,J){if(S(Z,"--verbose")||s(Z,"-t","--template").length>0)return!1;let $=s(Z,"-q","--jq");return $.length>0&&$.every((X)=>X.value!==void 0&&!X.value.opaque&&g0(X.value.value,{rootScalars:J}))}function z0(Z,J,$,X){let z=vZ(Z,$);if(z.opaque)return F("unclassifiable");if(z.fields.every((Q)=>J.has(Q)))return q;if($.debug)return F("debug-traffic");return X0(Z)?q:F(X)}function OZ(Z,J,$,X,z){let Q=zZ(Z,t[J]);if(S(Q,"-h","--help"))return q;if(S(Q,"-w","--web"))return X.debug?F("debug-traffic"):q;if(z&&S(Q,"-c","--comments"))return F("view-comments");if(!vZ(Q,X).present)return F(X.debug?"debug-traffic":"view-human");return z0(Q,$,X,"json-composite")}function i(Z,J,$,X){let z=zZ(Z,t[J]);if(S(z,"-h","--help"))return q;if(X.debug&&(S(z,"-w","--web")||!vZ(z,X).present))return F("debug-traffic");if(S(z,"-w","--web"))return q;return z0(z,$,X,"json-composite")}function v3(Z,J){let $=zZ(Z,t["pr checks"]);if(S($,"-h","--help"))return q;if(J.debug)return F("debug-traffic");if(S($,"-w","--web"))return q;if(!vZ($,J).present)return F("checks-human");return z0($,D3,J,"checks-json")}function y3(Z){let J=new Set(t.group.values);for(let $=0;$<Z.length;$++){let X=Z[$].value;if(X==="--")return{sub:Z[$+1],rest:Z.slice($+2)};if(!X.startsWith("-")||X==="-")return{sub:Z[$],rest:[...Z.slice(0,$),...Z.slice($+1)]};if(J.has(X))$++}return{rest:Z}}function S3(Z,J,$){let{sub:X,rest:z}=y3(J);if(!X)return $.appendsArgs?F("unclassifiable"):q;if(X.opaque)return F("unclassifiable");let Q=X.value;if((Z==="pr"?P3:Z==="issue"?O3:Z==="release"?E3:Z==="discussion"?R3:new Set).has(Q))return $.debug?F("debug-traffic"):q;if($.appendsArgs&&!(Z==="project"&&Q!=="item-list"))return F("unclassifiable");switch(Z){case"pr":if(Q==="view")return OZ(z,"pr view",aZ,$,!0);if(Q==="list"||Q==="ls")return i(z,"pr list",aZ,$);if(Q==="status")return i(z,"pr status",aZ,$);if(Q==="checks")return v3(z,$);if(Q==="diff"){let G=zZ(z,t["pr diff"]);if(S(G,"-h","--help"))return q;if($.debug)return F("debug-traffic");return S(G,"--patch")?F("composite-other"):q}return F("unclassifiable");case"issue":if(Q==="view")return OZ(z,"issue view",nZ,$,!0);if(Q==="list"||Q==="ls")return i(z,"issue list",nZ,$);if(Q==="status")return i(z,"issue status",nZ,$);return F("unclassifiable");case"release":if(Q==="view")return OZ(z,"release view",h0,$,!1);if(Q==="list"||Q==="ls")return i(z,"release list",h0,$);return F("unclassifiable");case"discussion":if(Q==="view")return OZ(z,"discussion view",u0,$,!0);if(Q==="list"||Q==="ls")return i(z,"discussion list",u0,$);return F("unclassifiable");case"search":if(Q==="prs"||Q==="issues")return i(z,"search",C3,$);if(Q==="commits")return i(z,"search",I3,$);if(Q==="code"||Q==="repos")return $.debug?F("debug-traffic"):q;return F("unclassifiable");case"project":{if($.debug)return F("debug-traffic");if(Q!=="item-list")return q;let G=zZ(z,t["project item-list"]);if(S(G,"-h","--help"))return q;let K=s(G,"--format");if(K.some((H)=>!H.value||H.value.opaque))return F("unclassifiable");if(K.every((H)=>H.value.value!=="json"))return q;return X0(G)?q:F("composite-other")}}return F("unclassifiable")}var p0=new Set(["pulls","issues","commits","check-runs","check-suites","statuses","comments","releases","compare","events","discussions","deployments","milestones"]);function b3(Z){let J=Z.value.trim(),$=/^https?:\/\/([^/]+)(\/.*)?$/i.exec(J);if($){let Q=$[1].toLowerCase(),Y=$[2]??"/";if(Q==="api.github.com"||/^api\./.test(Q))J=Y;else if(/^\/api\/v3(?:\/|$)/i.test(Y))J=Y.replace(/^\/api\/v3/i,"");else if(/^\/api\/graphql(?:[/?#]|$)/i.test(Y))J="graphql";else return null}J=J.replace(/[?#].*$/,"");let X=[],z=[];for(let Q of J.split("/")){let Y;try{Y=decodeURIComponent(Q)}catch{return null}for(let G of Y.split("/")){if(G===""||G===".")continue;if(G===".."){X.pop(),z.pop();continue}X.push(G.toLowerCase()),z.push(Z.opaque&&/[$`]/.test(G)||/[*?[]/.test(G)||c0(G))}}return{segments:X,opaque:z}}function f3(Z){let J=b3(Z);if(!J)return{kind:"unclassifiable",segments:[]};let{segments:$,opaque:X}=J,z=(K)=>({kind:K,segments:$});if($.length===1&&$[0]==="graphql")return z("graphql");if($.length===0)return z(Z.opaque?"unclassifiable":"other");if(X[0])return z("unclassifiable");let Q,Y=[];if($[0]==="repos")Q=$.slice(3),Y=X.slice(3);else if($[0]==="repositories")Q=$.slice(2),Y=X.slice(2);if(Q){if(($[0]==="repos"?X.slice(1,3):X.slice(1,2)).some(Boolean)){let H=X.findIndex(Boolean),B=$.findIndex((U,V)=>V>H&&!X[V]&&k3.has(U));return z(B<0?"unclassifiable":l0($.slice(B),X.slice(B)))}return z(l0(Q,Y))}let G=$[0];if(G==="issues")return z("sensitive");if(G==="user"&&$[1]==="issues")return z("sensitive");if(G==="orgs"&&$[2]==="issues")return z("sensitive");if(G==="search")return z($[1]==="issues"||$[1]==="commits"?"sensitive":$[1]!==void 0&&X[1]?"unclassifiable":"other");if(G==="events"||G==="networks")return z("sensitive");if((G==="users"||G==="orgs")&&$.slice(2).some((K)=>K==="events"||K==="received_events"||K==="discussions"))return z("sensitive");if((G==="users"||G==="orgs")&&$[2]==="projectsv2"&&$[4]==="items")return z("sensitive");if(G==="orgs"&&$[2]==="hooks"&&$[4]==="deliveries"&&$[5]!==void 0||G==="app"&&$[1]==="hook"&&$[2]==="deliveries"&&$[3]!==void 0)return z("sensitive");if(G==="teams"&&$.includes("discussions"))return z("sensitive");if(G==="projects"&&$.includes("cards"))return z("sensitive");if(X.some(Boolean))return z($.some((K)=>K==="events"||K==="discussions"||K==="issues")?"sensitive":"unclassifiable");return z("other")}var k3=new Set([...p0,"branches","git","actions","hooks","zipball","tarball"]);function l0(Z,J){let[$,X]=Z;if($===void 0)return"other";if(J[0])return"unclassifiable";if($==="issues"&&/^\d+$/.test(X??"")&&Z[2]==="labels")return"other";if(p0.has($))return"sensitive";if($==="branches"){if(Z.length===1||Z.slice(1).some((z)=>z==="protection")||Z[Z.length-1]==="rename")return"other";return J.slice(1).some(Boolean)?"unclassifiable":"sensitive"}if($==="git")return X===void 0||X==="commits"||X==="tags"?"sensitive":J[1]?"unclassifiable":"other";if($==="actions"){if(X===void 0)return"sensitive";if(J[1])return"unclassifiable";if(X==="runs"||X==="jobs"){if(Z[Z.length-1]==="logs"&&Z.length>=4&&!J.some(Boolean))return"download";return"sensitive"}if(X==="workflows"&&Z[3]==="runs")return"sensitive";if(X==="artifacts"&&Z.length===4)return"download";return"other"}if($==="hooks"&&Z[2]==="deliveries"&&Z[3]!==void 0)return"sensitive";if($==="zipball"||$==="tarball")return"download";return"other"}function w3(Z,J){if(J[0]!=="repos"||J.length<5)return!1;let $=J.slice(3),X=(Q)=>/^\d+$/.test($[Q]??""),z=(...Q)=>$.length===Q.length&&Q.every((Y,G)=>typeof Y==="number"?X(G):$[G]===Y);if(Z==="DELETE")return z("issues","comments",0)||z("pulls","comments",0)||z("comments",0)||z("issues","comments",0,"reactions",0)||z("pulls","comments",0,"reactions",0)||z("issues",0,"reactions",0)||z("issues",0,"labels")||$.length===4&&$[0]==="issues"&&X(1)&&$[2]==="labels"||z("releases",0)||z("releases","assets",0)||z("actions","runs",0)||z("actions","runs",0,"logs")||z("deployments",0)||z("milestones",0)||z("issues",0,"lock");if(Z==="POST")return $.length===4&&$[0]==="actions"&&$[1]==="runs"&&X(2)&&["rerun","rerun-failed-jobs","cancel","force-cancel","approve"].includes($[3])||z("actions","jobs",0,"rerun")||z("issues",0,"labels");if(Z==="PUT")return z("pulls",0,"merge")||z("pulls",0,"update-branch")||z("issues",0,"labels")||z("issues",0,"lock");if(Z==="GET")return z("pulls",0,"merge");return!1}function x3(Z){if(Z[0]!=="repos"||Z.length!==5||!/^\d+$/.test(Z[4]))return;if(Z[3]==="pulls")return new Set(["commits","comments","review_comments"]);if(Z[3]==="issues")return new Set(["comments"]);return}var g3=new Set(["body","bodyText","bodyHTML","bodyUrl","bodyResourcePath","comments","reviews","latestReviews","latestOpinionatedReviews","reviewThreads","url","permalink","summary","text","description","message","messageBody","messageHeadline","commitBody","commitHeadline","annotations","rawDetails","note","diff","readme","payload"]),h3=new Set(["checkRuns","checkRun","checkSuites","checkSuite","contexts","statusCheckRollup","annotations","CheckRun","CheckSuite","StatusContext","CheckAnnotation","latestStatus","status","statuses"]);function u3(Z){let J=[],$=0;while($<Z.length){let X=Z[$];if(/[\s,]/.test(X)){$++;continue}if(X==="#"){let Y=Z.indexOf(`
15
+ `,$);$=Y<0?Z.length:Y+1;continue}if(Z.startsWith('"""',$)){let Y=$+3;for(;;){let G=Z.indexOf('"""',Y);if(G<0)return null;if(Z[G-1]==="\\"){Y=G+3;continue}$=G+3;break}continue}if(X==='"'){let Y=$+1;while(Y<Z.length&&Z[Y]!=='"'&&Z[Y]!==`
16
+ `)Y+=Z[Y]==="\\"?2:1;if(Z[Y]!=='"')return null;$=Y+1;continue}let z=/^[_A-Za-z][_0-9A-Za-z]*/.exec(Z.slice($,$+256));if(z){J.push({kind:"name",text:z[0]}),$+=z[0].length;continue}let Q=/^-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/.exec(Z.slice($,$+64));if(Q){$+=Q[0].length;continue}if(Z.startsWith("...",$)){J.push({kind:"punct",text:"..."}),$+=3;continue}if("{}()[]:!$@=|&".includes(X)){J.push({kind:"punct",text:X}),$++;continue}return null}return J}function l3(Z){let J=u3(Z);if(!J)return!0;let $=[],X="",z=0;for(let Q=0;Q<J.length;Q++){let Y=J[Q];if(Y.kind==="punct"){if(Y.text==="(")z++;else if(Y.text===")"){if(z--,z<0)return!0}else if(z===0&&Y.text==="{")$.push(X),X="";else if(z===0&&Y.text==="}"){if($.pop()===void 0)return!0;X=""}continue}if(z>0)continue;let G=J[Q-1];if(G?.kind==="punct"&&(G.text==="@"||G.text==="$"))continue;if(J[Q+1]?.kind==="punct"&&J[Q+1].text===":")continue;if(Y.text==="on"&&G?.kind==="punct"&&G.text==="...")continue;if(G?.kind==="name"&&G.text==="on"){X=Y.text;continue}if($.length===0){X=Y.text;continue}if(g3.has(Y.text)||/(?:Url|URL|HTML|Html)$/.test(Y.text))return!0;if(Y.text==="title"&&$.some((K)=>h3.has(K)))return!0;X=Y.text}return z!==0||$.length!==0}function m3(Z,J){let $=zZ(Z,t.api);if(S($,"-h","--help"))return q;let X=$.positionals[0];if(!X)return J.appendsArgs?F("unclassifiable"):q;let z=f3(X),Q=s($,"-X","--method"),Y=Q[Q.length-1],G=s($,"-f","--raw-field","-F","--field","--input"),K=Y?Y.value&&!Y.value.opaque?Y.value.value.toUpperCase():"?":G.length>0?"POST":"GET",H=w3(K,z.segments),B=q;if(z.kind==="unclassifiable")B=F("unclassifiable");else if(z.kind==="sensitive"&&!H)B=F("api-rest");else if(z.kind==="graphql")B=c3($);if(J.debug||S($,"--verbose")){if(z.kind==="download"&&!B.refused)B=F("api-rest");if(B.refused)return J.debug?F("debug-traffic"):B;return q}if(J.appendsArgs&&z.kind!=="other"&&z.kind!=="download")return F("unclassifiable");if(!B.refused||S($,"--silent"))return q;if(X0($,x3(z.segments)))return q;return B}function c3(Z){if(s(Z,"--input").length>0)return F("unclassifiable");let J=s(Z,"-f","--raw-field","-F","--field"),$=J.filter((X)=>X.value&&/^query=/.test(X.value.value));if($.length===0||J.some((X)=>!X.value))return F("unclassifiable");for(let X of $){let z=X.value.value.slice(6);if((X.name==="-F"||X.name==="--field")&&z.startsWith("@")||X.value.opaque)return F("unclassifiable");if(l3(z))return F("api-graphql")}return q}function RZ(Z,J){let $=0;while($<Z.length&&Z[$].value.startsWith("-")&&!Z[$].opaque){if(["--help","-h","--version"].includes(Z[$].value))return q;$++}if($>=Z.length)return J.appendsArgs?F("unclassifiable"):q;let X=Z[$],z=Z.slice($+1);if(X.opaque)return F("unclassifiable");switch(X.value){case"pr":case"issue":case"release":case"discussion":case"search":case"project":return S3(X.value,z,J);case"api":return m3(z,J);case"status":return z.length>0&&z.every((Q)=>Q.value==="-h"||Q.value==="--help")?q:F("composite-other");case"help":case"version":return q;case"cs":case"codespace":{let Q=z.findIndex((Y)=>Y.value==="--");if(z.some((Y)=>Y.value==="ssh")&&Q>=0&&Q+1<z.length){let Y=m(z.slice(Q+1).map((G)=>G.value).join(" "),J.depth+1,J.debug);if(Y.refused)return Y}break}}if(!L3.has(X.value))return F("unclassifiable");if(J.debug)return F("debug-traffic");return q}var yZ=new Set(["sh","bash","zsh","dash","ksh","ash","mksh","fish"]),p3=new Set(["su","runuser","script","flock"]),d3=new Set(["secrets","op","unbuffer","caffeinate","chronic","strace","ltrace","firejail","bwrap","nsenter","unshare","chroot","sg","retry","parallel","doppler","aws-vault","dotenv","direnv","faketime","taskset","numactl","cgexec","systemd-run","docker","podman","kubectl","mise","asdf","rtx","devbox","gosu","su-exec","setpriv","pkexec","with-contenv","uv","poetry","pipenv","npx","bunx","pnpm","yarn","nix","nix-shell","infisical","chamber","envchain","dotenvx","teller","vault","chrt","coproc","prlimit","ionice","cpulimit","trickle","proxychains","proxychains4","torsocks","tsocks","catchsegv","valgrind"]),i3=new Map([["bun",["x","exec"]],["npm",["exec","x"]],["deno",["run"]]]),s3=new Set(["-I","-L","-l","-n","-P","-s","-d","-E","-e","-a","--arg-file","--delimiter","--max-args","--max-lines","--max-procs","--max-chars","--replace","--eof","--process-slot-var"]),a3=new Set(["-b","-c","-D","-E","-e","-F","-I","-i","-J","-L","-l","-m","-O","-o","-p","-Q","-R","-S","-W","-w"]),EZ=/(?:^|[^A-Za-z0-9_.-])gh(?:$|[^A-Za-z0-9_.-])/,n3=/^([A-Za-z_][A-Za-z0-9_]*)=([\s\S]*)$/,r3=6;function m0(Z,J){let $,X;for(let z of Z){let Q=n3.exec(z.value);if(!Q)continue;let Y={...z,value:Q[2]};if(Q[1]==="GH_DEBUG")$=Y;else if(Q[1]==="DEBUG")X=Y}if($)return $.opaque||!["","0","false","no"].includes($.value);if(X&&(X.opaque||["1","true","yes","api"].includes(X.value)))return!0;return J}function K0(Z){let J=r(Z),$=0;return{segments:J.segments.map((z)=>{let Q=z.words[0],Y=Z.slice($,Q.start);return $=z.words[z.words.length-1].end,{words:z.words,redirects:z.redirects,sepBefore:Y}}),trustworthy:J.trustworthy}}var d0=(Z)=>/(?:^|[^|])\|&?$/.test(Z.trim());function eZ(Z,J){if(!yZ.has(Z))return!1;if(Q0(J))return!1;for(let $=0;$<J.length;$++){let X=J[$].value;if(X==="--")return $+1>=J.length;if(X==="-"||X==="-s")return!0;if(/^[-+][A-Za-z]*[oO]$/.test(X)){$++;continue}if(!X.startsWith("-")&&!X.startsWith("+"))return!1}return!0}function Z0(Z){let{segments:J}=K0(Z.trim());if(J.length!==1)return null;let $=J[0],X=l($);if(X<0)return null;let z=o(XZ($.words[X].text).value),Q=$.words.slice(X+1).filter((Y,G)=>!$.redirects.has(G+X+1)).map((Y)=>XZ(Y.text));if(z==="echo")return Q.filter((Y,G)=>!(G===0&&/^-[neE]+$/.test(Y.value))).map((Y)=>Y.value).join(" ");if(z==="printf"){let[Y,...G]=Q.filter((H)=>H.value!=="--");if(!Y)return null;let K=0;return Y.value.replace(/\\n/g,`
17
+ `).replace(/%s/g,()=>G[K++]?.value??"")+(K<G.length?" "+G.slice(K).map((H)=>H.value).join(" "):"")}if(z==="cat"){let Y=Z.indexOf("<<");if(Y<0)return null;let G=JZ(Z,Y),K=Z.indexOf(`
18
+ `,Y);if(!G||K<0)return null;let H=LZ(Z,K,[G]);if(H<0)return null;let B=Z.slice(K+1,H);return B.slice(0,B.lastIndexOf(G.delimiter)).replace(/\n$/,"")}return null}function rZ(Z,J,$){for(let X of tZ(Z).bodies){let z=Z0(X);if(z===null)continue;let Q=m(z,J+1,$.debug);if(Q.refused)return Q}return q}function m(Z,J=0,$=!1){if(typeof Z!=="string"||!Z.trim())return q;if(J>r3)return EZ.test(Z)?F("unclassifiable"):q;let{segments:X,trustworthy:z}=K0(Z);if(!z)return EZ.test(Z)?F("unclassifiable"):q;let Q=$,Y=(G)=>m(G,J+1,Q);for(let G of e3(Z)){if(G.runsBody){let K=Y(G.body);if(K.refused)return K}if(!G.quoted){let K=tZ(G.body,"heredoc");if(!K.complete&&EZ.test(G.body))return F("unclassifiable");for(let H of K.bodies){let B=Y(H);if(B.refused)return B}}}for(let G=0;G<X.length;G++){let K=X[G];for(let L of K.words){let v=tZ(L.text);if(!v.complete&&EZ.test(L.text))return F("unclassifiable");for(let k of v.bodies){let w=Y(k);if(w.refused)return w}}let H=l(K),B=K.words.map((L,v)=>({word:XZ(L.text),redirect:K.redirects.has(v)})),U=B.slice(0,H<0?B.length:H).map((L)=>L.word),V=H>=0?o(B[H].word.value):"";if(H<0||["export","declare","typeset","readonly","local"].includes(V)){if(Q=m0([...U,...B.slice(H+1).map((L)=>L.word)],Q),H<0)continue}let C=m0(U,Q),_=B.slice(H+1).filter((L)=>!L.redirect).map((L)=>L.word),O=B.slice(H+1).filter((L)=>L.redirect).map((L)=>L.word),M=B[H].word,j=o(M.value),c={depth:J,appendsArgs:!1,debug:C};if(H>0&&B[H-1].word.value==="function"){let L=_.filter((k)=>!["{","()","(",")"].includes(k.value)),v=$0(L,c);if(v.refused)return v;continue}if(G>0&&d0(K.sepBefore)&&eZ(j,_)){let L=X[G-1],v=o3(Z,L),k=v===null?null:Z0(v);if(k!==null){let w=m(k,J+1,C);if(w.refused)return w}}let p=X[G+1];if(p&&/<\(\s*$/.test(p.sepBefore)&&(yZ.has(j)||j==="source"||j===".")){let L=p.words[0].start-p.sepBefore.length+p.sepBefore.lastIndexOf("("),v=qZ(Z,L),k=v<0?null:Z0(Z.slice(L+1,v-1));if(k!==null){let w=m(k,J+1,C);if(w.refused)return w}}let a=i0(j,M,_,O,K.words.slice(0,H+1),c);if(a.refused)return a}return q}function o3(Z,J){let $=J.words[0],X=J.words[J.words.length-1];return $&&X?Z.slice($.start,X.end):null}function t3(Z){let J=o(Z.value);return/[$`]/.test(J)||J===""?void 0:J}function i0(Z,J,$,X,z,Q){let Y=Q.depth,G=(K)=>m(K,Y+1,Q.debug);if(J.opaque){let K=t3(J);if(K===void 0){let H=$.find((U)=>!U.value.startsWith("-")),B=RZ($,Q);if(!B.refused)return q;return B.rule!=="unclassifiable"||H!==void 0&&!H.opaque&&A3.has(H.value)?B:q}Z=K}if(Z==="gh")return RZ($,Q);if(yZ.has(Z)){let K=Q0($);if(K){let H=G(K.value);if(H.refused||!K.opaque)return H;return rZ(K.raw,Y,Q)}for(let H of X){let B=G(H.value);if(B.refused)return B;if(H.opaque){let U=rZ(H.raw,Y,Q);if(U.refused)return U}}return q}if(p3.has(Z)){let K=$.findIndex((B)=>B.value==="-c"||B.value==="--command"||/^-[A-Za-z]*c$/.test(B.value)),H=K>=0?$[K+1]:void 0;return H?G(H.value):oZ($,Q)}if(Z==="eval"||Z==="watch"){let K=$;if(Z==="watch"){let B=0;while(B<$.length&&$[B].value.startsWith("-")){if($[B].value==="--"){B++;break}if(["-n","--interval","-q","--equexit"].includes($[B].value))B++;B++}K=$.slice(B)}let H=G(K.map((B)=>B.value).join(" "));if(H.refused)return H;for(let B of K){let U=rZ(B.raw,Y,Q);if(U.refused)return U}return q}if(Z==="env")return G(FZ([...z.map((K)=>XZ(K.text).value),...$.map((K)=>K.value)]));if(Z==="ssh"){let K=0;for(;K<$.length;K++){let U=$[K].value;if(!U.startsWith("-"))break;if(a3.has(U))K++}let H=$.slice(K+1);if(H[0]?.value==="--")H.shift();let B=H.map((U)=>U.value).join(" ");return B?G(B):q}if(Z==="xargs"){let K=0,H=!1;for(;K<$.length;K++){let B=$[K].value;if(B==="--"){K++;break}if(!B.startsWith("-"))break;if(/^-I|^-i|^--replace/.test(B))H=!0;if(s3.has(B))K++}return $0($.slice(K),{depth:Y,appendsArgs:!H,debug:Q.debug})}if(Z==="find"){for(let K=0;K<$.length;K++){if(!["-exec","-execdir","-ok","-okdir"].includes($[K].value))continue;let H=K+1;while(H<$.length&&$[H].value!==";"&&$[H].value!=="+")H++;let B=$0($.slice(K+1,H),Q);if(B.refused)return B;K=H}return q}if(d3.has(Z))return oZ($,Q);if(i3.get(Z)?.includes($[0]?.value??""))return oZ($.slice(1),Q);return q}function $0(Z,J){if(Z.length===0)return q;let $=o(Z[0].value);if($==="gh")return RZ(Z.slice(1),J);if(yZ.has($)){let X=Q0(Z.slice(1));return X?m(X.value,J.depth+1,J.debug):q}return i0($,Z[0],Z.slice(1),[],[],J)}function oZ(Z,J){let $=Z.findIndex((X)=>!X.opaque&&o(X.value)==="gh"&&(X.value==="gh"||X.value.includes("/")));return $>=0?RZ(Z.slice($+1),J):q}function Q0(Z){for(let J=0;J<Z.length;J++){let $=Z[J].value;if($==="--")return;if(!$.startsWith("-")&&!$.startsWith("+"))return;if($==="-c"||/^-[A-Za-z]+$/.test($)&&$.includes("c"))return Z.slice(J+1).find((X)=>!X.value.startsWith("-")||X.value==="-");if(/^[-+][A-Za-z]*[oO]$/.test($))J++}return}function e3(Z){let J=[],$=0;for(;;){let X=Z.indexOf("<<",$);if(X<0)break;if($=X+2,Z[X+2]==="<"||X>0&&Z[X-1]==="<"){$=X+3;continue}let z=JZ(Z,X);if(!z)continue;let Q=Z.lastIndexOf(`
19
+ `,X)+1,Y=Z.indexOf(`
20
+ `,X);if(Y<0)continue;let G=LZ(Z,Y,[z]),K=G<0?Z.slice(Y+1):Z.slice(Y+1,G),H=G<0?K:K.slice(0,Math.max(0,K.lastIndexOf(z.delimiter))).replace(/\n$/,""),B=Z.slice(Q,X)+" HEREDOC_OPERATOR "+Z.slice(z.end,Y);J.push({body:H,runsBody:Z4(B),quoted:z.quoted})}return J}function Z4(Z){let{segments:J}=K0(Z),$=J.findIndex((G)=>G.words.some((K)=>K.text==="HEREDOC_OPERATOR"));if($<0)return!1;let X=(G)=>{let K=l(G);if(K<0)return{verb:"",args:[]};let H=G.words.slice(K+1).filter((B)=>B.text!=="HEREDOC_OPERATOR").map((B)=>XZ(B.text));return{verb:o(XZ(G.words[K].text).value),args:H}},{verb:z,args:Q}=X(J[$]);if(z==="ssh"||eZ(z,Q))return!0;if((z==="source"||z===".")&&["/dev/stdin","/dev/fd/0","/proc/self/fd/0"].includes(Q[0]?.value??""))return!0;let Y=J[$+1];if(z==="cat"&&Y&&d0(Y.sepBefore)){let G=X(Y);return G.verb==="ssh"||eZ(G.verb,G.args)}return!1}var $4=/(?:^|[^A-Za-z0-9_.-])gh(?:$|[^A-Za-z0-9_.-])/;function s0(){return{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:J0}}}var J4=new Set(["Bash","Monitor"]);function a0(Z){if(Z?.hook_event_name!=="PreToolUse"||!J4.has(Z.tool_name??""))return{continue:!0};let J=$Z(Z);if(!J.trim())return{continue:!0};try{return m(J).refused?s0():{continue:!0}}catch{return $4.test(J)?s0():{continue:!0}}}function X4(Z){if(Z!=="trash-guard"&&Z!=="workspace-repos-guard")throw Error("Invalid safety capability")}function n0(Z,J){X4(Z);let $=Z,X=JSON.parse(J);if(!X||Array.isArray(X)||X.hook_event_name!=="PreToolUse"||typeof X.tool_name!=="string"||!X.tool_input||typeof X.tool_input!=="object"||Array.isArray(X.tool_input)||typeof X.cwd!=="string"||!Y0.isAbsolute(X.cwd))throw Error("Invalid safety input");if(X.tool_name==="Bash"&&typeof X.tool_input.command!=="string")throw Error("Invalid shell input");if(X.tool_name==="Monitor"&&X.tool_input.command!==void 0&&typeof X.tool_input.command!=="string")throw Error("Invalid monitor input");let z=X.hasna_execution;if(z!==void 0&&(!z||Object.keys(z).sort().join()!=="agent,schema"||z.schema!=="hasna.hooks.execution.v1"||typeof z.agent!=="string"||!/^[A-Za-z0-9][A-Za-z0-9._:@-]{0,127}$/.test(z.agent)))throw Error("Invalid execution capability");let Q=z===void 0?void 0:{runtime:process.execPath,home:SZ.homedir(),path:process.env.PATH,agent:z.agent};if(Q&&(!Y0.isAbsolute(Q.runtime)||!Q.path))throw Error("Invalid bound execution context");if(["apply_patch","ApplyPatch","functions.apply_patch"].includes(X.tool_name)){if(X.tool_input.command!==void 0&&X.tool_input.patch!==void 0&&X.tool_input.command!==X.tool_input.patch)throw Error("Conflicting patch aliases");let O=X.tool_input.command??X.tool_input.patch;if(typeof O!=="string")throw Error("Invalid patch input");X.tool_input={...X.tool_input,command:O,patch:O}}let Y=X.tool_name==="Monitor",G=X.tool_name==="Bash"||Y&&typeof X.tool_input.command==="string",K=Y&&G?{...X,tool_name:"Bash"}:X,H=(O)=>({hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:O}}),B=y0(K).output,U=a0(K),V=G&&NZ(K.tool_input.command,{home:SZ.homedir(),cwd:X.cwd}).handoffHits.length>0,C=$==="trash-guard"&&(!Y||G)?I0(K,{home:SZ.homedir(),cwd:X.cwd,findTrash:DZ,inspectTrash:BZ,execution:Q}):{continue:!0};if(Y&&C.hookSpecificOutput?.permissionDecision==="allow")C=H("[trash-guard] A deletion inside a Monitor command is refused; run it with the Bash tool, where it is redirected into trash.");let _=B.decision==="block"?H(B.reason):U.hookSpecificOutput?U:V?H("[workspace-repos-guard] Deletion under a protected repository checkout is refused."):C;return JSON.stringify({verdict:"continue"in _?null:_})}var z4=2,K4="0.12.4";function Q4(Z,J){return n0(Z,J)}