@tokmizer/plugin 0.9.66 → 0.9.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,56 @@
1
1
  import { createRequire as __tkrCreateRequire } from "node:module"; const require = __tkrCreateRequire(import.meta.url);
2
- function T(e=5e3){return new Promise(t=>{let n=[],r=process.stdin,o=!1,s=()=>{o||(o=!0,clearTimeout(u),r.off("data",i),r.pause(),r.unref?.(),t(Buffer.concat(n).toString("utf8")))},i=c=>{n.push(Buffer.isBuffer(c)?c:Buffer.from(c))},u=setTimeout(s,e);r.on("data",i).once("end",s).once("error",s),r.resume()})}import{realpathSync as ke}from"node:fs";import{fileURLToPath as ot,pathToFileURL as st}from"node:url";var _e=null;function be(e,t,n){if(n!==void 0&&_e===n)return!0;if(_e!==null||!e)return!1;if(t===st(e).href)return!0;try{return ke(e)===ke(ot(t))}catch{return!1}}import{appendFileSync as dt,chmodSync as pt,mkdirSync as mt,existsSync as gt,readFileSync as Fr,rmSync as Dr}from"node:fs";import{dirname as ht,join as kt}from"node:path";import it from"node:os";import{join as ut}from"node:path";function A(){return process.env.TOKMIZER_HOME||ut(it.homedir(),".tokmizer")}import{readFileSync as ct,renameSync as lt,statSync as at,writeFileSync as ft}from"node:fs";function Se(e,t,n){try{if(at(e).size<=t)return;let r=ct(e,"utf8").split(`
3
- `).filter(u=>u.trim()!==""),o=[],s=0;for(let u=r.length-1;u>=0;u-=1){let c=r[u],l=Buffer.byteLength(c)+1;if(s+l>n)break;o.push(c),s+=l}o.reverse();let i=`${e}.tmp-${process.pid}`;ft(i,o.length?`${o.join(`
2
+ function I(e=5e3){return new Promise(t=>{let n=[],r=process.stdin,o=!1,i=()=>{o||(o=!0,clearTimeout(l),r.off("data",s),r.pause(),r.unref?.(),t(Buffer.concat(n).toString("utf8")))},s=u=>{n.push(Buffer.isBuffer(u)?u:Buffer.from(u))},l=setTimeout(i,e);r.on("data",s).once("end",i).once("error",i),r.resume()})}import{realpathSync as Oe}from"node:fs";import{fileURLToPath as St,pathToFileURL as xt}from"node:url";var ve=null;function Re(e,t,n){if(n!==void 0&&ve===n)return!0;if(ve!==null||!e)return!1;if(t===xt(e).href)return!0;try{return Oe(e)===Oe(St(t))}catch{return!1}}import{appendFileSync as vt,chmodSync as Rt,mkdirSync as Pt,existsSync as It,readFileSync as co,rmSync as fo}from"node:fs";import{dirname as Nt,join as Ht}from"node:path";import At from"node:os";import{join as $t}from"node:path";function E(){return process.env.TOKMIZER_HOME||$t(At.homedir(),".tokmizer")}import{readFileSync as Tt,renameSync as Ct,statSync as Et,writeFileSync as Ot}from"node:fs";function Pe(e,t,n){try{if(Et(e).size<=t)return;let r=Tt(e,"utf8").split(`
3
+ `).filter(l=>l.trim()!==""),o=[],i=0;for(let l=r.length-1;l>=0;l-=1){let u=r[l],a=Buffer.byteLength(u)+1;if(i+a>n)break;o.push(u),i+=a}o.reverse();let s=`${e}.tmp-${process.pid}`;Ot(s,o.length?`${o.join(`
4
4
  `)}
5
- `:"",{mode:384}),lt(i,e)}catch{}}var _t="usage.jsonl";var we=2*1024*1024;function bt(){return kt(A(),_t)}function k(e,t,n=bt()){try{let r=ht(n);gt(r)||mt(r,{recursive:!0,mode:448});let o=e.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";dt(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${t?1:0}}
6
- `,{mode:384}),pt(n,384),Se(n,we,we/2)}catch{}}import{rmSync as St,statSync as wt}from"node:fs";import{join as yt}from"node:path";function ye(){return yt(A(),"fail-open")}var xt=24*36e5;function S(e=Date.now()){try{if(e-wt(ye()).mtimeMs<xt)return!0;St(ye(),{force:!0})}catch{}return!1}import{spawnSync as rn}from"node:child_process";import{existsSync as D,readFileSync as Z,readdirSync as V}from"node:fs";import{homedir as R}from"node:os";import{fileURLToPath as on}from"node:url";import{dirname as je,join as a,resolve as sn}from"node:path";function B(){return!1}import{execFileSync as Bt}from"node:child_process";import{mkdirSync as Wt,readFileSync as ve,renameSync as Gt,statSync as Zt,writeFileSync as Vt}from"node:fs";import{join as Oe}from"node:path";import{closeSync as $t,openSync as At,readSync as Et,readdirSync as Rt,readFileSync as vt,statSync as Ae}from"node:fs";import{homedir as Ot}from"node:os";import{isAbsolute as Tt,join as W,resolve as Ct}from"node:path";var Pt=/^[A-Za-z0-9._+@%:,/-]+$/,Ht=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),Nt=32,It=4*1024*1024;function oe(e){let t;try{t=At(e,"r");let n=Buffer.alloc(4),r=Et(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&&$t(t)}}function F(e,t=process.platform){try{let n=Ae(e);if(!n.isFile())return!1;if(t==="win32")return!0;if((n.mode&73)===0)return!1;let r=oe(e);return r==="#!"||r!==null&&Ht.has(r)}catch{return!1}}function Lt(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(!Pt.test(e))return!1;let o=r==="win32";if(e.includes("/"))return F(Ct(t??process.cwd(),e),r);if(!n)return!1;let s=o?Lt(e):[e];for(let i of n.split(o?";":":"))if(!(!i||!Tt(i))){for(let u of s)if(F(W(i,u),r))return!0}return!1}var jt=/^eval \$'([^\s'()=]+) \(\) /,Ft=/^([^\s'"()=]+) \(\) \{$/,Dt=/^alias -- ([^\s=]+)=(.*)$/,Mt=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,Ut=/^export PATH=(.*)$/,zt=/^(?:--colou?r(?:=\S+)?|-G)$/;function $e(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 Jt(e,t){let n="";for(let r of e.split(`
7
- `)){let o=Ut.exec(r);if(o&&n!=="# Functions"){let s=$e(o[1].trim());/[$`\\]/.test(s)||t.paths.push(s);continue}if(r.startsWith("# ")&&(n!=="# Functions"||Mt.test(r))){n=r;continue}if(n==="# Functions"){let s=jt.exec(r)??Ft.exec(r);s&&t.functions.add(s[1])}else if(n==="# Aliases"){let s=Dt.exec(r);s&&t.aliases.set(s[1],$e(s[2].trim()))}}}function re(e){return e?.code==="ENOENT"}function Ee(e){let t={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=W(e||W(Ot(),".claude"),"shell-snapshots"),r=[];try{for(let o of Rt(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let s=W(n,o);try{let i=Ae(s);i.isFile()&&r.push({path:s,mtime:i.mtimeMs,size:i.size})}catch(i){re(i)||(t.uncertain=!0)}}}catch(o){return re(o)||(t.uncertain=!0),t}r=r.sort((o,s)=>s.mtime-o.mtime).slice(0,Nt);for(let o of r)try{if(o.size>It)throw new Error("snapshot too large");Jt(vt(o.path,"utf8"),t)}catch(s){re(s)||(t.uncertain=!0)}return t}function Re(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=>zt.test(o))}var Kt="exec-probe.json",qt=6e4;function Yt(){return Oe(A(),Kt)}function Xt(e){try{let t=JSON.parse(ve(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 Qt(e,t){try{Wt(Oe(e,".."),{recursive:!0,mode:448});let n=`${e}.${process.pid}.tmp`;Vt(n,JSON.stringify(t),{mode:384}),Gt(n,e)}catch{}}function en(e){try{return Bt(e,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function tn(e,t){try{let r=ve(e,"utf8").split(`
8
- `,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 nn(e,t,n){try{let r=Zt(e);return[e,r.size,r.mtimeMs,r.ino,r.mode,t?n??"":""].join("|")}catch{return`${e}|missing`}}function se(e,t=process.platform,n=process.env.PATH,r=Yt(),o=Date.now()){let s=t!=="win32"&&oe(e)==="#!",i=nn(e,s,n),u=Xt(r);if(u?.key===i&&(u.ok||o-u.at<qt))return u.ok;let c=F(e,t)&&(s?tn(e,n):en(e));return Qt(r,{key:i,ok:c,at:o,skipped:(u?.skipped??0)+(c?0:1)}),c}var un=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"]),cn=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"]),Te=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),Ce="(?:dev|start|serve|watch|preview)",ln=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${Ce}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${Ce}(?:\\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)`),an=/(?:^|\s)--watch(?:\s|=|$)/;function fn(e){return ln.test(e)&&!an.test(e)}var dn=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,pn=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,Fe=3;function De(e){let t=dn.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 u=e.slice(o,s);return r==='"'&&/[$`\\!]/.test(u)||n&&pn.test(u)?null:{script:u,start:o,end:s,quote:r}}var mn=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function gn(e){return q(e).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=Ue(n.text);return r!==""&&!mn.has(r)&&!ue.test(r)}).length>1}function hn(e,t,n,r,o){if(n>=Fe)return null;let s=De(e);if(!s)return null;let{script:i,start:u,end:c,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,u)}${x}${e.slice(c)}`,h=gn(i);if(o)for(let w of h?[e,...f]:f)o(w);return h?`${t} ${m}`:m}var Pe=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,kn=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function _n(e,t){let n=K(t);return n==="tail"||n==="journalctl"?Pe.test(e):n==="stern"?!0:kn.has(n)?/\blogs?\b/.test(e)&&Pe.test(e):!1}var ue=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,bn=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,Sn=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function K(e){let t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function Me(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 He(e){let t=Me(e);if(!t)return!0;for(let n=0;n<e.length;n++)if(t[n]&&e[n]===">")return!0;return!1}function q(e){let t=Me(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=(u,c)=>{s(),n.push({kind:"sep",text:u}),o+=c};for(;o<e.length;){let u=e[o],c=e[o+1];if(t[o]){if(u===">"&&c==="|"){r+=">|",o+=2;continue}if(u==="&"&&c==="&"){i("&&",2);continue}if(u==="&"&&c!==">"){let l=r.replace(/\s+$/,""),f=l[l.length-1];if(f!==">"&&f!=="<"&&f!=="&"){i("&",1);continue}}if(u==="|"&&c==="|"){i("||",2);continue}if(u==="|"&&c==="&"){i("|&",2);continue}if(u===";"&&c===";"){let l=e[o+2]==="&";i(l?";;&":";;",l?3:2);continue}if(u===";"||u===`
9
- `||u==="|"){i(u,1);continue}}r+=u,o+=1}return s(),n}function Ue(e){return e.trim().split(/\s+/)[0]??""}function _(e,t=process.platform){try{let n=je(on(import.meta.url)),r=t==="win32",o=e&&e!=="claude-code"&&e!=="codex"&&!r?`TOKMIZER_HOST=${e} `:"";if(r&&(!e||e==="claude-code")){let u=a(n,"..","bin","tkr-exec.exe");if(D(u))return se(u,t)?`'${u.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let s=a(n,"..","bin","tkr-exec");if(!r&&D(s))return se(s,t)?`${o}'${s.replace(/'/g,"'\\''")}'`:null;if(B()){let u=r?process.execPath.replace(/\\/g,"/"):process.execPath;return`${o}'${u.replace(/'/g,"'\\''")}' exec`}let i=a(n,"..","bin","tkr-exec.js");return D(i)?`${o}node '${i.replace(/'/g,"'\\''")}'`:null}catch{return null}}function ze(e,t="tkr-exec",n=()=>!0,r){return Je(e,t,0,n,r)}function Je(e,t,n,r,o){if(e.includes("<<")||Sn.test(e))return e;let s=q(e),i=[];for(let u=0;u<s.length;u++){let c=s[u];if(c.kind==="sep"||c.unsafe){i.push(c.text);continue}let l=c.text.trim();if(!l){i.push(c.text);continue}let f=Ue(l),d=s[u+1],x=d?.kind==="sep"&&(d.text==="|"||d.text==="|&"),m=d?.kind==="sep"&&d.text==="&",h=!x&&!m&&!He(c.text)&&!c.text.includes("<(")&&!c.text.includes(">(")?hn(l,t,n,r,o):null;if(h!==null){i.push(`${c.text.match(/^\s*/)?.[0]??""}${h}${c.text.match(/\s*$/)?.[0]??""}`);continue}if(l===t||l.startsWith(t)&&/^\s/.test(l.slice(t.length))||un.has(f)||cn.has(f)||(Te.has(f)||Te.has(K(f)))&&!fn(l)||ue.test(f)||f.startsWith("(")||f.startsWith("#")||f.startsWith("<")||f.startsWith(">")||bn.test(l)||_n(l,f)||f.endsWith(")")||x||m||He(c.text)||c.text.includes("<(")||c.text.includes(">(")||f==="node"&&l.includes("tkr-exec.js")||!r(f)){i.push(c.text);continue}let w=c.text.match(/^\s*/)?.[0]??"",b=c.text.match(/\s*$/)?.[0]??"";o?.(l),i.push(`${w}${t} ${l}${b}`)}return i.join("")}var wn=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),yn=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"]),xn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),$n={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/},G=["test","run test","run build","run lint","run typecheck"],An={npm:new Set(G),pnpm:new Set([...G,"build","lint","typecheck"]),yarn:new Set([...G,"build","lint","typecheck"]),bun:new Set(G),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"])},En=new Set(["pytest","tsc","vitest","jest","eslint","mypy"]);function Be(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 q(e)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<Fe?De(r.text.trim()):null;if(o){if(!Be(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=>ue.test(l)))return!1;let i=K(s[0]);if(i!==s[0])return!1;let u=$n[i];if(u&&s.slice(1).some(l=>u.test(l)))return!1;if((i==="git"?xn.has(s[1]??""):yn.has(i))||t&&En.has(i))continue;let c=t?An[i]:void 0;if(!(c&&(c.has(s[1]??"")||s[1]==="run"&&c.has(`run ${s[2]??""}`))))return!1}return!0}function ce(e,t,n=_(t),r=k,o=Y(),s=process.env.PATH,i=le){if(!g(e)||e.tool_name!=="Bash"||t==="claude-code"&&vn(i()))return null;let u=e.tool_input;if(!g(u)||u.run_in_background)return null;let c=u.command;if(typeof c!="string"||!c||t==="codex"&&Object.keys(u).some(w=>!wn.has(w)))return null;let l=typeof e.cwd=="string"&&e.cwd?e.cwd:u.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=Ye(c,{host:t,sessionId:d,cwd:f,claudeDirs:o,pathEnv:s,permissionMode:x},n,r);if(!m)return null;let h={...u,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 Rn=/(?:^|\s)--(?:disallowedTools|disallowed-tools|settings|setting-sources)(?:[=\s]|$)/;function le(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=rn("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 vn(e){return e===null||Rn.test(e)}function On(e,t){if(!D(e))return"missing";try{let n=Z(e,"utf8");return JSON.parse(t?We(n):n)}catch{return"unreadable"}}function We(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]!==`
5
+ `:"",{mode:384}),Ct(s,e)}catch{}}var Lt="usage.jsonl";var Ie=2*1024*1024;function Dt(){return Ht(E(),Lt)}function y(e,t,n=Dt()){try{let r=Nt(n);It(r)||Pt(r,{recursive:!0,mode:448});let o=e.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";vt(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${t?1:0}}
6
+ `,{mode:384}),Rt(n,384),Pe(n,Ie,Ie/2)}catch{}}import{rmSync as jt,statSync as Ft}from"node:fs";import{join as Mt}from"node:path";function Ne(){return Mt(E(),"fail-open")}var Ut=24*36e5;function A(e=Date.now()){try{if(e-Ft(Ne()).mtimeMs<Ut)return!0;jt(Ne(),{force:!0})}catch{}return!1}import{spawnSync as En}from"node:child_process";import{existsSync as W,readFileSync as G,readdirSync as re}from"node:fs";import{homedir as v}from"node:os";import{fileURLToPath as On}from"node:url";import{dirname as et,join as p,resolve as vn}from"node:path";function zt(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().length+1]}function Jt(e,t,n){let r=e.split(/\r?\n/),o="",i=(Math.log10(t+1)|0)+1;for(let s=t-1;s<=t+1;s++){let l=r[s-1];l&&(o+=s.toString().padEnd(i," "),o+=": ",o+=l,o+=`
7
+ `,s===t&&(o+=" ".repeat(i+n+2),o+=`^
8
+ `))}return o}var f=class e extends Error{line;column;codeblock;constructor(t,n){let[r,o]=zt(n.toml,n.ptr),i=Jt(n.toml,r,o);super(`Invalid TOML document: ${t}
9
+
10
+ ${i}`,n),this.line=r,this.column=o,this.codeblock=i}static x(t,n,r){throw new e(t,{toml:n.s,ptr:r??n.p})}};function Y(e){let t=e.p,n=e.s.charCodeAt(e.p++),r=n,o=n===39,i=n===e.s.charCodeAt(e.p)&&n===e.s.charCodeAt(e.p+1);i&&((n=e.s.charCodeAt(e.p+=2))===10?e.p++:n===13&&e.s.charCodeAt(e.p+1)===10&&(e.p+=2));let s="",l=e.p,u=0;for(;e.p<e.s.length;e.p++)if(n=e.s.charCodeAt(e.p),i&&(n===10||n===13&&e.s.charCodeAt(e.p+1)===10))u=u&&3;else if(n<32&&n!==9||n===127)f.x("control characters are not allowed in strings",e);else if((!u||u===3)&&n===r&&(!i||e.s.charCodeAt(e.p+1)===r&&e.s.charCodeAt(e.p+2)===r)){if(i&&(e.s.charCodeAt(e.p+3)===r&&e.p++,e.s.charCodeAt(e.p+3)===r&&e.p++),!u){let a=e.s.slice(l,e.p);s=s?s+a:a}return e.p+=i?3:1,s}else if(!u)!o&&n===92&&(s+=e.s.slice(l,l=e.p),u=1);else if(u===1)if(n===120||n===117||n===85){let a=e.p++-1,c=0,d=n===120?2:n===117?4:8;for(let _=0;_<d;_++,e.p++){let m=e.s.charCodeAt(e.p),h=m>=48&&m<=57?m-48:m>=65&&m<=70?m-65+10:m>=97&&m<=102?m-97+10:-1;h<0&&f.x("invalid non-hex character in unicode escape",e),c=c<<4|h}(c<0||c>1114111||c>=55296&&c<=57343)&&f.x("invalid unicode escape",e,a),s+=String.fromCodePoint(c),l=e.p--,u=0}else i&&(n===32||n===9)?u=2:(n===98?s+="\b":n===116?s+=" ":n===110?s+=`
11
+ `:n===102?s+="\f":n===114?s+="\r":n===101?s+="\x1B":n===34?s+='"':n===92?s+="\\":f.x("unrecognised escape sequence",e),l=e.p+1,u=0);else n!==32&&n!==9&&(u===2&&f.x("invalid escape: only line-ending whitespace may be escaped",e,l),u=!o&&n===92?1:0,l=e.p);f.x("unfinished string",e,t)}var Bt=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,U=class e extends Date{#t=!1;#n=!1;#e=null;constructor(t,n,r){let o=!0,i=!0,s="Z",l;if(typeof t=="string")if(n)e:{if(n<3){if(+t.slice(11,13)>23){t="";break e}n===2?(s=null,t+="Z"):(l=t.charCodeAt(t.length-1))!==90&&l!==122&&(s=t.slice(t.length-6)),r&&(t=t.slice(0,10)+"T"+t.slice(11))}else n===4&&(t=+t.slice(0,2)>23?"":`0000-01-01T${t}Z`);o=n!==4,i=n!==3}else{let u=t.match(Bt);u?(u[1]||(o=!1,t=`0000-01-01T${t}`),i=!!u[2],i&&t[10]===" "&&(t=t.replace(" ","T")),u[2]&&+u[2]>23?t="":(s=u[3]||null,!s&&i&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=o,this.#n=i,this.#e=s)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z"||this.#e==="z")return t;let n=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return n=this.#e[0]==="-"?n:-n,new Date(this.getTime()-n*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,n="Z"){let r=new e(t);return r.#e=n,r}static wrapAsLocalDateTime(t){let n=new e(t);return n.#e=null,n}static wrapAsLocalDate(t){let n=new e(t);return n.#n=!1,n.#e=null,n}static wrapAsLocalTime(t){let n=new e(t);return n.#t=!1,n.#e=null,n}};function b(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+t}function pe(e,t){return e===32||e===9||e===10||e===13||t&&(e===t||e===44)||e===35}function J(e,t){let n=e.p,r=e.s.charCodeAt(e.p);if(r===91||r===123){e.d--||f.x("document contains excessively nested structures. aborting.",e);let o=r===91?De(e):Le(e);return e.d++,o}return r===34||r===39?Y(e):r===116?((e.s.charCodeAt(++e.p)!==114||e.s.charCodeAt(++e.p)!==117||e.s.charCodeAt(++e.p)!==101)&&f.x("invalid value",e,n),e.p++,!0):r===102?((e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==108||e.s.charCodeAt(++e.p)!==115||e.s.charCodeAt(++e.p)!==101)&&f.x("invalid value",e,n),e.p++,!1):r===43||r===45?X(e,e.p,e.s.charCodeAt(++e.p),44-r,t):e.s.charCodeAt(e.p+4)===45&&e.s.charCodeAt(e.p+7)===45?Wt(e,r,t):e.s.charCodeAt(e.p+2)===58?Gt(e,r,t):X(e,e.p,r,0,t)}function X(e,t,n,r,o){let i=n,s=0,l=!1;if(i===105)return(e.s.charCodeAt(++e.p)!==110||e.s.charCodeAt(++e.p)!==102)&&f.x("invalid value",e,t),e.p++,(r||1)/0;if(i===110)return(e.s.charCodeAt(++e.p)!==97||e.s.charCodeAt(++e.p)!==110)&&f.x("invalid value",e,t),e.p++,NaN;if(i===48){if(++e.p>=e.s.length||pe(i=e.s.charCodeAt(e.p),o))return e.bi===!0?0n:0;if(!r){if(i===120)return de(e,t,16,o);if(i===98)return de(e,t,2,o);if(i===111)return de(e,t,8,o)}i===46?s=2:i===101||i===69?s=4:f.x("illegal leading zero",e,t)}else b(i)||f.x("invalid value",e,t);for(;++e.p<e.s.length&&(i=e.s.charCodeAt(e.p),!pe(i,o));)s||(s=1),i===95?(s&1||f.x("illegal underscore",e),s+=11,l=!0):s===1&&i===46?s=2:(s===1||s===3)&&(i===101||i===69)?s=4:s===4&&(i===43||i===45)||(b(i)?s>9?s-=11:s&1||s++:f.x("illegal character in numeric literal",e));if(!s){let a=(n-48)*(r||1);return e.bi===!0?BigInt(a):a}s&1||f.x("unfinished numeric value",e,t);let u=e.s.slice(t,e.p);return l&&(u=u.replaceAll("_","")),s>1?parseFloat(u):He(e,u,10,t)}function de(e,t,n,r){let o,i=1;for(;++e.p<e.s.length&&(o=e.s.charCodeAt(e.p),!pe(o,r));)o===95?(i&1&&f.x("illegal underscore",e),i=3):b(o,n)?i&1&&i--:f.x("illegal character in numeric literal",e);i&1&&f.x("unfinished numeric value",e);let s=e.s.slice(t+2,e.p);return i&&(s=s.replaceAll("_","")),He(e,s,n,t)}function He(e,t,n,r){if(e.bi!==!0)e:{let o=parseInt(t,n);if(!Number.isSafeInteger(o)){if(e.bi)break e;f.x("integer value cannot be represented losslessly",e,r)}return o}return BigInt(n===10?t:(n===2?"0b":n===8?"0o":"0x")+t)}function Wt(e,t,n){let r=e.p++,o;if(!b(t)||!b(e.s.charCodeAt(e.p++))||!b(e.s.charCodeAt(e.p++))||!b(e.s.charCodeAt(e.p++)))return X(e,e.p=r,t,0,n);if(e.p+=5,b(e.s.charCodeAt(e.p++))||f.x("invalid date-time: date part is malformed",e,r),e.p>=e.s.length||((t=e.s.charCodeAt(e.p))!==32||(o=!0,!b(e.s.charCodeAt(e.p+1))))&&t!==84&&t!==116){let s=e.s.slice(r,e.p);return z(e,s,3,!1,r)}if(e.s.charCodeAt(e.p+=3)!==58&&f.x("invalid date-time: time part is malformed",e,r),e.s.charCodeAt(e.p+=3)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;b(e.s.charCodeAt(++e.p)););if(t=e.s.charCodeAt(e.p)){if(t===90||t===122){let s=e.s.slice(r,++e.p);return z(e,s,1,o,r,"[+00:00]")}if(t===43||t===45){let s=e.s.slice(r,e.p+=6);return z(e,s,1,o,r,!e.ld&&"["+e.s.slice(e.p-6,e.p)+"]")}}let i=e.s.slice(r,e.p);return z(e,i,2,o,r)}function Gt(e,t,n){let r=e.p;if(!b(t)||!b(e.s.charCodeAt(++e.p)))return X(e,--e.p,t,0,n);if(e.s.charCodeAt(e.p+=4)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;b(e.s.charCodeAt(++e.p)););let o=e.s.slice(r,e.p);return z(e,o,4,!1,r)}function z(e,t,n,r,o,i){if(e.ld){let s=new U(t,n,r);return s.isValid()||f.x("invalid date",e,o),s}try{switch(i&&(t+=i),n){case 1:return Temporal.ZonedDateTime.from(t);case 2:return Temporal.PlainDateTime.from(t);case 3:return Temporal.PlainDate.from(t);case 4:return Temporal.PlainTime.from(t)}}catch(s){f.x(s instanceof Error?s.message:""+s,e,o)}}function Zt(e){for(;e.p<e.s.length;e.p++){let t=e.s.charCodeAt(e.p);if(t===10)break;if(t===13&&e.s.charCodeAt(e.p+1)===10){e.p++;break}(t<32&&t!==9||t===127)&&f.x("control characters are not allowed in comments",e)}}function x(e,t,n){let r;for(;e.p<e.s.length;){for(;e.p<e.s.length&&((r=e.s.charCodeAt(e.p))===32||r===9||!t&&(r===10||r===13&&e.s.charCodeAt(e.p+1)===10));)e.p++;if(n||r!==35)break;Zt(e)}}function Q(e,t=61){let n,r=0,o=[],i,s=e.s.charCodeAt(n=e.p);do{if(s===t)return r||f.x("unexpected end of key",e),r===1&&o.push(e.s.slice(i,e.p)),e.p++,o;s===46?(r||f.x("illegal empty bare key",e),r===1&&o.push(e.s.slice(i,e.p)),r=0):!r&&(s===34||s===39)?(s===e.s.charCodeAt(e.p+1)&&s===e.s.charCodeAt(e.p+2)&&f.x("illegal quoted key: multiline strings are not allowed",e),o.push(Y(e)),r=2,e.p--):s===32||s===9?r===1&&(o.push(e.s.slice(i,e.p)),r=2):r===2||s<48&&s!==45||s>57&&s<65||s>90&&s<97&&s!==95||s>122?f.x("illegal character in key",e):r||(r=1,i=e.p)}while(s=e.s.charCodeAt(++e.p));f.x("incomplete key-value: cannot find end of key",e,n)}function Le(e){let t=e.p++,n=Object.create(null),r=new Set,o;for(;e.p<e.s.length;){if(x(e),(o=e.s.charCodeAt(e.p))===125)return e.p++,n;let i,s=n,l=!1,u=e.p,a=Q(e);for(let d=0;d<a.length;d++){d&&(s=l?s[i]:s[i]=Object.create(null)),i=a[d],(l=Object.hasOwn(s,i))&&(typeof s[i]!="object"||r.has(s[i]))&&f.x("trying to redefine an already defined value",e,u);let _=i==="__proto__";if(e.uk&&(_||i==="constructor")){s=e.uk!==1&&f.x("document contains an unsafe property",e,u);break}!l&&_&&Object.defineProperty(s,i,{enumerable:!0,configurable:!0,writable:!0})}l&&f.x("trying to redefine an already defined value",e,u),x(e,!0,!0);let c=J(e,125);if(s&&typeof(s[i]=c)=="object"&&r.add(c),x(e),(o=e.s.charCodeAt(e.p++))===125)return n;o!==44&&f.x("expected comma or end of structure",e,e.p-1)}f.x("unfinished table",e,t)}function De(e){let t=e.p++,n=[],r;for(;e.p<e.s.length;){if(x(e),(r=e.s.charCodeAt(e.p))===93)return e.p++,n;if(n.push(J(e,93)),x(e),(r=e.s.charCodeAt(e.p++))===93)return n;r!==44&&f.x("expected comma or end of structure",e,e.p-1)}f.x("unfinished array",e,t)}function je(e,t,n,r,o){let i=n,s=r,l,u=!1,a;for(let c=0;c<t.length;c++){if(c){if(i=u?i[l]:i[l]=Object.create(null),s=(a=s[l]).c,o===0&&(a.t===1||a.t===2))return null;if(a.t===2){let d=i.length-1;i=i[d],s=s[d].c}}if(l=t[c],(u=Object.hasOwn(i,l))&&s[l]?.t===0&&s[l]?.d)return null;if(!u){let d=l==="__proto__";if(e.uk&&(d||l==="constructor"))return!1;d&&(Object.defineProperty(i,l,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(s,l,{enumerable:!0,configurable:!0,writable:!0})),s[l]={t:c<t.length-1&&o===2?3:o,d:!1,i:0,c:Object.create(null)}}}if(a=s[l],a.t!==o&&!(o===1&&a.t===3)||(o===2&&(a.d||(a.d=!0,i[l]=[]),i[l].push(i=Object.create(null)),a.c[a.i++]=a={t:1,d:!1,i:0,c:Object.create(null)}),a.d))return null;if(a.d=!0,o===1)i=u?i[l]:i[l]=Object.create(null);else if(o===0&&u)return null;return[l,i,a.c]}function Fe(e,t,n){(t===null||e.uk===2)&&f.x(t===null?"trying to redefine an already defined table or value":"document contains an unsafe property",e,n)}function me(e,t={}){let n={s:e,p:0,d:t.maxDepth??1e3,bi:t.integersAsBigInt??!1,ld:t.useLegacyDate??!0,uk:t.unsafeKeyBehaviour==="throw"?2:t.unsafeKeyBehaviour==="drop"?1:0},r=Object.create(null),o=Object.create(null),i,s=!1,l=r,u=o;for(e.charCodeAt(0)===65279&&n.p++,x(n);n.p<e.length;){if(e.charCodeAt(n.p)===91){let a=e.charCodeAt(++n.p)===91;i=n.p+=+a,s=!1;let c=Q(n,93);a&&(e.charCodeAt(n.p)!==93&&f.x("expected end of table array declaration",n),n.p++);let d=je(n,c,r,o,a?2:1);d?(u=d[2],l=d[1]):(Fe(n,d,i),s=!0)}else{i=n.p;let a=Q(n),c=je(n,a,l,u,0);!c&&!s&&Fe(n,c,i),x(n,!0,!0);let d=J(n,void 0);c&&!s&&(c[1][c[0]]=d)}x(n,!0),n.p<e.length&&(i=e.charCodeAt(n.p))!==10&&(i!==13||e.charCodeAt(n.p+1)!==10)&&f.x("each key-value declaration must be followed by an end-of-line",n),x(n)}return r}var zo=!!"".isWellFormed;function ee(){return!1}import{execFileSync as gn}from"node:child_process";import{mkdirSync as hn,readFileSync as We,renameSync as kn,statSync as _n,writeFileSync as bn}from"node:fs";import{join as Ge}from"node:path";import{closeSync as Vt,openSync as qt,readSync as Kt,readdirSync as Yt,readFileSync as Xt,statSync as ze}from"node:fs";import{homedir as Qt}from"node:os";import{isAbsolute as en,join as te,resolve as tn}from"node:path";var nn=/^[A-Za-z0-9._+@%:,/-]+$/,rn=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),on=32,sn=4*1024*1024;function he(e){let t;try{t=qt(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&&Vt(t)}}function B(e,t=process.platform){try{let n=ze(e);if(!n.isFile())return!1;if(t==="win32")return!0;if((n.mode&73)===0)return!1;let r=he(e);return r==="#!"||r!==null&&rn.has(r)}catch{return!1}}function ln(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 N(e,t,n,r=process.platform){if(!nn.test(e))return!1;let o=r==="win32";if(e.includes("/"))return B(tn(t??process.cwd(),e),r);if(!n)return!1;let i=o?ln(e):[e];for(let s of n.split(o?";":":"))if(!(!s||!en(s))){for(let l of i)if(B(te(s,l),r))return!0}return!1}var un=/^eval \$'([^\s'()=]+) \(\) /,an=/^([^\s'"()=]+) \(\) \{$/,cn=/^alias -- ([^\s=]+)=(.*)$/,fn=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,dn=/^export PATH=(.*)$/,pn=/^(?:--colou?r(?:=\S+)?|-G)$/;function Ue(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 mn(e,t){let n="";for(let r of e.split(`
12
+ `)){let o=dn.exec(r);if(o&&n!=="# Functions"){let i=Ue(o[1].trim());/[$`\\]/.test(i)||t.paths.push(i);continue}if(r.startsWith("# ")&&(n!=="# Functions"||fn.test(r))){n=r;continue}if(n==="# Functions"){let i=un.exec(r)??an.exec(r);i&&t.functions.add(i[1])}else if(n==="# Aliases"){let i=cn.exec(r);i&&t.aliases.set(i[1],Ue(i[2].trim()))}}}function ge(e){return e?.code==="ENOENT"}function Je(e){let t={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=te(e||te(Qt(),".claude"),"shell-snapshots"),r=[];try{for(let o of Yt(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let i=te(n,o);try{let s=ze(i);s.isFile()&&r.push({path:i,mtime:s.mtimeMs,size:s.size})}catch(s){ge(s)||(t.uncertain=!0)}}}catch(o){return ge(o)||(t.uncertain=!0),t}r=r.sort((o,i)=>i.mtime-o.mtime).slice(0,on);for(let o of r)try{if(o.size>sn)throw new Error("snapshot too large");mn(Xt(o.path,"utf8"),t)}catch(i){ge(i)||(t.uncertain=!0)}return t}function Be(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=>pn.test(o))}var yn="exec-probe.json",wn=6e4;function Sn(){return Ge(E(),yn)}function xn(e){try{let t=JSON.parse(We(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 An(e,t){try{hn(Ge(e,".."),{recursive:!0,mode:448});let n=`${e}.${process.pid}.tmp`;bn(n,JSON.stringify(t),{mode:384}),kn(n,e)}catch{}}function $n(e){try{return gn(e,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function Tn(e,t){try{let r=We(e,"utf8").split(`
13
+ `,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?N(r[1]??"",void 0,t):B(o)}catch{return!1}}function Cn(e,t,n){try{let r=_n(e);return[e,r.size,r.mtimeMs,r.ino,r.mode,t?n??"":""].join("|")}catch{return`${e}|missing`}}function ke(e,t=process.platform,n=process.env.PATH,r=Sn(),o=Date.now()){let i=t!=="win32"&&he(e)==="#!",s=Cn(e,i,n),l=xn(r);if(l?.key===s&&(l.ok||o-l.at<wn))return l.ok;let u=B(e,t)&&(i?Tn(e,n):$n(e));return An(r,{key:s,ok:u,at:o,skipped:(l?.skipped??0)+(u?0:1)}),u}var Rn=new Set(["tkr","tkr-exec","token","claude","cd","export","source","echo","mkdir","rm","mv","cp","chmod","ln","true","false",":","test","[","exit","return","nohup","sudo","doas","env"]),Pn=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"]),Ze=new Set(["sh","bash","zsh","dash","ksh","fish","python","python3","python2","node","ruby","perl","php","awk","sed","deno","bun"]),Ve="(?:dev|start|serve|watch|preview)",In=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${Ve}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${Ve}(?:\\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)`),Nn=/(?:^|\s)--watch(?:\s|=|$)/;function Hn(e){return In.test(e)&&!Nn.test(e)}var Ln=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,Dn=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,tt=3;function nt(e){let t=Ln.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,i=e.indexOf(r,o);if(i<=o)return null;let s=e.slice(i+1);if(s&&!/^\s/.test(s))return null;let l=e.slice(o,i);return r==='"'&&/[$`\\!]/.test(l)||n&&Dn.test(l)?null:{script:l,start:o,end:i,quote:r}}var jn=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function Fn(e){return ie(e).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=ot(n.text);return r!==""&&!jn.has(r)&&!be.test(r)}).length>1}function Mn(e,t,n,r,o){if(n>=tt)return null;let i=nt(e);if(!i)return null;let{script:s,start:l,end:u,quote:a}=i,c=[],d=st(s,t,n+1,r,$=>c.push($));if(d===s||a==='"'&&/["$`]/.test(d))return null;let _=a==="'"?d.replace(/'/g,"'\\''"):d,m=`${e.slice(0,l)}${_}${e.slice(u)}`,h=Fn(s);if(o)for(let $ of h?[e,...c]:c)o($);return h?`${t} ${m}`:m}var qe=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,Un=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function zn(e,t){let n=oe(t);return n==="tail"||n==="journalctl"?qe.test(e):n==="stern"?!0:Un.has(n)?/\blogs?\b/.test(e)&&qe.test(e):!1}var be=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,Jn=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,Bn=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function oe(e){let t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function rt(e){let t=new Array(e.length).fill(!1),n=[],r=0;for(;r<e.length;){let o=e[r],i=e[r+1],s=n[n.length-1];if(s==="'"){o==="'"&&n.pop(),r+=1;continue}if(o==="\\"){if(i===void 0)return null;r+=2;continue}if(s==="$'"){o==="'"&&n.pop(),r+=1;continue}if(o==="$"&&(i==="("||i==="{")){n.push(i==="("?")":"}"),r+=2;continue}if(o==="`"){s==="`"?n.pop():n.push("`"),r+=1;continue}if(s==='"'){o==='"'&&n.pop(),r+=1;continue}if(o==="$"&&i==="'"){n.push("$'"),r+=2;continue}if(o==="'"||o==='"'){n.push(o),r+=1;continue}if(o==="("||o==="{"&&s==="}"){n.push(o==="("?")":"}"),r+=1;continue}if(o===s){n.pop(),r+=1;continue}if(o===")"&&s===void 0)return null;t[r]=s===void 0,r+=1}return n.length===0?t:null}function Ke(e){let t=rt(e);if(!t)return!0;for(let n=0;n<e.length;n++)if(t[n]&&e[n]===">")return!0;return!1}function ie(e){let t=rt(e);if(!t)return[{kind:"cmd",text:e,unsafe:!0}];let n=[],r="",o=0,i=()=>{r.length>0&&(n.push({kind:"cmd",text:r}),r="")},s=(l,u)=>{i(),n.push({kind:"sep",text:l}),o+=u};for(;o<e.length;){let l=e[o],u=e[o+1];if(t[o]){if(l===">"&&u==="|"){r+=">|",o+=2;continue}if(l==="&"&&u==="&"){s("&&",2);continue}if(l==="&"&&u!==">"){let a=r.replace(/\s+$/,""),c=a[a.length-1];if(c!==">"&&c!=="<"&&c!=="&"){s("&",1);continue}}if(l==="|"&&u==="|"){s("||",2);continue}if(l==="|"&&u==="&"){s("|&",2);continue}if(l===";"&&u===";"){let a=e[o+2]==="&";s(a?";;&":";;",a?3:2);continue}if(l===";"||l===`
14
+ `||l==="|"){s(l,1);continue}}r+=l,o+=1}return i(),n}function ot(e){return e.trim().split(/\s+/)[0]??""}function w(e,t=process.platform){try{let n=et(On(import.meta.url)),r=t==="win32",o=e&&e!=="claude-code"&&e!=="codex"&&!r?`TOKMIZER_HOST=${e} `:"";if(r&&(!e||e==="claude-code")){let l=p(n,"..","bin","tkr-exec.exe");if(W(l))return ke(l,t)?`'${l.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let i=p(n,"..","bin","tkr-exec");if(!r&&W(i))return ke(i,t)?`${o}'${i.replace(/'/g,"'\\''")}'`:null;if(ee()){let l=r?process.execPath.replace(/\\/g,"/"):process.execPath;return`${o}'${l.replace(/'/g,"'\\''")}' exec`}let s=p(n,"..","bin","tkr-exec.js");return W(s)?`${o}node '${s.replace(/'/g,"'\\''")}'`:null}catch{return null}}function it(e,t="tkr-exec",n=()=>!0,r){return st(e,t,0,n,r)}function st(e,t,n,r,o){if(e.includes("<<")||Bn.test(e))return e;let i=ie(e),s=[];for(let l=0;l<i.length;l++){let u=i[l];if(u.kind==="sep"||u.unsafe){s.push(u.text);continue}let a=u.text.trim();if(!a){s.push(u.text);continue}let c=ot(a),d=i[l+1],_=d?.kind==="sep"&&(d.text==="|"||d.text==="|&"),m=d?.kind==="sep"&&d.text==="&",h=!_&&!m&&!Ke(u.text)&&!u.text.includes("<(")&&!u.text.includes(">(")?Mn(a,t,n,r,o):null;if(h!==null){s.push(`${u.text.match(/^\s*/)?.[0]??""}${h}${u.text.match(/\s*$/)?.[0]??""}`);continue}if(a===t||a.startsWith(t)&&/^\s/.test(a.slice(t.length))||Rn.has(c)||Pn.has(c)||(Ze.has(c)||Ze.has(oe(c)))&&!Hn(a)||be.test(c)||c.startsWith("(")||c.startsWith("#")||c.startsWith("<")||c.startsWith(">")||Jn.test(a)||zn(a,c)||c.endsWith(")")||_||m||Ke(u.text)||u.text.includes("<(")||u.text.includes(">(")||c==="node"&&a.includes("tkr-exec.js")||!r(c)){s.push(u.text);continue}let $=u.text.match(/^\s*/)?.[0]??"",S=u.text.match(/\s*$/)?.[0]??"";o?.(a),s.push(`${$}${t} ${a}${S}`)}return s.join("")}var Wn=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),Gn=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"]),Zn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),Vn={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/},ne=["test","run test","run build","run lint","run typecheck"],qn={npm:new Set(ne),pnpm:new Set([...ne,"build","lint","typecheck"]),yarn:new Set([...ne,"build","lint","typecheck"]),bun:new Set(ne),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 lt(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 ie(e)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<tt?nt(r.text.trim()):null;if(o){if(!lt(o.script,t,n+1))return!1;continue}let i=r.text.trim().split(/\s+/).filter(Boolean).map(a=>a.replace(/['"\\]/g,""));if(i.length===0)continue;if(i.some(a=>be.test(a)))return!1;let s=oe(i[0]);if(s!==i[0])return!1;let l=Vn[s];if(l&&i.slice(1).some(a=>l.test(a)))return!1;if((s==="git"?Zn.has(i[1]??""):Gn.has(s))||t&&Kn.has(s))continue;let u=t?qn[s]:void 0;if(!(u&&(u.has(i[1]??"")||i[1]==="run"&&u.has(`run ${i[2]??""}`))))return!1}return!0}function ye(e,t,n=w(t),r=y,o=se(),i=process.env.PATH,s=we){if(!g(e)||e.tool_name!=="Bash"||t==="claude-code"&&Xn(s()))return null;let l=e.tool_input;if(!g(l)||l.run_in_background)return null;let u=l.command;if(typeof u!="string"||!u||t==="codex"&&Object.keys(l).some($=>!Wn.has($)))return null;let a=typeof e.cwd=="string"&&e.cwd?e.cwd:l.workdir,c=typeof a=="string"&&a?a:void 0,d=typeof e.session_id=="string"&&e.session_id?e.session_id:"unknown",_=typeof e.permission_mode=="string"?e.permission_mode:void 0,m=gt(u,{host:t,sessionId:d,cwd:c,claudeDirs:o,pathEnv:i,permissionMode:_},n,r);if(!m)return null;let h={...l,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 Yn=/(?:^|\s)--(?:disallowedTools|disallowed-tools|settings|setting-sources)(?:[=\s]|$)/;function we(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=En("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 Xn(e){return e===null||Yn.test(e)}function Qn(e,t){if(!W(e))return"missing";try{let n=G(e,"utf8");return JSON.parse(t?ut(n):n)}catch{return"unreadable"}}function ut(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]!==`
10
15
  `;)r++;t+=`
11
- `}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=sn(e);for(;;){t.push(n);let r=je(n);if(r===n)return t;n=r}}function Tn(){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 V(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=On(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 Cn(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=[[Tn(),"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"]],u=[],c={managed:[],loaded:[],loadedLocal:[],project:[],extra:[]},l={managed:!1,loaded:!1,loadedLocal:!1,project:!1,extra:!1},f=!1,d="managed",x=(b,ne)=>{let $=b.permissions;if(d==="managed"&&(b.allowManagedPermissionRulesOnly===!0||g($)&&$.allowManagedPermissionRulesOnly===!0)&&(f=!0),$===void 0)return!0;if(!g($))return!1;for(let pe of["deny","ask","allow"]){let me=M($[pe]);if(!me)return!1;for(let ge of me){let O=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(ge);if(O)if(pe!=="allow")ne.push(v((O[1]??"*").replace(/:\*$/," *")));else if(O[1]===void 0||O[1].trim()==="*")l[d]=!0;else{u.push(v(O[1].replace(/:\*$/," *")));let he=Kn(O[1]);he&&c[d].push({rule:ge.trim(),matches:he})}}}return!0},m=[];for(let[b,ne]of i){d=ne;let $=z(b,!1,x,!0);if($==="unreadable")return"unreadable";m.push(...$.matchers)}let h=l.managed||(l.loaded||l.loadedLocal)&&!f,w=[...c.managed,...f?[]:c.loaded];return{matchers:[...m,...h?[]:u],complete:!0,allow:u,allowsEverything:h,guards:m,trustedAllow:w}}function Pn(e){let t=[a(R(),".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 u=/^\s*Shell\s*(?:\(([\s\S]*)\))?\s*$/.exec(i);if(!u)continue;let c=u[1]??"*",l=c.indexOf(":");r.push(v(l===-1?`${c} *`:`${c.slice(0,l)} ${c.slice(l+1)}`))}return!0},!1)}function Hn(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var Ge=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function Nn(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=Ge.exec(s);i&&t.push(v(i[1]===void 0?"*":`${i[1]}*`))}}return!0}function Ne(e){try{return JSON.parse(e)}catch{return null}}function In(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]??Ne(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(t.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(t);return n?Ne(`"${n[1]}"`):null}if(t.startsWith("'")){let n=/^'([^']*)'/.exec(t);return n?n[1]:null}return t.replace(/\s*#.*$/,"")}function Ln(e,t){for(let n of e.split(/^\s*\[\[\s*rule\s*\]\]\s*$/m).slice(1)){let r={};for(let c of n.split(/\r?\n/)){if(/^\s*\[/.test(c))break;let l=/^\s*([A-Za-z_]+)\s*=\s*(.*)$/.exec(c);if(!l)continue;let f=In(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(c=>c==="*"||Ge.test(c)))continue;let i=r.commandPrefix===void 0?[]:[r.commandPrefix].flat(),u=[r.commandRegex,r.argsPattern].flat().filter(c=>typeof c=="string");if(i.length===0&&u.length===0){t.push(()=>!0);continue}for(let c of i)t.push(v(`${c}*`));for(let c of u){let l;try{l=new RegExp(c)}catch{return!1}t.push(f=>l.test(JSON.stringify({command:f}))||X(l,f))}}return!0}function Ie(e){try{return V(e).filter(t=>t.endsWith(".toml")).map(t=>a(e,t))}catch{return[]}}function jn(e){let t=Hn(),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"),...U(e).map(o=>a(o,".gemini","settings.json"))].filter(o=>!!o),r=z(n,!0,Nn,!1);if(r==="unreadable")return r;for(let o of[...Ie(a(R(),".gemini","policies")),...Ie(a(t,"policies"))]){let s;try{s=Z(o,"utf8")}catch{return"unreadable"}if(!Ln(s,r.matchers))return"unreadable"}return r}function ie(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(v(o.replace(/\?/g,"*")))}}return!0}function Le(e,t){if(e.permissions!==void 0||!ie(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||!ie(o.permission,t)))return!1}}return!0}function Fn(e){for(let t of e)for(let n of["agent","agents","mode","modes"]){let r;try{r=V(a(t,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(Z(a(t,n,o),"utf8")))return!0}catch{return!0}}return!1}function Dn(e){let t=a(process.env.XDG_CONFIG_HOME||a(R(),".config"),"opencode"),n=U(e),r=[t,...n.map(u=>a(u,".opencode"))];if(Fn(r))return"unreadable";let o=["opencode.json","opencode.jsonc","config.json"],s=[...o.map(u=>a(t,u)),process.env.OPENCODE_CONFIG,...n.flatMap(u=>[...o.slice(0,2).map(c=>a(u,c)),...o.slice(0,2).map(c=>a(u,".opencode",c))])].filter(u=>!!u),i=z(s,!0,Le,!0);if(i==="unreadable")return i;for(let u of[process.env.OPENCODE_CONFIG_CONTENT,process.env.OPENCODE_PERMISSION]){if(!u)continue;let c;try{c=JSON.parse(We(u))}catch{return"unreadable"}if(!(u===process.env.OPENCODE_PERMISSION?ie(c,i.matchers):g(c)&&Le(c,i.matchers)))return"unreadable"}return i}function Mn(){return z([a(R(),".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 u=i[1].trim();if(!u.startsWith("regex:")){t.push(v(u==="*"?"*":`${u} *`));continue}let c;try{c=new RegExp(u.slice(6))}catch{return!1}t.push(l=>X(c,l))}}return!0},!1)}function Un(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 zn(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(ae).join("|")})`)}let n=new RegExp(`^${t.join(" ")}(?= |$)`);return r=>X(n,r)}function Jn(e,t){let n=Un(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 c=n[o.i];if(!c||!/^[A-Za-z_]/.test(c)||n[o.i+1]!=="="||(o.i+=2,s[c]=Ze(n,o),s[c]===void 0&&(c==="pattern"||c==="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 u=zn(s.pattern);if(!u)return!1;i!=="allow"&&t.push(u)}return!0}function Bn(e){if(!D(e))return[];try{return V(e).filter(t=>t.endsWith(".rules")).sort().map(t=>a(e,t))}catch{return"unreadable"}}function Wn(e){let t=process.env.CODEX_HOME||a(R(),".codex"),n=[a(t,"rules"),...U(e).map(o=>a(o,".codex","rules"))],r=[];for(let o of[...new Set(n)]){let s=Bn(o);if(s==="unreadable")return"unreadable";for(let i of s){let u;try{u=Z(i,"utf8")}catch{return"unreadable"}if(!Jn(u,r))return"unreadable"}}return{matchers:r,complete:!1}}function g(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function ae(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Gn(e){let t=e.trim().replace(/\s+/g," "),n=t.endsWith(" *")&&t.length>2,r=(n?t.slice(0,-2):t).split("*").map(ae).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var Zn=512;function Vn(e){let t=e.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[t,t.map(K)]}function X(e,t){if(e.test(t)||e.test(t.trim().replace(/\s+/g," ")))return!0;for(let n of Vn(t)){if(n.length>Zn)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=Gn(e);return n=>X(t,n)}function Kn(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(`^${ae(r)}${n?"(?: [\\s\\S]*)?":""}$`);return s=>o.test(s)}var qn={"claude-code":Cn,cursor:Pn,"gemini-cli":jn,opencode:Dn,antigravity:Mn,codex:Wn},Yn=new Set(["codex"]),Ve=/(?:^|[\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 Xn(e,t,n){let r=qn[e];return r?r(t??process.cwd(),n):{matchers:[],complete:!1}}function Qn(e,t,n){return e==="unreadable"||Ve.test(t.replace(/['"\\]/g,""))||e.matchers.some(r=>r(t))?!1:e.complete||Be(t,!Yn.has(n))}var Ke=new Set(["default","acceptEdits","dontAsk"]);function qe(e,t){return t.host!=="claude-code"||t.permissionMode==="bypassPermissions"?!0:e!=="unreadable"&&e.allowsEverything===!0&&Ke.has(t.permissionMode??"")}function er(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??=Ee(t.configDir),!C(o,e.cwd,n)&&!r.paths.some(s=>C(o,e.cwd,s))?!1:o.includes("/")||!Re(o,r))}var tr=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function nr(e,t,n){return n.host!=="claude-code"||e==="unreadable"||qe(e,n)||!Ke.has(n.permissionMode??"")||!tr.test(t)||Ve.test(t.replace(/['"]/g,""))||(e.guards??[]).some(r=>r(t))?null:(e.trustedAllow??[]).find(r=>r.matches(t))?.rule??null}function Ye(e,t,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=t.claudeDirs??Y(),s=Xn(t.host,t.cwd,o),i=nr(s,e,t),u=i||Qn(s,e,t.host)?ze(e,n,er(t,o)):e;return u!==e&&s!=="unreadable"&&(i?(s.guards??[]).some(c=>c(u)):s.matchers.some(c=>c(u))||(s.allow??[]).some(c=>c(u)&&!c(e)))&&(u=e),r(t.sessionId,u!==e),u===e?null:i?{command:u,allowedBy:i}:qe(s,t)?{command:u}:null}function E(e,t,n,r){return Ye(e,t,n,r)?.command??null}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 rr(e){return p(e,"prompt_id")||p(e,"scratchpad_dir")?!0:J(e.effort)}function or(e){return p(e,"tool_use_id")?.startsWith("toolu_")===!0||/^claude/i.test(p(e,"model")??"")}var sr=new Set(["BeforeTool","AfterTool","BeforeAgent","AfterAgent","BeforeModel","AfterModel","BeforeToolSelection"]),ir=new Set(["preToolUse","postToolUse","beforeShellExecution","afterShellExecution","beforeSubmitPrompt","sessionStart","sessionEnd","stop"]),ur=new Set(["pre_tool","post_tool"]),cr=new Set(["before_tool_call","after_tool_call"]),lr=new Set(["runTerminalCommand","run_in_terminal"]),ar=[["codex",e=>p(e,"turn_id")!==null],["claude-code",rr],["cursor",e=>p(e,"cursor_version")!==null||p(e,"generation_id")!==null||p(e,"conversation_id")!==null||Array.isArray(e.workspace_roots)||ir.has(p(e,"hook_event_name")??"")],["gemini-cli",e=>sr.has(p(e,"hook_event_name")??"")],["qwen-code",e=>e.hook_event_name==="PreToolUse"&&e.tool_name==="run_shell_command"],["vibe",e=>ur.has(p(e,"hook_event_name")??"")],["antigravity",e=>J(e.toolCall)],["copilot",e=>p(e,"toolName")!==null&&"toolArgs"in e||lr.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&&!cr.has(p(e,"event"))]],fr=new Set(["codex","antigravity"]);function dr(e){return J(e)?ar.filter(([,t])=>t(e)).map(([t])=>t):[]}function Xe(e,t){if(!J(e))return null;let n=dr(e);return n.length>1?null:n.length===1?n[0]:or(e)&&fr.has(t)?"claude-code":t==="codex"?null:t}var fe=JSON.stringify({permission:"allow"});function Qe(e,t=_("cursor"),n=k){if(e.tool_name!=="Shell")return fe;let r=e.tool_input??{},o=r.command;if(typeof o!="string"||!o)return fe;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}}):fe}var Q="{}";function et(e,t=_("gemini-cli"),n=k){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},S()?null:t,n);return i?JSON.stringify({hookSpecificOutput:{tool_input:{command:i}}}):Q}function H(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}var ts=String.raw`(?:'(?:(?:[^']|'\\'')*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?'|"(?:[^"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?"|(?:[^\s'"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?)`;function N(e,t,n="unknown",r=_(t),o=k){return e?E(e,{host:t,sessionId:n},S()?null:r,o):null}var mr=new Set(["bash","file_system.bash"]),de=JSON.stringify({decision:"allow"});function tt(e,t=(n,r)=>N(n,"vibe",r)){if(!H(e)||e.hook_event_name!=="pre_tool"||typeof e.tool_name!="string"||!mr.has(e.tool_name))return"";let n=e.tool_input;if(!H(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 nt(e,t=(n,r)=>N(n,"antigravity",r)){if(!H(e)||!H(e.toolCall)||e.toolCall.name!=="run_command")return de;let n=e.toolCall.args;if(!H(n)||typeof n.CommandLine!="string"||!n.CommandLine)return de;let r=t(n.CommandLine,typeof e.conversationId=="string"?e.conversationId:"unknown");return r?JSON.stringify({decision:"allow",overwrite:{CommandLine:r}}):de}var y="{}",gr=new Set(["runTerminalCommand","run_in_terminal","Bash","bash"]),hr=["run_in_background","is_background","isBackground"];function ee(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function kr(e){let t=e.session_id??e.sessionId;return typeof t=="string"&&t?t:"unknown"}function _r(e,t){let n=e.cwd??t.cwd??t.workdir??t.working_directory;return typeof n=="string"&&n?n:void 0}function te(e,t,n,r,o){if(!ee(t)||hr.some(i=>t[i]===!0))return null;let s=t.command;return typeof s!="string"||!s?null:E(s,{host:e,sessionId:kr(n),cwd:_r(n,t)},S()?null:r,o)}function L(e,t){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...e,command:t}}})}function br(e){if(ee(e))return e;if(typeof e!="string")return null;try{let t=JSON.parse(e);return ee(t)?t:null}catch{return null}}function Sr(e,t,n){if(typeof e.tool_name=="string"){if(!gr.has(e.tool_name))return y;let s=e.tool_input,i=te("copilot",s,e,t,n);return i?L(s,i):y}if(e.toolName!=="bash")return y;let r=br(e.toolArgs),o=te("copilot",r,e,t,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):y}function I(e,t,n){return(r,o,s)=>{if(r.tool_name!==t)return y;let i=r.tool_input,u=te(e,i,r,o,s);return u?n(i,u):y}}var wr=new Set(["run_terminal_command","Bash","bash"]);function yr(e,t,n){let r=e.toolName??e.tool_name;if(typeof r!="string"||!wr.has(r))return y;let o=e.toolInput??e.tool_input,s=te("grok",o,e,t,n);return s?L(o,s):y}var xr={copilot:Sr,droid:I("droid","Execute",L),trae:I("trae","RunCommand",L),"qwen-code":I("qwen-code","run_shell_command",L),crush:I("crush","bash",(e,t)=>JSON.stringify({updated_input:{command:t}})),junie:I("junie","Bash",(e,t)=>JSON.stringify({updatedInput:{...e,command:t}})),zcode:I("zcode","Bash",L),grok:yr};function rt(e,t,n=_(e),r=k){return ee(t)?xr[e](t,n,r):y}function j(e){return S()?null:_(e)}function $r(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"?"":ce(t,e,j(e),r,n.claudeDirs??Y(),n.pathEnv??process.env.PATH,n.launchArgs??le)??"";case"cursor":return Qe(t,j(e),r);case"gemini-cli":return et(t,j(e),r);case"vibe":return tt(t,(o,s)=>N(o,"vibe",s,j(e),r));case"antigravity":return nt(t,(o,s)=>N(o,"antigravity",s,j(e),r));default:return rt(e,t,j(e),r)}}function P(e,t,n={}){let r=Xe(e,t);return r?$r(r,e,n):n.fallback??""}function Ar(e){let t;try{t=JSON.parse(e)}catch{return""}return P(t,"claude-code")}async function Er(){let e=await T(),t=e?Ar(e):"";t&&process.stdout.write(t)}var Rr=process.argv[1]??"";be(Rr,import.meta.url,"pre-tool-use")&&Er().catch(e=>{process.stderr.write(`tkr pre-tool-use: ${e.message}
12
- `),process.exit(0)});export{ce as buildPreToolUseOutput,_ as execInvocation,Ar as preToolUseResponse,ze as rewrite,q as splitTopLevel};
16
+ `}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 V(e){let t=[],n=vn(e);for(;;){t.push(n);let r=et(n);if(r===n)return t;n=r}}function er(){let e=process.platform==="darwin"?"/Library/Application Support/ClaudeCode":process.platform==="win32"?"C:\\Program Files\\ClaudeCode":"/etc/claude-code",t=[p(e,"managed-settings.json")];try{for(let n of re(p(e,"managed-settings.d")))n.endsWith(".json")&&t.push(p(e,"managed-settings.d",n))}catch{return t}return t}function q(e,t,n,r){let o=[];for(let i of e){let s=Qn(i,t);if(s!=="missing"&&(s==="unreadable"||!g(s)||!n(s,o)))return"unreadable"}return{matchers:o,complete:r}}function Z(e){return e===void 0?[]:Array.isArray(e)?e.filter(t=>typeof t=="string"):null}function se(){return{projectDir:process.env.CLAUDE_PROJECT_DIR,configDir:process.env.CLAUDE_CONFIG_DIR}}function tr(e,t){let n=S=>[p(S,"settings.json"),p(S,"settings.local.json")],r=S=>n(p(S,".claude")),o=p(v(),".claude"),i=t.configDir||o,s=[[er(),"managed"],[[p(i,"settings.json")],"loaded"],[[p(i,"settings.local.json")],"loadedLocal"],[t.configDir?n(o):[],"extra"],[t.projectDir?r(t.projectDir):[],"project"],[V(e).flatMap(r),"extra"]],l=[],u={managed:[],loaded:[],loadedLocal:[],project:[],extra:[]},a={managed:!1,loaded:!1,loadedLocal:!1,project:!1,extra:!1},c=!1,d="managed",_=(S,fe)=>{let C=S.permissions;if(d==="managed"&&(S.allowManagedPermissionRulesOnly===!0||g(C)&&C.allowManagedPermissionRulesOnly===!0)&&(c=!0),C===void 0)return!0;if(!g(C))return!1;for(let $e of["deny","ask","allow"]){let Te=Z(C[$e]);if(!Te)return!1;for(let Ce of Te){let P=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(Ce);if(P)if($e!=="allow")fe.push(R((P[1]??"*").replace(/:\*$/," *")));else if(P[1]===void 0||P[1].trim()==="*")a[d]=!0;else{l.push(R(P[1].replace(/:\*$/," *")));let Ee=wr(P[1]);Ee&&u[d].push({rule:Ce.trim(),matches:Ee})}}}return!0},m=[];for(let[S,fe]of s){d=fe;let C=q(S,!1,_,!0);if(C==="unreadable")return"unreadable";m.push(...C.matchers)}let h=a.managed||(a.loaded||a.loadedLocal)&&!c,$=[...u.managed,...c?[]:u.loaded];return{matchers:[...m,...h?[]:l],complete:!0,allow:l,allowsEverything:h,guards:m,trustedAllow:$}}function nr(e){let t=[p(v(),".cursor","cli-config.json"),...V(e).map(n=>p(n,".cursor","cli.json"))];return q(t,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!g(o))return!1;let i=Z(o.deny);if(!i)return!1;for(let s of i){let l=/^\s*Shell\s*(?:\(([\s\S]*)\))?\s*$/.exec(s);if(!l)continue;let u=l[1]??"*",a=u.indexOf(":");r.push(R(a===-1?`${u} *`:`${u.slice(0,a)} ${u.slice(a+1)}`))}return!0},!1)}function rr(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var at=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function or(e,t){let n=e.tools;if(n!==void 0&&!g(n))return!1;let r=[Z(e.excludeTools),Z(g(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let i of o){let s=at.exec(i);s&&t.push(R(s[1]===void 0?"*":`${s[1]}*`))}}return!0}function Ye(e){try{return JSON.parse(e)}catch{return null}}function ir(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]??Ye(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(t.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(t);return n?Ye(`"${n[1]}"`):null}if(t.startsWith("'")){let n=/^'([^']*)'/.exec(t);return n?n[1]:null}return t.replace(/\s*#.*$/,"")}function sr(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 a=/^\s*([A-Za-z_]+)\s*=\s*(.*)$/.exec(u);if(!a)continue;let c=ir(a[2]);if(c===null)return!1;r[a[1]]=c}let o=r.decision;if(o!=="deny"&&o!=="ask_user"||!(r.toolName===void 0?["*"]:[r.toolName].flat()).some(u=>u==="*"||at.test(u)))continue;let s=r.commandPrefix===void 0?[]:[r.commandPrefix].flat(),l=[r.commandRegex,r.argsPattern].flat().filter(u=>typeof u=="string");if(s.length===0&&l.length===0){t.push(()=>!0);continue}for(let u of s)t.push(R(`${u}*`));for(let u of l){let a;try{a=new RegExp(u)}catch{return!1}t.push(c=>a.test(JSON.stringify({command:c}))||le(a,c))}}return!0}function Xe(e){try{return re(e).filter(t=>t.endsWith(".toml")).map(t=>p(e,t))}catch{return[]}}function lr(e){let t=rr(),n=[p(t,"system-defaults.json"),p(t,"settings.json"),process.env.GEMINI_CLI_SYSTEM_SETTINGS_PATH,process.env.GEMINI_CLI_SYSTEM_DEFAULTS_PATH,p(v(),".gemini","settings.json"),...V(e).map(o=>p(o,".gemini","settings.json"))].filter(o=>!!o),r=q(n,!0,or,!1);if(r==="unreadable")return r;for(let o of[...Xe(p(v(),".gemini","policies")),...Xe(p(t,"policies"))]){let i;try{i=G(o,"utf8")}catch{return"unreadable"}if(!sr(i,r.matchers))return"unreadable"}return r}function _e(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,i]of Object.entries(r))i!=="allow"&&t.push(R(o.replace(/\?/g,"*")))}}return!0}function Qe(e,t){if(e.permissions!==void 0||!_e(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||!_e(o.permission,t)))return!1}}return!0}function ur(e){for(let t of e)for(let n of["agent","agents","mode","modes"]){let r;try{r=re(p(t,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(G(p(t,n,o),"utf8")))return!0}catch{return!0}}return!1}function ar(e){let t=p(process.env.XDG_CONFIG_HOME||p(v(),".config"),"opencode"),n=V(e),r=[t,...n.map(l=>p(l,".opencode"))];if(ur(r))return"unreadable";let o=["opencode.json","opencode.jsonc","config.json"],i=[...o.map(l=>p(t,l)),process.env.OPENCODE_CONFIG,...n.flatMap(l=>[...o.slice(0,2).map(u=>p(l,u)),...o.slice(0,2).map(u=>p(l,".opencode",u))])].filter(l=>!!l),s=q(i,!0,Qe,!0);if(s==="unreadable")return s;for(let l of[process.env.OPENCODE_CONFIG_CONTENT,process.env.OPENCODE_PERMISSION]){if(!l)continue;let u;try{u=JSON.parse(ut(l))}catch{return"unreadable"}if(!(l===process.env.OPENCODE_PERMISSION?_e(u,s.matchers):g(u)&&Qe(u,s.matchers)))return"unreadable"}return s}function cr(){return q([p(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=Z(n[r]);if(!o)return!1;for(let i of o){let s=/^\s*command\s*\(([\s\S]*)\)\s*$/.exec(i);if(!s)continue;let l=s[1].trim();if(!l.startsWith("regex:")){t.push(R(l==="*"?"*":`${l} *`));continue}let u;try{u=new RegExp(l.slice(6))}catch{return!1}t.push(a=>le(u,a))}}return!0},!1)}function fr(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 ct(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=ct(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 ft(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(i=>typeof i=="string"&&i!==""))return null;t.push(`(?:${o.map(Se).join("|")})`)}let n=new RegExp(`^${t.join(" ")}(?= |$)`);return r=>le(n,r)}function dr(e,t){let n=fr(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},i={};for(;n[o.i]!==")";){let u=n[o.i];if(!u||!/^[A-Za-z_]/.test(u)||n[o.i+1]!=="="||(o.i+=2,i[u]=ct(n,o),i[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 s="decision"in i?i.decision:"allow";if(s!=="allow"&&s!=="prompt"&&s!=="forbidden")return!1;let l=ft(i.pattern);if(!l)return!1;s!=="allow"&&t.push(l)}return!0}function pr(e){if(!W(e))return[];try{return re(e).filter(t=>t.endsWith(".rules")).sort().map(t=>p(e,t))}catch{return"unreadable"}}function mr(){return process.platform==="win32"?p(process.env.ProgramData||"C:\\ProgramData","OpenAI","Codex","requirements.toml"):"/etc/codex/requirements.toml"}function gr(e){if(!(!g(e)||Object.keys(e).length!==1)){if(typeof e.token=="string")return e.token;if(Array.isArray(e.any_of)&&e.any_of.every(t=>typeof t=="string"))return e.any_of}}function hr(e,t){let n;try{n=me(e)}catch{return!1}if(n.rules===void 0)return!0;if(!g(n.rules))return!1;let r=n.rules.prefix_rules;if(r===void 0)return!0;if(!Array.isArray(r))return!1;for(let o of r){if(!g(o)||!Array.isArray(o.pattern)||o.decision!=="prompt"&&o.decision!=="forbidden")return!1;let i=o.pattern.map(gr);if(i.some(l=>l===void 0))return!1;let s=ft(i);if(!s)return!1;t.push(s)}return!0}function kr(e){let t=process.env.CODEX_HOME||p(v(),".codex"),n=[p(t,"rules"),...V(e).map(i=>p(i,".codex","rules"))],r=[],o=null;try{o=G(mr(),"utf8")}catch(i){let s=i.code;if(s!=="ENOENT"&&s!=="ENOTDIR")return"unreadable"}if(o!==null&&!hr(o,r))return"unreadable";for(let i of[...new Set(n)]){let s=pr(i);if(s==="unreadable")return"unreadable";for(let l of s){let u;try{u=G(l,"utf8")}catch{return"unreadable"}if(!dr(u,r))return"unreadable"}}return{matchers:r,complete:!1}}function g(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Se(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function _r(e){let t=e.trim().replace(/\s+/g," "),n=t.endsWith(" *")&&t.length>2,r=(n?t.slice(0,-2):t).split("*").map(Se).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var br=512;function yr(e){let t=e.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[t,t.map(oe)]}function le(e,t){if(e.test(t)||e.test(t.trim().replace(/\s+/g," ")))return!0;for(let n of yr(t)){if(n.length>br)return!0;for(let r=0;r<n.length;r++)if(e.test(n.slice(r).join(" ")))return!0}return!1}function R(e){let t=_r(e);return n=>le(t,n)}function wr(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(`^${Se(r)}${n?"(?: [\\s\\S]*)?":""}$`);return i=>o.test(i)}var Sr={"claude-code":tr,cursor:nr,"gemini-cli":lr,opencode:ar,antigravity:cr,codex:kr},xr=new Set(["codex"]),dt=/(?:^|[\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 Ar(e,t,n){let r=Sr[e];return r?r(t??process.cwd(),n):{matchers:[],complete:!1}}function $r(e,t,n){return e==="unreadable"||dt.test(t.replace(/['"\\]/g,""))||e.matchers.some(r=>r(t))?!1:e.complete||lt(t,!xr.has(n))}var pt=new Set(["default","acceptEdits","dontAsk"]);function mt(e,t){return t.host!=="claude-code"||t.permissionMode==="bypassPermissions"?!0:e!=="unreadable"&&e.allowsEverything===!0&&pt.has(t.permissionMode??"")}function Tr(e,t){let n="pathEnv"in e?e.pathEnv:process.env.PATH,r;return o=>e.host!=="claude-code"?N(o,e.cwd,n):(r??=Je(t.configDir),!N(o,e.cwd,n)&&!r.paths.some(i=>N(o,e.cwd,i))?!1:o.includes("/")||!Be(o,r))}var Cr=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function Er(e,t,n){return n.host!=="claude-code"||e==="unreadable"||mt(e,n)||!pt.has(n.permissionMode??"")||!Cr.test(t)||dt.test(t.replace(/['"]/g,""))||(e.guards??[]).some(r=>r(t))?null:(e.trustedAllow??[]).find(r=>r.matches(t))?.rule??null}function gt(e,t,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=t.claudeDirs??se(),i=Ar(t.host,t.cwd,o),s=Er(i,e,t),l=s||$r(i,e,t.host)?it(e,n,Tr(t,o)):e;return l!==e&&i!=="unreadable"&&(s?(i.guards??[]).some(u=>u(l)):i.matchers.some(u=>u(l))||(i.allow??[]).some(u=>u(l)&&!u(e)))&&(l=e),r(t.sessionId,l!==e),l===e?null:s?{command:l,allowedBy:s}:mt(i,t)?{command:l}:null}function O(e,t,n,r){return gt(e,t,n,r)?.command??null}function k(e,t){let n=e[t];return typeof n=="string"&&n?n:null}function K(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Or(e){return k(e,"prompt_id")||k(e,"scratchpad_dir")?!0:K(e.effort)}function vr(e){return k(e,"tool_use_id")?.startsWith("toolu_")===!0||/^claude/i.test(k(e,"model")??"")}var Rr=new Set(["BeforeTool","AfterTool","BeforeAgent","AfterAgent","BeforeModel","AfterModel","BeforeToolSelection"]),Pr=new Set(["preToolUse","postToolUse","beforeShellExecution","afterShellExecution","beforeSubmitPrompt","sessionStart","sessionEnd","stop"]),Ir=new Set(["pre_tool","post_tool"]),Nr=new Set(["before_tool_call","after_tool_call"]),Hr=new Set(["runTerminalCommand","run_in_terminal"]),Lr=[["codex",e=>k(e,"turn_id")!==null],["claude-code",Or],["cursor",e=>k(e,"cursor_version")!==null||k(e,"generation_id")!==null||k(e,"conversation_id")!==null||Array.isArray(e.workspace_roots)||Pr.has(k(e,"hook_event_name")??"")],["gemini-cli",e=>Rr.has(k(e,"hook_event_name")??"")],["qwen-code",e=>e.hook_event_name==="PreToolUse"&&e.tool_name==="run_shell_command"],["vibe",e=>Ir.has(k(e,"hook_event_name")??"")],["antigravity",e=>K(e.toolCall)],["copilot",e=>k(e,"toolName")!==null&&"toolArgs"in e||Hr.has(k(e,"tool_name")??"")],["grok",e=>e.toolName==="run_terminal_command"||e.tool_name==="run_terminal_command"||K(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&&k(e,"event")!==null&&!Nr.has(k(e,"event"))]],Dr=new Set(["codex","antigravity"]);function jr(e){return K(e)?Lr.filter(([,t])=>t(e)).map(([t])=>t):[]}function ht(e,t){if(!K(e))return null;let n=jr(e);return n.length>1?null:n.length===1?n[0]:vr(e)&&Dr.has(t)?"claude-code":t==="codex"?null:t}var xe=JSON.stringify({permission:"allow"});function kt(e,t=w("cursor"),n=y){if(e.tool_name!=="Shell")return xe;let r=e.tool_input??{},o=r.command;if(typeof o!="string"||!o)return xe;let i=typeof r.working_directory=="string"?r.working_directory:void 0,s=O(o,{host:"cursor",sessionId:e.conversation_id??"unknown",cwd:i},A()?null:t,n);return s?JSON.stringify({permission:"allow",updated_input:{...r,command:s}}):xe}var ue="{}";function _t(e,t=w("gemini-cli"),n=y){if(e.hook_event_name!=="BeforeTool"||e.tool_name!=="run_shell_command")return ue;let r=e.tool_input??{};if(r.is_background)return ue;let o=r.command;if(typeof o!="string"||!o)return ue;let i=typeof e.cwd=="string"?e.cwd:void 0,s=O(o,{host:"gemini-cli",sessionId:e.session_id??"unknown",cwd:i},A()?null:t,n);return s?JSON.stringify({hookSpecificOutput:{tool_input:{command:s}}}):ue}function L(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}var rs=String.raw`(?:'(?:(?:[^']|'\\'')*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?'|"(?:[^"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?"|(?:[^\s'"]*[\\/])?tkr(?:\.(?:exe|cmd|bat|ps1))?)`;function D(e,t,n="unknown",r=w(t),o=y){return e?O(e,{host:t,sessionId:n},A()?null:r,o):null}var Mr=new Set(["bash","file_system.bash"]),Ae=JSON.stringify({decision:"allow"});function bt(e,t=(n,r)=>D(n,"vibe",r)){if(!L(e)||e.hook_event_name!=="pre_tool"||typeof e.tool_name!="string"||!Mr.has(e.tool_name))return"";let n=e.tool_input;if(!L(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 yt(e,t=(n,r)=>D(n,"antigravity",r)){if(!L(e)||!L(e.toolCall)||e.toolCall.name!=="run_command")return Ae;let n=e.toolCall.args;if(!L(n)||typeof n.CommandLine!="string"||!n.CommandLine)return Ae;let r=t(n.CommandLine,typeof e.conversationId=="string"?e.conversationId:"unknown");return r?JSON.stringify({decision:"allow",overwrite:{CommandLine:r}}):Ae}var T="{}",Ur=new Set(["runTerminalCommand","run_in_terminal","Bash","bash"]),zr=["run_in_background","is_background","isBackground"];function ae(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function Jr(e){let t=e.session_id??e.sessionId;return typeof t=="string"&&t?t:"unknown"}function Br(e,t){let n=e.cwd??t.cwd??t.workdir??t.working_directory;return typeof n=="string"&&n?n:void 0}function ce(e,t,n,r,o){if(!ae(t)||zr.some(s=>t[s]===!0))return null;let i=t.command;return typeof i!="string"||!i?null:O(i,{host:e,sessionId:Jr(n),cwd:Br(n,t)},A()?null:r,o)}function F(e,t){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...e,command:t}}})}function Wr(e){if(ae(e))return e;if(typeof e!="string")return null;try{let t=JSON.parse(e);return ae(t)?t:null}catch{return null}}function Gr(e,t,n){if(typeof e.tool_name=="string"){if(!Ur.has(e.tool_name))return T;let i=e.tool_input,s=ce("copilot",i,e,t,n);return s?F(i,s):T}if(e.toolName!=="bash")return T;let r=Wr(e.toolArgs),o=ce("copilot",r,e,t,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):T}function j(e,t,n){return(r,o,i)=>{if(r.tool_name!==t)return T;let s=r.tool_input,l=ce(e,s,r,o,i);return l?n(s,l):T}}var Zr=new Set(["run_terminal_command","Bash","bash"]);function Vr(e,t,n){let r=e.toolName??e.tool_name;if(typeof r!="string"||!Zr.has(r))return T;let o=e.toolInput??e.tool_input,i=ce("grok",o,e,t,n);return i?F(o,i):T}var qr={copilot:Gr,droid:j("droid","Execute",F),trae:j("trae","RunCommand",F),"qwen-code":j("qwen-code","run_shell_command",F),crush:j("crush","bash",(e,t)=>JSON.stringify({updated_input:{command:t}})),junie:j("junie","Bash",(e,t)=>JSON.stringify({updatedInput:{...e,command:t}})),zcode:j("zcode","Bash",F),grok:Vr};function wt(e,t,n=w(e),r=y){return ae(t)?qr[e](t,n,r):T}function M(e){return A()?null:w(e)}function Kr(e,t,n={}){let r=n.recordUsage??y;switch(e){case"claude-code":case"codex":return t.hook_event_name!==void 0&&t.hook_event_name!=="PreToolUse"?"":ye(t,e,M(e),r,n.claudeDirs??se(),n.pathEnv??process.env.PATH,n.launchArgs??we)??"";case"cursor":return kt(t,M(e),r);case"gemini-cli":return _t(t,M(e),r);case"vibe":return bt(t,(o,i)=>D(o,"vibe",i,M(e),r));case"antigravity":return yt(t,(o,i)=>D(o,"antigravity",i,M(e),r));default:return wt(e,t,M(e),r)}}function H(e,t,n={}){let r=ht(e,t);return r?Kr(r,e,n):n.fallback??""}function Yr(e){let t;try{t=JSON.parse(e)}catch{return""}return H(t,"claude-code")}async function Xr(){let e=await I(),t=e?Yr(e):"";t&&process.stdout.write(t)}var Qr=process.argv[1]??"";Re(Qr,import.meta.url,"pre-tool-use")&&Xr().catch(e=>{process.stderr.write(`tkr pre-tool-use: ${e.message}
17
+ `),process.exit(0)});export{ye as buildPreToolUseOutput,w as execInvocation,Yr as preToolUseResponse,it as rewrite,ie as splitTopLevel};
18
+ /*! Bundled license information:
19
+
20
+ smol-toml/dist/error.js:
21
+ smol-toml/dist/primitive.js:
22
+ smol-toml/dist/date.js:
23
+ smol-toml/dist/extract.js:
24
+ smol-toml/dist/util.js:
25
+ smol-toml/dist/struct.js:
26
+ smol-toml/dist/parse.js:
27
+ smol-toml/dist/stringify.js:
28
+ smol-toml/dist/index.js:
29
+ (*!
30
+ * Copyright (c) Squirrel Chat et al., All rights reserved.
31
+ * SPDX-License-Identifier: BSD-3-Clause
32
+ *
33
+ * Redistribution and use in source and binary forms, with or without
34
+ * modification, are permitted provided that the following conditions are met:
35
+ *
36
+ * 1. Redistributions of source code must retain the above copyright notice, this
37
+ * list of conditions and the following disclaimer.
38
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
39
+ * this list of conditions and the following disclaimer in the
40
+ * documentation and/or other materials provided with the distribution.
41
+ * 3. Neither the name of the copyright holder nor the names of its contributors
42
+ * may be used to endorse or promote products derived from this software without
43
+ * specific prior written permission.
44
+ *
45
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
46
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
49
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
52
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
53
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
54
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
55
+ *)
56
+ */