@tokmizer/plugin 0.9.62 → 0.9.63

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.
@@ -1,12 +1,12 @@
1
1
  import { createRequire as __tkrCreateRequire } from "node:module"; const require = __tkrCreateRequire(import.meta.url);
2
- function v(t=5e3){return new Promise(e=>{let n=[],r=process.stdin,o=!1,i=()=>{o||(o=!0,clearTimeout(c),r.off("data",s),r.pause(),r.unref?.(),e(Buffer.concat(n).toString("utf8")))},s=u=>{n.push(Buffer.isBuffer(u)?u:Buffer.from(u))},c=setTimeout(i,t);r.on("data",s).once("end",i).once("error",i),r.resume()})}import{realpathSync as at}from"node:fs";import{fileURLToPath as Zt,pathToFileURL as Kt}from"node:url";var ft=null;function dt(t,e,n){if(n!==void 0&&ft===n)return!0;if(ft!==null||!t)return!1;if(e===Kt(t).href)return!0;try{return at(t)===at(Zt(e))}catch{return!1}}import{appendFileSync as ee,chmodSync as ne,mkdirSync as re,existsSync as oe,readFileSync as Sr,rmSync as yr}from"node:fs";import{dirname as se,join as ie}from"node:path";import qt from"node:os";import{join as Yt}from"node:path";function $(){return process.env.TOKMIZER_HOME||Yt(qt.homedir(),".tokmizer")}import{readFileSync as Vt,renameSync as Xt,statSync as Qt,writeFileSync as te}from"node:fs";function pt(t,e,n){try{if(Qt(t).size<=e)return;let r=Vt(t,"utf8").split(`
3
- `).filter(c=>c.trim()!==""),o=[],i=0;for(let c=r.length-1;c>=0;c-=1){let u=r[c],l=Buffer.byteLength(u)+1;if(i+l>n)break;o.push(u),i+=l}o.reverse();let s=`${t}.tmp-${process.pid}`;te(s,o.length?`${o.join(`
2
+ function R(t=5e3){return new Promise(e=>{let n=[],r=process.stdin,o=!1,s=()=>{o||(o=!0,clearTimeout(c),r.off("data",i),r.pause(),r.unref?.(),e(Buffer.concat(n).toString("utf8")))},i=u=>{n.push(Buffer.isBuffer(u)?u:Buffer.from(u))},c=setTimeout(s,t);r.on("data",i).once("end",s).once("error",s),r.resume()})}import{realpathSync as gt}from"node:fs";import{fileURLToPath as ne,pathToFileURL as re}from"node:url";var ht=null;function kt(t,e,n){if(n!==void 0&&ht===n)return!0;if(ht!==null||!t)return!1;if(e===re(t).href)return!0;try{return gt(t)===gt(ne(e))}catch{return!1}}import{appendFileSync as ae,chmodSync as fe,mkdirSync as de,existsSync as pe,readFileSync as Ar,rmSync as Rr}from"node:fs";import{dirname as me,join as ge}from"node:path";import oe from"node:os";import{join as se}from"node:path";function $(){return process.env.TOKMIZER_HOME||se(oe.homedir(),".tokmizer")}import{readFileSync as ie,renameSync as ce,statSync as ue,writeFileSync as le}from"node:fs";function _t(t,e,n){try{if(ue(t).size<=e)return;let r=ie(t,"utf8").split(`
3
+ `).filter(c=>c.trim()!==""),o=[],s=0;for(let c=r.length-1;c>=0;c-=1){let u=r[c],l=Buffer.byteLength(u)+1;if(s+l>n)break;o.push(u),s+=l}o.reverse();let i=`${t}.tmp-${process.pid}`;le(i,o.length?`${o.join(`
4
4
  `)}
5
- `:"",{mode:384}),Xt(s,t)}catch{}}var ce="usage.jsonl";var mt=2*1024*1024;function ue(){return ie($(),ce)}function k(t,e,n=ue()){try{let r=se(n);oe(r)||re(r,{recursive:!0,mode:448});let o=t.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";ee(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${e?1:0}}
6
- `,{mode:384}),ne(n,384),pt(n,mt,mt/2)}catch{}}import{rmSync as le,statSync as ae}from"node:fs";import{join as fe}from"node:path";function gt(){return fe($(),"fail-open")}var de=24*36e5;function S(t=Date.now()){try{if(t-ae(gt()).mtimeMs<de)return!0;le(gt(),{force:!0})}catch{}return!1}import{existsSync as B,readFileSync as nt,readdirSync as rt}from"node:fs";import{homedir as A}from"node:os";import{fileURLToPath as Ge}from"node:url";import{dirname as Tt,join as f,resolve as Ze}from"node:path";function M(){return!1}import{execFileSync as He}from"node:child_process";import{mkdirSync as Ne,readFileSync as yt,renameSync as Ie,statSync as Le,writeFileSync as je}from"node:fs";import{join as xt}from"node:path";import{closeSync as pe,openSync as me,readSync as ge,readdirSync as he,readFileSync as ke,statSync as _t}from"node:fs";import{homedir as _e}from"node:os";import{isAbsolute as be,join as J,resolve as Se}from"node:path";var ye=/^[A-Za-z0-9._+@%:,/-]+$/,xe=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),we=32,$e=4*1024*1024;function Q(t){let e;try{e=me(t,"r");let n=Buffer.alloc(4),r=ge(e,n,0,4,0);return r>=2&&n[0]===35&&n[1]===33?"#!":r===4?n.toString("hex"):null}catch{return null}finally{e!==void 0&&pe(e)}}function L(t,e=process.platform){try{let n=_t(t);if(!n.isFile())return!1;if(e==="win32")return!0;if((n.mode&73)===0)return!1;let r=Q(t);return r==="#!"||r!==null&&xe.has(r)}catch{return!1}}function Oe(t){if(/\.[A-Za-z0-9]+$/.test(t))return[t];let e=(process.env.PATHEXT??".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);return[t,...e.map(n=>t+n.toLowerCase())]}function E(t,e,n,r=process.platform){if(!ye.test(t))return!1;let o=r==="win32";if(t.includes("/"))return L(Se(e??process.cwd(),t),r);if(!n)return!1;let i=o?Oe(t):[t];for(let s of n.split(o?";":":"))if(!(!s||!be(s))){for(let c of i)if(L(J(s,c),r))return!0}return!1}var ve=/^eval \$'([^\s'()=]+) \(\) /,Ee=/^([^\s'"()=]+) \(\) \{$/,Ae=/^alias -- ([^\s=]+)=(.*)$/,Re=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,Te=/^export PATH=(.*)$/,Ce=/^(?:--colou?r(?:=\S+)?|-G)$/;function kt(t){return t.length>=2&&t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1).replace(/'\\''/g,"'"):t.length>=2&&t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t}function Pe(t,e){let n="";for(let r of t.split(`
7
- `)){let o=Te.exec(r);if(o&&n!=="# Functions"){let i=kt(o[1].trim());/[$`\\]/.test(i)||e.paths.push(i);continue}if(r.startsWith("# ")&&(n!=="# Functions"||Re.test(r))){n=r;continue}if(n==="# Functions"){let i=ve.exec(r)??Ee.exec(r);i&&e.functions.add(i[1])}else if(n==="# Aliases"){let i=Ae.exec(r);i&&e.aliases.set(i[1],kt(i[2].trim()))}}}function X(t){return t?.code==="ENOENT"}function bt(t){let e={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=J(t||J(_e(),".claude"),"shell-snapshots"),r=[];try{for(let o of he(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let i=J(n,o);try{let s=_t(i);s.isFile()&&r.push({path:i,mtime:s.mtimeMs,size:s.size})}catch(s){X(s)||(e.uncertain=!0)}}}catch(o){return X(o)||(e.uncertain=!0),e}r=r.sort((o,i)=>i.mtime-o.mtime).slice(0,we);for(let o of r)try{if(o.size>$e)throw new Error("snapshot too large");Pe(ke(o.path,"utf8"),e)}catch(i){X(i)||(e.uncertain=!0)}return e}function St(t,e){if(e.uncertain||e.functions.has(t))return!0;let n=e.aliases.get(t);if(n===void 0)return!1;let r=n.trim().split(/\s+/);return r[0]!==t||!r.slice(1).every(o=>Ce.test(o))}var Fe="exec-probe.json",De=6e4;function Ue(){return xt($(),Fe)}function Me(t){try{let e=JSON.parse(yt(t,"utf8"));if(e==null||typeof e!="object")return null;let n=e;return typeof n.key!="string"||typeof n.ok!="boolean"?null:{key:n.key,ok:n.ok,at:typeof n.at=="number"?n.at:0,skipped:typeof n.skipped=="number"&&n.skipped>=0?n.skipped:0}}catch{return null}}function Je(t,e){try{Ne(xt(t,".."),{recursive:!0,mode:448});let n=`${t}.${process.pid}.tmp`;je(n,JSON.stringify(e),{mode:384}),Ie(n,t)}catch{}}function ze(t){try{return He(t,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function Be(t,e){try{let r=yt(t,"utf8").split(`
8
- `,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?E(r[1]??"",void 0,e):L(o)}catch{return!1}}function We(t,e,n){try{let r=Le(t);return[t,r.size,r.mtimeMs,r.ino,r.mode,e?n??"":""].join("|")}catch{return`${t}|missing`}}function tt(t,e=process.platform,n=process.env.PATH,r=Ue(),o=Date.now()){let i=e!=="win32"&&Q(t)==="#!",s=We(t,i,n),c=Me(r);if(c?.key===s&&(c.ok||o-c.at<De))return c.ok;let u=L(t,e)&&(i?Be(t,n):ze(t));return Je(r,{key:s,ok:u,at:o,skipped:(c?.skipped??0)+(u?0:1)}),u}var Ke=new Set(["tkr","tkr-exec","token","claude","cd","export","source","echo","mkdir","rm","mv","cp","chmod","ln","true","false",":","test","[","exit","return","nohup","sudo","doas","env"]),qe=new Set(["for","while","until","if","then","else","elif","fi","do","done","case","esac","select","function","time","coproc","in","!","[[","]]","{","}",".","declare","typeset","local","readonly","unset","set","shift","trap","wait","read","eval","exec","break","continue","pushd","popd","dirs","alias","unalias","hash","ulimit","umask","getopts","let","shopt","builtin","command","compgen","complete","disown","suspend","jobs","fg","bg","kill","history","fc","bind","enable","caller","type","printf","pwd","times","logout","mapfile","readarray","help","which","print","whence","where","autoload","zmodload","setopt","unsetopt","emulate","noglob","rehash","functions","bindkey","zle","vared","sched","limit","unlimit","zstyle","zparseopts","ttyctl"]),wt=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),$t="(?:dev|start|serve|watch|preview)",Ye=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${$t}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${$t}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|php\\s+-l(?:\\s|$)|php\\s+(?:\\S*/)?(?:phpunit|pest|paratest|phpstan|pint|ecs|php-cs-fixer|psalm|rector|run-tests\\.php)(?:\\s|$)|php\\s+artisan\\s+(?!(?:serve|tinker|queue:work|queue:listen|horizon|octane:start|reverb:start|schedule:work|pail|dev)(?:\\s|$))\\S)`),Ve=/(?:^|\s)--watch(?:\s|=|$)/;function Xe(t){return Ye.test(t)&&!Ve.test(t)}var Qe=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,tn=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,Ct=3;function Pt(t){let e=Qe.exec(t);if(!e)return null;let n=e[2]==="fish";if(n&&e[3]!=="-c")return null;let r=e[4],o=e[1].length+1,i=t.indexOf(r,o);if(i<=o)return null;let s=t.slice(i+1);if(s&&!/^\s/.test(s))return null;let c=t.slice(o,i);return r==='"'&&/[$`\\!]/.test(c)||n&&tn.test(c)?null:{script:c,start:o,end:i,quote:r}}var en=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function nn(t){return G(t).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=Nt(n.text);return r!==""&&!en.has(r)&&!ot.test(r)}).length>1}function rn(t,e,n,r,o){if(n>=Ct)return null;let i=Pt(t);if(!i)return null;let{script:s,start:c,end:u,quote:l}=i,a=[],p=Lt(s,e,n+1,r,g=>a.push(g));if(p===s||l==='"'&&/["$`]/.test(p))return null;let b=l==="'"?p.replace(/'/g,"'\\''"):p,d=`${t.slice(0,c)}${b}${t.slice(u)}`,y=nn(s);if(o)for(let g of y?[t,...a]:a)o(g);return y?`${e} ${d}`:d}var Ot=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,on=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function sn(t,e){let n=W(e);return n==="tail"||n==="journalctl"?Ot.test(t):n==="stern"?!0:on.has(n)?/\blogs?\b/.test(t)&&Ot.test(t):!1}var ot=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,cn=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,un=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function W(t){let e=t.lastIndexOf("/");return e===-1?t:t.slice(e+1)}function Ht(t){let e=new Array(t.length).fill(!1),n=[],r=0;for(;r<t.length;){let o=t[r],i=t[r+1],s=n[n.length-1];if(s==="'"){o==="'"&&n.pop(),r+=1;continue}if(o==="\\"){if(i===void 0)return null;r+=2;continue}if(s==="$'"){o==="'"&&n.pop(),r+=1;continue}if(o==="$"&&(i==="("||i==="{")){n.push(i==="("?")":"}"),r+=2;continue}if(o==="`"){s==="`"?n.pop():n.push("`"),r+=1;continue}if(s==='"'){o==='"'&&n.pop(),r+=1;continue}if(o==="$"&&i==="'"){n.push("$'"),r+=2;continue}if(o==="'"||o==='"'){n.push(o),r+=1;continue}if(o==="("||o==="{"&&s==="}"){n.push(o==="("?")":"}"),r+=1;continue}if(o===s){n.pop(),r+=1;continue}if(o===")"&&s===void 0)return null;e[r]=s===void 0,r+=1}return n.length===0?e:null}function vt(t){let e=Ht(t);if(!e)return!0;for(let n=0;n<t.length;n++)if(e[n]&&t[n]===">")return!0;return!1}function G(t){let e=Ht(t);if(!e)return[{kind:"cmd",text:t,unsafe:!0}];let n=[],r="",o=0,i=()=>{r.length>0&&(n.push({kind:"cmd",text:r}),r="")},s=(c,u)=>{i(),n.push({kind:"sep",text:c}),o+=u};for(;o<t.length;){let c=t[o],u=t[o+1];if(e[o]){if(c===">"&&u==="|"){r+=">|",o+=2;continue}if(c==="&"&&u==="&"){s("&&",2);continue}if(c==="&"&&u!==">"){let l=r.replace(/\s+$/,""),a=l[l.length-1];if(a!==">"&&a!=="<"&&a!=="&"){s("&",1);continue}}if(c==="|"&&u==="|"){s("||",2);continue}if(c==="|"&&u==="&"){s("|&",2);continue}if(c===";"&&u===";"){let l=t[o+2]==="&";s(l?";;&":";;",l?3:2);continue}if(c===";"||c===`
9
- `||c==="|"){s(c,1);continue}}r+=c,o+=1}return i(),n}function Nt(t){return t.trim().split(/\s+/)[0]??""}function _(t,e=process.platform){try{let n=Tt(Ge(import.meta.url)),r=e==="win32",o=t&&t!=="claude-code"&&t!=="codex"&&!r?`TOKMIZER_HOST=${t} `:"";if(r&&(!t||t==="claude-code")){let c=f(n,"..","bin","tkr-exec.exe");if(B(c))return tt(c,e)?`'${c.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let i=f(n,"..","bin","tkr-exec");if(!r&&B(i))return tt(i,e)?`${o}'${i.replace(/'/g,"'\\''")}'`:null;if(M()){let c=r?process.execPath.replace(/\\/g,"/"):process.execPath;return`${o}'${c.replace(/'/g,"'\\''")}' exec`}let s=f(n,"..","bin","tkr-exec.js");return B(s)?`${o}node '${s.replace(/'/g,"'\\''")}'`:null}catch{return null}}function It(t,e="tkr-exec",n=()=>!0,r){return Lt(t,e,0,n,r)}function Lt(t,e,n,r,o){if(t.includes("<<")||un.test(t))return t;let i=G(t),s=[];for(let c=0;c<i.length;c++){let u=i[c];if(u.kind==="sep"||u.unsafe){s.push(u.text);continue}let l=u.text.trim();if(!l){s.push(u.text);continue}let a=Nt(l),p=i[c+1],b=p?.kind==="sep"&&(p.text==="|"||p.text==="|&"),d=p?.kind==="sep"&&p.text==="&",y=!b&&!d&&!vt(u.text)&&!u.text.includes("<(")&&!u.text.includes(">(")?rn(l,e,n,r,o):null;if(y!==null){s.push(`${u.text.match(/^\s*/)?.[0]??""}${y}${u.text.match(/\s*$/)?.[0]??""}`);continue}if(l===e||l.startsWith(e)&&/^\s/.test(l.slice(e.length))||Ke.has(a)||qe.has(a)||(wt.has(a)||wt.has(W(a)))&&!Xe(l)||ot.test(a)||a.startsWith("(")||a.startsWith("#")||a.startsWith("<")||a.startsWith(">")||cn.test(l)||sn(l,a)||a.endsWith(")")||b||d||vt(u.text)||u.text.includes("<(")||u.text.includes(">(")||a==="node"&&l.includes("tkr-exec.js")||!r(a)){s.push(u.text);continue}let g=u.text.match(/^\s*/)?.[0]??"",U=u.text.match(/\s*$/)?.[0]??"";o?.(l),s.push(`${g}${e} ${l}${U}`)}return s.join("")}var ln=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),an=new Set(["cd","cat","head","tail","ls","tree","find","grep","rg","wc","nl","sort","cut","diff","stat","file","du","df","ps","jq","yq","pwd","which"]),fn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),dn={find:/^-(?:delete|exec|execdir|ok|okdir|fprint|fls)/,sort:/^(?:-[^-]*o|--output|--compress-program)/,rg:/^(?:--pre|-[^-]*z|--search-zip)/,yq:/^(?:-[^-]*[is]|--inplace|--split-exp)/,file:/^(?:-C|--compile)/,tree:/^(?:-o|--output|-R$|-H$)/,git:/^(?:--output|--ext-diff|--textconv|-c$|--exec-path|--git-dir|--work-tree)/,eslint:/^--fix/},z=["test","run test","run build","run lint","run typecheck"],pn={npm:new Set(z),pnpm:new Set([...z,"build","lint","typecheck"]),yarn:new Set([...z,"build","lint","typecheck"]),bun:new Set(z),cargo:new Set(["test","build","check","clippy"]),go:new Set(["test","build","vet"]),mvn:new Set(["test","compile","verify"]),gradle:new Set(["test","build","check"]),dotnet:new Set(["test","build"])},mn=new Set(["pytest","tsc","vitest","jest","eslint","mypy"]);function jt(t,e,n=0){if(/\$|`|<\(|>\(|\\\r?\n/.test(t)||/>/.test(t.replace(/2>&1|[12]?>\s*\/dev\/null/g,"")))return!1;for(let r of G(t)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<Ct?Pt(r.text.trim()):null;if(o){if(!jt(o.script,e,n+1))return!1;continue}let i=r.text.trim().split(/\s+/).filter(Boolean).map(l=>l.replace(/['"\\]/g,""));if(i.length===0)continue;if(i.some(l=>ot.test(l)))return!1;let s=W(i[0]);if(s!==i[0])return!1;let c=dn[s];if(c&&i.slice(1).some(l=>c.test(l)))return!1;if((s==="git"?fn.has(i[1]??""):an.has(s))||e&&mn.has(s))continue;let u=e?pn[s]:void 0;if(!(u&&(u.has(i[1]??"")||i[1]==="run"&&u.has(`run ${i[2]??""}`))))return!1}return!0}function st(t,e,n=_(e),r=k,o=K(),i=process.env.PATH){if(!h(t)||t.tool_name!=="Bash")return null;let s=t.tool_input;if(!h(s)||s.run_in_background)return null;let c=s.command;if(typeof c!="string"||!c||e==="codex"&&Object.keys(s).some(d=>!ln.has(d)))return null;let u=typeof t.cwd=="string"&&t.cwd?t.cwd:s.workdir,l=typeof u=="string"&&u?u:void 0,a=typeof t.session_id=="string"&&t.session_id?t.session_id:"unknown",p=typeof t.permission_mode=="string"?t.permission_mode:void 0,b=x(c,{host:e,sessionId:a,cwd:l,claudeDirs:o,pathEnv:i,permissionMode:p},n,r);return b?JSON.stringify({hookSpecificOutput:e==="codex"?{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:{...s,command:b}}:{hookEventName:"PreToolUse",updatedInput:{...s,command:b}}}):null}function gn(t,e){if(!B(t))return"missing";try{let n=nt(t,"utf8");return JSON.parse(e?Ft(n):n)}catch{return"unreadable"}}function Ft(t){let e="",n=!1;for(let r=0;r<t.length;r++){let o=t[r];if(n){e+=o,o==="\\"?e+=t[++r]??"":o==='"'&&(n=!1);continue}if(o==='"')n=!0,e+=o;else if(o==="/"&&t[r+1]==="/"){for(;r<t.length&&t[r]!==`
5
+ `:"",{mode:384}),ce(i,t)}catch{}}var he="usage.jsonl";var bt=2*1024*1024;function ke(){return ge($(),he)}function h(t,e,n=ke()){try{let r=me(n);pe(r)||de(r,{recursive:!0,mode:448});let o=t.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";ae(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${e?1:0}}
6
+ `,{mode:384}),fe(n,384),_t(n,bt,bt/2)}catch{}}import{rmSync as _e,statSync as be}from"node:fs";import{join as we}from"node:path";function wt(){return we($(),"fail-open")}var Se=24*36e5;function S(t=Date.now()){try{if(t-be(wt()).mtimeMs<Se)return!0;_e(wt(),{force:!0})}catch{}return!1}import{existsSync as W,readFileSync as ot,readdirSync as st}from"node:fs";import{homedir as C}from"node:os";import{fileURLToPath as en}from"node:url";import{dirname as It,join as f,resolve as nn}from"node:path";function z(){return!1}import{execFileSync as ze}from"node:child_process";import{mkdirSync as Je,readFileSync as vt,renameSync as Be,statSync as We,writeFileSync as Ge}from"node:fs";import{join as Ot}from"node:path";import{closeSync as ye,openSync as xe,readSync as $e,readdirSync as Ee,readFileSync as ve,statSync as xt}from"node:fs";import{homedir as Oe}from"node:os";import{isAbsolute as Ae,join as J,resolve as Re}from"node:path";var Te=/^[A-Za-z0-9._+@%:,/-]+$/,Ce=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),Pe=32,He=4*1024*1024;function et(t){let e;try{e=xe(t,"r");let n=Buffer.alloc(4),r=$e(e,n,0,4,0);return r>=2&&n[0]===35&&n[1]===33?"#!":r===4?n.toString("hex"):null}catch{return null}finally{e!==void 0&&ye(e)}}function F(t,e=process.platform){try{let n=xt(t);if(!n.isFile())return!1;if(e==="win32")return!0;if((n.mode&73)===0)return!1;let r=et(t);return r==="#!"||r!==null&&Ce.has(r)}catch{return!1}}function Ne(t){if(/\.[A-Za-z0-9]+$/.test(t))return[t];let e=(process.env.PATHEXT??".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);return[t,...e.map(n=>t+n.toLowerCase())]}function T(t,e,n,r=process.platform){if(!Te.test(t))return!1;let o=r==="win32";if(t.includes("/"))return F(Re(e??process.cwd(),t),r);if(!n)return!1;let s=o?Ne(t):[t];for(let i of n.split(o?";":":"))if(!(!i||!Ae(i))){for(let c of s)if(F(J(i,c),r))return!0}return!1}var Ie=/^eval \$'([^\s'()=]+) \(\) /,Le=/^([^\s'"()=]+) \(\) \{$/,je=/^alias -- ([^\s=]+)=(.*)$/,Fe=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,De=/^export PATH=(.*)$/,Me=/^(?:--colou?r(?:=\S+)?|-G)$/;function yt(t){return t.length>=2&&t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1).replace(/'\\''/g,"'"):t.length>=2&&t.startsWith('"')&&t.endsWith('"')?t.slice(1,-1):t}function Ue(t,e){let n="";for(let r of t.split(`
7
+ `)){let o=De.exec(r);if(o&&n!=="# Functions"){let s=yt(o[1].trim());/[$`\\]/.test(s)||e.paths.push(s);continue}if(r.startsWith("# ")&&(n!=="# Functions"||Fe.test(r))){n=r;continue}if(n==="# Functions"){let s=Ie.exec(r)??Le.exec(r);s&&e.functions.add(s[1])}else if(n==="# Aliases"){let s=je.exec(r);s&&e.aliases.set(s[1],yt(s[2].trim()))}}}function tt(t){return t?.code==="ENOENT"}function $t(t){let e={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=J(t||J(Oe(),".claude"),"shell-snapshots"),r=[];try{for(let o of Ee(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let s=J(n,o);try{let i=xt(s);i.isFile()&&r.push({path:s,mtime:i.mtimeMs,size:i.size})}catch(i){tt(i)||(e.uncertain=!0)}}}catch(o){return tt(o)||(e.uncertain=!0),e}r=r.sort((o,s)=>s.mtime-o.mtime).slice(0,Pe);for(let o of r)try{if(o.size>He)throw new Error("snapshot too large");Ue(ve(o.path,"utf8"),e)}catch(s){tt(s)||(e.uncertain=!0)}return e}function Et(t,e){if(e.uncertain||e.functions.has(t))return!0;let n=e.aliases.get(t);if(n===void 0)return!1;let r=n.trim().split(/\s+/);return r[0]!==t||!r.slice(1).every(o=>Me.test(o))}var Ze="exec-probe.json",Ke=6e4;function qe(){return Ot($(),Ze)}function Ye(t){try{let e=JSON.parse(vt(t,"utf8"));if(e==null||typeof e!="object")return null;let n=e;return typeof n.key!="string"||typeof n.ok!="boolean"?null:{key:n.key,ok:n.ok,at:typeof n.at=="number"?n.at:0,skipped:typeof n.skipped=="number"&&n.skipped>=0?n.skipped:0}}catch{return null}}function Ve(t,e){try{Je(Ot(t,".."),{recursive:!0,mode:448});let n=`${t}.${process.pid}.tmp`;Ge(n,JSON.stringify(e),{mode:384}),Be(n,t)}catch{}}function Xe(t){try{return ze(t,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function Qe(t,e){try{let r=vt(t,"utf8").split(`
8
+ `,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?T(r[1]??"",void 0,e):F(o)}catch{return!1}}function tn(t,e,n){try{let r=We(t);return[t,r.size,r.mtimeMs,r.ino,r.mode,e?n??"":""].join("|")}catch{return`${t}|missing`}}function nt(t,e=process.platform,n=process.env.PATH,r=qe(),o=Date.now()){let s=e!=="win32"&&et(t)==="#!",i=tn(t,s,n),c=Ye(r);if(c?.key===i&&(c.ok||o-c.at<Ke))return c.ok;let u=F(t,e)&&(s?Qe(t,n):Xe(t));return Ve(r,{key:i,ok:u,at:o,skipped:(c?.skipped??0)+(u?0:1)}),u}var rn=new Set(["tkr","tkr-exec","token","claude","cd","export","source","echo","mkdir","rm","mv","cp","chmod","ln","true","false",":","test","[","exit","return","nohup","sudo","doas","env"]),on=new Set(["for","while","until","if","then","else","elif","fi","do","done","case","esac","select","function","time","coproc","in","!","[[","]]","{","}",".","declare","typeset","local","readonly","unset","set","shift","trap","wait","read","eval","exec","break","continue","pushd","popd","dirs","alias","unalias","hash","ulimit","umask","getopts","let","shopt","builtin","command","compgen","complete","disown","suspend","jobs","fg","bg","kill","history","fc","bind","enable","caller","type","printf","pwd","times","logout","mapfile","readarray","help","which","print","whence","where","autoload","zmodload","setopt","unsetopt","emulate","noglob","rehash","functions","bindkey","zle","vared","sched","limit","unlimit","zstyle","zparseopts","ttyctl"]),At=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),Rt="(?:dev|start|serve|watch|preview)",sn=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${Rt}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${Rt}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|php\\s+-l(?:\\s|$)|php\\s+(?:\\S*/)?(?:phpunit|pest|paratest|phpstan|pint|ecs|php-cs-fixer|psalm|rector|run-tests\\.php)(?:\\s|$)|php\\s+artisan\\s+(?!(?:serve|tinker|queue:work|queue:listen|horizon|octane:start|reverb:start|schedule:work|pail|dev)(?:\\s|$))\\S)`),cn=/(?:^|\s)--watch(?:\s|=|$)/;function un(t){return sn.test(t)&&!cn.test(t)}var ln=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,an=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,Lt=3;function jt(t){let e=ln.exec(t);if(!e)return null;let n=e[2]==="fish";if(n&&e[3]!=="-c")return null;let r=e[4],o=e[1].length+1,s=t.indexOf(r,o);if(s<=o)return null;let i=t.slice(s+1);if(i&&!/^\s/.test(i))return null;let c=t.slice(o,s);return r==='"'&&/[$`\\!]/.test(c)||n&&an.test(c)?null:{script:c,start:o,end:s,quote:r}}var fn=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function dn(t){return Z(t).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=Dt(n.text);return r!==""&&!fn.has(r)&&!it.test(r)}).length>1}function pn(t,e,n,r,o){if(n>=Lt)return null;let s=jt(t);if(!s)return null;let{script:i,start:c,end:u,quote:l}=s,a=[],d=Ut(i,e,n+1,r,v=>a.push(v));if(d===i||l==='"'&&/["$`]/.test(d))return null;let _=l==="'"?d.replace(/'/g,"'\\''"):d,g=`${t.slice(0,c)}${_}${t.slice(u)}`,w=dn(i);if(o)for(let v of w?[t,...a]:a)o(v);return w?`${e} ${g}`:g}var Tt=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,mn=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function gn(t,e){let n=G(e);return n==="tail"||n==="journalctl"?Tt.test(t):n==="stern"?!0:mn.has(n)?/\blogs?\b/.test(t)&&Tt.test(t):!1}var it=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,hn=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,kn=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function G(t){let e=t.lastIndexOf("/");return e===-1?t:t.slice(e+1)}function Ft(t){let e=new Array(t.length).fill(!1),n=[],r=0;for(;r<t.length;){let o=t[r],s=t[r+1],i=n[n.length-1];if(i==="'"){o==="'"&&n.pop(),r+=1;continue}if(o==="\\"){if(s===void 0)return null;r+=2;continue}if(i==="$'"){o==="'"&&n.pop(),r+=1;continue}if(o==="$"&&(s==="("||s==="{")){n.push(s==="("?")":"}"),r+=2;continue}if(o==="`"){i==="`"?n.pop():n.push("`"),r+=1;continue}if(i==='"'){o==='"'&&n.pop(),r+=1;continue}if(o==="$"&&s==="'"){n.push("$'"),r+=2;continue}if(o==="'"||o==='"'){n.push(o),r+=1;continue}if(o==="("||o==="{"&&i==="}"){n.push(o==="("?")":"}"),r+=1;continue}if(o===i){n.pop(),r+=1;continue}if(o===")"&&i===void 0)return null;e[r]=i===void 0,r+=1}return n.length===0?e:null}function Ct(t){let e=Ft(t);if(!e)return!0;for(let n=0;n<t.length;n++)if(e[n]&&t[n]===">")return!0;return!1}function Z(t){let e=Ft(t);if(!e)return[{kind:"cmd",text:t,unsafe:!0}];let n=[],r="",o=0,s=()=>{r.length>0&&(n.push({kind:"cmd",text:r}),r="")},i=(c,u)=>{s(),n.push({kind:"sep",text:c}),o+=u};for(;o<t.length;){let c=t[o],u=t[o+1];if(e[o]){if(c===">"&&u==="|"){r+=">|",o+=2;continue}if(c==="&"&&u==="&"){i("&&",2);continue}if(c==="&"&&u!==">"){let l=r.replace(/\s+$/,""),a=l[l.length-1];if(a!==">"&&a!=="<"&&a!=="&"){i("&",1);continue}}if(c==="|"&&u==="|"){i("||",2);continue}if(c==="|"&&u==="&"){i("|&",2);continue}if(c===";"&&u===";"){let l=t[o+2]==="&";i(l?";;&":";;",l?3:2);continue}if(c===";"||c===`
9
+ `||c==="|"){i(c,1);continue}}r+=c,o+=1}return s(),n}function Dt(t){return t.trim().split(/\s+/)[0]??""}function k(t,e=process.platform){try{let n=It(en(import.meta.url)),r=e==="win32",o=t&&t!=="claude-code"&&t!=="codex"&&!r?`TOKMIZER_HOST=${t} `:"";if(r&&(!t||t==="claude-code")){let c=f(n,"..","bin","tkr-exec.exe");if(W(c))return nt(c,e)?`'${c.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let s=f(n,"..","bin","tkr-exec");if(!r&&W(s))return nt(s,e)?`${o}'${s.replace(/'/g,"'\\''")}'`:null;if(z()){let c=r?process.execPath.replace(/\\/g,"/"):process.execPath;return`${o}'${c.replace(/'/g,"'\\''")}' exec`}let i=f(n,"..","bin","tkr-exec.js");return W(i)?`${o}node '${i.replace(/'/g,"'\\''")}'`:null}catch{return null}}function Mt(t,e="tkr-exec",n=()=>!0,r){return Ut(t,e,0,n,r)}function Ut(t,e,n,r,o){if(t.includes("<<")||kn.test(t))return t;let s=Z(t),i=[];for(let c=0;c<s.length;c++){let u=s[c];if(u.kind==="sep"||u.unsafe){i.push(u.text);continue}let l=u.text.trim();if(!l){i.push(u.text);continue}let a=Dt(l),d=s[c+1],_=d?.kind==="sep"&&(d.text==="|"||d.text==="|&"),g=d?.kind==="sep"&&d.text==="&",w=!_&&!g&&!Ct(u.text)&&!u.text.includes("<(")&&!u.text.includes(">(")?pn(l,e,n,r,o):null;if(w!==null){i.push(`${u.text.match(/^\s*/)?.[0]??""}${w}${u.text.match(/\s*$/)?.[0]??""}`);continue}if(l===e||l.startsWith(e)&&/^\s/.test(l.slice(e.length))||rn.has(a)||on.has(a)||(At.has(a)||At.has(G(a)))&&!un(l)||it.test(a)||a.startsWith("(")||a.startsWith("#")||a.startsWith("<")||a.startsWith(">")||hn.test(l)||gn(l,a)||a.endsWith(")")||_||g||Ct(u.text)||u.text.includes("<(")||u.text.includes(">(")||a==="node"&&l.includes("tkr-exec.js")||!r(a)){i.push(u.text);continue}let v=u.text.match(/^\s*/)?.[0]??"",b=u.text.match(/\s*$/)?.[0]??"";o?.(l),i.push(`${v}${e} ${l}${b}`)}return i.join("")}var _n=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),bn=new Set(["cd","cat","head","tail","ls","tree","find","grep","rg","wc","nl","sort","cut","diff","stat","file","du","df","ps","jq","yq","pwd","which"]),wn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),Sn={find:/^-(?:delete|exec|execdir|ok|okdir|fprint|fls)/,sort:/^(?:-[^-]*o|--output|--compress-program)/,rg:/^(?:--pre|-[^-]*z|--search-zip)/,yq:/^(?:-[^-]*[is]|--inplace|--split-exp)/,file:/^(?:-C|--compile)/,tree:/^(?:-o|--output|-R$|-H$)/,git:/^(?:--output|--ext-diff|--textconv|-c$|--exec-path|--git-dir|--work-tree)/,eslint:/^--fix/},B=["test","run test","run build","run lint","run typecheck"],yn={npm:new Set(B),pnpm:new Set([...B,"build","lint","typecheck"]),yarn:new Set([...B,"build","lint","typecheck"]),bun:new Set(B),cargo:new Set(["test","build","check","clippy"]),go:new Set(["test","build","vet"]),mvn:new Set(["test","compile","verify"]),gradle:new Set(["test","build","check"]),dotnet:new Set(["test","build"])},xn=new Set(["pytest","tsc","vitest","jest","eslint","mypy"]);function zt(t,e,n=0){if(/\$|`|<\(|>\(|\\\r?\n/.test(t)||/>/.test(t.replace(/2>&1|[12]?>\s*\/dev\/null/g,"")))return!1;for(let r of Z(t)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<Lt?jt(r.text.trim()):null;if(o){if(!zt(o.script,e,n+1))return!1;continue}let s=r.text.trim().split(/\s+/).filter(Boolean).map(l=>l.replace(/['"\\]/g,""));if(s.length===0)continue;if(s.some(l=>it.test(l)))return!1;let i=G(s[0]);if(i!==s[0])return!1;let c=Sn[i];if(c&&s.slice(1).some(l=>c.test(l)))return!1;if((i==="git"?wn.has(s[1]??""):bn.has(i))||e&&xn.has(i))continue;let u=e?yn[i]:void 0;if(!(u&&(u.has(s[1]??"")||s[1]==="run"&&u.has(`run ${s[2]??""}`))))return!1}return!0}function ct(t,e,n=k(e),r=h,o=q(),s=process.env.PATH){if(!m(t)||t.tool_name!=="Bash")return null;let i=t.tool_input;if(!m(i)||i.run_in_background)return null;let c=i.command;if(typeof c!="string"||!c||e==="codex"&&Object.keys(i).some(w=>!_n.has(w)))return null;let u=typeof t.cwd=="string"&&t.cwd?t.cwd:i.workdir,l=typeof u=="string"&&u?u:void 0,a=typeof t.session_id=="string"&&t.session_id?t.session_id:"unknown",d=typeof t.permission_mode=="string"?t.permission_mode:void 0,_=qt(c,{host:e,sessionId:a,cwd:l,claudeDirs:o,pathEnv:s,permissionMode:d},n,r);if(!_)return null;let g={...i,command:_.command};return JSON.stringify({hookSpecificOutput:e==="codex"?{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:g}:_.allowedBy?{hookEventName:"PreToolUse",permissionDecision:"allow",permissionDecisionReason:`Tokmizer: allowed by your rule ${_.allowedBy}`,updatedInput:g}:{hookEventName:"PreToolUse",updatedInput:g}})}function $n(t,e){if(!W(t))return"missing";try{let n=ot(t,"utf8");return JSON.parse(e?Jt(n):n)}catch{return"unreadable"}}function Jt(t){let e="",n=!1;for(let r=0;r<t.length;r++){let o=t[r];if(n){e+=o,o==="\\"?e+=t[++r]??"":o==='"'&&(n=!1);continue}if(o==='"')n=!0,e+=o;else if(o==="/"&&t[r+1]==="/"){for(;r<t.length&&t[r]!==`
10
10
  `;)r++;e+=`
11
- `}else if(o==="/"&&t[r+1]==="*"){if(r=t.indexOf("*/",r+2),r===-1)return"";r+=1}else e+=o}return e.replace(/,(\s*[}\]])/g,"$1")}function Z(t){let e=[],n=Ze(t);for(;;){e.push(n);let r=Tt(n);if(r===n)return e;n=r}}function hn(){let t=process.platform==="darwin"?"/Library/Application Support/ClaudeCode":process.platform==="win32"?"C:\\Program Files\\ClaudeCode":"/etc/claude-code",e=[f(t,"managed-settings.json")];try{for(let n of rt(f(t,"managed-settings.d")))n.endsWith(".json")&&e.push(f(t,"managed-settings.d",n))}catch{return e}return e}function F(t,e,n,r){let o=[];for(let i of t){let s=gn(i,e);if(s!=="missing"&&(s==="unreadable"||!h(s)||!n(s,o)))return"unreadable"}return{matchers:o,complete:r}}function j(t){return t===void 0?[]:Array.isArray(t)?t.filter(e=>typeof e=="string"):null}function K(){return{projectDir:process.env.CLAUDE_PROJECT_DIR,configDir:process.env.CLAUDE_CONFIG_DIR}}function kn(t,e){let n=d=>[f(d,"settings.json"),f(d,"settings.local.json")],r=d=>n(f(d,".claude")),o=f(A(),".claude"),i=[[hn(),"managed"],[n(e.configDir||o),"loaded"],[e.configDir?n(o):[],"extra"],[e.projectDir?r(e.projectDir):[],"project"],[Z(t).flatMap(r),"extra"]],s=[],c={managed:!1,loaded:!1,project:!1,extra:!1},u=!1,l="managed",a=(d,y)=>{let g=d.permissions;if(l==="managed"&&(d.allowManagedPermissionRulesOnly===!0||h(g)&&g.allowManagedPermissionRulesOnly===!0)&&(u=!0),g===void 0)return!0;if(!h(g))return!1;for(let U of["deny","ask","allow"]){let lt=j(g[U]);if(!lt)return!1;for(let Gt of lt){let I=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(Gt);I&&(U!=="allow"?y.push(O((I[1]??"*").replace(/:\*$/," *"))):I[1]===void 0||I[1].trim()==="*"?c[l]=!0:s.push(O(I[1].replace(/:\*$/," *"))))}}return!0},p=[];for(let[d,y]of i){l=y;let g=F(d,!1,a,!0);if(g==="unreadable")return"unreadable";p.push(...g.matchers)}let b=c.managed||c.loaded&&!u;return{matchers:[...p,...b?[]:s],complete:!0,allow:s,allowsEverything:b}}function _n(t){let e=[f(A(),".cursor","cli-config.json"),...Z(t).map(n=>f(n,".cursor","cli.json"))];return F(e,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!h(o))return!1;let i=j(o.deny);if(!i)return!1;for(let s of i){let c=/^\s*Shell\s*(?:\(([\s\S]*)\))?\s*$/.exec(s);if(!c)continue;let u=c[1]??"*",l=u.indexOf(":");r.push(O(l===-1?`${u} *`:`${u.slice(0,l)} ${u.slice(l+1)}`))}return!0},!1)}function bn(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var Dt=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function Sn(t,e){let n=t.tools;if(n!==void 0&&!h(n))return!1;let r=[j(t.excludeTools),j(h(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let i of o){let s=Dt.exec(i);s&&e.push(O(s[1]===void 0?"*":`${s[1]}*`))}}return!0}function Et(t){try{return JSON.parse(t)}catch{return null}}function yn(t){let e=t.trim();if(e.startsWith('"""')||e.startsWith("'''"))return null;if(e.startsWith("[")){if(!/\]\s*(?:#.*)?$/.test(e))return null;let n=[];for(let r of e.matchAll(/"((?:\\.|[^"\\])*)"|'([^']*)'/g)){let o=r[2]??Et(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(e.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(e);return n?Et(`"${n[1]}"`):null}if(e.startsWith("'")){let n=/^'([^']*)'/.exec(e);return n?n[1]:null}return e.replace(/\s*#.*$/,"")}function xn(t,e){for(let n of t.split(/^\s*\[\[\s*rule\s*\]\]\s*$/m).slice(1)){let r={};for(let u of n.split(/\r?\n/)){if(/^\s*\[/.test(u))break;let l=/^\s*([A-Za-z_]+)\s*=\s*(.*)$/.exec(u);if(!l)continue;let a=yn(l[2]);if(a===null)return!1;r[l[1]]=a}let o=r.decision;if(o!=="deny"&&o!=="ask_user"||!(r.toolName===void 0?["*"]:[r.toolName].flat()).some(u=>u==="*"||Dt.test(u)))continue;let s=r.commandPrefix===void 0?[]:[r.commandPrefix].flat(),c=[r.commandRegex,r.argsPattern].flat().filter(u=>typeof u=="string");if(s.length===0&&c.length===0){e.push(()=>!0);continue}for(let u of s)e.push(O(`${u}*`));for(let u of c){let l;try{l=new RegExp(u)}catch{return!1}e.push(a=>l.test(JSON.stringify({command:a}))||it(l,a))}}return!0}function At(t){try{return rt(t).filter(e=>e.endsWith(".toml")).map(e=>f(t,e))}catch{return[]}}function wn(t){let e=bn(),n=[f(e,"system-defaults.json"),f(e,"settings.json"),process.env.GEMINI_CLI_SYSTEM_SETTINGS_PATH,process.env.GEMINI_CLI_SYSTEM_DEFAULTS_PATH,f(A(),".gemini","settings.json"),...Z(t).map(o=>f(o,".gemini","settings.json"))].filter(o=>!!o),r=F(n,!0,Sn,!1);if(r==="unreadable")return r;for(let o of[...At(f(A(),".gemini","policies")),...At(f(e,"policies"))]){let i;try{i=nt(o,"utf8")}catch{return"unreadable"}if(!xn(i,r.matchers))return"unreadable"}return r}function et(t,e){if(t===void 0)return!0;if(typeof t=="string")return t!=="allow"&&e.push(()=>!0),!0;if(!h(t))return!1;for(let n of["bash","shell","*"]){let r=t[n];if(r!==void 0){if(typeof r=="string"){r!=="allow"&&e.push(()=>!0);continue}if(!h(r))return!1;for(let[o,i]of Object.entries(r))i!=="allow"&&e.push(O(o.replace(/\?/g,"*")))}}return!0}function Rt(t,e){if(t.permissions!==void 0||!et(t.permission,e))return!1;for(let n of["agent","agents","mode"]){let r=t[n];if(r!==void 0){if(!h(r))return!1;for(let o of Object.values(r))if(h(o)&&(o.permissions!==void 0||!et(o.permission,e)))return!1}}return!0}function $n(t){for(let e of t)for(let n of["agent","agents","mode","modes"]){let r;try{r=rt(f(e,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(nt(f(e,n,o),"utf8")))return!0}catch{return!0}}return!1}function On(t){let e=f(process.env.XDG_CONFIG_HOME||f(A(),".config"),"opencode"),n=Z(t),r=[e,...n.map(c=>f(c,".opencode"))];if($n(r))return"unreadable";let o=["opencode.json","opencode.jsonc","config.json"],i=[...o.map(c=>f(e,c)),process.env.OPENCODE_CONFIG,...n.flatMap(c=>[...o.slice(0,2).map(u=>f(c,u)),...o.slice(0,2).map(u=>f(c,".opencode",u))])].filter(c=>!!c),s=F(i,!0,Rt,!0);if(s==="unreadable")return s;for(let c of[process.env.OPENCODE_CONFIG_CONTENT,process.env.OPENCODE_PERMISSION]){if(!c)continue;let u;try{u=JSON.parse(Ft(c))}catch{return"unreadable"}if(!(c===process.env.OPENCODE_PERMISSION?et(u,s.matchers):h(u)&&Rt(u,s.matchers)))return"unreadable"}return s}function vn(){return F([f(A(),".gemini","antigravity-cli","settings.json")],!0,(t,e)=>{let n=t.permissions;if(n===void 0)return!0;if(!h(n))return!1;for(let r of["deny","ask"]){let o=j(n[r]);if(!o)return!1;for(let i of o){let s=/^\s*command\s*\(([\s\S]*)\)\s*$/.exec(i);if(!s)continue;let c=s[1].trim();if(!c.startsWith("regex:")){e.push(O(c==="*"?"*":`${c} *`));continue}let u;try{u=new RegExp(c.slice(6))}catch{return!1}e.push(l=>it(u,l))}}return!0},!1)}function h(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function En(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function An(t){let e=t.trim().replace(/\s+/g," "),n=e.endsWith(" *")&&e.length>2,r=(n?e.slice(0,-2):e).split("*").map(En).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var Rn=512;function Tn(t){let e=t.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[e,e.map(W)]}function it(t,e){if(t.test(e)||t.test(e.trim().replace(/\s+/g," ")))return!0;for(let n of Tn(e)){if(n.length>Rn)return!0;for(let r=0;r<n.length;r++)if(t.test(n.slice(r).join(" ")))return!0}return!1}function O(t){let e=An(t);return n=>it(e,n)}var Cn={"claude-code":kn,cursor:_n,"gemini-cli":wn,opencode:On,antigravity:vn},Pn=new Set(["codex"]),Hn=/(?:^|[\s=:/~])\.(?:git|claude|vscode|idea|husky)(?=[/\s;|&)]|$)|(?:^|[\s=:/~])\.(?:bashrc|bash_profile|bash_login|bash_logout|profile|zshrc|zprofile|zshenv|zlogin|zlogout|gitconfig|gitmodules|ripgreprc|mcp\.json)(?![A-Za-z0-9_])/;function Nn(t,e,n){let r=Cn[t];return r?r(e??process.cwd(),n):{matchers:[],complete:!1}}function In(t,e,n){return t==="unreadable"||Hn.test(e.replace(/['"\\]/g,""))||t.matchers.some(r=>r(e))?!1:t.complete||jt(e,!Pn.has(n))}var Ln=new Set(["default","acceptEdits","dontAsk"]);function jn(t,e){return e.host!=="claude-code"||e.permissionMode==="bypassPermissions"?!0:t!=="unreadable"&&t.allowsEverything===!0&&Ln.has(e.permissionMode??"")}function Fn(t,e){let n="pathEnv"in t?t.pathEnv:process.env.PATH,r;return o=>t.host!=="claude-code"?E(o,t.cwd,n):(r??=bt(e.configDir),!E(o,t.cwd,n)&&!r.paths.some(i=>E(o,t.cwd,i))?!1:o.includes("/")||!St(o,r))}function x(t,e,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=e.claudeDirs??K(),i=Nn(e.host,e.cwd,o),s=In(i,t,e.host)?It(t,n,Fn(e,o)):t;return s!==t&&i!=="unreadable"&&(i.matchers.some(c=>c(s))||(i.allow??[]).some(c=>c(s)&&!c(t)))&&(s=t),r(e.sessionId,s!==t),s===t||!jn(i,e)?null:s}function m(t,e){let n=t[e];return typeof n=="string"&&n?n:null}function D(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function Dn(t){return m(t,"prompt_id")||m(t,"scratchpad_dir")?!0:D(t.effort)}function Un(t){return m(t,"tool_use_id")?.startsWith("toolu_")===!0||/^claude/i.test(m(t,"model")??"")}var Mn=new Set(["BeforeTool","AfterTool","BeforeAgent","AfterAgent","BeforeModel","AfterModel","BeforeToolSelection"]),Jn=new Set(["preToolUse","postToolUse","beforeShellExecution","afterShellExecution","beforeSubmitPrompt","sessionStart","sessionEnd","stop"]),zn=new Set(["pre_tool","post_tool"]),Bn=new Set(["before_tool_call","after_tool_call"]),Wn=new Set(["runTerminalCommand","run_in_terminal"]),Gn=[["codex",t=>m(t,"turn_id")!==null],["claude-code",Dn],["cursor",t=>m(t,"cursor_version")!==null||m(t,"generation_id")!==null||m(t,"conversation_id")!==null||Array.isArray(t.workspace_roots)||Jn.has(m(t,"hook_event_name")??"")],["gemini-cli",t=>Mn.has(m(t,"hook_event_name")??"")],["qwen-code",t=>t.hook_event_name==="PreToolUse"&&t.tool_name==="run_shell_command"],["vibe",t=>zn.has(m(t,"hook_event_name")??"")],["antigravity",t=>D(t.toolCall)],["copilot",t=>m(t,"toolName")!==null&&"toolArgs"in t||Wn.has(m(t,"tool_name")??"")],["grok",t=>t.toolName==="run_terminal_command"||t.tool_name==="run_terminal_command"||D(t.toolInput)&&!("toolArgs"in t)],["droid",t=>t.tool_name==="Execute"],["trae",t=>t.tool_name==="RunCommand"],["crush",t=>t.hook_event_name===void 0&&m(t,"event")!==null&&!Bn.has(m(t,"event"))]],Zn=new Set(["codex","antigravity"]);function Kn(t){return D(t)?Gn.filter(([,e])=>e(t)).map(([e])=>e):[]}function Ut(t,e){if(!D(t))return null;let n=Kn(t);return n.length>1?null:n.length===1?n[0]:Un(t)&&Zn.has(e)?"claude-code":e==="codex"?null:e}var ct=JSON.stringify({permission:"allow"});function Mt(t,e=_("cursor"),n=k){if(t.tool_name!=="Shell")return ct;let r=t.tool_input??{},o=r.command;if(typeof o!="string"||!o)return ct;let i=typeof r.working_directory=="string"?r.working_directory:void 0,s=x(o,{host:"cursor",sessionId:t.conversation_id??"unknown",cwd:i},S()?null:e,n);return s?JSON.stringify({permission:"allow",updated_input:{...r,command:s}}):ct}var q="{}";function Jt(t,e=_("gemini-cli"),n=k){if(t.hook_event_name!=="BeforeTool"||t.tool_name!=="run_shell_command")return q;let r=t.tool_input??{};if(r.is_background)return q;let o=r.command;if(typeof o!="string"||!o)return q;let i=typeof t.cwd=="string"?t.cwd:void 0,s=x(o,{host:"gemini-cli",sessionId:t.session_id??"unknown",cwd:i},S()?null:e,n);return s?JSON.stringify({hookSpecificOutput:{tool_input:{command:s}}}):q}function T(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}var Lo=String.raw`(?:'(?:(?:[^']|'\\'')*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?'|"(?:[^"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?"|(?:[^\s'"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?)`;function C(t,e,n="unknown",r=_(e),o=k){return t?x(t,{host:e,sessionId:n},S()?null:r,o):null}var Yn=new Set(["bash","file_system.bash"]),ut=JSON.stringify({decision:"allow"});function zt(t,e=(n,r)=>C(n,"vibe",r)){if(!T(t)||t.hook_event_name!=="pre_tool"||typeof t.tool_name!="string"||!Yn.has(t.tool_name))return"";let n=t.tool_input;if(!T(n)||typeof n.command!="string"||!n.command)return"";let r=e(n.command,typeof t.session_id=="string"?t.session_id:"unknown");return r?JSON.stringify({hook_specific_output:{tool_input:{...n,command:r}}}):""}function Bt(t,e=(n,r)=>C(n,"antigravity",r)){if(!T(t)||!T(t.toolCall)||t.toolCall.name!=="run_command")return ut;let n=t.toolCall.args;if(!T(n)||typeof n.CommandLine!="string"||!n.CommandLine)return ut;let r=e(n.CommandLine,typeof t.conversationId=="string"?t.conversationId:"unknown");return r?JSON.stringify({decision:"allow",overwrite:{CommandLine:r}}):ut}var w="{}",Vn=new Set(["runTerminalCommand","run_in_terminal","Bash","bash"]),Xn=["run_in_background","is_background","isBackground"];function Y(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function Qn(t){let e=t.session_id??t.sessionId;return typeof e=="string"&&e?e:"unknown"}function tr(t,e){let n=t.cwd??e.cwd??e.workdir??e.working_directory;return typeof n=="string"&&n?n:void 0}function V(t,e,n,r,o){if(!Y(e)||Xn.some(s=>e[s]===!0))return null;let i=e.command;return typeof i!="string"||!i?null:x(i,{host:t,sessionId:Qn(n),cwd:tr(n,e)},S()?null:r,o)}function H(t,e){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...t,command:e}}})}function er(t){if(Y(t))return t;if(typeof t!="string")return null;try{let e=JSON.parse(t);return Y(e)?e:null}catch{return null}}function nr(t,e,n){if(typeof t.tool_name=="string"){if(!Vn.has(t.tool_name))return w;let i=t.tool_input,s=V("copilot",i,t,e,n);return s?H(i,s):w}if(t.toolName!=="bash")return w;let r=er(t.toolArgs),o=V("copilot",r,t,e,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):w}function P(t,e,n){return(r,o,i)=>{if(r.tool_name!==e)return w;let s=r.tool_input,c=V(t,s,r,o,i);return c?n(s,c):w}}var rr=new Set(["run_terminal_command","Bash","bash"]);function or(t,e,n){let r=t.toolName??t.tool_name;if(typeof r!="string"||!rr.has(r))return w;let o=t.toolInput??t.tool_input,i=V("grok",o,t,e,n);return i?H(o,i):w}var sr={copilot:nr,droid:P("droid","Execute",H),trae:P("trae","RunCommand",H),"qwen-code":P("qwen-code","run_shell_command",H),crush:P("crush","bash",(t,e)=>JSON.stringify({updated_input:{command:e}})),junie:P("junie","Bash",(t,e)=>JSON.stringify({updatedInput:{...t,command:e}})),zcode:P("zcode","Bash",H),grok:or};function Wt(t,e,n=_(t),r=k){return Y(e)?sr[t](e,n,r):w}function N(t){return S()?null:_(t)}function ir(t,e,n={}){let r=n.recordUsage??k;switch(t){case"claude-code":case"codex":return e.hook_event_name!==void 0&&e.hook_event_name!=="PreToolUse"?"":st(e,t,N(t),r,n.claudeDirs??K(),n.pathEnv??process.env.PATH)??"";case"cursor":return Mt(e,N(t),r);case"gemini-cli":return Jt(e,N(t),r);case"vibe":return zt(e,(o,i)=>C(o,"vibe",i,N(t),r));case"antigravity":return Bt(e,(o,i)=>C(o,"antigravity",i,N(t),r));default:return Wt(t,e,N(t),r)}}function R(t,e,n={}){let r=Ut(t,e);return r?ir(r,t,n):n.fallback??""}function cr(t){let e;try{e=JSON.parse(t)}catch{return""}return R(e,"claude-code")}async function ur(){let t=await v(),e=t?cr(t):"";e&&process.stdout.write(e)}var lr=process.argv[1]??"";dt(lr,import.meta.url,"pre-tool-use")&&ur().catch(t=>{process.stderr.write(`tkr pre-tool-use: ${t.message}
12
- `),process.exit(0)});export{st as buildPreToolUseOutput,_ as execInvocation,cr as preToolUseResponse,It as rewrite,G as splitTopLevel};
11
+ `}else if(o==="/"&&t[r+1]==="*"){if(r=t.indexOf("*/",r+2),r===-1)return"";r+=1}else e+=o}return e.replace(/,(\s*[}\]])/g,"$1")}function K(t){let e=[],n=nn(t);for(;;){e.push(n);let r=It(n);if(r===n)return e;n=r}}function En(){let t=process.platform==="darwin"?"/Library/Application Support/ClaudeCode":process.platform==="win32"?"C:\\Program Files\\ClaudeCode":"/etc/claude-code",e=[f(t,"managed-settings.json")];try{for(let n of st(f(t,"managed-settings.d")))n.endsWith(".json")&&e.push(f(t,"managed-settings.d",n))}catch{return e}return e}function M(t,e,n,r){let o=[];for(let s of t){let i=$n(s,e);if(i!=="missing"&&(i==="unreadable"||!m(i)||!n(i,o)))return"unreadable"}return{matchers:o,complete:r}}function D(t){return t===void 0?[]:Array.isArray(t)?t.filter(e=>typeof e=="string"):null}function q(){return{projectDir:process.env.CLAUDE_PROJECT_DIR,configDir:process.env.CLAUDE_CONFIG_DIR}}function vn(t,e){let n=b=>[f(b,"settings.json"),f(b,"settings.local.json")],r=b=>n(f(b,".claude")),o=f(C(),".claude"),s=e.configDir||o,i=[[En(),"managed"],[[f(s,"settings.json")],"loaded"],[[f(s,"settings.local.json")],"loadedLocal"],[e.configDir?n(o):[],"extra"],[e.projectDir?r(e.projectDir):[],"project"],[K(t).flatMap(r),"extra"]],c=[],u={managed:[],loaded:[],loadedLocal:[],project:[],extra:[]},l={managed:!1,loaded:!1,loadedLocal:!1,project:!1,extra:!1},a=!1,d="managed",_=(b,Q)=>{let x=b.permissions;if(d==="managed"&&(b.allowManagedPermissionRulesOnly===!0||m(x)&&x.allowManagedPermissionRulesOnly===!0)&&(a=!0),x===void 0)return!0;if(!m(x))return!1;for(let ft of["deny","ask","allow"]){let dt=D(x[ft]);if(!dt)return!1;for(let pt of dt){let A=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(pt);if(A)if(ft!=="allow")Q.push(O((A[1]??"*").replace(/:\*$/," *")));else if(A[1]===void 0||A[1].trim()==="*")l[d]=!0;else{c.push(O(A[1].replace(/:\*$/," *")));let mt=Dn(A[1]);mt&&u[d].push({rule:pt.trim(),matches:mt})}}}return!0},g=[];for(let[b,Q]of i){d=Q;let x=M(b,!1,_,!0);if(x==="unreadable")return"unreadable";g.push(...x.matchers)}let w=l.managed||(l.loaded||l.loadedLocal)&&!a,v=[...u.managed,...a?[]:u.loaded];return{matchers:[...g,...w?[]:c],complete:!0,allow:c,allowsEverything:w,guards:g,trustedAllow:v}}function On(t){let e=[f(C(),".cursor","cli-config.json"),...K(t).map(n=>f(n,".cursor","cli.json"))];return M(e,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!m(o))return!1;let s=D(o.deny);if(!s)return!1;for(let i of s){let c=/^\s*Shell\s*(?:\(([\s\S]*)\))?\s*$/.exec(i);if(!c)continue;let u=c[1]??"*",l=u.indexOf(":");r.push(O(l===-1?`${u} *`:`${u.slice(0,l)} ${u.slice(l+1)}`))}return!0},!1)}function An(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var Bt=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function Rn(t,e){let n=t.tools;if(n!==void 0&&!m(n))return!1;let r=[D(t.excludeTools),D(m(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let s of o){let i=Bt.exec(s);i&&e.push(O(i[1]===void 0?"*":`${i[1]}*`))}}return!0}function Pt(t){try{return JSON.parse(t)}catch{return null}}function Tn(t){let e=t.trim();if(e.startsWith('"""')||e.startsWith("'''"))return null;if(e.startsWith("[")){if(!/\]\s*(?:#.*)?$/.test(e))return null;let n=[];for(let r of e.matchAll(/"((?:\\.|[^"\\])*)"|'([^']*)'/g)){let o=r[2]??Pt(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(e.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(e);return n?Pt(`"${n[1]}"`):null}if(e.startsWith("'")){let n=/^'([^']*)'/.exec(e);return n?n[1]:null}return e.replace(/\s*#.*$/,"")}function Cn(t,e){for(let n of t.split(/^\s*\[\[\s*rule\s*\]\]\s*$/m).slice(1)){let r={};for(let u of n.split(/\r?\n/)){if(/^\s*\[/.test(u))break;let l=/^\s*([A-Za-z_]+)\s*=\s*(.*)$/.exec(u);if(!l)continue;let a=Tn(l[2]);if(a===null)return!1;r[l[1]]=a}let o=r.decision;if(o!=="deny"&&o!=="ask_user"||!(r.toolName===void 0?["*"]:[r.toolName].flat()).some(u=>u==="*"||Bt.test(u)))continue;let i=r.commandPrefix===void 0?[]:[r.commandPrefix].flat(),c=[r.commandRegex,r.argsPattern].flat().filter(u=>typeof u=="string");if(i.length===0&&c.length===0){e.push(()=>!0);continue}for(let u of i)e.push(O(`${u}*`));for(let u of c){let l;try{l=new RegExp(u)}catch{return!1}e.push(a=>l.test(JSON.stringify({command:a}))||ut(l,a))}}return!0}function Ht(t){try{return st(t).filter(e=>e.endsWith(".toml")).map(e=>f(t,e))}catch{return[]}}function Pn(t){let e=An(),n=[f(e,"system-defaults.json"),f(e,"settings.json"),process.env.GEMINI_CLI_SYSTEM_SETTINGS_PATH,process.env.GEMINI_CLI_SYSTEM_DEFAULTS_PATH,f(C(),".gemini","settings.json"),...K(t).map(o=>f(o,".gemini","settings.json"))].filter(o=>!!o),r=M(n,!0,Rn,!1);if(r==="unreadable")return r;for(let o of[...Ht(f(C(),".gemini","policies")),...Ht(f(e,"policies"))]){let s;try{s=ot(o,"utf8")}catch{return"unreadable"}if(!Cn(s,r.matchers))return"unreadable"}return r}function rt(t,e){if(t===void 0)return!0;if(typeof t=="string")return t!=="allow"&&e.push(()=>!0),!0;if(!m(t))return!1;for(let n of["bash","shell","*"]){let r=t[n];if(r!==void 0){if(typeof r=="string"){r!=="allow"&&e.push(()=>!0);continue}if(!m(r))return!1;for(let[o,s]of Object.entries(r))s!=="allow"&&e.push(O(o.replace(/\?/g,"*")))}}return!0}function Nt(t,e){if(t.permissions!==void 0||!rt(t.permission,e))return!1;for(let n of["agent","agents","mode"]){let r=t[n];if(r!==void 0){if(!m(r))return!1;for(let o of Object.values(r))if(m(o)&&(o.permissions!==void 0||!rt(o.permission,e)))return!1}}return!0}function Hn(t){for(let e of t)for(let n of["agent","agents","mode","modes"]){let r;try{r=st(f(e,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(ot(f(e,n,o),"utf8")))return!0}catch{return!0}}return!1}function Nn(t){let e=f(process.env.XDG_CONFIG_HOME||f(C(),".config"),"opencode"),n=K(t),r=[e,...n.map(c=>f(c,".opencode"))];if(Hn(r))return"unreadable";let o=["opencode.json","opencode.jsonc","config.json"],s=[...o.map(c=>f(e,c)),process.env.OPENCODE_CONFIG,...n.flatMap(c=>[...o.slice(0,2).map(u=>f(c,u)),...o.slice(0,2).map(u=>f(c,".opencode",u))])].filter(c=>!!c),i=M(s,!0,Nt,!0);if(i==="unreadable")return i;for(let c of[process.env.OPENCODE_CONFIG_CONTENT,process.env.OPENCODE_PERMISSION]){if(!c)continue;let u;try{u=JSON.parse(Jt(c))}catch{return"unreadable"}if(!(c===process.env.OPENCODE_PERMISSION?rt(u,i.matchers):m(u)&&Nt(u,i.matchers)))return"unreadable"}return i}function In(){return M([f(C(),".gemini","antigravity-cli","settings.json")],!0,(t,e)=>{let n=t.permissions;if(n===void 0)return!0;if(!m(n))return!1;for(let r of["deny","ask"]){let o=D(n[r]);if(!o)return!1;for(let s of o){let i=/^\s*command\s*\(([\s\S]*)\)\s*$/.exec(s);if(!i)continue;let c=i[1].trim();if(!c.startsWith("regex:")){e.push(O(c==="*"?"*":`${c} *`));continue}let u;try{u=new RegExp(c.slice(6))}catch{return!1}e.push(l=>ut(u,l))}}return!0},!1)}function m(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function Wt(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Ln(t){let e=t.trim().replace(/\s+/g," "),n=e.endsWith(" *")&&e.length>2,r=(n?e.slice(0,-2):e).split("*").map(Wt).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var jn=512;function Fn(t){let e=t.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[e,e.map(G)]}function ut(t,e){if(t.test(e)||t.test(e.trim().replace(/\s+/g," ")))return!0;for(let n of Fn(e)){if(n.length>jn)return!0;for(let r=0;r<n.length;r++)if(t.test(n.slice(r).join(" ")))return!0}return!1}function O(t){let e=Ln(t);return n=>ut(e,n)}function Dn(t){let e=t.trim().replace(/:\*$/," *"),n=e.endsWith(" *"),r=n?e.slice(0,-2):e;if(!r||r.includes("*")||/\s\s|[^\S ]|^ | $/.test(r))return null;let o=new RegExp(`^${Wt(r)}${n?"(?: [\\s\\S]*)?":""}$`);return s=>o.test(s)}var Mn={"claude-code":vn,cursor:On,"gemini-cli":Pn,opencode:Nn,antigravity:In},Un=new Set(["codex"]),Gt=/(?:^|[\s=:/~])\.(?:git|claude|vscode|idea|husky)(?=[/\s;|&)]|$)|(?:^|[\s=:/~])\.(?:bashrc|bash_profile|bash_login|bash_logout|profile|zshrc|zprofile|zshenv|zlogin|zlogout|gitconfig|gitmodules|ripgreprc|mcp\.json)(?![A-Za-z0-9_])/;function zn(t,e,n){let r=Mn[t];return r?r(e??process.cwd(),n):{matchers:[],complete:!1}}function Jn(t,e,n){return t==="unreadable"||Gt.test(e.replace(/['"\\]/g,""))||t.matchers.some(r=>r(e))?!1:t.complete||zt(e,!Un.has(n))}var Zt=new Set(["default","acceptEdits","dontAsk"]);function Kt(t,e){return e.host!=="claude-code"||e.permissionMode==="bypassPermissions"?!0:t!=="unreadable"&&t.allowsEverything===!0&&Zt.has(e.permissionMode??"")}function Bn(t,e){let n="pathEnv"in t?t.pathEnv:process.env.PATH,r;return o=>t.host!=="claude-code"?T(o,t.cwd,n):(r??=$t(e.configDir),!T(o,t.cwd,n)&&!r.paths.some(s=>T(o,t.cwd,s))?!1:o.includes("/")||!Et(o,r))}var Wn=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function Gn(t,e,n){return n.host!=="claude-code"||t==="unreadable"||Kt(t,n)||!Zt.has(n.permissionMode??"")||!Wn.test(e)||Gt.test(e.replace(/['"]/g,""))||(t.guards??[]).some(r=>r(e))?null:(t.trustedAllow??[]).find(r=>r.matches(e))?.rule??null}function qt(t,e,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=e.claudeDirs??q(),s=zn(e.host,e.cwd,o),i=Gn(s,t,e),c=i||Jn(s,t,e.host)?Mt(t,n,Bn(e,o)):t;return c!==t&&s!=="unreadable"&&(i?(s.guards??[]).some(u=>u(c)):s.matchers.some(u=>u(c))||(s.allow??[]).some(u=>u(c)&&!u(t)))&&(c=t),r(e.sessionId,c!==t),c===t?null:i?{command:c,allowedBy:i}:Kt(s,e)?{command:c}:null}function E(t,e,n,r){return qt(t,e,n,r)?.command??null}function p(t,e){let n=t[e];return typeof n=="string"&&n?n:null}function U(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function Zn(t){return p(t,"prompt_id")||p(t,"scratchpad_dir")?!0:U(t.effort)}function Kn(t){return p(t,"tool_use_id")?.startsWith("toolu_")===!0||/^claude/i.test(p(t,"model")??"")}var qn=new Set(["BeforeTool","AfterTool","BeforeAgent","AfterAgent","BeforeModel","AfterModel","BeforeToolSelection"]),Yn=new Set(["preToolUse","postToolUse","beforeShellExecution","afterShellExecution","beforeSubmitPrompt","sessionStart","sessionEnd","stop"]),Vn=new Set(["pre_tool","post_tool"]),Xn=new Set(["before_tool_call","after_tool_call"]),Qn=new Set(["runTerminalCommand","run_in_terminal"]),tr=[["codex",t=>p(t,"turn_id")!==null],["claude-code",Zn],["cursor",t=>p(t,"cursor_version")!==null||p(t,"generation_id")!==null||p(t,"conversation_id")!==null||Array.isArray(t.workspace_roots)||Yn.has(p(t,"hook_event_name")??"")],["gemini-cli",t=>qn.has(p(t,"hook_event_name")??"")],["qwen-code",t=>t.hook_event_name==="PreToolUse"&&t.tool_name==="run_shell_command"],["vibe",t=>Vn.has(p(t,"hook_event_name")??"")],["antigravity",t=>U(t.toolCall)],["copilot",t=>p(t,"toolName")!==null&&"toolArgs"in t||Qn.has(p(t,"tool_name")??"")],["grok",t=>t.toolName==="run_terminal_command"||t.tool_name==="run_terminal_command"||U(t.toolInput)&&!("toolArgs"in t)],["droid",t=>t.tool_name==="Execute"],["trae",t=>t.tool_name==="RunCommand"],["crush",t=>t.hook_event_name===void 0&&p(t,"event")!==null&&!Xn.has(p(t,"event"))]],er=new Set(["codex","antigravity"]);function nr(t){return U(t)?tr.filter(([,e])=>e(t)).map(([e])=>e):[]}function Yt(t,e){if(!U(t))return null;let n=nr(t);return n.length>1?null:n.length===1?n[0]:Kn(t)&&er.has(e)?"claude-code":e==="codex"?null:e}var lt=JSON.stringify({permission:"allow"});function Vt(t,e=k("cursor"),n=h){if(t.tool_name!=="Shell")return lt;let r=t.tool_input??{},o=r.command;if(typeof o!="string"||!o)return lt;let s=typeof r.working_directory=="string"?r.working_directory:void 0,i=E(o,{host:"cursor",sessionId:t.conversation_id??"unknown",cwd:s},S()?null:e,n);return i?JSON.stringify({permission:"allow",updated_input:{...r,command:i}}):lt}var Y="{}";function Xt(t,e=k("gemini-cli"),n=h){if(t.hook_event_name!=="BeforeTool"||t.tool_name!=="run_shell_command")return Y;let r=t.tool_input??{};if(r.is_background)return Y;let o=r.command;if(typeof o!="string"||!o)return Y;let s=typeof t.cwd=="string"?t.cwd:void 0,i=E(o,{host:"gemini-cli",sessionId:t.session_id??"unknown",cwd:s},S()?null:e,n);return i?JSON.stringify({hookSpecificOutput:{tool_input:{command:i}}}):Y}function H(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}var Bo=String.raw`(?:'(?:(?:[^']|'\\'')*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?'|"(?:[^"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?"|(?:[^\s'"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?)`;function N(t,e,n="unknown",r=k(e),o=h){return t?E(t,{host:e,sessionId:n},S()?null:r,o):null}var or=new Set(["bash","file_system.bash"]),at=JSON.stringify({decision:"allow"});function Qt(t,e=(n,r)=>N(n,"vibe",r)){if(!H(t)||t.hook_event_name!=="pre_tool"||typeof t.tool_name!="string"||!or.has(t.tool_name))return"";let n=t.tool_input;if(!H(n)||typeof n.command!="string"||!n.command)return"";let r=e(n.command,typeof t.session_id=="string"?t.session_id:"unknown");return r?JSON.stringify({hook_specific_output:{tool_input:{...n,command:r}}}):""}function te(t,e=(n,r)=>N(n,"antigravity",r)){if(!H(t)||!H(t.toolCall)||t.toolCall.name!=="run_command")return at;let n=t.toolCall.args;if(!H(n)||typeof n.CommandLine!="string"||!n.CommandLine)return at;let r=e(n.CommandLine,typeof t.conversationId=="string"?t.conversationId:"unknown");return r?JSON.stringify({decision:"allow",overwrite:{CommandLine:r}}):at}var y="{}",sr=new Set(["runTerminalCommand","run_in_terminal","Bash","bash"]),ir=["run_in_background","is_background","isBackground"];function V(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function cr(t){let e=t.session_id??t.sessionId;return typeof e=="string"&&e?e:"unknown"}function ur(t,e){let n=t.cwd??e.cwd??e.workdir??e.working_directory;return typeof n=="string"&&n?n:void 0}function X(t,e,n,r,o){if(!V(e)||ir.some(i=>e[i]===!0))return null;let s=e.command;return typeof s!="string"||!s?null:E(s,{host:t,sessionId:cr(n),cwd:ur(n,e)},S()?null:r,o)}function L(t,e){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...t,command:e}}})}function lr(t){if(V(t))return t;if(typeof t!="string")return null;try{let e=JSON.parse(t);return V(e)?e:null}catch{return null}}function ar(t,e,n){if(typeof t.tool_name=="string"){if(!sr.has(t.tool_name))return y;let s=t.tool_input,i=X("copilot",s,t,e,n);return i?L(s,i):y}if(t.toolName!=="bash")return y;let r=lr(t.toolArgs),o=X("copilot",r,t,e,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):y}function I(t,e,n){return(r,o,s)=>{if(r.tool_name!==e)return y;let i=r.tool_input,c=X(t,i,r,o,s);return c?n(i,c):y}}var fr=new Set(["run_terminal_command","Bash","bash"]);function dr(t,e,n){let r=t.toolName??t.tool_name;if(typeof r!="string"||!fr.has(r))return y;let o=t.toolInput??t.tool_input,s=X("grok",o,t,e,n);return s?L(o,s):y}var pr={copilot:ar,droid:I("droid","Execute",L),trae:I("trae","RunCommand",L),"qwen-code":I("qwen-code","run_shell_command",L),crush:I("crush","bash",(t,e)=>JSON.stringify({updated_input:{command:e}})),junie:I("junie","Bash",(t,e)=>JSON.stringify({updatedInput:{...t,command:e}})),zcode:I("zcode","Bash",L),grok:dr};function ee(t,e,n=k(t),r=h){return V(e)?pr[t](e,n,r):y}function j(t){return S()?null:k(t)}function mr(t,e,n={}){let r=n.recordUsage??h;switch(t){case"claude-code":case"codex":return e.hook_event_name!==void 0&&e.hook_event_name!=="PreToolUse"?"":ct(e,t,j(t),r,n.claudeDirs??q(),n.pathEnv??process.env.PATH)??"";case"cursor":return Vt(e,j(t),r);case"gemini-cli":return Xt(e,j(t),r);case"vibe":return Qt(e,(o,s)=>N(o,"vibe",s,j(t),r));case"antigravity":return te(e,(o,s)=>N(o,"antigravity",s,j(t),r));default:return ee(t,e,j(t),r)}}function P(t,e,n={}){let r=Yt(t,e);return r?mr(r,t,n):n.fallback??""}function gr(t){let e;try{e=JSON.parse(t)}catch{return""}return P(e,"claude-code")}async function hr(){let t=await R(),e=t?gr(t):"";e&&process.stdout.write(e)}var kr=process.argv[1]??"";kt(kr,import.meta.url,"pre-tool-use")&&hr().catch(t=>{process.stderr.write(`tkr pre-tool-use: ${t.message}
12
+ `),process.exit(0)});export{ct as buildPreToolUseOutput,k as execInvocation,gr as preToolUseResponse,Mt as rewrite,Z as splitTopLevel};