@tokmizer/plugin 0.9.65 → 0.9.66

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.
Files changed (37) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/LICENSES.md +1 -1
  4. package/dist/bin/tkr-agent-hook.js +10 -10
  5. package/dist/bin/tkr-codex-hook.js +68 -68
  6. package/dist/bin/tkr-copilot-hook.js +9 -9
  7. package/dist/bin/tkr-crush-hook.js +9 -9
  8. package/dist/bin/tkr-cursor-hook.js +9 -9
  9. package/dist/bin/tkr-daemon.js +135 -119
  10. package/dist/bin/tkr-droid-hook.js +9 -9
  11. package/dist/bin/tkr-exec +74 -71
  12. package/dist/bin/tkr-exec.js +74 -71
  13. package/dist/bin/tkr-gemini-hook.js +9 -9
  14. package/dist/bin/tkr-grok-hook.js +9 -9
  15. package/dist/bin/tkr-junie-hook.js +9 -9
  16. package/dist/bin/tkr-processor.js +96 -93
  17. package/dist/bin/tkr-qwen-hook.js +9 -9
  18. package/dist/bin/tkr-shim.js +72 -69
  19. package/dist/bin/tkr-trae-hook.js +9 -9
  20. package/dist/bin/tkr-zcode-hook.js +9 -9
  21. package/dist/bin/tkr.js +267 -253
  22. package/dist/hooks-host/post-tool-use.js +83 -80
  23. package/dist/hooks-host/pre-tool-use.js +10 -10
  24. package/dist/hooks-host/reducer-stop.js +26 -23
  25. package/dist/hooks-host/session-recap.js +1 -1
  26. package/dist/index.js +97 -84
  27. package/dist/native/manifest.json +12 -12
  28. package/dist/native/single.json +12 -12
  29. package/dist/native/tkr-exec-darwin-arm64 +0 -0
  30. package/dist/native/tkr-exec-darwin-x64 +0 -0
  31. package/dist/native/tkr-exec-linux-arm64 +0 -0
  32. package/dist/native/tkr-exec-linux-x64 +0 -0
  33. package/dist/native/tkr-exec-win32-arm64.exe +0 -0
  34. package/dist/native/tkr-exec-win32-x64.exe +0 -0
  35. package/hooks/on-session-start.mjs +9 -1
  36. package/package.json +7 -7
  37. package/scripts/install-mac-linux.sh +47 -0
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __tkrCreateRequire } from "node:module"; const require = __tkrCreateRequire(import.meta.url);
3
- function j(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{appendFileSync as ie,chmodSync as ce,mkdirSync as ue,existsSync as le,readFileSync as xr,rmSync as $r}from"node:fs";import{dirname as ae,join as fe}from"node:path";import te from"node:os";import{join as ee}from"node:path";function A(){return process.env.TOKMIZER_HOME||ee(te.homedir(),".tokmizer")}import{readFileSync as ne,renameSync as re,statSync as oe,writeFileSync as se}from"node:fs";function gt(t,e,n){try{if(oe(t).size<=e)return;let r=ne(t,"utf8").split(`
4
- `).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}`;se(i,o.length?`${o.join(`
3
+ function j(e=5e3){return new Promise(t=>{let n=[],r=process.stdin,o=!1,s=()=>{o||(o=!0,clearTimeout(c),r.off("data",i),r.pause(),r.unref?.(),t(Buffer.concat(n).toString("utf8")))},i=u=>{n.push(Buffer.isBuffer(u)?u:Buffer.from(u))},c=setTimeout(s,e);r.on("data",i).once("end",s).once("error",s),r.resume()})}import{appendFileSync as ct,chmodSync as ut,mkdirSync as lt,existsSync as at,readFileSync as Or,rmSync as Tr}from"node:fs";import{dirname as ft,join as dt}from"node:path";import tt from"node:os";import{join as nt}from"node:path";function A(){return process.env.TOKMIZER_HOME||nt(tt.homedir(),".tokmizer")}import{readFileSync as rt,renameSync as ot,statSync as st,writeFileSync as it}from"node:fs";function he(e,t,n){try{if(st(e).size<=t)return;let r=rt(e,"utf8").split(`
4
+ `).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=`${e}.tmp-${process.pid}`;it(i,o.length?`${o.join(`
5
5
  `)}
6
- `:"",{mode:384}),re(i,t)}catch{}}var de="usage.jsonl";var ht=2*1024*1024;function pe(){return fe(A(),de)}function k(t,e,n=pe()){try{let r=ae(n);le(r)||ue(r,{recursive:!0,mode:448});let o=t.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";ie(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${e?1:0}}
7
- `,{mode:384}),ce(n,384),gt(n,ht,ht/2)}catch{}}import{spawnSync as Ze}from"node:child_process";import{existsSync as G,readFileSync as rt,readdirSync as ot}from"node:fs";import{homedir as C}from"node:os";import{fileURLToPath as Ke}from"node:url";import{dirname as Ct,join as f,resolve as qe}from"node:path";function z(){return!1}import{execFileSync as Ne}from"node:child_process";import{mkdirSync as Ie,readFileSync as yt,renameSync as Le,statSync as je,writeFileSync as Fe}from"node:fs";import{join as xt}from"node:path";import{closeSync as me,openSync as ge,readSync as he,readdirSync as ke,readFileSync as _e,statSync as bt}from"node:fs";import{homedir as be}from"node:os";import{isAbsolute as we,join as B,resolve as Se}from"node:path";var ye=/^[A-Za-z0-9._+@%:,/-]+$/,xe=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),$e=32,Ae=4*1024*1024;function tt(t){let e;try{e=ge(t,"r");let n=Buffer.alloc(4),r=he(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&&me(e)}}function F(t,e=process.platform){try{let n=bt(t);if(!n.isFile())return!1;if(e==="win32")return!0;if((n.mode&73)===0)return!1;let r=tt(t);return r==="#!"||r!==null&&xe.has(r)}catch{return!1}}function Ee(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(!ye.test(t))return!1;let o=r==="win32";if(t.includes("/"))return F(Se(e??process.cwd(),t),r);if(!n)return!1;let s=o?Ee(t):[t];for(let i of n.split(o?";":":"))if(!(!i||!we(i))){for(let c of s)if(F(B(i,c),r))return!0}return!1}var ve=/^eval \$'([^\s'()=]+) \(\) /,Oe=/^([^\s'"()=]+) \(\) \{$/,Re=/^alias -- ([^\s=]+)=(.*)$/,Te=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,Ce=/^export PATH=(.*)$/,Pe=/^(?:--colou?r(?:=\S+)?|-G)$/;function _t(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 He(t,e){let n="";for(let r of t.split(`
8
- `)){let o=Ce.exec(r);if(o&&n!=="# Functions"){let s=_t(o[1].trim());/[$`\\]/.test(s)||e.paths.push(s);continue}if(r.startsWith("# ")&&(n!=="# Functions"||Te.test(r))){n=r;continue}if(n==="# Functions"){let s=ve.exec(r)??Oe.exec(r);s&&e.functions.add(s[1])}else if(n==="# Aliases"){let s=Re.exec(r);s&&e.aliases.set(s[1],_t(s[2].trim()))}}}function Q(t){return t?.code==="ENOENT"}function wt(t){let e={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=B(t||B(be(),".claude"),"shell-snapshots"),r=[];try{for(let o of ke(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let s=B(n,o);try{let i=bt(s);i.isFile()&&r.push({path:s,mtime:i.mtimeMs,size:i.size})}catch(i){Q(i)||(e.uncertain=!0)}}}catch(o){return Q(o)||(e.uncertain=!0),e}r=r.sort((o,s)=>s.mtime-o.mtime).slice(0,$e);for(let o of r)try{if(o.size>Ae)throw new Error("snapshot too large");He(_e(o.path,"utf8"),e)}catch(s){Q(s)||(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=>Pe.test(o))}var De="exec-probe.json",Me=6e4;function Ue(){return xt(A(),De)}function Je(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 ze(t,e){try{Ie(xt(t,".."),{recursive:!0,mode:448});let n=`${t}.${process.pid}.tmp`;Fe(n,JSON.stringify(e),{mode:384}),Le(n,t)}catch{}}function Be(t){try{return Ne(t,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function We(t,e){try{let r=yt(t,"utf8").split(`
9
- `,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 Ge(t,e,n){try{let r=je(t);return[t,r.size,r.mtimeMs,r.ino,r.mode,e?n??"":""].join("|")}catch{return`${t}|missing`}}function et(t,e=process.platform,n=process.env.PATH,r=Ue(),o=Date.now()){let s=e!=="win32"&&tt(t)==="#!",i=Ge(t,s,n),c=Je(r);if(c?.key===i&&(c.ok||o-c.at<Me))return c.ok;let u=F(t,e)&&(s?We(t,n):Be(t));return ze(r,{key:i,ok:u,at:o,skipped:(c?.skipped??0)+(u?0:1)}),u}var Ye=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"]),Ve=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"]),$t=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),At="(?:dev|start|serve|watch|preview)",Xe=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${At}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${At}(?:\\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)`),Qe=/(?:^|\s)--watch(?:\s|=|$)/;function tn(t){return Xe.test(t)&&!Qe.test(t)}var en=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,nn=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,Pt=3;function Ht(t){let e=en.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&&nn.test(c)?null:{script:c,start:o,end:s,quote:r}}var rn=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function on(t){return it(t).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=It(n.text);return r!==""&&!rn.has(r)&&!st.test(r)}).length>1}function sn(t,e,n,r,o){if(n>=Pt)return null;let s=Ht(t);if(!s)return null;let{script:i,start:c,end:u,quote:l}=s,a=[],d=Lt(i,e,n+1,r,S=>a.push(S));if(d===i||l==='"'&&/["$`]/.test(d))return null;let x=l==="'"?d.replace(/'/g,"'\\''"):d,m=`${t.slice(0,c)}${x}${t.slice(u)}`,h=on(i);if(o)for(let S of h?[t,...a]:a)o(S);return h?`${e} ${m}`:m}var Et=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,cn=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function un(t,e){let n=Z(e);return n==="tail"||n==="journalctl"?Et.test(t):n==="stern"?!0:cn.has(n)?/\blogs?\b/.test(t)&&Et.test(t):!1}var st=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,ln=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,an=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function Z(t){let e=t.lastIndexOf("/");return e===-1?t:t.slice(e+1)}function Nt(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 vt(t){let e=Nt(t);if(!e)return!0;for(let n=0;n<t.length;n++)if(e[n]&&t[n]===">")return!0;return!1}function it(t){let e=Nt(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===`
10
- `||c==="|"){i(c,1);continue}}r+=c,o+=1}return s(),n}function It(t){return t.trim().split(/\s+/)[0]??""}function b(t,e=process.platform){try{let n=Ct(Ke(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(G(c))return et(c,e)?`'${c.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let s=f(n,"..","bin","tkr-exec");if(!r&&G(s))return et(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 G(i)?`${o}node '${i.replace(/'/g,"'\\''")}'`:null}catch{return null}}function fn(t,e="tkr-exec",n=()=>!0,r){return Lt(t,e,0,n,r)}function Lt(t,e,n,r,o){if(t.includes("<<")||an.test(t))return t;let s=it(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=It(l),d=s[c+1],x=d?.kind==="sep"&&(d.text==="|"||d.text==="|&"),m=d?.kind==="sep"&&d.text==="&",h=!x&&!m&&!vt(u.text)&&!u.text.includes("<(")&&!u.text.includes(">(")?sn(l,e,n,r,o):null;if(h!==null){i.push(`${u.text.match(/^\s*/)?.[0]??""}${h}${u.text.match(/\s*$/)?.[0]??""}`);continue}if(l===e||l.startsWith(e)&&/^\s/.test(l.slice(e.length))||Ye.has(a)||Ve.has(a)||($t.has(a)||$t.has(Z(a)))&&!tn(l)||st.test(a)||a.startsWith("(")||a.startsWith("#")||a.startsWith("<")||a.startsWith(">")||ln.test(l)||un(l,a)||a.endsWith(")")||x||m||vt(u.text)||u.text.includes("<(")||u.text.includes(">(")||a==="node"&&l.includes("tkr-exec.js")||!r(a)){i.push(u.text);continue}let S=u.text.match(/^\s*/)?.[0]??"",_=u.text.match(/\s*$/)?.[0]??"";o?.(l),i.push(`${S}${e} ${l}${_}`)}return i.join("")}var dn=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),pn=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"]),mn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),gn={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/},W=["test","run test","run build","run lint","run typecheck"],hn={npm:new Set(W),pnpm:new Set([...W,"build","lint","typecheck"]),yarn:new Set([...W,"build","lint","typecheck"]),bun:new Set(W),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"])},kn=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 it(t)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<Pt?Ht(r.text.trim()):null;if(o){if(!jt(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=>st.test(l)))return!1;let i=Z(s[0]);if(i!==s[0])return!1;let c=gn[i];if(c&&s.slice(1).some(l=>c.test(l)))return!1;if((i==="git"?mn.has(s[1]??""):pn.has(i))||e&&kn.has(i))continue;let u=e?hn[i]:void 0;if(!(u&&(u.has(s[1]??"")||s[1]==="run"&&u.has(`run ${s[2]??""}`))))return!1}return!0}function Ft(t,e,n=b(e),r=k,o=q(),s=process.env.PATH,i=ct){if(!g(t)||t.tool_name!=="Bash"||e==="claude-code"&&bn(i()))return null;let c=t.tool_input;if(!g(c)||c.run_in_background)return null;let u=c.command;if(typeof u!="string"||!u||e==="codex"&&Object.keys(c).some(S=>!dn.has(S)))return null;let l=typeof t.cwd=="string"&&t.cwd?t.cwd:c.workdir,a=typeof l=="string"&&l?l:void 0,d=typeof t.session_id=="string"&&t.session_id?t.session_id:"unknown",x=typeof t.permission_mode=="string"?t.permission_mode:void 0,m=Wt(u,{host:e,sessionId:d,cwd:a,claudeDirs:o,pathEnv:s,permissionMode:x},n,r);if(!m)return null;let h={...c,command:m.command};return JSON.stringify({hookSpecificOutput:e==="codex"?{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:h}:m.allowedBy?{hookEventName:"PreToolUse",permissionDecision:"allow",permissionDecisionReason:`Tokmizer: allowed by your rule ${m.allowedBy}`,updatedInput:h}:{hookEventName:"PreToolUse",updatedInput:h}})}var _n=/(?:^|\s)--(?:disallowedTools|disallowed-tools|settings|setting-sources)(?:[=\s]|$)/;function ct(t=process.env,e=process.platform){let n=Number(t.CLAUDE_PID)||process.ppid;if(e==="win32"||!Number.isInteger(n)||n<=1)return null;try{let r=Ze("ps",["-ww","-o","args=","-p",String(n)],{encoding:"utf8",timeout:2e3});return r.status===0&&r.stdout.trim()?r.stdout:null}catch{return null}}function bn(t){return t===null||_n.test(t)}function wn(t,e){if(!G(t))return"missing";try{let n=rt(t,"utf8");return JSON.parse(e?Dt(n):n)}catch{return"unreadable"}}function Dt(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]!==`
11
- `;)r++;e+=`
12
- `}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=qe(t);for(;;){e.push(n);let r=Ct(n);if(r===n)return e;n=r}}function Sn(){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 ot(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=wn(s,e);if(i!=="missing"&&(i==="unreadable"||!g(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 yn(t,e){let n=_=>[f(_,"settings.json"),f(_,"settings.local.json")],r=_=>n(f(_,".claude")),o=f(C(),".claude"),s=e.configDir||o,i=[[Sn(),"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",x=(_,X)=>{let $=_.permissions;if(d==="managed"&&(_.allowManagedPermissionRulesOnly===!0||g($)&&$.allowManagedPermissionRulesOnly===!0)&&(a=!0),$===void 0)return!0;if(!g($))return!1;for(let ft of["deny","ask","allow"]){let dt=D($[ft]);if(!dt)return!1;for(let pt of dt){let R=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(pt);if(R)if(ft!=="allow")X.push(O((R[1]??"*").replace(/:\*$/," *")));else if(R[1]===void 0||R[1].trim()==="*")l[d]=!0;else{c.push(O(R[1].replace(/:\*$/," *")));let mt=In(R[1]);mt&&u[d].push({rule:pt.trim(),matches:mt})}}}return!0},m=[];for(let[_,X]of i){d=X;let $=M(_,!1,x,!0);if($==="unreadable")return"unreadable";m.push(...$.matchers)}let h=l.managed||(l.loaded||l.loadedLocal)&&!a,S=[...u.managed,...a?[]:u.loaded];return{matchers:[...m,...h?[]:c],complete:!0,allow:c,allowsEverything:h,guards:m,trustedAllow:S}}function xn(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(!g(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 $n(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var Mt=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function An(t,e){let n=t.tools;if(n!==void 0&&!g(n))return!1;let r=[D(t.excludeTools),D(g(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let s of o){let i=Mt.exec(s);i&&e.push(O(i[1]===void 0?"*":`${i[1]}*`))}}return!0}function Ot(t){try{return JSON.parse(t)}catch{return null}}function En(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]??Ot(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(e.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(e);return n?Ot(`"${n[1]}"`):null}if(e.startsWith("'")){let n=/^'([^']*)'/.exec(e);return n?n[1]:null}return e.replace(/\s*#.*$/,"")}function vn(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=En(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==="*"||Mt.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 Rt(t){try{return ot(t).filter(e=>e.endsWith(".toml")).map(e=>f(t,e))}catch{return[]}}function On(t){let e=$n(),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,An,!1);if(r==="unreadable")return r;for(let o of[...Rt(f(C(),".gemini","policies")),...Rt(f(e,"policies"))]){let s;try{s=rt(o,"utf8")}catch{return"unreadable"}if(!vn(s,r.matchers))return"unreadable"}return r}function nt(t,e){if(t===void 0)return!0;if(typeof t=="string")return t!=="allow"&&e.push(()=>!0),!0;if(!g(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(!g(r))return!1;for(let[o,s]of Object.entries(r))s!=="allow"&&e.push(O(o.replace(/\?/g,"*")))}}return!0}function Tt(t,e){if(t.permissions!==void 0||!nt(t.permission,e))return!1;for(let n of["agent","agents","mode"]){let r=t[n];if(r!==void 0){if(!g(r))return!1;for(let o of Object.values(r))if(g(o)&&(o.permissions!==void 0||!nt(o.permission,e)))return!1}}return!0}function Rn(t){for(let e of t)for(let n of["agent","agents","mode","modes"]){let r;try{r=ot(f(e,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(rt(f(e,n,o),"utf8")))return!0}catch{return!0}}return!1}function Tn(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(Rn(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,Tt,!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(Dt(c))}catch{return"unreadable"}if(!(c===process.env.OPENCODE_PERMISSION?nt(u,i.matchers):g(u)&&Tt(u,i.matchers)))return"unreadable"}return i}function Cn(){return M([f(C(),".gemini","antigravity-cli","settings.json")],!0,(t,e)=>{let n=t.permissions;if(n===void 0)return!0;if(!g(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 g(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function Ut(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Pn(t){let e=t.trim().replace(/\s+/g," "),n=e.endsWith(" *")&&e.length>2,r=(n?e.slice(0,-2):e).split("*").map(Ut).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var Hn=512;function Nn(t){let e=t.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[e,e.map(Z)]}function ut(t,e){if(t.test(e)||t.test(e.trim().replace(/\s+/g," ")))return!0;for(let n of Nn(e)){if(n.length>Hn)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=Pn(t);return n=>ut(e,n)}function In(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(`^${Ut(r)}${n?"(?: [\\s\\S]*)?":""}$`);return s=>o.test(s)}var Ln={"claude-code":yn,cursor:xn,"gemini-cli":On,opencode:Tn,antigravity:Cn},jn=new Set(["codex"]),Jt=/(?:^|[\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 Fn(t,e,n){let r=Ln[t];return r?r(e??process.cwd(),n):{matchers:[],complete:!1}}function Dn(t,e,n){return t==="unreadable"||Jt.test(e.replace(/['"\\]/g,""))||t.matchers.some(r=>r(e))?!1:t.complete||jt(e,!jn.has(n))}var zt=new Set(["default","acceptEdits","dontAsk"]);function Bt(t,e){return e.host!=="claude-code"||e.permissionMode==="bypassPermissions"?!0:t!=="unreadable"&&t.allowsEverything===!0&&zt.has(e.permissionMode??"")}function Mn(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??=wt(e.configDir),!T(o,t.cwd,n)&&!r.paths.some(s=>T(o,t.cwd,s))?!1:o.includes("/")||!St(o,r))}var Un=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function Jn(t,e,n){return n.host!=="claude-code"||t==="unreadable"||Bt(t,n)||!zt.has(n.permissionMode??"")||!Un.test(e)||Jt.test(e.replace(/['"]/g,""))||(t.guards??[]).some(r=>r(e))?null:(t.trustedAllow??[]).find(r=>r.matches(e))?.rule??null}function Wt(t,e,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=e.claudeDirs??q(),s=Fn(e.host,e.cwd,o),i=Jn(s,t,e),c=i||Dn(s,t,e.host)?fn(t,n,Mn(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}:Bt(s,e)?{command:c}:null}function E(t,e,n,r){return Wt(t,e,n,r)?.command??null}import{rmSync as zn,statSync as Bn}from"node:fs";import{join as Wn}from"node:path";function Gt(){return Wn(A(),"fail-open")}var Gn=24*36e5;function w(t=Date.now()){try{if(t-Bn(Gt()).mtimeMs<Gn)return!0;zn(Gt(),{force:!0})}catch{}return!1}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 Zt(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 Kt(t,e=b("cursor"),n=k){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},w()?null:e,n);return i?JSON.stringify({permission:"allow",updated_input:{...r,command:i}}):lt}function P(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}var No=String.raw`(?:'(?:(?:[^']|'\\'')*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?'|"(?:[^"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?"|(?:[^\s'"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?)`;function H(t,e,n="unknown",r=b(e),o=k){return t?E(t,{host:e,sessionId:n},w()?null:r,o):null}var or=new Set(["bash","file_system.bash"]),at=JSON.stringify({decision:"allow"});function qt(t,e=(n,r)=>H(n,"vibe",r)){if(!P(t)||t.hook_event_name!=="pre_tool"||typeof t.tool_name!="string"||!or.has(t.tool_name))return"";let n=t.tool_input;if(!P(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 Yt(t,e=(n,r)=>H(n,"antigravity",r)){if(!P(t)||!P(t.toolCall)||t.toolCall.name!=="run_command")return at;let n=t.toolCall.args;if(!P(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 Y(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 V(t,e,n,r,o){if(!Y(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)},w()?null:r,o)}function I(t,e){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...t,command:e}}})}function lr(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 ar(t,e,n){if(typeof t.tool_name=="string"){if(!sr.has(t.tool_name))return y;let s=t.tool_input,i=V("copilot",s,t,e,n);return i?I(s,i):y}if(t.toolName!=="bash")return y;let r=lr(t.toolArgs),o=V("copilot",r,t,e,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):y}function N(t,e,n){return(r,o,s)=>{if(r.tool_name!==e)return y;let i=r.tool_input,c=V(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=V("grok",o,t,e,n);return s?I(o,s):y}var pr={copilot:ar,droid:N("droid","Execute",I),trae:N("trae","RunCommand",I),"qwen-code":N("qwen-code","run_shell_command",I),crush:N("crush","bash",(t,e)=>JSON.stringify({updated_input:{command:e}})),junie:N("junie","Bash",(t,e)=>JSON.stringify({updatedInput:{...t,command:e}})),zcode:N("zcode","Bash",I),grok:dr};function Vt(t,e,n=b(t),r=k){return Y(e)?pr[t](e,n,r):y}function L(t){return w()?null:b(t)}function mr(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"?"":Ft(e,t,L(t),r,n.claudeDirs??q(),n.pathEnv??process.env.PATH,n.launchArgs??ct)??"";case"cursor":return Kt(e,L(t),r);case"gemini-cli":return Xt(e,L(t),r);case"vibe":return qt(e,(o,s)=>H(o,"vibe",s,L(t),r));case"antigravity":return Yt(e,(o,s)=>H(o,"antigravity",s,L(t),r));default:return Vt(t,e,L(t),r)}}function J(t,e,n={}){let r=Zt(t,e);return r?mr(r,t,n):n.fallback??""}var v="{}";function Xt(t,e=b("gemini-cli"),n=k){if(t.hook_event_name!=="BeforeTool"||t.tool_name!=="run_shell_command")return v;let r=t.tool_input??{};if(r.is_background)return v;let o=r.command;if(typeof o!="string"||!o)return v;let s=typeof t.cwd=="string"?t.cwd:void 0,i=E(o,{host:"gemini-cli",sessionId:t.session_id??"unknown",cwd:s},w()?null:e,n);return i?JSON.stringify({hookSpecificOutput:{tool_input:{command:i}}}):v}function gr(t){if(!t)return v;let e;try{e=JSON.parse(t)}catch{return v}return!e||typeof e!="object"?v:J(e,"gemini-cli",{fallback:v})}async function Qt(){process.stdout.write(gr(await j()))}Qt().catch(t=>{process.stderr.write(`tkr-gemini-hook: ${t.message}
6
+ `:"",{mode:384}),ot(i,e)}catch{}}var pt="usage.jsonl";var ke=2*1024*1024;function mt(){return dt(A(),pt)}function k(e,t,n=mt()){try{let r=ft(n);at(r)||lt(r,{recursive:!0,mode:448});let o=e.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";ct(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${t?1:0}}
7
+ `,{mode:384}),ut(n,384),he(n,ke,ke/2)}catch{}}import{spawnSync as Vt}from"node:child_process";import{existsSync as D,readFileSync as V,readdirSync as K}from"node:fs";import{homedir as v}from"node:os";import{fileURLToPath as Kt}from"node:url";import{dirname as Pe,join as a,resolve as qt}from"node:path";function W(){return!1}import{execFileSync as It}from"node:child_process";import{mkdirSync as Lt,readFileSync as xe,renameSync as jt,statSync as Ft,writeFileSync as Dt}from"node:fs";import{join as $e}from"node:path";import{closeSync as gt,openSync as ht,readSync as kt,readdirSync as _t,readFileSync as bt,statSync as Se}from"node:fs";import{homedir as St}from"node:os";import{isAbsolute as wt,join as G,resolve as yt}from"node:path";var xt=/^[A-Za-z0-9._+@%:,/-]+$/,$t=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),At=32,Et=4*1024*1024;function re(e){let t;try{t=ht(e,"r");let n=Buffer.alloc(4),r=kt(t,n,0,4,0);return r>=2&&n[0]===35&&n[1]===33?"#!":r===4?n.toString("hex"):null}catch{return null}finally{t!==void 0&&gt(t)}}function F(e,t=process.platform){try{let n=Se(e);if(!n.isFile())return!1;if(t==="win32")return!0;if((n.mode&73)===0)return!1;let r=re(e);return r==="#!"||r!==null&&$t.has(r)}catch{return!1}}function Rt(e){if(/\.[A-Za-z0-9]+$/.test(e))return[e];let t=(process.env.PATHEXT??".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);return[e,...t.map(n=>e+n.toLowerCase())]}function C(e,t,n,r=process.platform){if(!xt.test(e))return!1;let o=r==="win32";if(e.includes("/"))return F(yt(t??process.cwd(),e),r);if(!n)return!1;let s=o?Rt(e):[e];for(let i of n.split(o?";":":"))if(!(!i||!wt(i))){for(let c of s)if(F(G(i,c),r))return!0}return!1}var vt=/^eval \$'([^\s'()=]+) \(\) /,Ot=/^([^\s'"()=]+) \(\) \{$/,Tt=/^alias -- ([^\s=]+)=(.*)$/,Ct=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,Pt=/^export PATH=(.*)$/,Ht=/^(?:--colou?r(?:=\S+)?|-G)$/;function be(e){return e.length>=2&&e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1).replace(/'\\''/g,"'"):e.length>=2&&e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e}function Nt(e,t){let n="";for(let r of e.split(`
8
+ `)){let o=Pt.exec(r);if(o&&n!=="# Functions"){let s=be(o[1].trim());/[$`\\]/.test(s)||t.paths.push(s);continue}if(r.startsWith("# ")&&(n!=="# Functions"||Ct.test(r))){n=r;continue}if(n==="# Functions"){let s=vt.exec(r)??Ot.exec(r);s&&t.functions.add(s[1])}else if(n==="# Aliases"){let s=Tt.exec(r);s&&t.aliases.set(s[1],be(s[2].trim()))}}}function ne(e){return e?.code==="ENOENT"}function we(e){let t={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=G(e||G(St(),".claude"),"shell-snapshots"),r=[];try{for(let o of _t(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let s=G(n,o);try{let i=Se(s);i.isFile()&&r.push({path:s,mtime:i.mtimeMs,size:i.size})}catch(i){ne(i)||(t.uncertain=!0)}}}catch(o){return ne(o)||(t.uncertain=!0),t}r=r.sort((o,s)=>s.mtime-o.mtime).slice(0,At);for(let o of r)try{if(o.size>Et)throw new Error("snapshot too large");Nt(bt(o.path,"utf8"),t)}catch(s){ne(s)||(t.uncertain=!0)}return t}function ye(e,t){if(t.uncertain||t.functions.has(e))return!0;let n=t.aliases.get(e);if(n===void 0)return!1;let r=n.trim().split(/\s+/);return r[0]!==e||!r.slice(1).every(o=>Ht.test(o))}var Mt="exec-probe.json",Ut=6e4;function zt(){return $e(A(),Mt)}function Jt(e){try{let t=JSON.parse(xe(e,"utf8"));if(t==null||typeof t!="object")return null;let n=t;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 Bt(e,t){try{Lt($e(e,".."),{recursive:!0,mode:448});let n=`${e}.${process.pid}.tmp`;Dt(n,JSON.stringify(t),{mode:384}),jt(n,e)}catch{}}function Wt(e){try{return It(e,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function Gt(e,t){try{let r=xe(e,"utf8").split(`
9
+ `,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?C(r[1]??"",void 0,t):F(o)}catch{return!1}}function Zt(e,t,n){try{let r=Ft(e);return[e,r.size,r.mtimeMs,r.ino,r.mode,t?n??"":""].join("|")}catch{return`${e}|missing`}}function oe(e,t=process.platform,n=process.env.PATH,r=zt(),o=Date.now()){let s=t!=="win32"&&re(e)==="#!",i=Zt(e,s,n),c=Jt(r);if(c?.key===i&&(c.ok||o-c.at<Ut))return c.ok;let u=F(e,t)&&(s?Gt(e,n):Wt(e));return Bt(r,{key:i,ok:u,at:o,skipped:(c?.skipped??0)+(u?0:1)}),u}var Yt=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"]),Xt=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"]),Ae=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),Ee="(?:dev|start|serve|watch|preview)",Qt=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${Ee}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${Ee}(?:\\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)`),en=/(?:^|\s)--watch(?:\s|=|$)/;function tn(e){return Qt.test(e)&&!en.test(e)}var nn=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,rn=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,He=3;function Ne(e){let t=nn.exec(e);if(!t)return null;let n=t[2]==="fish";if(n&&t[3]!=="-c")return null;let r=t[4],o=t[1].length+1,s=e.indexOf(r,o);if(s<=o)return null;let i=e.slice(s+1);if(i&&!/^\s/.test(i))return null;let c=e.slice(o,s);return r==='"'&&/[$`\\!]/.test(c)||n&&rn.test(c)?null:{script:c,start:o,end:s,quote:r}}var on=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function sn(e){return ce(e).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=Le(n.text);return r!==""&&!on.has(r)&&!ie.test(r)}).length>1}function cn(e,t,n,r,o){if(n>=He)return null;let s=Ne(e);if(!s)return null;let{script:i,start:c,end:u,quote:l}=s,f=[],d=je(i,t,n+1,r,w=>f.push(w));if(d===i||l==='"'&&/["$`]/.test(d))return null;let x=l==="'"?d.replace(/'/g,"'\\''"):d,m=`${e.slice(0,c)}${x}${e.slice(u)}`,h=sn(i);if(o)for(let w of h?[e,...f]:f)o(w);return h?`${t} ${m}`:m}var Re=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,un=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function ln(e,t){let n=q(t);return n==="tail"||n==="journalctl"?Re.test(e):n==="stern"?!0:un.has(n)?/\blogs?\b/.test(e)&&Re.test(e):!1}var ie=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,an=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,fn=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function q(e){let t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function Ie(e){let t=new Array(e.length).fill(!1),n=[],r=0;for(;r<e.length;){let o=e[r],s=e[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;t[r]=i===void 0,r+=1}return n.length===0?t:null}function ve(e){let t=Ie(e);if(!t)return!0;for(let n=0;n<e.length;n++)if(t[n]&&e[n]===">")return!0;return!1}function ce(e){let t=Ie(e);if(!t)return[{kind:"cmd",text:e,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<e.length;){let c=e[o],u=e[o+1];if(t[o]){if(c===">"&&u==="|"){r+=">|",o+=2;continue}if(c==="&"&&u==="&"){i("&&",2);continue}if(c==="&"&&u!==">"){let l=r.replace(/\s+$/,""),f=l[l.length-1];if(f!==">"&&f!=="<"&&f!=="&"){i("&",1);continue}}if(c==="|"&&u==="|"){i("||",2);continue}if(c==="|"&&u==="&"){i("|&",2);continue}if(c===";"&&u===";"){let l=e[o+2]==="&";i(l?";;&":";;",l?3:2);continue}if(c===";"||c===`
10
+ `||c==="|"){i(c,1);continue}}r+=c,o+=1}return s(),n}function Le(e){return e.trim().split(/\s+/)[0]??""}function b(e,t=process.platform){try{let n=Pe(Kt(import.meta.url)),r=t==="win32",o=e&&e!=="claude-code"&&e!=="codex"&&!r?`TOKMIZER_HOST=${e} `:"";if(r&&(!e||e==="claude-code")){let c=a(n,"..","bin","tkr-exec.exe");if(D(c))return oe(c,t)?`'${c.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let s=a(n,"..","bin","tkr-exec");if(!r&&D(s))return oe(s,t)?`${o}'${s.replace(/'/g,"'\\''")}'`:null;if(W()){let c=r?process.execPath.replace(/\\/g,"/"):process.execPath;return`${o}'${c.replace(/'/g,"'\\''")}' exec`}let i=a(n,"..","bin","tkr-exec.js");return D(i)?`${o}node '${i.replace(/'/g,"'\\''")}'`:null}catch{return null}}function dn(e,t="tkr-exec",n=()=>!0,r){return je(e,t,0,n,r)}function je(e,t,n,r,o){if(e.includes("<<")||fn.test(e))return e;let s=ce(e),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 f=Le(l),d=s[c+1],x=d?.kind==="sep"&&(d.text==="|"||d.text==="|&"),m=d?.kind==="sep"&&d.text==="&",h=!x&&!m&&!ve(u.text)&&!u.text.includes("<(")&&!u.text.includes(">(")?cn(l,t,n,r,o):null;if(h!==null){i.push(`${u.text.match(/^\s*/)?.[0]??""}${h}${u.text.match(/\s*$/)?.[0]??""}`);continue}if(l===t||l.startsWith(t)&&/^\s/.test(l.slice(t.length))||Yt.has(f)||Xt.has(f)||(Ae.has(f)||Ae.has(q(f)))&&!tn(l)||ie.test(f)||f.startsWith("(")||f.startsWith("#")||f.startsWith("<")||f.startsWith(">")||an.test(l)||ln(l,f)||f.endsWith(")")||x||m||ve(u.text)||u.text.includes("<(")||u.text.includes(">(")||f==="node"&&l.includes("tkr-exec.js")||!r(f)){i.push(u.text);continue}let w=u.text.match(/^\s*/)?.[0]??"",_=u.text.match(/\s*$/)?.[0]??"";o?.(l),i.push(`${w}${t} ${l}${_}`)}return i.join("")}var pn=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),mn=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"]),gn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),hn={find:/^-(?:delete|exec|execdir|ok|okdir|fprint|fls)/,sort:/^(?:-[^-]*o|--output|--compress-program)/,rg:/^(?:--pre|--hostname-bin|-[^-]*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"],kn={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"])},_n=new Set(["pytest","tsc","vitest","jest","eslint","mypy"]);function Fe(e,t,n=0){if(/\$|`|<\(|>\(|\\\r?\n/.test(e)||/>/.test(e.replace(/2>&1|[12]?>\s*\/dev\/null/g,"")))return!1;for(let r of ce(e)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<He?Ne(r.text.trim()):null;if(o){if(!Fe(o.script,t,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=>ie.test(l)))return!1;let i=q(s[0]);if(i!==s[0])return!1;let c=hn[i];if(c&&s.slice(1).some(l=>c.test(l)))return!1;if((i==="git"?gn.has(s[1]??""):mn.has(i))||t&&_n.has(i))continue;let u=t?kn[i]:void 0;if(!(u&&(u.has(s[1]??"")||s[1]==="run"&&u.has(`run ${s[2]??""}`))))return!1}return!0}function De(e,t,n=b(t),r=k,o=Y(),s=process.env.PATH,i=ue){if(!g(e)||e.tool_name!=="Bash"||t==="claude-code"&&Sn(i()))return null;let c=e.tool_input;if(!g(c)||c.run_in_background)return null;let u=c.command;if(typeof u!="string"||!u||t==="codex"&&Object.keys(c).some(w=>!pn.has(w)))return null;let l=typeof e.cwd=="string"&&e.cwd?e.cwd:c.workdir,f=typeof l=="string"&&l?l:void 0,d=typeof e.session_id=="string"&&e.session_id?e.session_id:"unknown",x=typeof e.permission_mode=="string"?e.permission_mode:void 0,m=Ge(u,{host:t,sessionId:d,cwd:f,claudeDirs:o,pathEnv:s,permissionMode:x},n,r);if(!m)return null;let h={...c,command:m.command};return JSON.stringify({hookSpecificOutput:t==="codex"?{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:h}:m.allowedBy?{hookEventName:"PreToolUse",permissionDecision:"allow",permissionDecisionReason:`Tokmizer: allowed by your rule ${m.allowedBy}`,updatedInput:h}:{hookEventName:"PreToolUse",updatedInput:h}})}var bn=/(?:^|\s)--(?:disallowedTools|disallowed-tools|settings|setting-sources)(?:[=\s]|$)/;function ue(e=process.env,t=process.platform){let n=Number(e.CLAUDE_PID)||process.ppid;if(t==="win32"||!Number.isInteger(n)||n<=1)return null;try{let r=Vt("ps",["-ww","-o","args=","-p",String(n)],{encoding:"utf8",timeout:2e3});return r.status===0&&r.stdout.trim()?r.stdout:null}catch{return null}}function Sn(e){return e===null||bn.test(e)}function wn(e,t){if(!D(e))return"missing";try{let n=V(e,"utf8");return JSON.parse(t?Me(n):n)}catch{return"unreadable"}}function Me(e){let t="",n=!1;for(let r=0;r<e.length;r++){let o=e[r];if(n){t+=o,o==="\\"?t+=e[++r]??"":o==='"'&&(n=!1);continue}if(o==='"')n=!0,t+=o;else if(o==="/"&&e[r+1]==="/"){for(;r<e.length&&e[r]!==`
11
+ `;)r++;t+=`
12
+ `}else if(o==="/"&&e[r+1]==="*"){if(r=e.indexOf("*/",r+2),r===-1)return"";r+=1}else t+=o}return t.replace(/,(\s*[}\]])/g,"$1")}function U(e){let t=[],n=qt(e);for(;;){t.push(n);let r=Pe(n);if(r===n)return t;n=r}}function yn(){let e=process.platform==="darwin"?"/Library/Application Support/ClaudeCode":process.platform==="win32"?"C:\\Program Files\\ClaudeCode":"/etc/claude-code",t=[a(e,"managed-settings.json")];try{for(let n of K(a(e,"managed-settings.d")))n.endsWith(".json")&&t.push(a(e,"managed-settings.d",n))}catch{return t}return t}function z(e,t,n,r){let o=[];for(let s of e){let i=wn(s,t);if(i!=="missing"&&(i==="unreadable"||!g(i)||!n(i,o)))return"unreadable"}return{matchers:o,complete:r}}function M(e){return e===void 0?[]:Array.isArray(e)?e.filter(t=>typeof t=="string"):null}function Y(){return{projectDir:process.env.CLAUDE_PROJECT_DIR,configDir:process.env.CLAUDE_CONFIG_DIR}}function xn(e,t){let n=_=>[a(_,"settings.json"),a(_,"settings.local.json")],r=_=>n(a(_,".claude")),o=a(v(),".claude"),s=t.configDir||o,i=[[yn(),"managed"],[[a(s,"settings.json")],"loaded"],[[a(s,"settings.local.json")],"loadedLocal"],[t.configDir?n(o):[],"extra"],[t.projectDir?r(t.projectDir):[],"project"],[U(e).flatMap(r),"extra"]],c=[],u={managed:[],loaded:[],loadedLocal:[],project:[],extra:[]},l={managed:!1,loaded:!1,loadedLocal:!1,project:!1,extra:!1},f=!1,d="managed",x=(_,te)=>{let $=_.permissions;if(d==="managed"&&(_.allowManagedPermissionRulesOnly===!0||g($)&&$.allowManagedPermissionRulesOnly===!0)&&(f=!0),$===void 0)return!0;if(!g($))return!1;for(let de of["deny","ask","allow"]){let pe=M($[de]);if(!pe)return!1;for(let me of pe){let T=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(me);if(T)if(de!=="allow")te.push(O((T[1]??"*").replace(/:\*$/," *")));else if(T[1]===void 0||T[1].trim()==="*")l[d]=!0;else{c.push(O(T[1].replace(/:\*$/," *")));let ge=Un(T[1]);ge&&u[d].push({rule:me.trim(),matches:ge})}}}return!0},m=[];for(let[_,te]of i){d=te;let $=z(_,!1,x,!0);if($==="unreadable")return"unreadable";m.push(...$.matchers)}let h=l.managed||(l.loaded||l.loadedLocal)&&!f,w=[...u.managed,...f?[]:u.loaded];return{matchers:[...m,...h?[]:c],complete:!0,allow:c,allowsEverything:h,guards:m,trustedAllow:w}}function $n(e){let t=[a(v(),".cursor","cli-config.json"),...U(e).map(n=>a(n,".cursor","cli.json"))];return z(t,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!g(o))return!1;let s=M(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 Ue=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function En(e,t){let n=e.tools;if(n!==void 0&&!g(n))return!1;let r=[M(e.excludeTools),M(g(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let s of o){let i=Ue.exec(s);i&&t.push(O(i[1]===void 0?"*":`${i[1]}*`))}}return!0}function Oe(e){try{return JSON.parse(e)}catch{return null}}function Rn(e){let t=e.trim();if(t.startsWith('"""')||t.startsWith("'''"))return null;if(t.startsWith("[")){if(!/\]\s*(?:#.*)?$/.test(t))return null;let n=[];for(let r of t.matchAll(/"((?:\\.|[^"\\])*)"|'([^']*)'/g)){let o=r[2]??Oe(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(t.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(t);return n?Oe(`"${n[1]}"`):null}if(t.startsWith("'")){let n=/^'([^']*)'/.exec(t);return n?n[1]:null}return t.replace(/\s*#.*$/,"")}function vn(e,t){for(let n of e.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 f=Rn(l[2]);if(f===null)return!1;r[l[1]]=f}let o=r.decision;if(o!=="deny"&&o!=="ask_user"||!(r.toolName===void 0?["*"]:[r.toolName].flat()).some(u=>u==="*"||Ue.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){t.push(()=>!0);continue}for(let u of i)t.push(O(`${u}*`));for(let u of c){let l;try{l=new RegExp(u)}catch{return!1}t.push(f=>l.test(JSON.stringify({command:f}))||X(l,f))}}return!0}function Te(e){try{return K(e).filter(t=>t.endsWith(".toml")).map(t=>a(e,t))}catch{return[]}}function On(e){let t=An(),n=[a(t,"system-defaults.json"),a(t,"settings.json"),process.env.GEMINI_CLI_SYSTEM_SETTINGS_PATH,process.env.GEMINI_CLI_SYSTEM_DEFAULTS_PATH,a(v(),".gemini","settings.json"),...U(e).map(o=>a(o,".gemini","settings.json"))].filter(o=>!!o),r=z(n,!0,En,!1);if(r==="unreadable")return r;for(let o of[...Te(a(v(),".gemini","policies")),...Te(a(t,"policies"))]){let s;try{s=V(o,"utf8")}catch{return"unreadable"}if(!vn(s,r.matchers))return"unreadable"}return r}function se(e,t){if(e===void 0)return!0;if(typeof e=="string")return e!=="allow"&&t.push(()=>!0),!0;if(!g(e))return!1;for(let n of["bash","shell","*"]){let r=e[n];if(r!==void 0){if(typeof r=="string"){r!=="allow"&&t.push(()=>!0);continue}if(!g(r))return!1;for(let[o,s]of Object.entries(r))s!=="allow"&&t.push(O(o.replace(/\?/g,"*")))}}return!0}function Ce(e,t){if(e.permissions!==void 0||!se(e.permission,t))return!1;for(let n of["agent","agents","mode"]){let r=e[n];if(r!==void 0){if(!g(r))return!1;for(let o of Object.values(r))if(g(o)&&(o.permissions!==void 0||!se(o.permission,t)))return!1}}return!0}function Tn(e){for(let t of e)for(let n of["agent","agents","mode","modes"]){let r;try{r=K(a(t,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(V(a(t,n,o),"utf8")))return!0}catch{return!0}}return!1}function Cn(e){let t=a(process.env.XDG_CONFIG_HOME||a(v(),".config"),"opencode"),n=U(e),r=[t,...n.map(c=>a(c,".opencode"))];if(Tn(r))return"unreadable";let o=["opencode.json","opencode.jsonc","config.json"],s=[...o.map(c=>a(t,c)),process.env.OPENCODE_CONFIG,...n.flatMap(c=>[...o.slice(0,2).map(u=>a(c,u)),...o.slice(0,2).map(u=>a(c,".opencode",u))])].filter(c=>!!c),i=z(s,!0,Ce,!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(Me(c))}catch{return"unreadable"}if(!(c===process.env.OPENCODE_PERMISSION?se(u,i.matchers):g(u)&&Ce(u,i.matchers)))return"unreadable"}return i}function Pn(){return z([a(v(),".gemini","antigravity-cli","settings.json")],!0,(e,t)=>{let n=e.permissions;if(n===void 0)return!0;if(!g(n))return!1;for(let r of["deny","ask"]){let o=M(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:")){t.push(O(c==="*"?"*":`${c} *`));continue}let u;try{u=new RegExp(c.slice(6))}catch{return!1}t.push(l=>X(u,l))}}return!0},!1)}function Hn(e){let t=[],n=/\s+|#[^\n]*|("(?:[^"\\\n]|\\.)*"|'(?:[^'\\\n]|\\.)*')|([A-Za-z_][A-Za-z0-9_]*|[()[\],=])|(.)/gy;for(let r=n.exec(e);r&&r[0];r=n.exec(e)){if(r[3]!==void 0)return null;(r[1]!==void 0||r[2]!==void 0)&&t.push(r[1]??r[2])}return t}function ze(e,t){let n=e[t.i++];if(n===void 0)return;if(/^["']/.test(n))try{return n.startsWith('"')?JSON.parse(n):JSON.parse(`"${n.slice(1,-1).replace(/\\'/g,"'").replace(/"/g,'\\"')}"`)}catch{return}if(n!=="[")return/^[A-Za-z_]/.test(n)?null:void 0;let r=[];for(;e[t.i]!=="]";){let o=ze(e,t);if(o===void 0)return;if(r.push(o),e[t.i]===",")t.i++;else if(e[t.i]!=="]")return}return t.i++,r}function Nn(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let r of e){let o=typeof r=="string"?[r]:Array.isArray(r)?r:null;if(!o||o.length===0||!o.every(s=>typeof s=="string"&&s!==""))return null;t.push(`(?:${o.map(le).join("|")})`)}let n=new RegExp(`^${t.join(" ")}(?= |$)`);return r=>X(n,r)}function In(e,t){let n=Hn(e);if(!n)return!1;for(let r=0;r<n.length;r++){if(n[r]!=="prefix_rule"||n[r+1]!=="(")continue;let o={i:r+2},s={};for(;n[o.i]!==")";){let u=n[o.i];if(!u||!/^[A-Za-z_]/.test(u)||n[o.i+1]!=="="||(o.i+=2,s[u]=ze(n,o),s[u]===void 0&&(u==="pattern"||u==="decision")))return!1;if(n[o.i]===",")o.i++;else if(n[o.i]!==")")return!1}r=o.i;let i="decision"in s?s.decision:"allow";if(i!=="allow"&&i!=="prompt"&&i!=="forbidden")return!1;let c=Nn(s.pattern);if(!c)return!1;i!=="allow"&&t.push(c)}return!0}function Ln(e){if(!D(e))return[];try{return K(e).filter(t=>t.endsWith(".rules")).sort().map(t=>a(e,t))}catch{return"unreadable"}}function jn(e){let t=process.env.CODEX_HOME||a(v(),".codex"),n=[a(t,"rules"),...U(e).map(o=>a(o,".codex","rules"))],r=[];for(let o of[...new Set(n)]){let s=Ln(o);if(s==="unreadable")return"unreadable";for(let i of s){let c;try{c=V(i,"utf8")}catch{return"unreadable"}if(!In(c,r))return"unreadable"}}return{matchers:r,complete:!1}}function g(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function le(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Fn(e){let t=e.trim().replace(/\s+/g," "),n=t.endsWith(" *")&&t.length>2,r=(n?t.slice(0,-2):t).split("*").map(le).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var Dn=512;function Mn(e){let t=e.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[t,t.map(q)]}function X(e,t){if(e.test(t)||e.test(t.trim().replace(/\s+/g," ")))return!0;for(let n of Mn(t)){if(n.length>Dn)return!0;for(let r=0;r<n.length;r++)if(e.test(n.slice(r).join(" ")))return!0}return!1}function O(e){let t=Fn(e);return n=>X(t,n)}function Un(e){let t=e.trim().replace(/:\*$/," *"),n=t.endsWith(" *"),r=n?t.slice(0,-2):t;if(!r||r.includes("*")||/\s\s|[^\S ]|^ | $/.test(r))return null;let o=new RegExp(`^${le(r)}${n?"(?: [\\s\\S]*)?":""}$`);return s=>o.test(s)}var zn={"claude-code":xn,cursor:$n,"gemini-cli":On,opencode:Cn,antigravity:Pn,codex:jn},Jn=new Set(["codex"]),Je=/(?:^|[\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 Bn(e,t,n){let r=zn[e];return r?r(t??process.cwd(),n):{matchers:[],complete:!1}}function Wn(e,t,n){return e==="unreadable"||Je.test(t.replace(/['"\\]/g,""))||e.matchers.some(r=>r(t))?!1:e.complete||Fe(t,!Jn.has(n))}var Be=new Set(["default","acceptEdits","dontAsk"]);function We(e,t){return t.host!=="claude-code"||t.permissionMode==="bypassPermissions"?!0:e!=="unreadable"&&e.allowsEverything===!0&&Be.has(t.permissionMode??"")}function Gn(e,t){let n="pathEnv"in e?e.pathEnv:process.env.PATH,r;return o=>e.host!=="claude-code"?C(o,e.cwd,n):(r??=we(t.configDir),!C(o,e.cwd,n)&&!r.paths.some(s=>C(o,e.cwd,s))?!1:o.includes("/")||!ye(o,r))}var Zn=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function Vn(e,t,n){return n.host!=="claude-code"||e==="unreadable"||We(e,n)||!Be.has(n.permissionMode??"")||!Zn.test(t)||Je.test(t.replace(/['"]/g,""))||(e.guards??[]).some(r=>r(t))?null:(e.trustedAllow??[]).find(r=>r.matches(t))?.rule??null}function Ge(e,t,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=t.claudeDirs??Y(),s=Bn(t.host,t.cwd,o),i=Vn(s,e,t),c=i||Wn(s,e,t.host)?dn(e,n,Gn(t,o)):e;return c!==e&&s!=="unreadable"&&(i?(s.guards??[]).some(u=>u(c)):s.matchers.some(u=>u(c))||(s.allow??[]).some(u=>u(c)&&!u(e)))&&(c=e),r(t.sessionId,c!==e),c===e?null:i?{command:c,allowedBy:i}:We(s,t)?{command:c}:null}function E(e,t,n,r){return Ge(e,t,n,r)?.command??null}import{rmSync as Kn,statSync as qn}from"node:fs";import{join as Yn}from"node:path";function Ze(){return Yn(A(),"fail-open")}var Xn=24*36e5;function S(e=Date.now()){try{if(e-qn(Ze()).mtimeMs<Xn)return!0;Kn(Ze(),{force:!0})}catch{}return!1}function p(e,t){let n=e[t];return typeof n=="string"&&n?n:null}function J(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Qn(e){return p(e,"prompt_id")||p(e,"scratchpad_dir")?!0:J(e.effort)}function er(e){return p(e,"tool_use_id")?.startsWith("toolu_")===!0||/^claude/i.test(p(e,"model")??"")}var tr=new Set(["BeforeTool","AfterTool","BeforeAgent","AfterAgent","BeforeModel","AfterModel","BeforeToolSelection"]),nr=new Set(["preToolUse","postToolUse","beforeShellExecution","afterShellExecution","beforeSubmitPrompt","sessionStart","sessionEnd","stop"]),rr=new Set(["pre_tool","post_tool"]),or=new Set(["before_tool_call","after_tool_call"]),sr=new Set(["runTerminalCommand","run_in_terminal"]),ir=[["codex",e=>p(e,"turn_id")!==null],["claude-code",Qn],["cursor",e=>p(e,"cursor_version")!==null||p(e,"generation_id")!==null||p(e,"conversation_id")!==null||Array.isArray(e.workspace_roots)||nr.has(p(e,"hook_event_name")??"")],["gemini-cli",e=>tr.has(p(e,"hook_event_name")??"")],["qwen-code",e=>e.hook_event_name==="PreToolUse"&&e.tool_name==="run_shell_command"],["vibe",e=>rr.has(p(e,"hook_event_name")??"")],["antigravity",e=>J(e.toolCall)],["copilot",e=>p(e,"toolName")!==null&&"toolArgs"in e||sr.has(p(e,"tool_name")??"")],["grok",e=>e.toolName==="run_terminal_command"||e.tool_name==="run_terminal_command"||J(e.toolInput)&&!("toolArgs"in e)],["droid",e=>e.tool_name==="Execute"],["trae",e=>e.tool_name==="RunCommand"],["crush",e=>e.hook_event_name===void 0&&p(e,"event")!==null&&!or.has(p(e,"event"))]],cr=new Set(["codex","antigravity"]);function ur(e){return J(e)?ir.filter(([,t])=>t(e)).map(([t])=>t):[]}function Ve(e,t){if(!J(e))return null;let n=ur(e);return n.length>1?null:n.length===1?n[0]:er(e)&&cr.has(t)?"claude-code":t==="codex"?null:t}var ae=JSON.stringify({permission:"allow"});function Ke(e,t=b("cursor"),n=k){if(e.tool_name!=="Shell")return ae;let r=e.tool_input??{},o=r.command;if(typeof o!="string"||!o)return ae;let s=typeof r.working_directory=="string"?r.working_directory:void 0,i=E(o,{host:"cursor",sessionId:e.conversation_id??"unknown",cwd:s},S()?null:t,n);return i?JSON.stringify({permission:"allow",updated_input:{...r,command:i}}):ae}function P(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}var Mo=String.raw`(?:'(?:(?:[^']|'\\'')*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?'|"(?:[^"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?"|(?:[^\s'"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?)`;function H(e,t,n="unknown",r=b(t),o=k){return e?E(e,{host:t,sessionId:n},S()?null:r,o):null}var ar=new Set(["bash","file_system.bash"]),fe=JSON.stringify({decision:"allow"});function qe(e,t=(n,r)=>H(n,"vibe",r)){if(!P(e)||e.hook_event_name!=="pre_tool"||typeof e.tool_name!="string"||!ar.has(e.tool_name))return"";let n=e.tool_input;if(!P(n)||typeof n.command!="string"||!n.command)return"";let r=t(n.command,typeof e.session_id=="string"?e.session_id:"unknown");return r?JSON.stringify({hook_specific_output:{tool_input:{...n,command:r}}}):""}function Ye(e,t=(n,r)=>H(n,"antigravity",r)){if(!P(e)||!P(e.toolCall)||e.toolCall.name!=="run_command")return fe;let n=e.toolCall.args;if(!P(n)||typeof n.CommandLine!="string"||!n.CommandLine)return fe;let r=t(n.CommandLine,typeof e.conversationId=="string"?e.conversationId:"unknown");return r?JSON.stringify({decision:"allow",overwrite:{CommandLine:r}}):fe}var y="{}",fr=new Set(["runTerminalCommand","run_in_terminal","Bash","bash"]),dr=["run_in_background","is_background","isBackground"];function Q(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function pr(e){let t=e.session_id??e.sessionId;return typeof t=="string"&&t?t:"unknown"}function mr(e,t){let n=e.cwd??t.cwd??t.workdir??t.working_directory;return typeof n=="string"&&n?n:void 0}function ee(e,t,n,r,o){if(!Q(t)||dr.some(i=>t[i]===!0))return null;let s=t.command;return typeof s!="string"||!s?null:E(s,{host:e,sessionId:pr(n),cwd:mr(n,t)},S()?null:r,o)}function I(e,t){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...e,command:t}}})}function gr(e){if(Q(e))return e;if(typeof e!="string")return null;try{let t=JSON.parse(e);return Q(t)?t:null}catch{return null}}function hr(e,t,n){if(typeof e.tool_name=="string"){if(!fr.has(e.tool_name))return y;let s=e.tool_input,i=ee("copilot",s,e,t,n);return i?I(s,i):y}if(e.toolName!=="bash")return y;let r=gr(e.toolArgs),o=ee("copilot",r,e,t,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):y}function N(e,t,n){return(r,o,s)=>{if(r.tool_name!==t)return y;let i=r.tool_input,c=ee(e,i,r,o,s);return c?n(i,c):y}}var kr=new Set(["run_terminal_command","Bash","bash"]);function _r(e,t,n){let r=e.toolName??e.tool_name;if(typeof r!="string"||!kr.has(r))return y;let o=e.toolInput??e.tool_input,s=ee("grok",o,e,t,n);return s?I(o,s):y}var br={copilot:hr,droid:N("droid","Execute",I),trae:N("trae","RunCommand",I),"qwen-code":N("qwen-code","run_shell_command",I),crush:N("crush","bash",(e,t)=>JSON.stringify({updated_input:{command:t}})),junie:N("junie","Bash",(e,t)=>JSON.stringify({updatedInput:{...e,command:t}})),zcode:N("zcode","Bash",I),grok:_r};function Xe(e,t,n=b(e),r=k){return Q(t)?br[e](t,n,r):y}function L(e){return S()?null:b(e)}function Sr(e,t,n={}){let r=n.recordUsage??k;switch(e){case"claude-code":case"codex":return t.hook_event_name!==void 0&&t.hook_event_name!=="PreToolUse"?"":De(t,e,L(e),r,n.claudeDirs??Y(),n.pathEnv??process.env.PATH,n.launchArgs??ue)??"";case"cursor":return Ke(t,L(e),r);case"gemini-cli":return Qe(t,L(e),r);case"vibe":return qe(t,(o,s)=>H(o,"vibe",s,L(e),r));case"antigravity":return Ye(t,(o,s)=>H(o,"antigravity",s,L(e),r));default:return Xe(e,t,L(e),r)}}function B(e,t,n={}){let r=Ve(e,t);return r?Sr(r,e,n):n.fallback??""}var R="{}";function Qe(e,t=b("gemini-cli"),n=k){if(e.hook_event_name!=="BeforeTool"||e.tool_name!=="run_shell_command")return R;let r=e.tool_input??{};if(r.is_background)return R;let o=r.command;if(typeof o!="string"||!o)return R;let s=typeof e.cwd=="string"?e.cwd:void 0,i=E(o,{host:"gemini-cli",sessionId:e.session_id??"unknown",cwd:s},S()?null:t,n);return i?JSON.stringify({hookSpecificOutput:{tool_input:{command:i}}}):R}function wr(e){if(!e)return R;let t;try{t=JSON.parse(e)}catch{return R}return!t||typeof t!="object"?R:B(t,"gemini-cli",{fallback:R})}async function et(){process.stdout.write(wr(await j()))}et().catch(e=>{process.stderr.write(`tkr-gemini-hook: ${e.message}
13
13
  `),process.stdout.write("{}"),process.exit(0)});
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __tkrCreateRequire } from "node:module"; const require = __tkrCreateRequire(import.meta.url);
3
- function L(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{appendFileSync as ie,chmodSync as ce,mkdirSync as ue,existsSync as le,readFileSync as xr,rmSync as $r}from"node:fs";import{dirname as ae,join as fe}from"node:path";import te from"node:os";import{join as ee}from"node:path";function A(){return process.env.TOKMIZER_HOME||ee(te.homedir(),".tokmizer")}import{readFileSync as ne,renameSync as re,statSync as oe,writeFileSync as se}from"node:fs";function gt(t,e,n){try{if(oe(t).size<=e)return;let r=ne(t,"utf8").split(`
4
- `).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}`;se(i,o.length?`${o.join(`
3
+ function L(e=5e3){return new Promise(t=>{let n=[],r=process.stdin,o=!1,s=()=>{o||(o=!0,clearTimeout(c),r.off("data",i),r.pause(),r.unref?.(),t(Buffer.concat(n).toString("utf8")))},i=u=>{n.push(Buffer.isBuffer(u)?u:Buffer.from(u))},c=setTimeout(s,e);r.on("data",i).once("end",s).once("error",s),r.resume()})}import{appendFileSync as ct,chmodSync as ut,mkdirSync as lt,existsSync as at,readFileSync as Or,rmSync as Tr}from"node:fs";import{dirname as ft,join as dt}from"node:path";import tt from"node:os";import{join as nt}from"node:path";function A(){return process.env.TOKMIZER_HOME||nt(tt.homedir(),".tokmizer")}import{readFileSync as rt,renameSync as ot,statSync as st,writeFileSync as it}from"node:fs";function he(e,t,n){try{if(st(e).size<=t)return;let r=rt(e,"utf8").split(`
4
+ `).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=`${e}.tmp-${process.pid}`;it(i,o.length?`${o.join(`
5
5
  `)}
6
- `:"",{mode:384}),re(i,t)}catch{}}var de="usage.jsonl";var ht=2*1024*1024;function pe(){return fe(A(),de)}function _(t,e,n=pe()){try{let r=ae(n);le(r)||ue(r,{recursive:!0,mode:448});let o=t.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";ie(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${e?1:0}}
7
- `,{mode:384}),ce(n,384),gt(n,ht,ht/2)}catch{}}import{spawnSync as Ze}from"node:child_process";import{existsSync as G,readFileSync as rt,readdirSync as ot}from"node:fs";import{homedir as T}from"node:os";import{fileURLToPath as Ke}from"node:url";import{dirname as Ct,join as f,resolve as qe}from"node:path";function z(){return!1}import{execFileSync as Ne}from"node:child_process";import{mkdirSync as Ie,readFileSync as yt,renameSync as Le,statSync as je,writeFileSync as Fe}from"node:fs";import{join as xt}from"node:path";import{closeSync as me,openSync as ge,readSync as he,readdirSync as ke,readFileSync as _e,statSync as bt}from"node:fs";import{homedir as be}from"node:os";import{isAbsolute as Se,join as B,resolve as we}from"node:path";var ye=/^[A-Za-z0-9._+@%:,/-]+$/,xe=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),$e=32,Ae=4*1024*1024;function tt(t){let e;try{e=ge(t,"r");let n=Buffer.alloc(4),r=he(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&&me(e)}}function j(t,e=process.platform){try{let n=bt(t);if(!n.isFile())return!1;if(e==="win32")return!0;if((n.mode&73)===0)return!1;let r=tt(t);return r==="#!"||r!==null&&xe.has(r)}catch{return!1}}function Ee(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 R(t,e,n,r=process.platform){if(!ye.test(t))return!1;let o=r==="win32";if(t.includes("/"))return j(we(e??process.cwd(),t),r);if(!n)return!1;let s=o?Ee(t):[t];for(let i of n.split(o?";":":"))if(!(!i||!Se(i))){for(let c of s)if(j(B(i,c),r))return!0}return!1}var ve=/^eval \$'([^\s'()=]+) \(\) /,Oe=/^([^\s'"()=]+) \(\) \{$/,Re=/^alias -- ([^\s=]+)=(.*)$/,Te=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,Ce=/^export PATH=(.*)$/,Pe=/^(?:--colou?r(?:=\S+)?|-G)$/;function _t(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 He(t,e){let n="";for(let r of t.split(`
8
- `)){let o=Ce.exec(r);if(o&&n!=="# Functions"){let s=_t(o[1].trim());/[$`\\]/.test(s)||e.paths.push(s);continue}if(r.startsWith("# ")&&(n!=="# Functions"||Te.test(r))){n=r;continue}if(n==="# Functions"){let s=ve.exec(r)??Oe.exec(r);s&&e.functions.add(s[1])}else if(n==="# Aliases"){let s=Re.exec(r);s&&e.aliases.set(s[1],_t(s[2].trim()))}}}function Q(t){return t?.code==="ENOENT"}function St(t){let e={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=B(t||B(be(),".claude"),"shell-snapshots"),r=[];try{for(let o of ke(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let s=B(n,o);try{let i=bt(s);i.isFile()&&r.push({path:s,mtime:i.mtimeMs,size:i.size})}catch(i){Q(i)||(e.uncertain=!0)}}}catch(o){return Q(o)||(e.uncertain=!0),e}r=r.sort((o,s)=>s.mtime-o.mtime).slice(0,$e);for(let o of r)try{if(o.size>Ae)throw new Error("snapshot too large");He(_e(o.path,"utf8"),e)}catch(s){Q(s)||(e.uncertain=!0)}return e}function wt(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=>Pe.test(o))}var De="exec-probe.json",Me=6e4;function Ue(){return xt(A(),De)}function Je(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 ze(t,e){try{Ie(xt(t,".."),{recursive:!0,mode:448});let n=`${t}.${process.pid}.tmp`;Fe(n,JSON.stringify(e),{mode:384}),Le(n,t)}catch{}}function Be(t){try{return Ne(t,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function We(t,e){try{let r=yt(t,"utf8").split(`
9
- `,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?R(r[1]??"",void 0,e):j(o)}catch{return!1}}function Ge(t,e,n){try{let r=je(t);return[t,r.size,r.mtimeMs,r.ino,r.mode,e?n??"":""].join("|")}catch{return`${t}|missing`}}function et(t,e=process.platform,n=process.env.PATH,r=Ue(),o=Date.now()){let s=e!=="win32"&&tt(t)==="#!",i=Ge(t,s,n),c=Je(r);if(c?.key===i&&(c.ok||o-c.at<Me))return c.ok;let u=j(t,e)&&(s?We(t,n):Be(t));return ze(r,{key:i,ok:u,at:o,skipped:(c?.skipped??0)+(u?0:1)}),u}var Ye=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"]),Ve=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"]),$t=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),At="(?:dev|start|serve|watch|preview)",Xe=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${At}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${At}(?:\\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)`),Qe=/(?:^|\s)--watch(?:\s|=|$)/;function tn(t){return Xe.test(t)&&!Qe.test(t)}var en=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,nn=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,Pt=3;function Ht(t){let e=en.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&&nn.test(c)?null:{script:c,start:o,end:s,quote:r}}var rn=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function on(t){return it(t).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=It(n.text);return r!==""&&!rn.has(r)&&!st.test(r)}).length>1}function sn(t,e,n,r,o){if(n>=Pt)return null;let s=Ht(t);if(!s)return null;let{script:i,start:c,end:u,quote:l}=s,a=[],d=Lt(i,e,n+1,r,y=>a.push(y));if(d===i||l==='"'&&/["$`]/.test(d))return null;let x=l==="'"?d.replace(/'/g,"'\\''"):d,g=`${t.slice(0,c)}${x}${t.slice(u)}`,k=on(i);if(o)for(let y of k?[t,...a]:a)o(y);return k?`${e} ${g}`:g}var Et=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,cn=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function un(t,e){let n=Z(e);return n==="tail"||n==="journalctl"?Et.test(t):n==="stern"?!0:cn.has(n)?/\blogs?\b/.test(t)&&Et.test(t):!1}var st=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,ln=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,an=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function Z(t){let e=t.lastIndexOf("/");return e===-1?t:t.slice(e+1)}function Nt(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 vt(t){let e=Nt(t);if(!e)return!0;for(let n=0;n<t.length;n++)if(e[n]&&t[n]===">")return!0;return!1}function it(t){let e=Nt(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===`
10
- `||c==="|"){i(c,1);continue}}r+=c,o+=1}return s(),n}function It(t){return t.trim().split(/\s+/)[0]??""}function S(t,e=process.platform){try{let n=Ct(Ke(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(G(c))return et(c,e)?`'${c.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let s=f(n,"..","bin","tkr-exec");if(!r&&G(s))return et(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 G(i)?`${o}node '${i.replace(/'/g,"'\\''")}'`:null}catch{return null}}function fn(t,e="tkr-exec",n=()=>!0,r){return Lt(t,e,0,n,r)}function Lt(t,e,n,r,o){if(t.includes("<<")||an.test(t))return t;let s=it(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=It(l),d=s[c+1],x=d?.kind==="sep"&&(d.text==="|"||d.text==="|&"),g=d?.kind==="sep"&&d.text==="&",k=!x&&!g&&!vt(u.text)&&!u.text.includes("<(")&&!u.text.includes(">(")?sn(l,e,n,r,o):null;if(k!==null){i.push(`${u.text.match(/^\s*/)?.[0]??""}${k}${u.text.match(/\s*$/)?.[0]??""}`);continue}if(l===e||l.startsWith(e)&&/^\s/.test(l.slice(e.length))||Ye.has(a)||Ve.has(a)||($t.has(a)||$t.has(Z(a)))&&!tn(l)||st.test(a)||a.startsWith("(")||a.startsWith("#")||a.startsWith("<")||a.startsWith(">")||ln.test(l)||un(l,a)||a.endsWith(")")||x||g||vt(u.text)||u.text.includes("<(")||u.text.includes(">(")||a==="node"&&l.includes("tkr-exec.js")||!r(a)){i.push(u.text);continue}let y=u.text.match(/^\s*/)?.[0]??"",b=u.text.match(/\s*$/)?.[0]??"";o?.(l),i.push(`${y}${e} ${l}${b}`)}return i.join("")}var dn=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),pn=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"]),mn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),gn={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/},W=["test","run test","run build","run lint","run typecheck"],hn={npm:new Set(W),pnpm:new Set([...W,"build","lint","typecheck"]),yarn:new Set([...W,"build","lint","typecheck"]),bun:new Set(W),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"])},kn=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 it(t)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<Pt?Ht(r.text.trim()):null;if(o){if(!jt(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=>st.test(l)))return!1;let i=Z(s[0]);if(i!==s[0])return!1;let c=gn[i];if(c&&s.slice(1).some(l=>c.test(l)))return!1;if((i==="git"?mn.has(s[1]??""):pn.has(i))||e&&kn.has(i))continue;let u=e?hn[i]:void 0;if(!(u&&(u.has(s[1]??"")||s[1]==="run"&&u.has(`run ${s[2]??""}`))))return!1}return!0}function Ft(t,e,n=S(e),r=_,o=q(),s=process.env.PATH,i=ct){if(!h(t)||t.tool_name!=="Bash"||e==="claude-code"&&bn(i()))return null;let c=t.tool_input;if(!h(c)||c.run_in_background)return null;let u=c.command;if(typeof u!="string"||!u||e==="codex"&&Object.keys(c).some(y=>!dn.has(y)))return null;let l=typeof t.cwd=="string"&&t.cwd?t.cwd:c.workdir,a=typeof l=="string"&&l?l:void 0,d=typeof t.session_id=="string"&&t.session_id?t.session_id:"unknown",x=typeof t.permission_mode=="string"?t.permission_mode:void 0,g=Wt(u,{host:e,sessionId:d,cwd:a,claudeDirs:o,pathEnv:s,permissionMode:x},n,r);if(!g)return null;let k={...c,command:g.command};return JSON.stringify({hookSpecificOutput:e==="codex"?{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:k}:g.allowedBy?{hookEventName:"PreToolUse",permissionDecision:"allow",permissionDecisionReason:`Tokmizer: allowed by your rule ${g.allowedBy}`,updatedInput:k}:{hookEventName:"PreToolUse",updatedInput:k}})}var _n=/(?:^|\s)--(?:disallowedTools|disallowed-tools|settings|setting-sources)(?:[=\s]|$)/;function ct(t=process.env,e=process.platform){let n=Number(t.CLAUDE_PID)||process.ppid;if(e==="win32"||!Number.isInteger(n)||n<=1)return null;try{let r=Ze("ps",["-ww","-o","args=","-p",String(n)],{encoding:"utf8",timeout:2e3});return r.status===0&&r.stdout.trim()?r.stdout:null}catch{return null}}function bn(t){return t===null||_n.test(t)}function Sn(t,e){if(!G(t))return"missing";try{let n=rt(t,"utf8");return JSON.parse(e?Dt(n):n)}catch{return"unreadable"}}function Dt(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]!==`
11
- `;)r++;e+=`
12
- `}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=qe(t);for(;;){e.push(n);let r=Ct(n);if(r===n)return e;n=r}}function wn(){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 ot(f(t,"managed-settings.d")))n.endsWith(".json")&&e.push(f(t,"managed-settings.d",n))}catch{return e}return e}function D(t,e,n,r){let o=[];for(let s of t){let i=Sn(s,e);if(i!=="missing"&&(i==="unreadable"||!h(i)||!n(i,o)))return"unreadable"}return{matchers:o,complete:r}}function F(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 yn(t,e){let n=b=>[f(b,"settings.json"),f(b,"settings.local.json")],r=b=>n(f(b,".claude")),o=f(T(),".claude"),s=e.configDir||o,i=[[wn(),"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",x=(b,X)=>{let $=b.permissions;if(d==="managed"&&(b.allowManagedPermissionRulesOnly===!0||h($)&&$.allowManagedPermissionRulesOnly===!0)&&(a=!0),$===void 0)return!0;if(!h($))return!1;for(let ft of["deny","ask","allow"]){let dt=F($[ft]);if(!dt)return!1;for(let pt of dt){let O=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(pt);if(O)if(ft!=="allow")X.push(v((O[1]??"*").replace(/:\*$/," *")));else if(O[1]===void 0||O[1].trim()==="*")l[d]=!0;else{c.push(v(O[1].replace(/:\*$/," *")));let mt=In(O[1]);mt&&u[d].push({rule:pt.trim(),matches:mt})}}}return!0},g=[];for(let[b,X]of i){d=X;let $=D(b,!1,x,!0);if($==="unreadable")return"unreadable";g.push(...$.matchers)}let k=l.managed||(l.loaded||l.loadedLocal)&&!a,y=[...u.managed,...a?[]:u.loaded];return{matchers:[...g,...k?[]:c],complete:!0,allow:c,allowsEverything:k,guards:g,trustedAllow:y}}function xn(t){let e=[f(T(),".cursor","cli-config.json"),...K(t).map(n=>f(n,".cursor","cli.json"))];return D(e,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!h(o))return!1;let s=F(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(v(l===-1?`${u} *`:`${u.slice(0,l)} ${u.slice(l+1)}`))}return!0},!1)}function $n(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var Mt=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function An(t,e){let n=t.tools;if(n!==void 0&&!h(n))return!1;let r=[F(t.excludeTools),F(h(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let s of o){let i=Mt.exec(s);i&&e.push(v(i[1]===void 0?"*":`${i[1]}*`))}}return!0}function Ot(t){try{return JSON.parse(t)}catch{return null}}function En(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]??Ot(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(e.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(e);return n?Ot(`"${n[1]}"`):null}if(e.startsWith("'")){let n=/^'([^']*)'/.exec(e);return n?n[1]:null}return e.replace(/\s*#.*$/,"")}function vn(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=En(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==="*"||Mt.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(v(`${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 Rt(t){try{return ot(t).filter(e=>e.endsWith(".toml")).map(e=>f(t,e))}catch{return[]}}function On(t){let e=$n(),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(T(),".gemini","settings.json"),...K(t).map(o=>f(o,".gemini","settings.json"))].filter(o=>!!o),r=D(n,!0,An,!1);if(r==="unreadable")return r;for(let o of[...Rt(f(T(),".gemini","policies")),...Rt(f(e,"policies"))]){let s;try{s=rt(o,"utf8")}catch{return"unreadable"}if(!vn(s,r.matchers))return"unreadable"}return r}function nt(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,s]of Object.entries(r))s!=="allow"&&e.push(v(o.replace(/\?/g,"*")))}}return!0}function Tt(t,e){if(t.permissions!==void 0||!nt(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||!nt(o.permission,e)))return!1}}return!0}function Rn(t){for(let e of t)for(let n of["agent","agents","mode","modes"]){let r;try{r=ot(f(e,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(rt(f(e,n,o),"utf8")))return!0}catch{return!0}}return!1}function Tn(t){let e=f(process.env.XDG_CONFIG_HOME||f(T(),".config"),"opencode"),n=K(t),r=[e,...n.map(c=>f(c,".opencode"))];if(Rn(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=D(s,!0,Tt,!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(Dt(c))}catch{return"unreadable"}if(!(c===process.env.OPENCODE_PERMISSION?nt(u,i.matchers):h(u)&&Tt(u,i.matchers)))return"unreadable"}return i}function Cn(){return D([f(T(),".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=F(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(v(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 h(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function Ut(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Pn(t){let e=t.trim().replace(/\s+/g," "),n=e.endsWith(" *")&&e.length>2,r=(n?e.slice(0,-2):e).split("*").map(Ut).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var Hn=512;function Nn(t){let e=t.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[e,e.map(Z)]}function ut(t,e){if(t.test(e)||t.test(e.trim().replace(/\s+/g," ")))return!0;for(let n of Nn(e)){if(n.length>Hn)return!0;for(let r=0;r<n.length;r++)if(t.test(n.slice(r).join(" ")))return!0}return!1}function v(t){let e=Pn(t);return n=>ut(e,n)}function In(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(`^${Ut(r)}${n?"(?: [\\s\\S]*)?":""}$`);return s=>o.test(s)}var Ln={"claude-code":yn,cursor:xn,"gemini-cli":On,opencode:Tn,antigravity:Cn},jn=new Set(["codex"]),Jt=/(?:^|[\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 Fn(t,e,n){let r=Ln[t];return r?r(e??process.cwd(),n):{matchers:[],complete:!1}}function Dn(t,e,n){return t==="unreadable"||Jt.test(e.replace(/['"\\]/g,""))||t.matchers.some(r=>r(e))?!1:t.complete||jt(e,!jn.has(n))}var zt=new Set(["default","acceptEdits","dontAsk"]);function Bt(t,e){return e.host!=="claude-code"||e.permissionMode==="bypassPermissions"?!0:t!=="unreadable"&&t.allowsEverything===!0&&zt.has(e.permissionMode??"")}function Mn(t,e){let n="pathEnv"in t?t.pathEnv:process.env.PATH,r;return o=>t.host!=="claude-code"?R(o,t.cwd,n):(r??=St(e.configDir),!R(o,t.cwd,n)&&!r.paths.some(s=>R(o,t.cwd,s))?!1:o.includes("/")||!wt(o,r))}var Un=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function Jn(t,e,n){return n.host!=="claude-code"||t==="unreadable"||Bt(t,n)||!zt.has(n.permissionMode??"")||!Un.test(e)||Jt.test(e.replace(/['"]/g,""))||(t.guards??[]).some(r=>r(e))?null:(t.trustedAllow??[]).find(r=>r.matches(e))?.rule??null}function Wt(t,e,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=e.claudeDirs??q(),s=Fn(e.host,e.cwd,o),i=Jn(s,t,e),c=i||Dn(s,t,e.host)?fn(t,n,Mn(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}:Bt(s,e)?{command:c}:null}function E(t,e,n,r){return Wt(t,e,n,r)?.command??null}import{rmSync as zn,statSync as Bn}from"node:fs";import{join as Wn}from"node:path";function Gt(){return Wn(A(),"fail-open")}var Gn=24*36e5;function w(t=Date.now()){try{if(t-Bn(Gt()).mtimeMs<Gn)return!0;zn(Gt(),{force:!0})}catch{}return!1}function p(t,e){let n=t[e];return typeof n=="string"&&n?n:null}function M(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function Zn(t){return p(t,"prompt_id")||p(t,"scratchpad_dir")?!0:M(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=>M(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"||M(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 M(t)?tr.filter(([,e])=>e(t)).map(([e])=>e):[]}function Zt(t,e){if(!M(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 Kt(t,e=S("cursor"),n=_){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},w()?null:e,n);return i?JSON.stringify({permission:"allow",updated_input:{...r,command:i}}):lt}var Y="{}";function qt(t,e=S("gemini-cli"),n=_){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},w()?null:e,n);return i?JSON.stringify({hookSpecificOutput:{tool_input:{command:i}}}):Y}function C(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}var Mo=String.raw`(?:'(?:(?:[^']|'\\'')*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?'|"(?:[^"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?"|(?:[^\s'"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?)`;function P(t,e,n="unknown",r=S(e),o=_){return t?E(t,{host:e,sessionId:n},w()?null:r,o):null}var or=new Set(["bash","file_system.bash"]),at=JSON.stringify({decision:"allow"});function Yt(t,e=(n,r)=>P(n,"vibe",r)){if(!C(t)||t.hook_event_name!=="pre_tool"||typeof t.tool_name!="string"||!or.has(t.tool_name))return"";let n=t.tool_input;if(!C(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 Vt(t,e=(n,r)=>P(n,"antigravity",r)){if(!C(t)||!C(t.toolCall)||t.toolCall.name!=="run_command")return at;let n=t.toolCall.args;if(!C(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}function H(t){return w()?null:S(t)}function sr(t,e,n={}){let r=n.recordUsage??_;switch(t){case"claude-code":case"codex":return e.hook_event_name!==void 0&&e.hook_event_name!=="PreToolUse"?"":Ft(e,t,H(t),r,n.claudeDirs??q(),n.pathEnv??process.env.PATH,n.launchArgs??ct)??"";case"cursor":return Kt(e,H(t),r);case"gemini-cli":return qt(e,H(t),r);case"vibe":return Yt(e,(o,s)=>P(o,"vibe",s,H(t),r));case"antigravity":return Vt(e,(o,s)=>P(o,"antigravity",s,H(t),r));default:return Xt(t,e,H(t),r)}}function U(t,e,n={}){let r=Zt(t,e);return r?sr(r,t,n):n.fallback??""}var m="{}",ir=new Set(["runTerminalCommand","run_in_terminal","Bash","bash"]),cr=["run_in_background","is_background","isBackground"];function J(t){return t!=null&&typeof t=="object"&&!Array.isArray(t)}function ur(t){let e=t.session_id??t.sessionId;return typeof e=="string"&&e?e:"unknown"}function lr(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(!J(e)||cr.some(i=>e[i]===!0))return null;let s=e.command;return typeof s!="string"||!s?null:E(s,{host:t,sessionId:ur(n),cwd:lr(n,e)},w()?null:r,o)}function I(t,e){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...t,command:e}}})}function ar(t){if(J(t))return t;if(typeof t!="string")return null;try{let e=JSON.parse(t);return J(e)?e:null}catch{return null}}function fr(t,e,n){if(typeof t.tool_name=="string"){if(!ir.has(t.tool_name))return m;let s=t.tool_input,i=V("copilot",s,t,e,n);return i?I(s,i):m}if(t.toolName!=="bash")return m;let r=ar(t.toolArgs),o=V("copilot",r,t,e,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):m}function N(t,e,n){return(r,o,s)=>{if(r.tool_name!==e)return m;let i=r.tool_input,c=V(t,i,r,o,s);return c?n(i,c):m}}var dr=new Set(["run_terminal_command","Bash","bash"]);function pr(t,e,n){let r=t.toolName??t.tool_name;if(typeof r!="string"||!dr.has(r))return m;let o=t.toolInput??t.tool_input,s=V("grok",o,t,e,n);return s?I(o,s):m}var mr={copilot:fr,droid:N("droid","Execute",I),trae:N("trae","RunCommand",I),"qwen-code":N("qwen-code","run_shell_command",I),crush:N("crush","bash",(t,e)=>JSON.stringify({updated_input:{command:e}})),junie:N("junie","Bash",(t,e)=>JSON.stringify({updatedInput:{...t,command:e}})),zcode:N("zcode","Bash",I),grok:pr};function Xt(t,e,n=S(t),r=_){return J(e)?mr[t](e,n,r):m}function gr(t,e){if(!e)return m;let n;try{n=JSON.parse(e.replace(/^/,""))}catch{return m}return J(n)?U(n,t,{fallback:m}):m}async function Qt(t){process.stdout.write(gr(t,await L()))}Qt("grok").catch(t=>{process.stderr.write(`tkr-grok-hook: ${t.message}
6
+ `:"",{mode:384}),ot(i,e)}catch{}}var pt="usage.jsonl";var ke=2*1024*1024;function mt(){return dt(A(),pt)}function _(e,t,n=mt()){try{let r=ft(n);at(r)||lt(r,{recursive:!0,mode:448});let o=e.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";ct(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${t?1:0}}
7
+ `,{mode:384}),ut(n,384),he(n,ke,ke/2)}catch{}}import{spawnSync as Vt}from"node:child_process";import{existsSync as F,readFileSync as V,readdirSync as K}from"node:fs";import{homedir as R}from"node:os";import{fileURLToPath as Kt}from"node:url";import{dirname as Pe,join as a,resolve as qt}from"node:path";function W(){return!1}import{execFileSync as It}from"node:child_process";import{mkdirSync as Lt,readFileSync as xe,renameSync as jt,statSync as Ft,writeFileSync as Dt}from"node:fs";import{join as $e}from"node:path";import{closeSync as gt,openSync as ht,readSync as kt,readdirSync as _t,readFileSync as bt,statSync as Se}from"node:fs";import{homedir as St}from"node:os";import{isAbsolute as wt,join as G,resolve as yt}from"node:path";var xt=/^[A-Za-z0-9._+@%:,/-]+$/,$t=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),At=32,Et=4*1024*1024;function re(e){let t;try{t=ht(e,"r");let n=Buffer.alloc(4),r=kt(t,n,0,4,0);return r>=2&&n[0]===35&&n[1]===33?"#!":r===4?n.toString("hex"):null}catch{return null}finally{t!==void 0&&gt(t)}}function j(e,t=process.platform){try{let n=Se(e);if(!n.isFile())return!1;if(t==="win32")return!0;if((n.mode&73)===0)return!1;let r=re(e);return r==="#!"||r!==null&&$t.has(r)}catch{return!1}}function Rt(e){if(/\.[A-Za-z0-9]+$/.test(e))return[e];let t=(process.env.PATHEXT??".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean);return[e,...t.map(n=>e+n.toLowerCase())]}function T(e,t,n,r=process.platform){if(!xt.test(e))return!1;let o=r==="win32";if(e.includes("/"))return j(yt(t??process.cwd(),e),r);if(!n)return!1;let s=o?Rt(e):[e];for(let i of n.split(o?";":":"))if(!(!i||!wt(i))){for(let c of s)if(j(G(i,c),r))return!0}return!1}var vt=/^eval \$'([^\s'()=]+) \(\) /,Ot=/^([^\s'"()=]+) \(\) \{$/,Tt=/^alias -- ([^\s=]+)=(.*)$/,Ct=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,Pt=/^export PATH=(.*)$/,Ht=/^(?:--colou?r(?:=\S+)?|-G)$/;function be(e){return e.length>=2&&e.startsWith("'")&&e.endsWith("'")?e.slice(1,-1).replace(/'\\''/g,"'"):e.length>=2&&e.startsWith('"')&&e.endsWith('"')?e.slice(1,-1):e}function Nt(e,t){let n="";for(let r of e.split(`
8
+ `)){let o=Pt.exec(r);if(o&&n!=="# Functions"){let s=be(o[1].trim());/[$`\\]/.test(s)||t.paths.push(s);continue}if(r.startsWith("# ")&&(n!=="# Functions"||Ct.test(r))){n=r;continue}if(n==="# Functions"){let s=vt.exec(r)??Ot.exec(r);s&&t.functions.add(s[1])}else if(n==="# Aliases"){let s=Tt.exec(r);s&&t.aliases.set(s[1],be(s[2].trim()))}}}function ne(e){return e?.code==="ENOENT"}function we(e){let t={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=G(e||G(St(),".claude"),"shell-snapshots"),r=[];try{for(let o of _t(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let s=G(n,o);try{let i=Se(s);i.isFile()&&r.push({path:s,mtime:i.mtimeMs,size:i.size})}catch(i){ne(i)||(t.uncertain=!0)}}}catch(o){return ne(o)||(t.uncertain=!0),t}r=r.sort((o,s)=>s.mtime-o.mtime).slice(0,At);for(let o of r)try{if(o.size>Et)throw new Error("snapshot too large");Nt(bt(o.path,"utf8"),t)}catch(s){ne(s)||(t.uncertain=!0)}return t}function ye(e,t){if(t.uncertain||t.functions.has(e))return!0;let n=t.aliases.get(e);if(n===void 0)return!1;let r=n.trim().split(/\s+/);return r[0]!==e||!r.slice(1).every(o=>Ht.test(o))}var Mt="exec-probe.json",Ut=6e4;function zt(){return $e(A(),Mt)}function Jt(e){try{let t=JSON.parse(xe(e,"utf8"));if(t==null||typeof t!="object")return null;let n=t;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 Bt(e,t){try{Lt($e(e,".."),{recursive:!0,mode:448});let n=`${e}.${process.pid}.tmp`;Dt(n,JSON.stringify(t),{mode:384}),jt(n,e)}catch{}}function Wt(e){try{return It(e,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function Gt(e,t){try{let r=xe(e,"utf8").split(`
9
+ `,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?T(r[1]??"",void 0,t):j(o)}catch{return!1}}function Zt(e,t,n){try{let r=Ft(e);return[e,r.size,r.mtimeMs,r.ino,r.mode,t?n??"":""].join("|")}catch{return`${e}|missing`}}function oe(e,t=process.platform,n=process.env.PATH,r=zt(),o=Date.now()){let s=t!=="win32"&&re(e)==="#!",i=Zt(e,s,n),c=Jt(r);if(c?.key===i&&(c.ok||o-c.at<Ut))return c.ok;let u=j(e,t)&&(s?Gt(e,n):Wt(e));return Bt(r,{key:i,ok:u,at:o,skipped:(c?.skipped??0)+(u?0:1)}),u}var Yt=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"]),Xt=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"]),Ae=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),Ee="(?:dev|start|serve|watch|preview)",Qt=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${Ee}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${Ee}(?:\\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)`),en=/(?:^|\s)--watch(?:\s|=|$)/;function tn(e){return Qt.test(e)&&!en.test(e)}var nn=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,rn=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,He=3;function Ne(e){let t=nn.exec(e);if(!t)return null;let n=t[2]==="fish";if(n&&t[3]!=="-c")return null;let r=t[4],o=t[1].length+1,s=e.indexOf(r,o);if(s<=o)return null;let i=e.slice(s+1);if(i&&!/^\s/.test(i))return null;let c=e.slice(o,s);return r==='"'&&/[$`\\!]/.test(c)||n&&rn.test(c)?null:{script:c,start:o,end:s,quote:r}}var on=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function sn(e){return ce(e).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=Le(n.text);return r!==""&&!on.has(r)&&!ie.test(r)}).length>1}function cn(e,t,n,r,o){if(n>=He)return null;let s=Ne(e);if(!s)return null;let{script:i,start:c,end:u,quote:l}=s,f=[],d=je(i,t,n+1,r,y=>f.push(y));if(d===i||l==='"'&&/["$`]/.test(d))return null;let x=l==="'"?d.replace(/'/g,"'\\''"):d,g=`${e.slice(0,c)}${x}${e.slice(u)}`,k=sn(i);if(o)for(let y of k?[e,...f]:f)o(y);return k?`${t} ${g}`:g}var Re=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,un=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function ln(e,t){let n=q(t);return n==="tail"||n==="journalctl"?Re.test(e):n==="stern"?!0:un.has(n)?/\blogs?\b/.test(e)&&Re.test(e):!1}var ie=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,an=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,fn=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function q(e){let t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function Ie(e){let t=new Array(e.length).fill(!1),n=[],r=0;for(;r<e.length;){let o=e[r],s=e[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;t[r]=i===void 0,r+=1}return n.length===0?t:null}function ve(e){let t=Ie(e);if(!t)return!0;for(let n=0;n<e.length;n++)if(t[n]&&e[n]===">")return!0;return!1}function ce(e){let t=Ie(e);if(!t)return[{kind:"cmd",text:e,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<e.length;){let c=e[o],u=e[o+1];if(t[o]){if(c===">"&&u==="|"){r+=">|",o+=2;continue}if(c==="&"&&u==="&"){i("&&",2);continue}if(c==="&"&&u!==">"){let l=r.replace(/\s+$/,""),f=l[l.length-1];if(f!==">"&&f!=="<"&&f!=="&"){i("&",1);continue}}if(c==="|"&&u==="|"){i("||",2);continue}if(c==="|"&&u==="&"){i("|&",2);continue}if(c===";"&&u===";"){let l=e[o+2]==="&";i(l?";;&":";;",l?3:2);continue}if(c===";"||c===`
10
+ `||c==="|"){i(c,1);continue}}r+=c,o+=1}return s(),n}function Le(e){return e.trim().split(/\s+/)[0]??""}function S(e,t=process.platform){try{let n=Pe(Kt(import.meta.url)),r=t==="win32",o=e&&e!=="claude-code"&&e!=="codex"&&!r?`TOKMIZER_HOST=${e} `:"";if(r&&(!e||e==="claude-code")){let c=a(n,"..","bin","tkr-exec.exe");if(F(c))return oe(c,t)?`'${c.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let s=a(n,"..","bin","tkr-exec");if(!r&&F(s))return oe(s,t)?`${o}'${s.replace(/'/g,"'\\''")}'`:null;if(W()){let c=r?process.execPath.replace(/\\/g,"/"):process.execPath;return`${o}'${c.replace(/'/g,"'\\''")}' exec`}let i=a(n,"..","bin","tkr-exec.js");return F(i)?`${o}node '${i.replace(/'/g,"'\\''")}'`:null}catch{return null}}function dn(e,t="tkr-exec",n=()=>!0,r){return je(e,t,0,n,r)}function je(e,t,n,r,o){if(e.includes("<<")||fn.test(e))return e;let s=ce(e),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 f=Le(l),d=s[c+1],x=d?.kind==="sep"&&(d.text==="|"||d.text==="|&"),g=d?.kind==="sep"&&d.text==="&",k=!x&&!g&&!ve(u.text)&&!u.text.includes("<(")&&!u.text.includes(">(")?cn(l,t,n,r,o):null;if(k!==null){i.push(`${u.text.match(/^\s*/)?.[0]??""}${k}${u.text.match(/\s*$/)?.[0]??""}`);continue}if(l===t||l.startsWith(t)&&/^\s/.test(l.slice(t.length))||Yt.has(f)||Xt.has(f)||(Ae.has(f)||Ae.has(q(f)))&&!tn(l)||ie.test(f)||f.startsWith("(")||f.startsWith("#")||f.startsWith("<")||f.startsWith(">")||an.test(l)||ln(l,f)||f.endsWith(")")||x||g||ve(u.text)||u.text.includes("<(")||u.text.includes(">(")||f==="node"&&l.includes("tkr-exec.js")||!r(f)){i.push(u.text);continue}let y=u.text.match(/^\s*/)?.[0]??"",b=u.text.match(/\s*$/)?.[0]??"";o?.(l),i.push(`${y}${t} ${l}${b}`)}return i.join("")}var pn=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),mn=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"]),gn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),hn={find:/^-(?:delete|exec|execdir|ok|okdir|fprint|fls)/,sort:/^(?:-[^-]*o|--output|--compress-program)/,rg:/^(?:--pre|--hostname-bin|-[^-]*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"],kn={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"])},_n=new Set(["pytest","tsc","vitest","jest","eslint","mypy"]);function Fe(e,t,n=0){if(/\$|`|<\(|>\(|\\\r?\n/.test(e)||/>/.test(e.replace(/2>&1|[12]?>\s*\/dev\/null/g,"")))return!1;for(let r of ce(e)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<He?Ne(r.text.trim()):null;if(o){if(!Fe(o.script,t,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=>ie.test(l)))return!1;let i=q(s[0]);if(i!==s[0])return!1;let c=hn[i];if(c&&s.slice(1).some(l=>c.test(l)))return!1;if((i==="git"?gn.has(s[1]??""):mn.has(i))||t&&_n.has(i))continue;let u=t?kn[i]:void 0;if(!(u&&(u.has(s[1]??"")||s[1]==="run"&&u.has(`run ${s[2]??""}`))))return!1}return!0}function De(e,t,n=S(t),r=_,o=Y(),s=process.env.PATH,i=ue){if(!h(e)||e.tool_name!=="Bash"||t==="claude-code"&&Sn(i()))return null;let c=e.tool_input;if(!h(c)||c.run_in_background)return null;let u=c.command;if(typeof u!="string"||!u||t==="codex"&&Object.keys(c).some(y=>!pn.has(y)))return null;let l=typeof e.cwd=="string"&&e.cwd?e.cwd:c.workdir,f=typeof l=="string"&&l?l:void 0,d=typeof e.session_id=="string"&&e.session_id?e.session_id:"unknown",x=typeof e.permission_mode=="string"?e.permission_mode:void 0,g=Ge(u,{host:t,sessionId:d,cwd:f,claudeDirs:o,pathEnv:s,permissionMode:x},n,r);if(!g)return null;let k={...c,command:g.command};return JSON.stringify({hookSpecificOutput:t==="codex"?{hookEventName:"PreToolUse",permissionDecision:"allow",updatedInput:k}:g.allowedBy?{hookEventName:"PreToolUse",permissionDecision:"allow",permissionDecisionReason:`Tokmizer: allowed by your rule ${g.allowedBy}`,updatedInput:k}:{hookEventName:"PreToolUse",updatedInput:k}})}var bn=/(?:^|\s)--(?:disallowedTools|disallowed-tools|settings|setting-sources)(?:[=\s]|$)/;function ue(e=process.env,t=process.platform){let n=Number(e.CLAUDE_PID)||process.ppid;if(t==="win32"||!Number.isInteger(n)||n<=1)return null;try{let r=Vt("ps",["-ww","-o","args=","-p",String(n)],{encoding:"utf8",timeout:2e3});return r.status===0&&r.stdout.trim()?r.stdout:null}catch{return null}}function Sn(e){return e===null||bn.test(e)}function wn(e,t){if(!F(e))return"missing";try{let n=V(e,"utf8");return JSON.parse(t?Me(n):n)}catch{return"unreadable"}}function Me(e){let t="",n=!1;for(let r=0;r<e.length;r++){let o=e[r];if(n){t+=o,o==="\\"?t+=e[++r]??"":o==='"'&&(n=!1);continue}if(o==='"')n=!0,t+=o;else if(o==="/"&&e[r+1]==="/"){for(;r<e.length&&e[r]!==`
11
+ `;)r++;t+=`
12
+ `}else if(o==="/"&&e[r+1]==="*"){if(r=e.indexOf("*/",r+2),r===-1)return"";r+=1}else t+=o}return t.replace(/,(\s*[}\]])/g,"$1")}function M(e){let t=[],n=qt(e);for(;;){t.push(n);let r=Pe(n);if(r===n)return t;n=r}}function yn(){let e=process.platform==="darwin"?"/Library/Application Support/ClaudeCode":process.platform==="win32"?"C:\\Program Files\\ClaudeCode":"/etc/claude-code",t=[a(e,"managed-settings.json")];try{for(let n of K(a(e,"managed-settings.d")))n.endsWith(".json")&&t.push(a(e,"managed-settings.d",n))}catch{return t}return t}function U(e,t,n,r){let o=[];for(let s of e){let i=wn(s,t);if(i!=="missing"&&(i==="unreadable"||!h(i)||!n(i,o)))return"unreadable"}return{matchers:o,complete:r}}function D(e){return e===void 0?[]:Array.isArray(e)?e.filter(t=>typeof t=="string"):null}function Y(){return{projectDir:process.env.CLAUDE_PROJECT_DIR,configDir:process.env.CLAUDE_CONFIG_DIR}}function xn(e,t){let n=b=>[a(b,"settings.json"),a(b,"settings.local.json")],r=b=>n(a(b,".claude")),o=a(R(),".claude"),s=t.configDir||o,i=[[yn(),"managed"],[[a(s,"settings.json")],"loaded"],[[a(s,"settings.local.json")],"loadedLocal"],[t.configDir?n(o):[],"extra"],[t.projectDir?r(t.projectDir):[],"project"],[M(e).flatMap(r),"extra"]],c=[],u={managed:[],loaded:[],loadedLocal:[],project:[],extra:[]},l={managed:!1,loaded:!1,loadedLocal:!1,project:!1,extra:!1},f=!1,d="managed",x=(b,te)=>{let $=b.permissions;if(d==="managed"&&(b.allowManagedPermissionRulesOnly===!0||h($)&&$.allowManagedPermissionRulesOnly===!0)&&(f=!0),$===void 0)return!0;if(!h($))return!1;for(let de of["deny","ask","allow"]){let pe=D($[de]);if(!pe)return!1;for(let me of pe){let O=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(me);if(O)if(de!=="allow")te.push(v((O[1]??"*").replace(/:\*$/," *")));else if(O[1]===void 0||O[1].trim()==="*")l[d]=!0;else{c.push(v(O[1].replace(/:\*$/," *")));let ge=Un(O[1]);ge&&u[d].push({rule:me.trim(),matches:ge})}}}return!0},g=[];for(let[b,te]of i){d=te;let $=U(b,!1,x,!0);if($==="unreadable")return"unreadable";g.push(...$.matchers)}let k=l.managed||(l.loaded||l.loadedLocal)&&!f,y=[...u.managed,...f?[]:u.loaded];return{matchers:[...g,...k?[]:c],complete:!0,allow:c,allowsEverything:k,guards:g,trustedAllow:y}}function $n(e){let t=[a(R(),".cursor","cli-config.json"),...M(e).map(n=>a(n,".cursor","cli.json"))];return U(t,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!h(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(v(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 Ue=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function En(e,t){let n=e.tools;if(n!==void 0&&!h(n))return!1;let r=[D(e.excludeTools),D(h(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let s of o){let i=Ue.exec(s);i&&t.push(v(i[1]===void 0?"*":`${i[1]}*`))}}return!0}function Oe(e){try{return JSON.parse(e)}catch{return null}}function Rn(e){let t=e.trim();if(t.startsWith('"""')||t.startsWith("'''"))return null;if(t.startsWith("[")){if(!/\]\s*(?:#.*)?$/.test(t))return null;let n=[];for(let r of t.matchAll(/"((?:\\.|[^"\\])*)"|'([^']*)'/g)){let o=r[2]??Oe(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(t.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(t);return n?Oe(`"${n[1]}"`):null}if(t.startsWith("'")){let n=/^'([^']*)'/.exec(t);return n?n[1]:null}return t.replace(/\s*#.*$/,"")}function vn(e,t){for(let n of e.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 f=Rn(l[2]);if(f===null)return!1;r[l[1]]=f}let o=r.decision;if(o!=="deny"&&o!=="ask_user"||!(r.toolName===void 0?["*"]:[r.toolName].flat()).some(u=>u==="*"||Ue.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){t.push(()=>!0);continue}for(let u of i)t.push(v(`${u}*`));for(let u of c){let l;try{l=new RegExp(u)}catch{return!1}t.push(f=>l.test(JSON.stringify({command:f}))||X(l,f))}}return!0}function Te(e){try{return K(e).filter(t=>t.endsWith(".toml")).map(t=>a(e,t))}catch{return[]}}function On(e){let t=An(),n=[a(t,"system-defaults.json"),a(t,"settings.json"),process.env.GEMINI_CLI_SYSTEM_SETTINGS_PATH,process.env.GEMINI_CLI_SYSTEM_DEFAULTS_PATH,a(R(),".gemini","settings.json"),...M(e).map(o=>a(o,".gemini","settings.json"))].filter(o=>!!o),r=U(n,!0,En,!1);if(r==="unreadable")return r;for(let o of[...Te(a(R(),".gemini","policies")),...Te(a(t,"policies"))]){let s;try{s=V(o,"utf8")}catch{return"unreadable"}if(!vn(s,r.matchers))return"unreadable"}return r}function se(e,t){if(e===void 0)return!0;if(typeof e=="string")return e!=="allow"&&t.push(()=>!0),!0;if(!h(e))return!1;for(let n of["bash","shell","*"]){let r=e[n];if(r!==void 0){if(typeof r=="string"){r!=="allow"&&t.push(()=>!0);continue}if(!h(r))return!1;for(let[o,s]of Object.entries(r))s!=="allow"&&t.push(v(o.replace(/\?/g,"*")))}}return!0}function Ce(e,t){if(e.permissions!==void 0||!se(e.permission,t))return!1;for(let n of["agent","agents","mode"]){let r=e[n];if(r!==void 0){if(!h(r))return!1;for(let o of Object.values(r))if(h(o)&&(o.permissions!==void 0||!se(o.permission,t)))return!1}}return!0}function Tn(e){for(let t of e)for(let n of["agent","agents","mode","modes"]){let r;try{r=K(a(t,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(V(a(t,n,o),"utf8")))return!0}catch{return!0}}return!1}function Cn(e){let t=a(process.env.XDG_CONFIG_HOME||a(R(),".config"),"opencode"),n=M(e),r=[t,...n.map(c=>a(c,".opencode"))];if(Tn(r))return"unreadable";let o=["opencode.json","opencode.jsonc","config.json"],s=[...o.map(c=>a(t,c)),process.env.OPENCODE_CONFIG,...n.flatMap(c=>[...o.slice(0,2).map(u=>a(c,u)),...o.slice(0,2).map(u=>a(c,".opencode",u))])].filter(c=>!!c),i=U(s,!0,Ce,!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(Me(c))}catch{return"unreadable"}if(!(c===process.env.OPENCODE_PERMISSION?se(u,i.matchers):h(u)&&Ce(u,i.matchers)))return"unreadable"}return i}function Pn(){return U([a(R(),".gemini","antigravity-cli","settings.json")],!0,(e,t)=>{let n=e.permissions;if(n===void 0)return!0;if(!h(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:")){t.push(v(c==="*"?"*":`${c} *`));continue}let u;try{u=new RegExp(c.slice(6))}catch{return!1}t.push(l=>X(u,l))}}return!0},!1)}function Hn(e){let t=[],n=/\s+|#[^\n]*|("(?:[^"\\\n]|\\.)*"|'(?:[^'\\\n]|\\.)*')|([A-Za-z_][A-Za-z0-9_]*|[()[\],=])|(.)/gy;for(let r=n.exec(e);r&&r[0];r=n.exec(e)){if(r[3]!==void 0)return null;(r[1]!==void 0||r[2]!==void 0)&&t.push(r[1]??r[2])}return t}function ze(e,t){let n=e[t.i++];if(n===void 0)return;if(/^["']/.test(n))try{return n.startsWith('"')?JSON.parse(n):JSON.parse(`"${n.slice(1,-1).replace(/\\'/g,"'").replace(/"/g,'\\"')}"`)}catch{return}if(n!=="[")return/^[A-Za-z_]/.test(n)?null:void 0;let r=[];for(;e[t.i]!=="]";){let o=ze(e,t);if(o===void 0)return;if(r.push(o),e[t.i]===",")t.i++;else if(e[t.i]!=="]")return}return t.i++,r}function Nn(e){if(!Array.isArray(e)||e.length===0)return null;let t=[];for(let r of e){let o=typeof r=="string"?[r]:Array.isArray(r)?r:null;if(!o||o.length===0||!o.every(s=>typeof s=="string"&&s!==""))return null;t.push(`(?:${o.map(le).join("|")})`)}let n=new RegExp(`^${t.join(" ")}(?= |$)`);return r=>X(n,r)}function In(e,t){let n=Hn(e);if(!n)return!1;for(let r=0;r<n.length;r++){if(n[r]!=="prefix_rule"||n[r+1]!=="(")continue;let o={i:r+2},s={};for(;n[o.i]!==")";){let u=n[o.i];if(!u||!/^[A-Za-z_]/.test(u)||n[o.i+1]!=="="||(o.i+=2,s[u]=ze(n,o),s[u]===void 0&&(u==="pattern"||u==="decision")))return!1;if(n[o.i]===",")o.i++;else if(n[o.i]!==")")return!1}r=o.i;let i="decision"in s?s.decision:"allow";if(i!=="allow"&&i!=="prompt"&&i!=="forbidden")return!1;let c=Nn(s.pattern);if(!c)return!1;i!=="allow"&&t.push(c)}return!0}function Ln(e){if(!F(e))return[];try{return K(e).filter(t=>t.endsWith(".rules")).sort().map(t=>a(e,t))}catch{return"unreadable"}}function jn(e){let t=process.env.CODEX_HOME||a(R(),".codex"),n=[a(t,"rules"),...M(e).map(o=>a(o,".codex","rules"))],r=[];for(let o of[...new Set(n)]){let s=Ln(o);if(s==="unreadable")return"unreadable";for(let i of s){let c;try{c=V(i,"utf8")}catch{return"unreadable"}if(!In(c,r))return"unreadable"}}return{matchers:r,complete:!1}}function h(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function le(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Fn(e){let t=e.trim().replace(/\s+/g," "),n=t.endsWith(" *")&&t.length>2,r=(n?t.slice(0,-2):t).split("*").map(le).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var Dn=512;function Mn(e){let t=e.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[t,t.map(q)]}function X(e,t){if(e.test(t)||e.test(t.trim().replace(/\s+/g," ")))return!0;for(let n of Mn(t)){if(n.length>Dn)return!0;for(let r=0;r<n.length;r++)if(e.test(n.slice(r).join(" ")))return!0}return!1}function v(e){let t=Fn(e);return n=>X(t,n)}function Un(e){let t=e.trim().replace(/:\*$/," *"),n=t.endsWith(" *"),r=n?t.slice(0,-2):t;if(!r||r.includes("*")||/\s\s|[^\S ]|^ | $/.test(r))return null;let o=new RegExp(`^${le(r)}${n?"(?: [\\s\\S]*)?":""}$`);return s=>o.test(s)}var zn={"claude-code":xn,cursor:$n,"gemini-cli":On,opencode:Cn,antigravity:Pn,codex:jn},Jn=new Set(["codex"]),Je=/(?:^|[\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 Bn(e,t,n){let r=zn[e];return r?r(t??process.cwd(),n):{matchers:[],complete:!1}}function Wn(e,t,n){return e==="unreadable"||Je.test(t.replace(/['"\\]/g,""))||e.matchers.some(r=>r(t))?!1:e.complete||Fe(t,!Jn.has(n))}var Be=new Set(["default","acceptEdits","dontAsk"]);function We(e,t){return t.host!=="claude-code"||t.permissionMode==="bypassPermissions"?!0:e!=="unreadable"&&e.allowsEverything===!0&&Be.has(t.permissionMode??"")}function Gn(e,t){let n="pathEnv"in e?e.pathEnv:process.env.PATH,r;return o=>e.host!=="claude-code"?T(o,e.cwd,n):(r??=we(t.configDir),!T(o,e.cwd,n)&&!r.paths.some(s=>T(o,e.cwd,s))?!1:o.includes("/")||!ye(o,r))}var Zn=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function Vn(e,t,n){return n.host!=="claude-code"||e==="unreadable"||We(e,n)||!Be.has(n.permissionMode??"")||!Zn.test(t)||Je.test(t.replace(/['"]/g,""))||(e.guards??[]).some(r=>r(t))?null:(e.trustedAllow??[]).find(r=>r.matches(t))?.rule??null}function Ge(e,t,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=t.claudeDirs??Y(),s=Bn(t.host,t.cwd,o),i=Vn(s,e,t),c=i||Wn(s,e,t.host)?dn(e,n,Gn(t,o)):e;return c!==e&&s!=="unreadable"&&(i?(s.guards??[]).some(u=>u(c)):s.matchers.some(u=>u(c))||(s.allow??[]).some(u=>u(c)&&!u(e)))&&(c=e),r(t.sessionId,c!==e),c===e?null:i?{command:c,allowedBy:i}:We(s,t)?{command:c}:null}function E(e,t,n,r){return Ge(e,t,n,r)?.command??null}import{rmSync as Kn,statSync as qn}from"node:fs";import{join as Yn}from"node:path";function Ze(){return Yn(A(),"fail-open")}var Xn=24*36e5;function w(e=Date.now()){try{if(e-qn(Ze()).mtimeMs<Xn)return!0;Kn(Ze(),{force:!0})}catch{}return!1}function p(e,t){let n=e[t];return typeof n=="string"&&n?n:null}function z(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Qn(e){return p(e,"prompt_id")||p(e,"scratchpad_dir")?!0:z(e.effort)}function er(e){return p(e,"tool_use_id")?.startsWith("toolu_")===!0||/^claude/i.test(p(e,"model")??"")}var tr=new Set(["BeforeTool","AfterTool","BeforeAgent","AfterAgent","BeforeModel","AfterModel","BeforeToolSelection"]),nr=new Set(["preToolUse","postToolUse","beforeShellExecution","afterShellExecution","beforeSubmitPrompt","sessionStart","sessionEnd","stop"]),rr=new Set(["pre_tool","post_tool"]),or=new Set(["before_tool_call","after_tool_call"]),sr=new Set(["runTerminalCommand","run_in_terminal"]),ir=[["codex",e=>p(e,"turn_id")!==null],["claude-code",Qn],["cursor",e=>p(e,"cursor_version")!==null||p(e,"generation_id")!==null||p(e,"conversation_id")!==null||Array.isArray(e.workspace_roots)||nr.has(p(e,"hook_event_name")??"")],["gemini-cli",e=>tr.has(p(e,"hook_event_name")??"")],["qwen-code",e=>e.hook_event_name==="PreToolUse"&&e.tool_name==="run_shell_command"],["vibe",e=>rr.has(p(e,"hook_event_name")??"")],["antigravity",e=>z(e.toolCall)],["copilot",e=>p(e,"toolName")!==null&&"toolArgs"in e||sr.has(p(e,"tool_name")??"")],["grok",e=>e.toolName==="run_terminal_command"||e.tool_name==="run_terminal_command"||z(e.toolInput)&&!("toolArgs"in e)],["droid",e=>e.tool_name==="Execute"],["trae",e=>e.tool_name==="RunCommand"],["crush",e=>e.hook_event_name===void 0&&p(e,"event")!==null&&!or.has(p(e,"event"))]],cr=new Set(["codex","antigravity"]);function ur(e){return z(e)?ir.filter(([,t])=>t(e)).map(([t])=>t):[]}function Ve(e,t){if(!z(e))return null;let n=ur(e);return n.length>1?null:n.length===1?n[0]:er(e)&&cr.has(t)?"claude-code":t==="codex"?null:t}var ae=JSON.stringify({permission:"allow"});function Ke(e,t=S("cursor"),n=_){if(e.tool_name!=="Shell")return ae;let r=e.tool_input??{},o=r.command;if(typeof o!="string"||!o)return ae;let s=typeof r.working_directory=="string"?r.working_directory:void 0,i=E(o,{host:"cursor",sessionId:e.conversation_id??"unknown",cwd:s},w()?null:t,n);return i?JSON.stringify({permission:"allow",updated_input:{...r,command:i}}):ae}var Q="{}";function qe(e,t=S("gemini-cli"),n=_){if(e.hook_event_name!=="BeforeTool"||e.tool_name!=="run_shell_command")return Q;let r=e.tool_input??{};if(r.is_background)return Q;let o=r.command;if(typeof o!="string"||!o)return Q;let s=typeof e.cwd=="string"?e.cwd:void 0,i=E(o,{host:"gemini-cli",sessionId:e.session_id??"unknown",cwd:s},w()?null:t,n);return i?JSON.stringify({hookSpecificOutput:{tool_input:{command:i}}}):Q}function C(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}var Go=String.raw`(?:'(?:(?:[^']|'\\'')*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?'|"(?:[^"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?"|(?:[^\s'"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?)`;function P(e,t,n="unknown",r=S(t),o=_){return e?E(e,{host:t,sessionId:n},w()?null:r,o):null}var ar=new Set(["bash","file_system.bash"]),fe=JSON.stringify({decision:"allow"});function Ye(e,t=(n,r)=>P(n,"vibe",r)){if(!C(e)||e.hook_event_name!=="pre_tool"||typeof e.tool_name!="string"||!ar.has(e.tool_name))return"";let n=e.tool_input;if(!C(n)||typeof n.command!="string"||!n.command)return"";let r=t(n.command,typeof e.session_id=="string"?e.session_id:"unknown");return r?JSON.stringify({hook_specific_output:{tool_input:{...n,command:r}}}):""}function Xe(e,t=(n,r)=>P(n,"antigravity",r)){if(!C(e)||!C(e.toolCall)||e.toolCall.name!=="run_command")return fe;let n=e.toolCall.args;if(!C(n)||typeof n.CommandLine!="string"||!n.CommandLine)return fe;let r=t(n.CommandLine,typeof e.conversationId=="string"?e.conversationId:"unknown");return r?JSON.stringify({decision:"allow",overwrite:{CommandLine:r}}):fe}function H(e){return w()?null:S(e)}function fr(e,t,n={}){let r=n.recordUsage??_;switch(e){case"claude-code":case"codex":return t.hook_event_name!==void 0&&t.hook_event_name!=="PreToolUse"?"":De(t,e,H(e),r,n.claudeDirs??Y(),n.pathEnv??process.env.PATH,n.launchArgs??ue)??"";case"cursor":return Ke(t,H(e),r);case"gemini-cli":return qe(t,H(e),r);case"vibe":return Ye(t,(o,s)=>P(o,"vibe",s,H(e),r));case"antigravity":return Xe(t,(o,s)=>P(o,"antigravity",s,H(e),r));default:return Qe(e,t,H(e),r)}}function J(e,t,n={}){let r=Ve(e,t);return r?fr(r,e,n):n.fallback??""}var m="{}",dr=new Set(["runTerminalCommand","run_in_terminal","Bash","bash"]),pr=["run_in_background","is_background","isBackground"];function B(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function mr(e){let t=e.session_id??e.sessionId;return typeof t=="string"&&t?t:"unknown"}function gr(e,t){let n=e.cwd??t.cwd??t.workdir??t.working_directory;return typeof n=="string"&&n?n:void 0}function ee(e,t,n,r,o){if(!B(t)||pr.some(i=>t[i]===!0))return null;let s=t.command;return typeof s!="string"||!s?null:E(s,{host:e,sessionId:mr(n),cwd:gr(n,t)},w()?null:r,o)}function I(e,t){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...e,command:t}}})}function hr(e){if(B(e))return e;if(typeof e!="string")return null;try{let t=JSON.parse(e);return B(t)?t:null}catch{return null}}function kr(e,t,n){if(typeof e.tool_name=="string"){if(!dr.has(e.tool_name))return m;let s=e.tool_input,i=ee("copilot",s,e,t,n);return i?I(s,i):m}if(e.toolName!=="bash")return m;let r=hr(e.toolArgs),o=ee("copilot",r,e,t,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):m}function N(e,t,n){return(r,o,s)=>{if(r.tool_name!==t)return m;let i=r.tool_input,c=ee(e,i,r,o,s);return c?n(i,c):m}}var _r=new Set(["run_terminal_command","Bash","bash"]);function br(e,t,n){let r=e.toolName??e.tool_name;if(typeof r!="string"||!_r.has(r))return m;let o=e.toolInput??e.tool_input,s=ee("grok",o,e,t,n);return s?I(o,s):m}var Sr={copilot:kr,droid:N("droid","Execute",I),trae:N("trae","RunCommand",I),"qwen-code":N("qwen-code","run_shell_command",I),crush:N("crush","bash",(e,t)=>JSON.stringify({updated_input:{command:t}})),junie:N("junie","Bash",(e,t)=>JSON.stringify({updatedInput:{...e,command:t}})),zcode:N("zcode","Bash",I),grok:br};function Qe(e,t,n=S(e),r=_){return B(t)?Sr[e](t,n,r):m}function wr(e,t){if(!t)return m;let n;try{n=JSON.parse(t.replace(/^/,""))}catch{return m}return B(n)?J(n,e,{fallback:m}):m}async function et(e){process.stdout.write(wr(e,await L()))}et("grok").catch(e=>{process.stderr.write(`tkr-grok-hook: ${e.message}
13
13
  `),process.stdout.write(m),process.exit(0)});