@tokmizer/plugin 0.9.66 → 0.9.68
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.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/dist/bin/tkr-agent-hook.js +53 -9
- package/dist/bin/tkr-codex-hook.js +72 -70
- package/dist/bin/tkr-copilot-hook.js +53 -9
- package/dist/bin/tkr-crush-hook.js +53 -9
- package/dist/bin/tkr-cursor-hook.js +52 -8
- package/dist/bin/tkr-daemon.js +131 -129
- package/dist/bin/tkr-droid-hook.js +53 -9
- package/dist/bin/tkr-exec +0 -0
- package/dist/bin/tkr-exec.js +79 -77
- package/dist/bin/tkr-gemini-hook.js +52 -8
- package/dist/bin/tkr-grok-hook.js +53 -9
- package/dist/bin/tkr-junie-hook.js +53 -9
- package/dist/bin/tkr-processor.js +97 -95
- package/dist/bin/tkr-qwen-hook.js +53 -9
- package/dist/bin/tkr-shim.js +80 -78
- package/dist/bin/tkr-trae-hook.js +53 -9
- package/dist/bin/tkr-zcode-hook.js +53 -9
- package/dist/bin/tkr.js +263 -260
- package/dist/hooks-host/post-tool-use.js +91 -89
- package/dist/hooks-host/pre-tool-use.js +53 -9
- package/dist/hooks-host/reducer-stop.js +24 -24
- package/dist/hooks-host/session-recap.js +5 -4
- package/dist/index.js +87 -85
- package/dist/native/manifest.json +12 -12
- package/dist/native/single.json +12 -12
- package/dist/native/tkr-exec-darwin-arm64 +0 -0
- package/dist/native/tkr-exec-darwin-x64 +0 -0
- package/dist/native/tkr-exec-linux-arm64 +0 -0
- package/dist/native/tkr-exec-linux-x64 +0 -0
- package/dist/native/tkr-exec-win32-arm64.exe +0 -0
- package/dist/native/tkr-exec-win32-x64.exe +0 -0
- package/hooks/hooks.json +7 -2
- package/hooks/on-session-start.mjs +12 -0
- package/package.json +7 -7
- package/scripts/install-native.mjs +7 -3
|
@@ -1,13 +1,57 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __tkrCreateRequire } from "node:module"; const require = __tkrCreateRequire(import.meta.url);
|
|
3
|
-
function
|
|
4
|
-
`).filter(
|
|
3
|
+
function F(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{appendFileSync as $t,chmodSync as Tt,mkdirSync as Ct,existsSync as Et,readFileSync as to,rmSync as no}from"node:fs";import{dirname as Ot,join as vt}from"node:path";import bt from"node:os";import{join as yt}from"node:path";function E(){return process.env.TOKMIZER_HOME||yt(bt.homedir(),".tokmizer")}import{readFileSync as wt,renameSync as St,statSync as xt,writeFileSync as At}from"node:fs";function Ee(e,t,n){try{if(xt(e).size<=t)return;let r=wt(e,"utf8").split(`
|
|
4
|
+
`).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}`;At(s,o.length?`${o.join(`
|
|
5
5
|
`)}
|
|
6
|
-
`:"",{mode:384}),
|
|
7
|
-
`,{mode:384}),
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
`:"",{mode:384}),St(s,e)}catch{}}var Rt="usage.jsonl";var Oe=2*1024*1024;function Pt(){return vt(E(),Rt)}function w(e,t,n=Pt()){try{let r=Ot(n);Et(r)||Ct(r,{recursive:!0,mode:448});let o=e.replace(/[^A-Za-z0-9._-]/g,"").slice(0,64)||"unknown";$t(n,`{"t":${Math.floor(Date.now()/1e3)},"s":"${o}","o":${t?1:0}}
|
|
7
|
+
`,{mode:384}),Tt(n,384),Ee(n,Oe,Oe/2)}catch{}}import{spawnSync as bn}from"node:child_process";import{existsSync as B,readFileSync as W,readdirSync as oe}from"node:fs";import{homedir as v}from"node:os";import{fileURLToPath as yn}from"node:url";import{dirname as qe,join as p,resolve as wn}from"node:path";function It(e,t){let n=e.slice(0,t).split(/\r?\n/);return[n.length,n.pop().length+1]}function Nt(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+=`
|
|
8
|
+
`,s===t&&(o+=" ".repeat(i+n+2),o+=`^
|
|
9
|
+
`))}return o}var f=class e extends Error{line;column;codeblock;constructor(t,n){let[r,o]=It(n.toml,n.ptr),i=Nt(n.toml,r,o);super(`Invalid TOML document: ${t}
|
|
10
|
+
|
|
11
|
+
${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 X(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 b=0;b<d;b++,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+=`
|
|
12
|
+
`: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 Ht=/^(\d{4}-\d{2}-\d{2})?[Tt ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|z|[-+]\d{2}:\d{2})?$/i,M=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(Ht);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 y(e,t=10){return t===16?e>47&&e<58||e>64&&e<71||e>96&&e<103:e>47&&e<48+t}function de(e,t){return e===32||e===9||e===10||e===13||t&&(e===t||e===44)||e===35}function z(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?Pe(e):Re(e);return e.d++,o}return r===34||r===39?X(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?Q(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?Lt(e,r,t):e.s.charCodeAt(e.p+2)===58?Dt(e,r,t):Q(e,e.p,r,0,t)}function Q(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||de(i=e.s.charCodeAt(e.p),o))return e.bi===!0?0n:0;if(!r){if(i===120)return fe(e,t,16,o);if(i===98)return fe(e,t,2,o);if(i===111)return fe(e,t,8,o)}i===46?s=2:i===101||i===69?s=4:f.x("illegal leading zero",e,t)}else y(i)||f.x("invalid value",e,t);for(;++e.p<e.s.length&&(i=e.s.charCodeAt(e.p),!de(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)||(y(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):ve(e,u,10,t)}function fe(e,t,n,r){let o,i=1;for(;++e.p<e.s.length&&(o=e.s.charCodeAt(e.p),!de(o,r));)o===95?(i&1&&f.x("illegal underscore",e),i=3):y(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("_","")),ve(e,s,n,t)}function ve(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 Lt(e,t,n){let r=e.p++,o;if(!y(t)||!y(e.s.charCodeAt(e.p++))||!y(e.s.charCodeAt(e.p++))||!y(e.s.charCodeAt(e.p++)))return Q(e,e.p=r,t,0,n);if(e.p+=5,y(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,!y(e.s.charCodeAt(e.p+1))))&&t!==84&&t!==116){let s=e.s.slice(r,e.p);return U(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(;y(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 U(e,s,1,o,r,"[+00:00]")}if(t===43||t===45){let s=e.s.slice(r,e.p+=6);return U(e,s,1,o,r,!e.ld&&"["+e.s.slice(e.p-6,e.p)+"]")}}let i=e.s.slice(r,e.p);return U(e,i,2,o,r)}function Dt(e,t,n){let r=e.p;if(!y(t)||!y(e.s.charCodeAt(++e.p)))return Q(e,--e.p,t,0,n);if(e.s.charCodeAt(e.p+=4)===58&&(e.p+=3),e.s.charCodeAt(e.p)===46)for(;y(e.s.charCodeAt(++e.p)););let o=e.s.slice(r,e.p);return U(e,o,4,!1,r)}function U(e,t,n,r,o,i){if(e.ld){let s=new M(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 jt(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;jt(e)}}function ee(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(X(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 Re(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=ee(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 b=i==="__proto__";if(e.uk&&(b||i==="constructor")){s=e.uk!==1&&f.x("document contains an unsafe property",e,u);break}!l&&b&&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=z(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 Pe(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(z(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 Ie(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 Ne(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 pe(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=ee(n,93);a&&(e.charCodeAt(n.p)!==93&&f.x("expected end of table array declaration",n),n.p++);let d=Ie(n,c,r,o,a?2:1);d?(u=d[2],l=d[1]):(Ne(n,d,i),s=!0)}else{i=n.p;let a=ee(n),c=Ie(n,a,l,u,0);!c&&!s&&Ne(n,c,i),x(n,!0,!0);let d=z(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 Oo=!!"".isWellFormed;function te(){return!1}import{execFileSync as sn}from"node:child_process";import{mkdirSync as ln,readFileSync as Me,renameSync as un,statSync as an,writeFileSync as cn}from"node:fs";import{join as Ue}from"node:path";import{closeSync as Ft,openSync as Mt,readSync as Ut,readdirSync as zt,readFileSync as Jt,statSync as De}from"node:fs";import{homedir as Bt}from"node:os";import{isAbsolute as Wt,join as ne,resolve as Gt}from"node:path";var Zt=/^[A-Za-z0-9._+@%:,/-]+$/,Vt=new Set(["7f454c46","feedface","feedfacf","cefaedfe","cffaedfe","cafebabe","bebafeca"]),qt=32,Kt=4*1024*1024;function ge(e){let t;try{t=Mt(e,"r");let n=Buffer.alloc(4),r=Ut(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&&Ft(t)}}function J(e,t=process.platform){try{let n=De(e);if(!n.isFile())return!1;if(t==="win32")return!0;if((n.mode&73)===0)return!1;let r=ge(e);return r==="#!"||r!==null&&Vt.has(r)}catch{return!1}}function Yt(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 I(e,t,n,r=process.platform){if(!Zt.test(e))return!1;let o=r==="win32";if(e.includes("/"))return J(Gt(t??process.cwd(),e),r);if(!n)return!1;let i=o?Yt(e):[e];for(let s of n.split(o?";":":"))if(!(!s||!Wt(s))){for(let l of i)if(J(ne(s,l),r))return!0}return!1}var Xt=/^eval \$'([^\s'()=]+) \(\) /,Qt=/^([^\s'"()=]+) \(\) \{$/,en=/^alias -- ([^\s=]+)=(.*)$/,tn=/^# (?:Shell Options|Aliases|Shopt|Check for |Shadow )/,nn=/^export PATH=(.*)$/,rn=/^(?:--colou?r(?:=\S+)?|-G)$/;function Le(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 on(e,t){let n="";for(let r of e.split(`
|
|
13
|
+
`)){let o=nn.exec(r);if(o&&n!=="# Functions"){let i=Le(o[1].trim());/[$`\\]/.test(i)||t.paths.push(i);continue}if(r.startsWith("# ")&&(n!=="# Functions"||tn.test(r))){n=r;continue}if(n==="# Functions"){let i=Xt.exec(r)??Qt.exec(r);i&&t.functions.add(i[1])}else if(n==="# Aliases"){let i=en.exec(r);i&&t.aliases.set(i[1],Le(i[2].trim()))}}}function me(e){return e?.code==="ENOENT"}function je(e){let t={functions:new Set,aliases:new Map,paths:[],uncertain:!1},n=ne(e||ne(Bt(),".claude"),"shell-snapshots"),r=[];try{for(let o of zt(n)){if(!o.startsWith("snapshot-")||!o.endsWith(".sh"))continue;let i=ne(n,o);try{let s=De(i);s.isFile()&&r.push({path:i,mtime:s.mtimeMs,size:s.size})}catch(s){me(s)||(t.uncertain=!0)}}}catch(o){return me(o)||(t.uncertain=!0),t}r=r.sort((o,i)=>i.mtime-o.mtime).slice(0,qt);for(let o of r)try{if(o.size>Kt)throw new Error("snapshot too large");on(Jt(o.path,"utf8"),t)}catch(i){me(i)||(t.uncertain=!0)}return t}function Fe(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=>rn.test(o))}var fn="exec-probe.json",dn=6e4;function pn(){return Ue(E(),fn)}function mn(e){try{let t=JSON.parse(Me(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 gn(e,t){try{ln(Ue(e,".."),{recursive:!0,mode:448});let n=`${e}.${process.pid}.tmp`;cn(n,JSON.stringify(t),{mode:384}),un(n,e)}catch{}}function hn(e){try{return sn(e,["--native-check"],{encoding:"utf8",timeout:2e3,maxBuffer:1024,stdio:["ignore","pipe","ignore"],windowsHide:!0}).startsWith("tokmizer-native ")}catch{return!1}}function kn(e,t){try{let r=Me(e,"utf8").split(`
|
|
14
|
+
`,1)[0].slice(2).trim().split(/\s+/),o=r[0]??"";return o==="/usr/bin/env"?I(r[1]??"",void 0,t):J(o)}catch{return!1}}function _n(e,t,n){try{let r=an(e);return[e,r.size,r.mtimeMs,r.ino,r.mode,t?n??"":""].join("|")}catch{return`${e}|missing`}}function he(e,t=process.platform,n=process.env.PATH,r=pn(),o=Date.now()){let i=t!=="win32"&&ge(e)==="#!",s=_n(e,i,n),l=mn(r);if(l?.key===s&&(l.ok||o-l.at<dn))return l.ok;let u=J(e,t)&&(i?kn(e,n):hn(e));return gn(r,{key:s,ok:u,at:o,skipped:(l?.skipped??0)+(u?0:1)}),u}var Sn=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"]),xn=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"]),Je="(?:dev|start|serve|watch|preview)",An=new RegExp(`^(?:\\S*/)?(?:bun\\s+(?:install|i|add|remove|rm|update|outdated|audit|test|build|pm|x)(?:\\s|$)|bun\\s+run\\s+(?!${Je}(?:\\s|$))[A-Za-z0-9:_-]+(?:\\s|$)|deno\\s+(?:test|lint|fmt|check|compile|install|info|doc|bench|outdated)(?:\\s|$)|deno\\s+task\\s+(?!${Je}(?:\\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)`),$n=/(?:^|\s)--watch(?:\s|=|$)/;function Tn(e){return An.test(e)&&!$n.test(e)}var Cn=/^((?:\S*\/)?(sh|bash|zsh|dash|ksh|fish)\s+(-[elux]*c[elux]*)\s+)(['"])/,En=/[()$]|(?:^|[;&|\n]\s*)(?:and|or|not|begin|end|if|else|switch|case|while|for|function|return)(?:\s|;|$)/,Ke=3;function Ye(e){let t=Cn.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&&En.test(l)?null:{script:l,start:o,end:i,quote:r}}var On=new Set(["cd","export","set","unset","source",".","true",":","pushd","popd"]);function vn(e){return be(e).filter(n=>{if(n.kind!=="cmd"||n.unsafe)return!1;let r=Qe(n.text);return r!==""&&!On.has(r)&&!_e.test(r)}).length>1}function Rn(e,t,n,r,o){if(n>=Ke)return null;let i=Ye(e);if(!i)return null;let{script:s,start:l,end:u,quote:a}=i,c=[],d=et(s,t,n+1,r,T=>c.push(T));if(d===s||a==='"'&&/["$`]/.test(d))return null;let b=a==="'"?d.replace(/'/g,"'\\''"):d,m=`${e.slice(0,l)}${b}${e.slice(u)}`,h=vn(s);if(o)for(let T of h?[e,...c]:c)o(T);return h?`${t} ${m}`:m}var Be=/(?:^|\s)(?:--follow|-[0-9a-zA-Z]*f[a-zA-Z]*)(?:\s|=|$)/,Pn=new Set(["docker","podman","kubectl","nerdctl","docker-compose","stern","flyctl"]);function In(e,t){let n=ie(t);return n==="tail"||n==="journalctl"?Be.test(e):n==="stern"?!0:Pn.has(n)?/\blogs?\b/.test(e)&&Be.test(e):!1}var _e=/^[A-Za-z_][A-Za-z0-9_]*\+?=/,Nn=/^[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/,Hn=/(?:^|[;&|\n({])\s*[A-Za-z_][A-Za-z0-9_-]*\s*\(\s*\)/;function ie(e){let t=e.lastIndexOf("/");return t===-1?e:e.slice(t+1)}function Xe(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 We(e){let t=Xe(e);if(!t)return!0;for(let n=0;n<e.length;n++)if(t[n]&&e[n]===">")return!0;return!1}function be(e){let t=Xe(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===`
|
|
15
|
+
`||l==="|"){s(l,1);continue}}r+=l,o+=1}return i(),n}function Qe(e){return e.trim().split(/\s+/)[0]??""}function A(e,t=process.platform){try{let n=qe(yn(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(B(l))return he(l,t)?`'${l.replace(/\\/g,"/").replace(/'/g,"'\\''")}'`:null}let i=p(n,"..","bin","tkr-exec");if(!r&&B(i))return he(i,t)?`${o}'${i.replace(/'/g,"'\\''")}'`:null;if(te()){let l=r?process.execPath.replace(/\\/g,"/"):process.execPath;return`${o}'${l.replace(/'/g,"'\\''")}' exec`}let s=p(n,"..","bin","tkr-exec.js");return B(s)?`${o}node '${s.replace(/'/g,"'\\''")}'`:null}catch{return null}}function Ln(e,t="tkr-exec",n=()=>!0,r){return et(e,t,0,n,r)}function et(e,t,n,r,o){if(e.includes("<<")||Hn.test(e))return e;let i=be(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=Qe(a),d=i[l+1],b=d?.kind==="sep"&&(d.text==="|"||d.text==="|&"),m=d?.kind==="sep"&&d.text==="&",h=!b&&!m&&!We(u.text)&&!u.text.includes("<(")&&!u.text.includes(">(")?Rn(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))||Sn.has(c)||xn.has(c)||(ze.has(c)||ze.has(ie(c)))&&!Tn(a)||_e.test(c)||c.startsWith("(")||c.startsWith("#")||c.startsWith("<")||c.startsWith(">")||Nn.test(a)||In(a,c)||c.endsWith(")")||b||m||We(u.text)||u.text.includes("<(")||u.text.includes(">(")||c==="node"&&a.includes("tkr-exec.js")||!r(c)){s.push(u.text);continue}let T=u.text.match(/^\s*/)?.[0]??"",S=u.text.match(/\s*$/)?.[0]??"";o?.(a),s.push(`${T}${t} ${a}${S}`)}return s.join("")}var Dn=new Set(["command","workdir","timeout_ms","yield_time_ms","max_output_tokens","shell","login","tty","description"]),jn=new Set(["cd","cat","head","tail","ls","tree","find","grep","rg","wc","nl","sort","cut","diff","stat","file","du","df","ps","jq","yq","pwd","which"]),Fn=new Set(["log","diff","show","status","blame","ls-files","rev-parse","describe","shortlog"]),Mn={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/},re=["test","run test","run build","run lint","run typecheck"],Un={npm:new Set(re),pnpm:new Set([...re,"build","lint","typecheck"]),yarn:new Set([...re,"build","lint","typecheck"]),bun:new Set(re),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"])},zn=new Set(["pytest","tsc","vitest","jest","eslint","mypy"]);function tt(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 be(e)){if(r.kind==="sep")continue;if(r.unsafe)return!1;let o=n<Ke?Ye(r.text.trim()):null;if(o){if(!tt(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=>_e.test(a)))return!1;let s=ie(i[0]);if(s!==i[0])return!1;let l=Mn[s];if(l&&i.slice(1).some(a=>l.test(a)))return!1;if((s==="git"?Fn.has(i[1]??""):jn.has(s))||t&&zn.has(s))continue;let u=t?Un[s]:void 0;if(!(u&&(u.has(i[1]??"")||i[1]==="run"&&u.has(`run ${i[2]??""}`))))return!1}return!0}function nt(e,t,n=A(t),r=w,o=se(),i=process.env.PATH,s=ye){if(!g(e)||e.tool_name!=="Bash"||t==="claude-code"&&Bn(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(T=>!Dn.has(T)))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",b=typeof e.permission_mode=="string"?e.permission_mode:void 0,m=ct(u,{host:t,sessionId:d,cwd:c,claudeDirs:o,pathEnv:i,permissionMode:b},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 Jn=/(?:^|\s)--(?:disallowedTools|disallowed-tools|settings|setting-sources)(?:[=\s]|$)/;function ye(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=bn("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(e){return e===null||Jn.test(e)}function Wn(e,t){if(!B(e))return"missing";try{let n=W(e,"utf8");return JSON.parse(t?rt(n):n)}catch{return"unreadable"}}function rt(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
16
|
`;)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("crush").catch(e=>{process.stderr.write(`tkr-crush-hook: ${e.message}
|
|
13
|
-
`),process.stdout.write(
|
|
17
|
+
`}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 Z(e){let t=[],n=wn(e);for(;;){t.push(n);let r=qe(n);if(r===n)return t;n=r}}function Gn(){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 oe(p(e,"managed-settings.d")))n.endsWith(".json")&&t.push(p(e,"managed-settings.d",n))}catch{return t}return t}function V(e,t,n,r){let o=[];for(let i of e){let s=Wn(i,t);if(s!=="missing"&&(s==="unreadable"||!g(s)||!n(s,o)))return"unreadable"}return{matchers:o,complete:r}}function G(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 Zn(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=[[Gn(),"managed"],[[p(i,"settings.json")],"loaded"],[[p(i,"settings.local.json")],"loadedLocal"],[t.configDir?n(o):[],"extra"],[t.projectDir?r(t.projectDir):[],"project"],[Z(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",b=(S,ce)=>{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 Ae of["deny","ask","allow"]){let $e=G(C[Ae]);if(!$e)return!1;for(let Te of $e){let P=/^\s*Bash\s*(?:\(([\s\S]*)\))?\s*$/.exec(Te);if(P)if(Ae!=="allow")ce.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 Ce=pr(P[1]);Ce&&u[d].push({rule:Te.trim(),matches:Ce})}}}return!0},m=[];for(let[S,ce]of s){d=ce;let C=V(S,!1,b,!0);if(C==="unreadable")return"unreadable";m.push(...C.matchers)}let h=a.managed||(a.loaded||a.loadedLocal)&&!c,T=[...u.managed,...c?[]:u.loaded];return{matchers:[...m,...h?[]:l],complete:!0,allow:l,allowsEverything:h,guards:m,trustedAllow:T}}function Vn(e){let t=[p(v(),".cursor","cli-config.json"),...Z(e).map(n=>p(n,".cursor","cli.json"))];return V(t,!0,(n,r)=>{let o=n.permissions;if(o===void 0)return!0;if(!g(o))return!1;let i=G(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 qn(){return process.platform==="darwin"?"/Library/Application Support/GeminiCli":process.platform==="win32"?"C:\\ProgramData\\gemini-cli":"/etc/gemini-cli"}var ot=/^\s*(?:run_shell_command|ShellTool)\s*(?:\(([\s\S]*)\))?\s*$/;function Kn(e,t){let n=e.tools;if(n!==void 0&&!g(n))return!1;let r=[G(e.excludeTools),G(g(n)?n.exclude:void 0)];for(let o of r){if(!o)return!1;for(let i of o){let s=ot.exec(i);s&&t.push(R(s[1]===void 0?"*":`${s[1]}*`))}}return!0}function Ge(e){try{return JSON.parse(e)}catch{return null}}function Yn(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]??Ge(`"${r[1]}"`);if(o===null)return null;n.push(o)}return n}if(t.startsWith('"')){let n=/^"((?:\\.|[^"\\])*)"/.exec(t);return n?Ge(`"${n[1]}"`):null}if(t.startsWith("'")){let n=/^'([^']*)'/.exec(t);return n?n[1]:null}return t.replace(/\s*#.*$/,"")}function Xn(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=Yn(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==="*"||ot.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 Ze(e){try{return oe(e).filter(t=>t.endsWith(".toml")).map(t=>p(e,t))}catch{return[]}}function Qn(e){let t=qn(),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"),...Z(e).map(o=>p(o,".gemini","settings.json"))].filter(o=>!!o),r=V(n,!0,Kn,!1);if(r==="unreadable")return r;for(let o of[...Ze(p(v(),".gemini","policies")),...Ze(p(t,"policies"))]){let i;try{i=W(o,"utf8")}catch{return"unreadable"}if(!Xn(i,r.matchers))return"unreadable"}return r}function ke(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 Ve(e,t){if(e.permissions!==void 0||!ke(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||!ke(o.permission,t)))return!1}}return!0}function er(e){for(let t of e)for(let n of["agent","agents","mode","modes"]){let r;try{r=oe(p(t,n))}catch{continue}for(let o of r)try{if(o.endsWith(".md")&&/permission/i.test(W(p(t,n,o),"utf8")))return!0}catch{return!0}}return!1}function tr(e){let t=p(process.env.XDG_CONFIG_HOME||p(v(),".config"),"opencode"),n=Z(e),r=[t,...n.map(l=>p(l,".opencode"))];if(er(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=V(i,!0,Ve,!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(rt(l))}catch{return"unreadable"}if(!(l===process.env.OPENCODE_PERMISSION?ke(u,s.matchers):g(u)&&Ve(u,s.matchers)))return"unreadable"}return s}function nr(){return V([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=G(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 rr(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 it(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=it(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 st(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(we).join("|")})`)}let n=new RegExp(`^${t.join(" ")}(?= |$)`);return r=>le(n,r)}function or(e,t){let n=rr(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]=it(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=st(i.pattern);if(!l)return!1;s!=="allow"&&t.push(l)}return!0}function ir(e){if(!B(e))return[];try{return oe(e).filter(t=>t.endsWith(".rules")).sort().map(t=>p(e,t))}catch{return"unreadable"}}function sr(){return process.platform==="win32"?p(process.env.ProgramData||"C:\\ProgramData","OpenAI","Codex","requirements.toml"):"/etc/codex/requirements.toml"}function lr(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 ur(e,t){let n;try{n=pe(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(lr);if(i.some(l=>l===void 0))return!1;let s=st(i);if(!s)return!1;t.push(s)}return!0}function ar(e){let t=process.env.CODEX_HOME||p(v(),".codex"),n=[p(t,"rules"),...Z(e).map(i=>p(i,".codex","rules"))],r=[],o=null;try{o=W(sr(),"utf8")}catch(i){let s=i.code;if(s!=="ENOENT"&&s!=="ENOTDIR")return"unreadable"}if(o!==null&&!ur(o,r))return"unreadable";for(let i of[...new Set(n)]){let s=ir(i);if(s==="unreadable")return"unreadable";for(let l of s){let u;try{u=W(l,"utf8")}catch{return"unreadable"}if(!or(u,r))return"unreadable"}}return{matchers:r,complete:!1}}function g(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function we(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function cr(e){let t=e.trim().replace(/\s+/g," "),n=t.endsWith(" *")&&t.length>2,r=(n?t.slice(0,-2):t).split("*").map(we).join("[\\s\\S]*");return new RegExp(`^${r}${n?"(?: [\\s\\S]*)?":""}(?= |$)`)}var fr=512;function dr(e){let t=e.replace(/['"\\]/g,"").split(/[\s;&|(){}<>`$]+/).filter(Boolean);return[t,t.map(ie)]}function le(e,t){if(e.test(t)||e.test(t.trim().replace(/\s+/g," ")))return!0;for(let n of dr(t)){if(n.length>fr)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=cr(e);return n=>le(t,n)}function pr(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(`^${we(r)}${n?"(?: [\\s\\S]*)?":""}$`);return i=>o.test(i)}var mr={"claude-code":Zn,cursor:Vn,"gemini-cli":Qn,opencode:tr,antigravity:nr,codex:ar},gr=new Set(["codex"]),lt=/(?:^|[\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 hr(e,t,n){let r=mr[e];return r?r(t??process.cwd(),n):{matchers:[],complete:!1}}function kr(e,t,n){return e==="unreadable"||lt.test(t.replace(/['"\\]/g,""))||e.matchers.some(r=>r(t))?!1:e.complete||tt(t,!gr.has(n))}var ut=new Set(["default","acceptEdits","dontAsk"]);function at(e,t){return t.host!=="claude-code"||t.permissionMode==="bypassPermissions"?!0:e!=="unreadable"&&e.allowsEverything===!0&&ut.has(t.permissionMode??"")}function _r(e,t){let n="pathEnv"in e?e.pathEnv:process.env.PATH,r;return o=>e.host!=="claude-code"?I(o,e.cwd,n):(r??=je(t.configDir),!I(o,e.cwd,n)&&!r.paths.some(i=>I(o,e.cwd,i))?!1:o.includes("/")||!Fe(o,r))}var br=/^[^\s;&|<>()$`\\{}*?[\]~#!]+(?: [^\s;&|<>()$`\\{}*?[\]~#!]+)*$/;function yr(e,t,n){return n.host!=="claude-code"||e==="unreadable"||at(e,n)||!ut.has(n.permissionMode??"")||!br.test(t)||lt.test(t.replace(/['"]/g,""))||(e.guards??[]).some(r=>r(t))?null:(e.trustedAllow??[]).find(r=>r.matches(t))?.rule??null}function ct(e,t,n,r){if(!n||/["\\$`;&|<>(){}]|'\\''/.test(n))return null;let o=t.claudeDirs??se(),i=hr(t.host,t.cwd,o),s=yr(i,e,t),l=s||kr(i,e,t.host)?Ln(e,n,_r(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}:at(i,t)?{command:l}:null}function O(e,t,n,r){return ct(e,t,n,r)?.command??null}import{rmSync as wr,statSync as Sr}from"node:fs";import{join as xr}from"node:path";function ft(){return xr(E(),"fail-open")}var Ar=24*36e5;function $(e=Date.now()){try{if(e-Sr(ft()).mtimeMs<Ar)return!0;wr(ft(),{force:!0})}catch{}return!1}function k(e,t){let n=e[t];return typeof n=="string"&&n?n:null}function q(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function $r(e){return k(e,"prompt_id")||k(e,"scratchpad_dir")?!0:q(e.effort)}function Tr(e){return k(e,"tool_use_id")?.startsWith("toolu_")===!0||/^claude/i.test(k(e,"model")??"")}var Cr=new Set(["BeforeTool","AfterTool","BeforeAgent","AfterAgent","BeforeModel","AfterModel","BeforeToolSelection"]),Er=new Set(["preToolUse","postToolUse","beforeShellExecution","afterShellExecution","beforeSubmitPrompt","sessionStart","sessionEnd","stop"]),Or=new Set(["pre_tool","post_tool"]),vr=new Set(["before_tool_call","after_tool_call"]),Rr=new Set(["runTerminalCommand","run_in_terminal"]),Pr=[["codex",e=>k(e,"turn_id")!==null],["claude-code",$r],["cursor",e=>k(e,"cursor_version")!==null||k(e,"generation_id")!==null||k(e,"conversation_id")!==null||Array.isArray(e.workspace_roots)||Er.has(k(e,"hook_event_name")??"")],["gemini-cli",e=>Cr.has(k(e,"hook_event_name")??"")],["qwen-code",e=>e.hook_event_name==="PreToolUse"&&e.tool_name==="run_shell_command"],["vibe",e=>Or.has(k(e,"hook_event_name")??"")],["antigravity",e=>q(e.toolCall)],["copilot",e=>k(e,"toolName")!==null&&"toolArgs"in e||Rr.has(k(e,"tool_name")??"")],["grok",e=>e.toolName==="run_terminal_command"||e.tool_name==="run_terminal_command"||q(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&&!vr.has(k(e,"event"))]],Ir=new Set(["codex","antigravity"]);function Nr(e){return q(e)?Pr.filter(([,t])=>t(e)).map(([t])=>t):[]}function dt(e,t){if(!q(e))return null;let n=Nr(e);return n.length>1?null:n.length===1?n[0]:Tr(e)&&Ir.has(t)?"claude-code":t==="codex"?null:t}var Se=JSON.stringify({permission:"allow"});function pt(e,t=A("cursor"),n=w){if(e.tool_name!=="Shell")return Se;let r=e.tool_input??{},o=r.command;if(typeof o!="string"||!o)return Se;let i=typeof r.working_directory=="string"?r.working_directory:void 0,s=O(o,{host:"cursor",sessionId:e.conversation_id??"unknown",cwd:i},$()?null:t,n);return s?JSON.stringify({permission:"allow",updated_input:{...r,command:s}}):Se}var ue="{}";function mt(e,t=A("gemini-cli"),n=w){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},$()?null:t,n);return s?JSON.stringify({hookSpecificOutput:{tool_input:{command:s}}}):ue}function N(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}var Vi=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=A(t),o=w){return e?O(e,{host:t,sessionId:n},$()?null:r,o):null}var Lr=new Set(["bash","file_system.bash"]),xe=JSON.stringify({decision:"allow"});function gt(e,t=(n,r)=>H(n,"vibe",r)){if(!N(e)||e.hook_event_name!=="pre_tool"||typeof e.tool_name!="string"||!Lr.has(e.tool_name))return"";let n=e.tool_input;if(!N(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 ht(e,t=(n,r)=>H(n,"antigravity",r)){if(!N(e)||!N(e.toolCall)||e.toolCall.name!=="run_command")return xe;let n=e.toolCall.args;if(!N(n)||typeof n.CommandLine!="string"||!n.CommandLine)return xe;let r=t(n.CommandLine,typeof e.conversationId=="string"?e.conversationId:"unknown");return r?JSON.stringify({decision:"allow",overwrite:{CommandLine:r}}):xe}function L(e){return $()?null:A(e)}function Dr(e,t,n={}){let r=n.recordUsage??w;switch(e){case"claude-code":case"codex":return t.hook_event_name!==void 0&&t.hook_event_name!=="PreToolUse"?"":nt(t,e,L(e),r,n.claudeDirs??se(),n.pathEnv??process.env.PATH,n.launchArgs??ye)??"";case"cursor":return pt(t,L(e),r);case"gemini-cli":return mt(t,L(e),r);case"vibe":return gt(t,(o,i)=>H(o,"vibe",i,L(e),r));case"antigravity":return ht(t,(o,i)=>H(o,"antigravity",i,L(e),r));default:return kt(e,t,L(e),r)}}function K(e,t,n={}){let r=dt(e,t);return r?Dr(r,e,n):n.fallback??""}var _="{}",jr=new Set(["runTerminalCommand","run_in_terminal","Bash","bash"]),Fr=["run_in_background","is_background","isBackground"];function Y(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 Ur(e,t){let n=e.cwd??t.cwd??t.workdir??t.working_directory;return typeof n=="string"&&n?n:void 0}function ae(e,t,n,r,o){if(!Y(t)||Fr.some(s=>t[s]===!0))return null;let i=t.command;return typeof i!="string"||!i?null:O(i,{host:e,sessionId:Mr(n),cwd:Ur(n,t)},$()?null:r,o)}function j(e,t){return JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",updatedInput:{...e,command:t}}})}function zr(e){if(Y(e))return e;if(typeof e!="string")return null;try{let t=JSON.parse(e);return Y(t)?t:null}catch{return null}}function Jr(e,t,n){if(typeof e.tool_name=="string"){if(!jr.has(e.tool_name))return _;let i=e.tool_input,s=ae("copilot",i,e,t,n);return s?j(i,s):_}if(e.toolName!=="bash")return _;let r=zr(e.toolArgs),o=ae("copilot",r,e,t,n);return o?JSON.stringify({modifiedArgs:{...r,command:o}}):_}function D(e,t,n){return(r,o,i)=>{if(r.tool_name!==t)return _;let s=r.tool_input,l=ae(e,s,r,o,i);return l?n(s,l):_}}var Br=new Set(["run_terminal_command","Bash","bash"]);function Wr(e,t,n){let r=e.toolName??e.tool_name;if(typeof r!="string"||!Br.has(r))return _;let o=e.toolInput??e.tool_input,i=ae("grok",o,e,t,n);return i?j(o,i):_}var Gr={copilot:Jr,droid:D("droid","Execute",j),trae:D("trae","RunCommand",j),"qwen-code":D("qwen-code","run_shell_command",j),crush:D("crush","bash",(e,t)=>JSON.stringify({updated_input:{command:t}})),junie:D("junie","Bash",(e,t)=>JSON.stringify({updatedInput:{...e,command:t}})),zcode:D("zcode","Bash",j),grok:Wr};function kt(e,t,n=A(e),r=w){return Y(t)?Gr[e](t,n,r):_}function Zr(e,t){if(!t)return _;let n;try{n=JSON.parse(t.replace(/^/,""))}catch{return _}return Y(n)?K(n,e,{fallback:_}):_}async function _t(e){process.stdout.write(Zr(e,await F()))}_t("crush").catch(e=>{process.stderr.write(`tkr-crush-hook: ${e.message}
|
|
18
|
+
`),process.stdout.write(_),process.exit(0)});
|
|
19
|
+
/*! Bundled license information:
|
|
20
|
+
|
|
21
|
+
smol-toml/dist/error.js:
|
|
22
|
+
smol-toml/dist/primitive.js:
|
|
23
|
+
smol-toml/dist/date.js:
|
|
24
|
+
smol-toml/dist/extract.js:
|
|
25
|
+
smol-toml/dist/util.js:
|
|
26
|
+
smol-toml/dist/struct.js:
|
|
27
|
+
smol-toml/dist/parse.js:
|
|
28
|
+
smol-toml/dist/stringify.js:
|
|
29
|
+
smol-toml/dist/index.js:
|
|
30
|
+
(*!
|
|
31
|
+
* Copyright (c) Squirrel Chat et al., All rights reserved.
|
|
32
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
33
|
+
*
|
|
34
|
+
* Redistribution and use in source and binary forms, with or without
|
|
35
|
+
* modification, are permitted provided that the following conditions are met:
|
|
36
|
+
*
|
|
37
|
+
* 1. Redistributions of source code must retain the above copyright notice, this
|
|
38
|
+
* list of conditions and the following disclaimer.
|
|
39
|
+
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
40
|
+
* this list of conditions and the following disclaimer in the
|
|
41
|
+
* documentation and/or other materials provided with the distribution.
|
|
42
|
+
* 3. Neither the name of the copyright holder nor the names of its contributors
|
|
43
|
+
* may be used to endorse or promote products derived from this software without
|
|
44
|
+
* specific prior written permission.
|
|
45
|
+
*
|
|
46
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
47
|
+
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
48
|
+
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
49
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
50
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
51
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
52
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
53
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
54
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
55
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
56
|
+
*)
|
|
57
|
+
*/
|