@ev-ai/agent-hook 1.2.3 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -10,7 +10,7 @@ var pu=Object.create;var Ao=Object.defineProperty;var fu=Object.getOwnPropertyDe
10
10
  `):l.join(`
11
11
  `).trimEnd();return(0,Z.usableCatalogText)(m)}});var yi=Oe(x=>{"use strict";Object.defineProperty(x,"__esModule",{value:!0});x.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES=x.COMPONENT_INSPECTION_TEXT_MAX_BYTES=x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER=void 0;x.fitSnapshotInspectionTextBudget=$p;x.capComponentTextBytes=Si;x.prepareComponentInspectionText=Bp;x.redactComponentSource=hr;x.componentSourceContainsRedactableSecret=rf;x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER="[REDACTED]";x.COMPONENT_INSPECTION_TEXT_MAX_BYTES=256*1024;x.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES=3*1024*1024;function $p(e){let t=0;return e.map(n=>{let r=n,o=r.skill?.inspectionText;if(o===void 0)return n;let s=Buffer.byteLength(o,"utf8");return t+s<=x.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES?(t+=s,n):{...n,skill:{...r.skill,inspectionText:void 0}}})}function Si(e,t){if(e==null||e.length===0)return;let n=Buffer.from(e,"utf8");if(n.byteLength<=t)return e;let r=new TextDecoder("utf-8",{fatal:!0});for(let o=t;o>0;o-=1)try{return r.decode(n.subarray(0,o))}catch{}}function Bp(e){if(!(e==null||e.length===0))return Si(hr(e),x.COMPONENT_INSPECTION_TEXT_MAX_BYTES)}var Kp="(?:[A-Za-z0-9_.-]*(?:passwd|password|secret|token|credential|credentials|apikey|api[_-]?key|access[_-]?key|secret[_-]?key|private[_-]?key|auth|authorization|session[_-]?id)[A-Za-z0-9_.-]*)",Gp=new RegExp(`(\\b${Kp})(\\s*[:=]\\s*)(?:(")([^"\\n]*)(")|(')([^'\\n]*)(')|([^\\s"'][^"'\\n]*))`,"gi"),zp=[/^(?:none|null|nil|n\/a|empty|unset|not (?:required|needed|set)|no (?:password|token|auth))(?=$|[\s.,;:()—–-])/i,/^\$\{?[A-Za-z_][A-Za-z0-9_]*\}?$/,/^\$\(.*\)$/,/^\$\{\{.*\}\}$/,/^%[A-Za-z_][A-Za-z0-9_]*%$/,/^(?:process\.env|os\.environ|import\.meta\.env)\.[A-Za-z_][A-Za-z0-9_]*[,;]?$/,/^<[^<>]*>$/,/^(?:\*{3,}|\.{3,}|…|x{3,})$/i,/^your[-_ ]/i,/^(?:see|from|via|stored in|use|ask|obtain|get|fetch|run|read|provided by|generated by)\b/i];function _r(e){let t=e.trim().replace(/^`+|`+$/g,"").trim();return zp.some(n=>n.test(t))}function Vp(e){if(e.startsWith("$(")){let n=0;for(let r=1;r<e.length;r+=1)if(e[r]==="("&&(n+=1),e[r]===")"&&(n-=1,n===0))return e.slice(0,r+1);return e}return/^(?:\$\{\{[^}]*\}\}|<[^<>]*>)/.exec(e)?.[0]??/^\S+/.exec(e)?.[0]??""}var Wp=[/\bsk-(?:proj-)?[A-Za-z0-9_-]{16,}/g,/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}/g,/\bgithub_pat_[A-Za-z0-9_]{20,}/g,/\bxox[baprs]-[A-Za-z0-9-]{10,}/g,/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,/\bAIza[0-9A-Za-z_-]{35}\b/g,/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g],Jp=/\b[A-Za-z0-9_+/-]{32,}={0,2}\b/g,Yp=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function Xp(e){let t=new Map;for(let r of e)t.set(r,(t.get(r)??0)+1);let n=0;for(let r of t.values()){let o=r/e.length;n-=o*Math.log2(o)}return n}function Zp(e){return e.replace(Jp,t=>{if(Yp.test(t))return t;let n=/[A-Za-z]/.test(t),r=/\d/.test(t);return n&&r&&Xp(t)>=3.5?x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER:t})}var qp=/\b(Bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,Qp=/\b([a-z][a-z0-9+.-]*:\/\/)([^\s/@:]+):([^\s/@]*)@/gi,ef=/([?&](?:access_token|api_key|apikey|auth|authorization|client_secret|key|password|secret|token)=)[^&\s"'<>]+/gi,tf=/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----/,hi=/-----END [A-Z0-9 ]*PRIVATE KEY-----/;function Ei(e){return e.replace(Gp,(t,n,r,o,s,i,a,c,l,u)=>{let p=`${n}${r}`;if(o!==void 0||a!==void 0){let d=o??a??"",_=i??l??"",S=s??c??"";return S===""||S.includes(x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER)||_r(S)?t:`${p}${d}${x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}${_}`}let m=u??"";if(r==="="){let d=Vp(m).replace(/`+$/,""),_=Ei(m.slice(d.length));return d===""||d.includes(x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER)||_r(d)?`${p}${d}${_}`:`${p}${x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}${_}`}return m.includes(x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER)||_r(m)?t:`${p}${x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}`})}function nf(e){let t=e.replace(Qp,(n,r)=>`${r}${x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}:${x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}@`);t=t.replace(ef,(n,r)=>`${r}${x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}`),t=t.replace(qp,(n,r)=>`${r}${x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}`);for(let n of Wp)t=t.replace(n,x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER);return Ei(Zp(t))}function hr(e){if(e.length===0)return e;let t=e.split(`
12
12
  `),n=!1;return t.map(o=>n?hi.test(o)?(n=!1,o):o.trim().length===0?o:x.COMPONENT_SOURCE_REDACTION_PLACEHOLDER:tf.test(o)&&!hi.test(o)?(n=!0,o):nf(o)).join(`
13
- `)}function rf(e){return hr(e)!==e}});var Be=Oe(g=>{"use strict";Object.defineProperty(g,"__esModule",{value:!0});g.redactComponentSource=g.prepareComponentInspectionText=g.fitSnapshotInspectionTextBudget=g.componentSourceContainsRedactableSecret=g.capComponentTextBytes=g.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES=g.COMPONENT_SOURCE_REDACTION_PLACEHOLDER=g.COMPONENT_INSPECTION_TEXT_MAX_BYTES=g.usableCatalogText=g.parseFrontmatterField=g.parseFrontmatterDescription=g.isNpmRegistryPublisher=g.EMPTY_NPM_PUBLISHER=g.displayPublisherName=g.classifyMcpProvenance=g.resolveMcpPackageIdentity=g.McpPackageEcosystem=g.pinnedPackageVersionFromSpec=g.pinnedPackageVersionFromNpx=g.packageNameFromSpec=g.npxPackageSpecs=g.npxExecBin=g.PACKAGE_FIELD_MAX=g.serializeMcpLaunchIdentity=g.projectMcpMissingLaunchIdentity=g.projectMcpLaunchIdentity=g.normalizeMcpToolNames=g.MCP_MISSING_LAUNCH_SERIALIZED=g.MCP_LAUNCH_IDENTITY_ALGORITHM=g.maskMcpLaunchForDisplay=g.launchContainsCredentials=g.hashMcpLaunchIdentity=g.foldMcpName=g.buildMcpFamilyCanonicalKey=g.ComponentKind=void 0;g.userConfigRootFromPath=mf;g.installationRootExternalKey=gf;g.normalizeRepositoryRelativePath=Ri;g.nativeKeyForSkillPath=_f;g.nativeKeyForRulePath=hf;g.nativeKeyForCommandPath=Sf;g.serializeComponentIdentity=Ii;g.buildComponentReference=yf;g.validateComponentReference=Rf;var of=Pn("node:crypto"),sf=Pn("node:path"),af="cmp1_",cf=/^cmp1_[A-Za-z0-9_-]{43}$/,uf=["/skills/","/skills-cursor/"],lf=/(?:^|\/)\.(?:cursor|claude|codex)\/rules\/(.+)$/i,df=/(?:^|\/)\.(?:cursor|claude|codex)\/(?:commands|prompts)\/(.+)$/i,pf=[".cursor",".claude",".codex"],ff={".claude.json":".claude",".agents":".codex"};g.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE",RULE:"RULE",COMMAND:"COMMAND"};function mf(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>pf.includes(o));return n||(t.map(o=>ff[o]).find(o=>o!==void 0)??"unknown")}function gf(e,t){return`runtime-install:${e}/${t}`}function Jt(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function Ri(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=sf.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return Jt(n,"sourcePath")}function _f(e){let t=e.replaceAll("\\","/");for(let n of uf){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function Ci(e,t,n){let r=e.replaceAll("\\","/"),s=t.exec(r)?.[1];if(!s||s.split("/").includes(".."))return null;let i=s.replace(n,"");return i.length>0?i:null}function hf(e){return Ci(e,lf,/\.(mdc|md|rules)$/i)}function Sf(e){return Ci(e,df,/\.(md|mdc|toml)$/i)}function Ef(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function Ii(e){let t=[Jt(e.installationRootExternalKey,"installationRootExternalKey"),Jt(e.installableKind,"installableKind"),Ri(e.sourcePath),Jt(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(Ef).join("|")}`,"utf8")}function yf(e){let t=(0,of.createHash)("sha256").update(Ii(e)).digest("base64url");return`${af}${t}`}function Rf(e){return cf.test(e)}var q=zt();Object.defineProperty(g,"buildMcpFamilyCanonicalKey",{enumerable:!0,get:function(){return q.buildMcpFamilyCanonicalKey}});Object.defineProperty(g,"foldMcpName",{enumerable:!0,get:function(){return q.foldMcpName}});Object.defineProperty(g,"hashMcpLaunchIdentity",{enumerable:!0,get:function(){return q.hashMcpLaunchIdentity}});Object.defineProperty(g,"launchContainsCredentials",{enumerable:!0,get:function(){return q.launchContainsCredentials}});Object.defineProperty(g,"maskMcpLaunchForDisplay",{enumerable:!0,get:function(){return q.maskMcpLaunchForDisplay}});Object.defineProperty(g,"MCP_LAUNCH_IDENTITY_ALGORITHM",{enumerable:!0,get:function(){return q.MCP_LAUNCH_IDENTITY_ALGORITHM}});Object.defineProperty(g,"MCP_MISSING_LAUNCH_SERIALIZED",{enumerable:!0,get:function(){return q.MCP_MISSING_LAUNCH_SERIALIZED}});Object.defineProperty(g,"normalizeMcpToolNames",{enumerable:!0,get:function(){return q.normalizeMcpToolNames}});Object.defineProperty(g,"projectMcpLaunchIdentity",{enumerable:!0,get:function(){return q.projectMcpLaunchIdentity}});Object.defineProperty(g,"projectMcpMissingLaunchIdentity",{enumerable:!0,get:function(){return q.projectMcpMissingLaunchIdentity}});Object.defineProperty(g,"serializeMcpLaunchIdentity",{enumerable:!0,get:function(){return q.serializeMcpLaunchIdentity}});var $e=Wt();Object.defineProperty(g,"PACKAGE_FIELD_MAX",{enumerable:!0,get:function(){return $e.PACKAGE_FIELD_MAX}});Object.defineProperty(g,"npxExecBin",{enumerable:!0,get:function(){return $e.npxExecBin}});Object.defineProperty(g,"npxPackageSpecs",{enumerable:!0,get:function(){return $e.npxPackageSpecs}});Object.defineProperty(g,"packageNameFromSpec",{enumerable:!0,get:function(){return $e.packageNameFromSpec}});Object.defineProperty(g,"pinnedPackageVersionFromNpx",{enumerable:!0,get:function(){return $e.pinnedPackageVersionFromNpx}});Object.defineProperty(g,"pinnedPackageVersionFromSpec",{enumerable:!0,get:function(){return $e.pinnedPackageVersionFromSpec}});var Ai=ui();Object.defineProperty(g,"McpPackageEcosystem",{enumerable:!0,get:function(){return Ai.McpPackageEcosystem}});Object.defineProperty(g,"resolveMcpPackageIdentity",{enumerable:!0,get:function(){return Ai.resolveMcpPackageIdentity}});var Yt=gi();Object.defineProperty(g,"classifyMcpProvenance",{enumerable:!0,get:function(){return Yt.classifyMcpProvenance}});Object.defineProperty(g,"displayPublisherName",{enumerable:!0,get:function(){return Yt.displayPublisherName}});Object.defineProperty(g,"EMPTY_NPM_PUBLISHER",{enumerable:!0,get:function(){return Yt.EMPTY_NPM_PUBLISHER}});Object.defineProperty(g,"isNpmRegistryPublisher",{enumerable:!0,get:function(){return Yt.isNpmRegistryPublisher}});var Sr=_i();Object.defineProperty(g,"parseFrontmatterDescription",{enumerable:!0,get:function(){return Sr.parseFrontmatterDescription}});Object.defineProperty(g,"parseFrontmatterField",{enumerable:!0,get:function(){return Sr.parseFrontmatterField}});Object.defineProperty(g,"usableCatalogText",{enumerable:!0,get:function(){return Sr.usableCatalogText}});var Ie=yi();Object.defineProperty(g,"COMPONENT_INSPECTION_TEXT_MAX_BYTES",{enumerable:!0,get:function(){return Ie.COMPONENT_INSPECTION_TEXT_MAX_BYTES}});Object.defineProperty(g,"COMPONENT_SOURCE_REDACTION_PLACEHOLDER",{enumerable:!0,get:function(){return Ie.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}});Object.defineProperty(g,"SNAPSHOT_INSPECTION_TEXT_MAX_BYTES",{enumerable:!0,get:function(){return Ie.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES}});Object.defineProperty(g,"capComponentTextBytes",{enumerable:!0,get:function(){return Ie.capComponentTextBytes}});Object.defineProperty(g,"componentSourceContainsRedactableSecret",{enumerable:!0,get:function(){return Ie.componentSourceContainsRedactableSecret}});Object.defineProperty(g,"fitSnapshotInspectionTextBudget",{enumerable:!0,get:function(){return Ie.fitSnapshotInspectionTextBudget}});Object.defineProperty(g,"prepareComponentInspectionText",{enumerable:!0,get:function(){return Ie.prepareComponentInspectionText}});Object.defineProperty(g,"redactComponentSource",{enumerable:!0,get:function(){return Ie.redactComponentSource}})});import{realpathSync as US}from"node:fs";import{resolve as DS}from"node:path";import{fileURLToPath as HS,pathToFileURL as FS}from"node:url";import{createHash as Su}from"node:crypto";import{homedir as Eu}from"node:os";import{dirname as VS,join as yu,parse as WS,resolve as JS}from"node:path";var Oo="https://hooks.ev-ai.ai",xt=".claude/ev-ai-runtime-report.json",xo="config.json",YS=1024*1024,Ru=new Set(["localhost","127.0.0.1","[::1]","::1"]),Cu=["claude","cursor","codex"],Pt=[xt,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"],bn=/^[A-Za-z0-9._~-]+$/;function bt(e){return e!==void 0&&Cu.includes(e)}function Ot(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function Ze(e){let t,n,r,o,s;for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0){if(a==="--runner"){let c=Ot(e,i);t=c.value,i=c.next;continue}if(a.startsWith("--runner=")){t=a.slice(9);continue}if(a==="--url"){let c=Ot(e,i);c.value&&(r=c.value),i=c.next;continue}if(a.startsWith("--url=")){r=a.slice(6);continue}if(a==="--token"){let c=Ot(e,i);c.value&&(o=c.value),i=c.next;continue}if(a.startsWith("--token=")){o=a.slice(8);continue}if(a==="--base-url"){let c=Ot(e,i);c.value&&(s=c.value),i=c.next;continue}if(a.startsWith("--base-url=")){s=a.slice(11);continue}!a.startsWith("-")&&n===void 0&&(n=a)}}return{runner:bt(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function Tt(e,t=Oo){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}function Tn(e=Eu()){return yu(e,".ev-ai",xo)}function Po(e,t){return{...e,...t}}function ko(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<=32||n===127||n===39)return!0}return!1}function qe(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?Ru.has(t.hostname):!1}catch{return!1}}function Nn(e){try{let n=new URL(e).pathname.split("/").filter(r=>r.length>0);if(n.length>=2&&n[n.length-1]==="hook"){let r=n[n.length-2];return r&&r.length>0?r:void 0}return}catch{return}}function Le(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!qe(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=Nn(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!bn.test(n))return`org token must match ${bn.source} (got: ${n})`;if(ko(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(ko(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function Qe(e){return new URL(e).toString()}function vn(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token,n=typeof t=="string"?t.trim():void 0;return n?Tt(n):""}function Nt(e){try{let t=new URL(e),n=t.pathname.split("/").filter(r=>r.length>0);return n.length>=2&&n[n.length-1]==="hook"&&(n[n.length-2]="***",t.pathname=`/${n.join("/")}`),t.toString()}catch{return"<invalid-url>"}}function bo(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=Tt(o,e.baseUrl?.trim()??void 0))}if(!n)return{};let r=Le(n);return r?{problem:r}:{url:Qe(n)}}function To(e){if(Le(e))return;let t;try{t=new URL(e)}catch{return}let n=Nn(e);if(!n)return;let o=t.pathname.split("/").filter(a=>a.length>0).slice(0,-2),s=o.length>0?`/${o.join("/")}`:"",i=`${t.origin}${s}/${n}`;return Su("sha256").update(i).digest("hex").slice(0,32)}var ge=2,No="node_modules/@ev-ai/agent-hook/dist/hook.mjs",ee="ev-ai-agent-hook";function Iu(e){let t=e.split(/[/\\]/).pop();return t&&t.length>0?t:e}function vt(e){let t=Iu(e);return t===ee||t===`${ee}.exe`}var vo="https://cdn.ev-ai.ai/agent-hook";var wn=`current/${ee}`,Mn=`.ev-ai/agent-hook/${ee}`,wo=5e3,Mo=5e3,Ln=3e3;var Un=3e3,Lo=1500,Uo=4*1024,Dn=256*1024,Au=4*1024,Do=32*1024,et=840*60*1e3,se="1.2.3",wt=`@ev-ai/agent-hook@${se}`,Ho="ev-ai runtime report";import{chmodSync as Is,cpSync as As,existsSync as he,mkdirSync as or,readFileSync as Tl,rmSync as jt,symlinkSync as Nl,writeFileSync as vl}from"node:fs";import{homedir as ue}from"node:os";import{dirname as sr,isAbsolute as wl,join as P,relative as ks,resolve as Rs,sep as Ml}from"node:path";import{fileURLToPath as Ll}from"node:url";import{existsSync as ku,readdirSync as Fo}from"node:fs";import{homedir as Mt}from"node:os";import{join as K}from"node:path";function jo(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/ClaudeCode";case"win32":return K(process.env.ProgramFiles??"C:\\Program Files","ClaudeCode");default:return"/etc/claude-code"}}function Hn(e=process.platform){let t=jo(e),n=[K(t,"managed-settings.json")],r=K(t,"managed-settings.d");try{if(!ku(r))return n;let o=Fo(r).filter(s=>s.endsWith(".json")&&!s.startsWith(".")).sort().map(s=>K(r,s));n.push(...o)}catch{}return n}function Fn(e=process.platform,t=Mt()){return{serverManaged:K(t,".claude","remote-settings.json"),fileBased:Hn(e)}}function Ou(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/Cursor";case"win32":return K(process.env.ProgramData??"C:\\ProgramData","Cursor");default:return"/etc/cursor"}}function xu(e=process.platform,t=Mt()){let n=[K(Ou(e),"hooks.json")],r=K(t,".cursor","managed");try{for(let o of Fo(r,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||n.push(K(r,o.name,"hooks.json"))}catch{}return n}function Pu(e=process.platform,t=Mt()){let n=e==="win32"?K(process.env.ProgramData??"C:\\ProgramData","OpenAI","Codex"):"/etc/codex",r=[K(n,"requirements.toml")];return e!=="win32"&&r.push(K(n,"managed_config.toml")),r.push(K(t,".codex","managed_config.toml"),K(n,"config.toml")),r}function Lt(e,t=process.platform,n=Mt()){switch(e){case"claude":{let{serverManaged:r,fileBased:o}=Fn(t,n);return[r,...o]}case"cursor":return xu(t,n);default:return Pu(t,n)}}import{createHash as ts,randomBytes as Zu}from"node:crypto";import{existsSync as ns,mkdirSync as Yn,readFileSync as rs,unlinkSync as os,writeFileSync as ss}from"node:fs";import{homedir as Xn}from"node:os";import{dirname as Dt,join as Zn,resolve as qu}from"node:path";var bu=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),Tu=new Set(["github-actions","github actions","dependabot","renovate","cursoragent","cursor agent"]);function z(e,t){let n=(e??"").trim().toLowerCase(),r=(t??"").trim().toLowerCase();if(!n&&!r)return!1;if(n.includes("[bot]")||Tu.has(n)||r.includes("[bot]")||bu.has(r))return!0;if(r.endsWith("@users.noreply.github.com")){let o=r.slice(0,r.indexOf("@")),s=o.includes("+")?o.slice(o.indexOf("+")+1):o;if(s.endsWith("bot")||s.includes("[bot]"))return!0}return!1}import{existsSync as Hu,readFileSync as Fu}from"node:fs";import{hostname as Jo,userInfo as ju}from"node:os";import{randomBytes as Nu}from"node:crypto";import{existsSync as $n,mkdirSync as vu,readdirSync as wu,readFileSync as Mu,renameSync as $o,statSync as Go,unlinkSync as Bo,writeFileSync as Lu}from"node:fs";import{basename as Uu,dirname as Ko,join as zo,relative as Du}from"node:path";function f(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
13
+ `)}function rf(e){return hr(e)!==e}});var Be=Oe(g=>{"use strict";Object.defineProperty(g,"__esModule",{value:!0});g.redactComponentSource=g.prepareComponentInspectionText=g.fitSnapshotInspectionTextBudget=g.componentSourceContainsRedactableSecret=g.capComponentTextBytes=g.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES=g.COMPONENT_SOURCE_REDACTION_PLACEHOLDER=g.COMPONENT_INSPECTION_TEXT_MAX_BYTES=g.usableCatalogText=g.parseFrontmatterField=g.parseFrontmatterDescription=g.isNpmRegistryPublisher=g.EMPTY_NPM_PUBLISHER=g.displayPublisherName=g.classifyMcpProvenance=g.resolveMcpPackageIdentity=g.McpPackageEcosystem=g.pinnedPackageVersionFromSpec=g.pinnedPackageVersionFromNpx=g.packageNameFromSpec=g.npxPackageSpecs=g.npxExecBin=g.PACKAGE_FIELD_MAX=g.serializeMcpLaunchIdentity=g.projectMcpMissingLaunchIdentity=g.projectMcpLaunchIdentity=g.normalizeMcpToolNames=g.MCP_MISSING_LAUNCH_SERIALIZED=g.MCP_LAUNCH_IDENTITY_ALGORITHM=g.maskMcpLaunchForDisplay=g.launchContainsCredentials=g.hashMcpLaunchIdentity=g.foldMcpName=g.buildMcpFamilyCanonicalKey=g.ComponentKind=void 0;g.userConfigRootFromPath=mf;g.installationRootExternalKey=gf;g.normalizeRepositoryRelativePath=Ri;g.nativeKeyForSkillPath=_f;g.nativeKeyForRulePath=hf;g.nativeKeyForCommandPath=Sf;g.serializeComponentIdentity=Ii;g.buildComponentReference=yf;g.validateComponentReference=Rf;var of=Pn("node:crypto"),sf=Pn("node:path"),af="cmp1_",cf=/^cmp1_[A-Za-z0-9_-]{43}$/,uf=["/skills/","/skills-cursor/"],lf=/(?:^|\/)\.(?:cursor|claude|codex)\/rules\/(.+)$/i,df=/(?:^|\/)\.(?:cursor|claude|codex)\/(?:commands|prompts)\/(.+)$/i,pf=[".cursor",".claude",".codex"],ff={".claude.json":".claude",".agents":".codex"};g.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE",RULE:"RULE",COMMAND:"COMMAND"};function mf(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>pf.includes(o));return n||(t.map(o=>ff[o]).find(o=>o!==void 0)??"unknown")}function gf(e,t){return`runtime-install:${e}/${t}`}function Jt(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function Ri(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=sf.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return Jt(n,"sourcePath")}function _f(e){let t=e.replaceAll("\\","/");for(let n of uf){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function Ci(e,t,n){let r=e.replaceAll("\\","/"),s=t.exec(r)?.[1];if(!s||s.split("/").includes(".."))return null;let i=s.replace(n,"");return i.length>0?i:null}function hf(e){return Ci(e,lf,/\.(mdc|md|rules)$/i)}function Sf(e){return Ci(e,df,/\.(md|mdc|toml)$/i)}function Ef(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function Ii(e){let t=[Jt(e.installationRootExternalKey,"installationRootExternalKey"),Jt(e.installableKind,"installableKind"),Ri(e.sourcePath),Jt(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(Ef).join("|")}`,"utf8")}function yf(e){let t=(0,of.createHash)("sha256").update(Ii(e)).digest("base64url");return`${af}${t}`}function Rf(e){return cf.test(e)}var q=zt();Object.defineProperty(g,"buildMcpFamilyCanonicalKey",{enumerable:!0,get:function(){return q.buildMcpFamilyCanonicalKey}});Object.defineProperty(g,"foldMcpName",{enumerable:!0,get:function(){return q.foldMcpName}});Object.defineProperty(g,"hashMcpLaunchIdentity",{enumerable:!0,get:function(){return q.hashMcpLaunchIdentity}});Object.defineProperty(g,"launchContainsCredentials",{enumerable:!0,get:function(){return q.launchContainsCredentials}});Object.defineProperty(g,"maskMcpLaunchForDisplay",{enumerable:!0,get:function(){return q.maskMcpLaunchForDisplay}});Object.defineProperty(g,"MCP_LAUNCH_IDENTITY_ALGORITHM",{enumerable:!0,get:function(){return q.MCP_LAUNCH_IDENTITY_ALGORITHM}});Object.defineProperty(g,"MCP_MISSING_LAUNCH_SERIALIZED",{enumerable:!0,get:function(){return q.MCP_MISSING_LAUNCH_SERIALIZED}});Object.defineProperty(g,"normalizeMcpToolNames",{enumerable:!0,get:function(){return q.normalizeMcpToolNames}});Object.defineProperty(g,"projectMcpLaunchIdentity",{enumerable:!0,get:function(){return q.projectMcpLaunchIdentity}});Object.defineProperty(g,"projectMcpMissingLaunchIdentity",{enumerable:!0,get:function(){return q.projectMcpMissingLaunchIdentity}});Object.defineProperty(g,"serializeMcpLaunchIdentity",{enumerable:!0,get:function(){return q.serializeMcpLaunchIdentity}});var $e=Wt();Object.defineProperty(g,"PACKAGE_FIELD_MAX",{enumerable:!0,get:function(){return $e.PACKAGE_FIELD_MAX}});Object.defineProperty(g,"npxExecBin",{enumerable:!0,get:function(){return $e.npxExecBin}});Object.defineProperty(g,"npxPackageSpecs",{enumerable:!0,get:function(){return $e.npxPackageSpecs}});Object.defineProperty(g,"packageNameFromSpec",{enumerable:!0,get:function(){return $e.packageNameFromSpec}});Object.defineProperty(g,"pinnedPackageVersionFromNpx",{enumerable:!0,get:function(){return $e.pinnedPackageVersionFromNpx}});Object.defineProperty(g,"pinnedPackageVersionFromSpec",{enumerable:!0,get:function(){return $e.pinnedPackageVersionFromSpec}});var Ai=ui();Object.defineProperty(g,"McpPackageEcosystem",{enumerable:!0,get:function(){return Ai.McpPackageEcosystem}});Object.defineProperty(g,"resolveMcpPackageIdentity",{enumerable:!0,get:function(){return Ai.resolveMcpPackageIdentity}});var Yt=gi();Object.defineProperty(g,"classifyMcpProvenance",{enumerable:!0,get:function(){return Yt.classifyMcpProvenance}});Object.defineProperty(g,"displayPublisherName",{enumerable:!0,get:function(){return Yt.displayPublisherName}});Object.defineProperty(g,"EMPTY_NPM_PUBLISHER",{enumerable:!0,get:function(){return Yt.EMPTY_NPM_PUBLISHER}});Object.defineProperty(g,"isNpmRegistryPublisher",{enumerable:!0,get:function(){return Yt.isNpmRegistryPublisher}});var Sr=_i();Object.defineProperty(g,"parseFrontmatterDescription",{enumerable:!0,get:function(){return Sr.parseFrontmatterDescription}});Object.defineProperty(g,"parseFrontmatterField",{enumerable:!0,get:function(){return Sr.parseFrontmatterField}});Object.defineProperty(g,"usableCatalogText",{enumerable:!0,get:function(){return Sr.usableCatalogText}});var Ie=yi();Object.defineProperty(g,"COMPONENT_INSPECTION_TEXT_MAX_BYTES",{enumerable:!0,get:function(){return Ie.COMPONENT_INSPECTION_TEXT_MAX_BYTES}});Object.defineProperty(g,"COMPONENT_SOURCE_REDACTION_PLACEHOLDER",{enumerable:!0,get:function(){return Ie.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}});Object.defineProperty(g,"SNAPSHOT_INSPECTION_TEXT_MAX_BYTES",{enumerable:!0,get:function(){return Ie.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES}});Object.defineProperty(g,"capComponentTextBytes",{enumerable:!0,get:function(){return Ie.capComponentTextBytes}});Object.defineProperty(g,"componentSourceContainsRedactableSecret",{enumerable:!0,get:function(){return Ie.componentSourceContainsRedactableSecret}});Object.defineProperty(g,"fitSnapshotInspectionTextBudget",{enumerable:!0,get:function(){return Ie.fitSnapshotInspectionTextBudget}});Object.defineProperty(g,"prepareComponentInspectionText",{enumerable:!0,get:function(){return Ie.prepareComponentInspectionText}});Object.defineProperty(g,"redactComponentSource",{enumerable:!0,get:function(){return Ie.redactComponentSource}})});import{realpathSync as US}from"node:fs";import{resolve as DS}from"node:path";import{fileURLToPath as HS,pathToFileURL as FS}from"node:url";import{createHash as Su}from"node:crypto";import{homedir as Eu}from"node:os";import{dirname as VS,join as yu,parse as WS,resolve as JS}from"node:path";var Oo="https://hooks.ev-ai.ai",xt=".claude/ev-ai-runtime-report.json",xo="config.json",YS=1024*1024,Ru=new Set(["localhost","127.0.0.1","[::1]","::1"]),Cu=["claude","cursor","codex"],Pt=[xt,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"],bn=/^[A-Za-z0-9._~-]+$/;function bt(e){return e!==void 0&&Cu.includes(e)}function Ot(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function Ze(e){let t,n,r,o,s;for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0){if(a==="--runner"){let c=Ot(e,i);t=c.value,i=c.next;continue}if(a.startsWith("--runner=")){t=a.slice(9);continue}if(a==="--url"){let c=Ot(e,i);c.value&&(r=c.value),i=c.next;continue}if(a.startsWith("--url=")){r=a.slice(6);continue}if(a==="--token"){let c=Ot(e,i);c.value&&(o=c.value),i=c.next;continue}if(a.startsWith("--token=")){o=a.slice(8);continue}if(a==="--base-url"){let c=Ot(e,i);c.value&&(s=c.value),i=c.next;continue}if(a.startsWith("--base-url=")){s=a.slice(11);continue}!a.startsWith("-")&&n===void 0&&(n=a)}}return{runner:bt(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function Tt(e,t=Oo){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}function Tn(e=Eu()){return yu(e,".ev-ai",xo)}function Po(e,t){return{...e,...t}}function ko(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<=32||n===127||n===39)return!0}return!1}function qe(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?Ru.has(t.hostname):!1}catch{return!1}}function Nn(e){try{let n=new URL(e).pathname.split("/").filter(r=>r.length>0);if(n.length>=2&&n[n.length-1]==="hook"){let r=n[n.length-2];return r&&r.length>0?r:void 0}return}catch{return}}function Le(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!qe(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=Nn(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!bn.test(n))return`org token must match ${bn.source} (got: ${n})`;if(ko(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(ko(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function Qe(e){return new URL(e).toString()}function vn(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token,n=typeof t=="string"?t.trim():void 0;return n?Tt(n):""}function Nt(e){try{let t=new URL(e),n=t.pathname.split("/").filter(r=>r.length>0);return n.length>=2&&n[n.length-1]==="hook"&&(n[n.length-2]="***",t.pathname=`/${n.join("/")}`),t.toString()}catch{return"<invalid-url>"}}function bo(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=Tt(o,e.baseUrl?.trim()??void 0))}if(!n)return{};let r=Le(n);return r?{problem:r}:{url:Qe(n)}}function To(e){if(Le(e))return;let t;try{t=new URL(e)}catch{return}let n=Nn(e);if(!n)return;let o=t.pathname.split("/").filter(a=>a.length>0).slice(0,-2),s=o.length>0?`/${o.join("/")}`:"",i=`${t.origin}${s}/${n}`;return Su("sha256").update(i).digest("hex").slice(0,32)}var ge=2,No="node_modules/@ev-ai/agent-hook/dist/hook.mjs",ee="ev-ai-agent-hook";function Iu(e){let t=e.split(/[/\\]/).pop();return t&&t.length>0?t:e}function vt(e){let t=Iu(e);return t===ee||t===`${ee}.exe`}var vo="https://cdn.ev-ai.ai/agent-hook";var wn=`current/${ee}`,Mn=`.ev-ai/agent-hook/${ee}`,wo=5e3,Mo=5e3,Ln=3e3;var Un=3e3,Lo=1500,Uo=4*1024,Dn=256*1024,Au=4*1024,Do=32*1024,et=840*60*1e3,se="1.2.4",wt=`@ev-ai/agent-hook@${se}`,Ho="ev-ai runtime report";import{chmodSync as Is,cpSync as As,existsSync as he,mkdirSync as or,readFileSync as Tl,rmSync as jt,symlinkSync as Nl,writeFileSync as vl}from"node:fs";import{homedir as ue}from"node:os";import{dirname as sr,isAbsolute as wl,join as P,relative as ks,resolve as Rs,sep as Ml}from"node:path";import{fileURLToPath as Ll}from"node:url";import{existsSync as ku,readdirSync as Fo}from"node:fs";import{homedir as Mt}from"node:os";import{join as K}from"node:path";function jo(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/ClaudeCode";case"win32":return K(process.env.ProgramFiles??"C:\\Program Files","ClaudeCode");default:return"/etc/claude-code"}}function Hn(e=process.platform){let t=jo(e),n=[K(t,"managed-settings.json")],r=K(t,"managed-settings.d");try{if(!ku(r))return n;let o=Fo(r).filter(s=>s.endsWith(".json")&&!s.startsWith(".")).sort().map(s=>K(r,s));n.push(...o)}catch{}return n}function Fn(e=process.platform,t=Mt()){return{serverManaged:K(t,".claude","remote-settings.json"),fileBased:Hn(e)}}function Ou(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/Cursor";case"win32":return K(process.env.ProgramData??"C:\\ProgramData","Cursor");default:return"/etc/cursor"}}function xu(e=process.platform,t=Mt()){let n=[K(Ou(e),"hooks.json")],r=K(t,".cursor","managed");try{for(let o of Fo(r,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||n.push(K(r,o.name,"hooks.json"))}catch{}return n}function Pu(e=process.platform,t=Mt()){let n=e==="win32"?K(process.env.ProgramData??"C:\\ProgramData","OpenAI","Codex"):"/etc/codex",r=[K(n,"requirements.toml")];return e!=="win32"&&r.push(K(n,"managed_config.toml")),r.push(K(t,".codex","managed_config.toml"),K(n,"config.toml")),r}function Lt(e,t=process.platform,n=Mt()){switch(e){case"claude":{let{serverManaged:r,fileBased:o}=Fn(t,n);return[r,...o]}case"cursor":return xu(t,n);default:return Pu(t,n)}}import{createHash as ts,randomBytes as Zu}from"node:crypto";import{existsSync as ns,mkdirSync as Yn,readFileSync as rs,unlinkSync as os,writeFileSync as ss}from"node:fs";import{homedir as Xn}from"node:os";import{dirname as Dt,join as Zn,resolve as qu}from"node:path";var bu=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),Tu=new Set(["github-actions","github actions","dependabot","renovate","cursoragent","cursor agent"]);function z(e,t){let n=(e??"").trim().toLowerCase(),r=(t??"").trim().toLowerCase();if(!n&&!r)return!1;if(n.includes("[bot]")||Tu.has(n)||r.includes("[bot]")||bu.has(r))return!0;if(r.endsWith("@users.noreply.github.com")){let o=r.slice(0,r.indexOf("@")),s=o.includes("+")?o.slice(o.indexOf("+")+1):o;if(s.endsWith("bot")||s.includes("[bot]"))return!0}return!1}import{existsSync as Hu,readFileSync as Fu}from"node:fs";import{hostname as Jo,userInfo as ju}from"node:os";import{randomBytes as Nu}from"node:crypto";import{existsSync as $n,mkdirSync as vu,readdirSync as wu,readFileSync as Mu,renameSync as $o,statSync as Go,unlinkSync as Bo,writeFileSync as Lu}from"node:fs";import{basename as Uu,dirname as Ko,join as zo,relative as Du}from"node:path";function f(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
14
14
  `)}function te(e,t){vu(Ko(e),{recursive:!0});let n=zo(Ko(e),`.${Uu(e)}.${process.pid}.${Nu(4).toString("hex")}.tmp`);try{Lu(n,t,"utf8");try{$o(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){Bo(e),$o(n,e);return}throw r}}catch(r){try{Bo(n)}catch{}throw r}}function Ut(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function Vo(){process.stdout.write('{"continue":true}')}function I(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function tt(){return new Promise(e=>{let t="";if(process.stdin.isTTY){e("");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",n=>{t+=n}),process.stdin.on("end",()=>{e(t)}),process.stdin.on("error",()=>{e(t)}),process.stdin.resume()})}async function Bn(e){return new Promise(t=>{let n="",r=!1,o=i=>{r||(r=!0,clearTimeout(s),t(i||"{}"))},s=setTimeout(()=>{o(n)},e);if(process.stdin.isTTY){o("{}");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>{o(n)}),process.stdin.on("error",()=>{o(n)}),process.stdin.resume()})}async function X(e,t,n=3e3,r={}){let{execFile:o}=await import("node:child_process"),{promisify:s}=await import("node:util"),i=s(o);try{let{stdout:a}=await i(e,t,{timeout:n,windowsHide:!0,maxBuffer:1048576,cwd:r.cwd});return{ok:!0,stdout:a.trim()}}catch(a){let c=a,l=typeof c.code=="number"?c.code:typeof c.status=="number"?c.status:void 0;return{ok:!1,code:l,spawnFailed:l===void 0}}}async function M(e,t,n=3e3,r={}){let o=await X(e,t,n,r);return o.ok?o.stdout:""}async function Kn(e=process.cwd()){let t=await X("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(I("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;f(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=I("CURSOR_PROJECT_DIR")??I("CLAUDE_PROJECT_DIR");if(n&&$n(n)){let r=await X("git",["rev-parse","--show-toplevel"],2e3,{cwd:n});return r.ok&&r.stdout?{root:r.stdout,inGitRepo:!0}:{root:n,inGitRepo:!1}}return{root:e,inGitRepo:!1}}async function ie(e=process.cwd()){return(await Kn(e)).root}function $(e,t){try{return JSON.parse(e)}catch{return t}}var jn=new Map;function F(e,t){let n=jn.get(e);if(n!==void 0)return n;try{let r=$(Mu(e,"utf8"),t);return jn.set(e,r),r}catch{return jn.set(e,t),t}}function xe(e){return typeof e=="string"?e:""}function ae(e,t){let n=e[t];if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return n;if(!t.includes("."))return;let r=t.split("."),o=e;for(let s of r){if(o===null||typeof o!="object"||Array.isArray(o))return;o=o[s]}if(typeof o=="string"||typeof o=="number"||typeof o=="boolean")return o}function h(e,t){let n=ae(e,t);return typeof n=="string"?n:""}var _e=500;function Wo(e,t=2){if(!$n(e))return{entries:[],truncated:!1};let n=[],r=!1,o=(s,i)=>{if(i>t||r)return;let a;try{a=wu(s,{withFileTypes:!0})}catch{return}for(let c of a){if(r)return;let l=zo(s,c.name);if(c.isDirectory()){o(l,i+1);continue}if(c.isFile()){try{n.push({name:Du(e,l),size:Go(l).size})}catch{continue}if(n.length>=_e){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function Gn(e){return $n(e)?{present:!0,size:Go(e).size}:{present:!1,size:0}}function Ue(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function zn(e=process.env){return Ue(N("CURSOR_SANDBOX",e))}var $u=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Bu(e){return $u.some(t=>!!N(t,e))}function Ku(e){if(N("KUBERNETES_SERVICE_HOST",e)||Ue(N("REMOTE_CONTAINERS",e))||Ue(N("DEVCONTAINER",e)))return!0;try{if(Hu("/.dockerenv")||Fu("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function Yo(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!N(t,e))}function Gu(e,t=process.platform){return Yo(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!N(n,e)):!1}function zu(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function Vu(e){return e==="linux"}function N(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return I(e)}function Wu(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!Ju(N("CURSOR_VERSION",n))}function Ju(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function Vn(e){if(zu(e.sessionId))return!0;let t=e.hostname??Jo(),n=e.osUser??Xo(e.env);return Wu(t,n,e.env)}function Yu(e){return Ue(N("CURSOR_AGENT",e.env))?!0:Vn(e)}function Xu(e){return!!(process.stdin.isTTY||process.stdout.isTTY||(N("TERM",e)??N("TERM_PROGRAM",e))||(N("SSH_TTY",e)??N("SSH_CONNECTION",e))||(N("__CFBundleIdentifier",e)??N("XPC_SERVICE_NAME",e))||Yo(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!N(t,e))||N("SESSIONNAME",e))}function nt(e={}){let t=e.env;if(N("GITHUB_ACTIONS",t))return"github_actions";if(Ue(N("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!Gu(t,n)&&Yu(e)&&(Ue(N("CURSOR_AGENT",t))||Vu(n)))return"cursor_cloud";if(N("CODESPACES",t)||N("CODESPACE_NAME",t))return"codespaces";if(N("GITLAB_CI",t))return"gitlab_ci";if(Bu(t))return"managed";let r=N("CI",t);return r&&r!=="false"&&r!=="0"?"managed":Ku(t)?"container":Xu(t)?"interactive":"unknown"}async function Wn(){return await M("systemd-detect-virt",[],1e3)}function Xo(e=process.env,t=ju){for(let n of["USER","LOGNAME","USERNAME"]){let r=e[n];if(typeof r=="string"){let o=r.trim();if(o.length>0)return o}}try{return t().username??""}catch{return""}}async function Jn(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await M("sw_vers",["-productVersion"],1e3);else if(process.platform==="linux"){try{let{readFileSync:s}=await import("node:fs"),i=s("/etc/os-release","utf8"),a=i.match(/^PRETTY_NAME="?([^"\n]+)"?/m)?.[1],c=i.match(/^VERSION_ID="?([^"\n]+)"?/m)?.[1];t=a??c??""}catch{t=await M("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await M("uname",["-r"],1e3))}else t=await M("ver",[],1e3);let n=Xo(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await M("tty",[],500),o.includes("not a tty")&&(o="")}catch{o=""}return{os:e,os_version:t||null,user:n||null,shell:r||null,tty:o||null}}function rt(){return Jo()}var Qu="installation.json",el="cloud-bootstrap.lock",tl=6e4;function is(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function ce(e=Xn()){return Zn(e,".ev-ai","agent-hook")}function nl(e=Xn()){return Zn(ce(e),Qu)}function as(e){return Zn(Dt(e),el)}function cs(){return Zu(8).toString("hex")}function De(e){return ts("sha256").update(e).digest("hex").slice(0,16)}function A(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function us(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function rl(e=process.env){let t=A(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!us(t)){f(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function ls(e,t){return e&&us(e)?e:(e&&f(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),rl(t))}function ol(e){return/^[0-9a-f]{16}$/.test(e)}function sl(e=process.env){if(A(e.GITHUB_ACTIONS)){let t=A(e.GITHUB_REPOSITORY_ID)??A(e.GITHUB_REPOSITORY),n=A(e.GITHUB_ACTOR)??A(e.GITHUB_TRIGGERING_ACTOR)??A(e.GITHUB_USER);if(t&&n)return De(`github_actions|${t}|${n}`)}if(A(e.CODESPACES)||A(e.CODESPACE_NAME)){let t=A(e.CODESPACE_NAME);if(t)return De(`codespaces|${t}`);let n=A(e.GITHUB_REPOSITORY_ID)??A(e.GITHUB_REPOSITORY),r=A(e.GITHUB_USER)??A(e.GITHUB_ACTOR);if(n&&r)return De(`codespaces|${n}|${r}`)}if(A(e.GITLAB_CI)){let t=A(e.CI_PROJECT_ID)??A(e.CI_PROJECT_PATH),n=A(e.GITLAB_USER_LOGIN)??A(e.GITLAB_USER_EMAIL)??A(e.GITLAB_USER_NAME);if(t&&n)return De(`gitlab|${t}|${n}`)}return null}var il="cursoragent@cursor.com";function al(e){let t=A(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===il?null:t}function cl(e,t){return A(e.CURSOR_PROJECT_DIR)??A(e.CLAUDE_PROJECT_DIR)??t}function ul(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function ll(e){let t=await M("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?ul(t):e}async function dl(e){let t=A(await M("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!z(null,t))return t;let n=A(await M("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!z(null,n)?n:null}function pl(e,t){let n=cl(e,t);return n?De(`cursor_cloud|${n}|${al(e)??""}`):null}async function fl(e,t){let n=A(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await ll(n),o=await dl(n);return De(`claude_remote|${r}|${o??""}`)}function Zo(e,t){let n=ls(e,t);if(n)return n;let r=sl(t);return r||cs()}async function ml(e){let n=await M("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||qu(e);return ts("sha256").update(n).digest("hex").slice(0,16)}function gl(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r=="string"&&r.length>0&&(t[n]=r);return Object.keys(t).length>0?t:void 0}function _l(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=gl(t.platform_agent_ids);return{installation_id:t.installation_id,...t.pinned===!0?{pinned:!0}:{},...n?{platform_agent_ids:n}:{},...typeof t.operator_identity_hash=="string"?{operator_identity_hash:t.operator_identity_hash}:{},...typeof t.operator_identity_sent_at=="string"?{operator_identity_sent_at:t.operator_identity_sent_at}:{}}}catch{return}}function Pe(e){if(ns(e))try{return _l(rs(e,"utf8"))}catch{}}function qn(e){return Pe(e)}function ds(e,t,n){let r=Pe(e);if(!r||r.operator_identity_hash===t&&r.operator_identity_sent_at===n)return;let o={...r,operator_identity_hash:t,operator_identity_sent_at:n};try{te(e,`${JSON.stringify(o,null,2)}
15
15
  `)}catch(s){let i=s instanceof Error?s.message:String(s);f(`WARN: operator identity cache write failed open: ${i}`)}}function ps(e,t=Date.now()){if(!e)return!0;if(Pe(e)?.operator_identity_hash)return!1;let n=as(e);try{if(ns(n)){let r=Number.NaN;try{r=Number(rs(n,"utf8").trim())}catch{}let o=t-r;if(Number.isFinite(o)&&o>=0&&o<tl)return!1;try{os(n)}catch{}}}catch{}try{return Yn(Dt(n),{recursive:!0}),ss(n,`${t}
16
16
  `,{encoding:"utf8",flag:"wx"}),!0}catch(r){if(_s(r))return!1;let o=r instanceof Error?r.message:String(r);return f(`WARN: cloud bootstrap claim failed open: ${o}`),!0}}function fs(e){if(e)try{os(as(e))}catch{}}function ms(e,t){let r=Pe(e)?.platform_agent_ids?.[t];return typeof r=="string"&&r.length>0?r:void 0}function gs(e,t,n){if(!n)return;let r=Pe(e);if(!r||r.platform_agent_ids?.[t]===n)return;let o={installation_id:r.installation_id,platform_agent_ids:{...r.platform_agent_ids,[t]:n},...r.operator_identity_hash?{operator_identity_hash:r.operator_identity_hash}:{},...r.operator_identity_sent_at?{operator_identity_sent_at:r.operator_identity_sent_at}:{}};try{te(e,`${JSON.stringify(o,null,2)}
package/dist/hook.mjs CHANGED
@@ -10,7 +10,7 @@ var mc=Object.create;var Jr=Object.defineProperty;var gc=Object.getOwnPropertyDe
10
10
  `).trimEnd();return(0,X.usableCatalogText)(m)}});var ys=he(T=>{"use strict";Object.defineProperty(T,"__esModule",{value:!0});T.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES=T.COMPONENT_INSPECTION_TEXT_MAX_BYTES=T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER=void 0;T.fitSnapshotInspectionTextBudget=Wl;T.capComponentTextBytes=Ss;T.prepareComponentInspectionText=Yl;T.redactComponentSource=jn;T.componentSourceContainsRedactableSecret=ud;T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER="[REDACTED]";T.COMPONENT_INSPECTION_TEXT_MAX_BYTES=256*1024;T.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES=3*1024*1024;function Wl(e){let t=0;return e.map(n=>{let r=n,o=r.skill?.inspectionText;if(o===void 0)return n;let s=Buffer.byteLength(o,"utf8");return t+s<=T.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES?(t+=s,n):{...n,skill:{...r.skill,inspectionText:void 0}}})}function Ss(e,t){if(e==null||e.length===0)return;let n=Buffer.from(e,"utf8");if(n.byteLength<=t)return e;let r=new TextDecoder("utf-8",{fatal:!0});for(let o=t;o>0;o-=1)try{return r.decode(n.subarray(0,o))}catch{}}function Yl(e){if(!(e==null||e.length===0))return Ss(jn(e),T.COMPONENT_INSPECTION_TEXT_MAX_BYTES)}var Jl="(?:[A-Za-z0-9_.-]*(?:passwd|password|secret|token|credential|credentials|apikey|api[_-]?key|access[_-]?key|secret[_-]?key|private[_-]?key|auth|authorization|session[_-]?id)[A-Za-z0-9_.-]*)",Xl=new RegExp(`(\\b${Jl})(\\s*[:=]\\s*)(?:(")([^"\\n]*)(")|(')([^'\\n]*)(')|([^\\s"'][^"'\\n]*))`,"gi"),Zl=[/^(?:none|null|nil|n\/a|empty|unset|not (?:required|needed|set)|no (?:password|token|auth))(?=$|[\s.,;:()—–-])/i,/^\$\{?[A-Za-z_][A-Za-z0-9_]*\}?$/,/^\$\(.*\)$/,/^\$\{\{.*\}\}$/,/^%[A-Za-z_][A-Za-z0-9_]*%$/,/^(?:process\.env|os\.environ|import\.meta\.env)\.[A-Za-z_][A-Za-z0-9_]*[,;]?$/,/^<[^<>]*>$/,/^(?:\*{3,}|\.{3,}|…|x{3,})$/i,/^your[-_ ]/i,/^(?:see|from|via|stored in|use|ask|obtain|get|fetch|run|read|provided by|generated by)\b/i];function Hn(e){let t=e.trim().replace(/^`+|`+$/g,"").trim();return Zl.some(n=>n.test(t))}function ql(e){if(e.startsWith("$(")){let n=0;for(let r=1;r<e.length;r+=1)if(e[r]==="("&&(n+=1),e[r]===")"&&(n-=1,n===0))return e.slice(0,r+1);return e}return/^(?:\$\{\{[^}]*\}\}|<[^<>]*>)/.exec(e)?.[0]??/^\S+/.exec(e)?.[0]??""}var Ql=[/\bsk-(?:proj-)?[A-Za-z0-9_-]{16,}/g,/\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}/g,/\bgithub_pat_[A-Za-z0-9_]{20,}/g,/\bxox[baprs]-[A-Za-z0-9-]{10,}/g,/\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,/\bAIza[0-9A-Za-z_-]{35}\b/g,/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g],ed=/\b[A-Za-z0-9_+/-]{32,}={0,2}\b/g,td=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function nd(e){let t=new Map;for(let r of e)t.set(r,(t.get(r)??0)+1);let n=0;for(let r of t.values()){let o=r/e.length;n-=o*Math.log2(o)}return n}function rd(e){return e.replace(ed,t=>{if(td.test(t))return t;let n=/[A-Za-z]/.test(t),r=/\d/.test(t);return n&&r&&nd(t)>=3.5?T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER:t})}var od=/\b(Bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,sd=/\b([a-z][a-z0-9+.-]*:\/\/)([^\s/@:]+):([^\s/@]*)@/gi,id=/([?&](?:access_token|api_key|apikey|auth|authorization|client_secret|key|password|secret|token)=)[^&\s"'<>]+/gi,ad=/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----/,hs=/-----END [A-Z0-9 ]*PRIVATE KEY-----/;function Es(e){return e.replace(Xl,(t,n,r,o,s,i,a,c,u,l)=>{let p=`${n}${r}`;if(o!==void 0||a!==void 0){let d=o??a??"",g=i??u??"",S=s??c??"";return S===""||S.includes(T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER)||Hn(S)?t:`${p}${d}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}${g}`}let m=l??"";if(r==="="){let d=ql(m).replace(/`+$/,""),g=Es(m.slice(d.length));return d===""||d.includes(T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER)||Hn(d)?`${p}${d}${g}`:`${p}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}${g}`}return m.includes(T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER)||Hn(m)?t:`${p}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}`})}function cd(e){let t=e.replace(sd,(n,r)=>`${r}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}:${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}@`);t=t.replace(id,(n,r)=>`${r}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}`),t=t.replace(od,(n,r)=>`${r}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}`);for(let n of Ql)t=t.replace(n,T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER);return Es(rd(t))}function jn(e){if(e.length===0)return e;let t=e.split(`
11
11
  `),n=!1;return t.map(o=>n?hs.test(o)?(n=!1,o):o.trim().length===0?o:T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER:ad.test(o)&&!hs.test(o)?(n=!0,o):cd(o)).join(`
12
12
  `)}function ud(e){return jn(e)!==e}});var Me=he(f=>{"use strict";Object.defineProperty(f,"__esModule",{value:!0});f.redactComponentSource=f.prepareComponentInspectionText=f.fitSnapshotInspectionTextBudget=f.componentSourceContainsRedactableSecret=f.capComponentTextBytes=f.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES=f.COMPONENT_SOURCE_REDACTION_PLACEHOLDER=f.COMPONENT_INSPECTION_TEXT_MAX_BYTES=f.usableCatalogText=f.parseFrontmatterField=f.parseFrontmatterDescription=f.isNpmRegistryPublisher=f.EMPTY_NPM_PUBLISHER=f.displayPublisherName=f.classifyMcpProvenance=f.resolveMcpPackageIdentity=f.McpPackageEcosystem=f.pinnedPackageVersionFromSpec=f.pinnedPackageVersionFromNpx=f.packageNameFromSpec=f.npxPackageSpecs=f.npxExecBin=f.PACKAGE_FIELD_MAX=f.serializeMcpLaunchIdentity=f.projectMcpMissingLaunchIdentity=f.projectMcpLaunchIdentity=f.normalizeMcpToolNames=f.MCP_MISSING_LAUNCH_SERIALIZED=f.MCP_LAUNCH_IDENTITY_ALGORITHM=f.maskMcpLaunchForDisplay=f.launchContainsCredentials=f.hashMcpLaunchIdentity=f.foldMcpName=f.buildMcpFamilyCanonicalKey=f.ComponentKind=void 0;f.userConfigRootFromPath=Ed;f.installationRootExternalKey=yd;f.normalizeRepositoryRelativePath=Rs;f.nativeKeyForSkillPath=Rd;f.nativeKeyForRulePath=Cd;f.nativeKeyForCommandPath=Id;f.serializeComponentIdentity=Is;f.buildComponentReference=Od;f.validateComponentReference=Pd;var ld=sn("node:crypto"),dd=sn("node:path"),pd="cmp1_",fd=/^cmp1_[A-Za-z0-9_-]{43}$/,md=["/skills/","/skills-cursor/"],gd=/(?:^|\/)\.(?:cursor|claude|codex)\/rules\/(.+)$/i,_d=/(?:^|\/)\.(?:cursor|claude|codex)\/(?:commands|prompts)\/(.+)$/i,hd=[".cursor",".claude",".codex"],Sd={".claude.json":".claude",".agents":".codex"};f.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE",RULE:"RULE",COMMAND:"COMMAND"};function Ed(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>hd.includes(o));return n||(t.map(o=>Sd[o]).find(o=>o!==void 0)??"unknown")}function yd(e,t){return`runtime-install:${e}/${t}`}function kt(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function Rs(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=dd.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return kt(n,"sourcePath")}function Rd(e){let t=e.replaceAll("\\","/");for(let n of md){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function Cs(e,t,n){let r=e.replaceAll("\\","/"),s=t.exec(r)?.[1];if(!s||s.split("/").includes(".."))return null;let i=s.replace(n,"");return i.length>0?i:null}function Cd(e){return Cs(e,gd,/\.(mdc|md|rules)$/i)}function Id(e){return Cs(e,_d,/\.(md|mdc|toml)$/i)}function Ad(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function Is(e){let t=[kt(e.installationRootExternalKey,"installationRootExternalKey"),kt(e.installableKind,"installableKind"),Rs(e.sourcePath),kt(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(Ad).join("|")}`,"utf8")}function Od(e){let t=(0,ld.createHash)("sha256").update(Is(e)).digest("base64url");return`${pd}${t}`}function Pd(e){return fd.test(e)}var Z=Ot();Object.defineProperty(f,"buildMcpFamilyCanonicalKey",{enumerable:!0,get:function(){return Z.buildMcpFamilyCanonicalKey}});Object.defineProperty(f,"foldMcpName",{enumerable:!0,get:function(){return Z.foldMcpName}});Object.defineProperty(f,"hashMcpLaunchIdentity",{enumerable:!0,get:function(){return Z.hashMcpLaunchIdentity}});Object.defineProperty(f,"launchContainsCredentials",{enumerable:!0,get:function(){return Z.launchContainsCredentials}});Object.defineProperty(f,"maskMcpLaunchForDisplay",{enumerable:!0,get:function(){return Z.maskMcpLaunchForDisplay}});Object.defineProperty(f,"MCP_LAUNCH_IDENTITY_ALGORITHM",{enumerable:!0,get:function(){return Z.MCP_LAUNCH_IDENTITY_ALGORITHM}});Object.defineProperty(f,"MCP_MISSING_LAUNCH_SERIALIZED",{enumerable:!0,get:function(){return Z.MCP_MISSING_LAUNCH_SERIALIZED}});Object.defineProperty(f,"normalizeMcpToolNames",{enumerable:!0,get:function(){return Z.normalizeMcpToolNames}});Object.defineProperty(f,"projectMcpLaunchIdentity",{enumerable:!0,get:function(){return Z.projectMcpLaunchIdentity}});Object.defineProperty(f,"projectMcpMissingLaunchIdentity",{enumerable:!0,get:function(){return Z.projectMcpMissingLaunchIdentity}});Object.defineProperty(f,"serializeMcpLaunchIdentity",{enumerable:!0,get:function(){return Z.serializeMcpLaunchIdentity}});var Ne=Tt();Object.defineProperty(f,"PACKAGE_FIELD_MAX",{enumerable:!0,get:function(){return Ne.PACKAGE_FIELD_MAX}});Object.defineProperty(f,"npxExecBin",{enumerable:!0,get:function(){return Ne.npxExecBin}});Object.defineProperty(f,"npxPackageSpecs",{enumerable:!0,get:function(){return Ne.npxPackageSpecs}});Object.defineProperty(f,"packageNameFromSpec",{enumerable:!0,get:function(){return Ne.packageNameFromSpec}});Object.defineProperty(f,"pinnedPackageVersionFromNpx",{enumerable:!0,get:function(){return Ne.pinnedPackageVersionFromNpx}});Object.defineProperty(f,"pinnedPackageVersionFromSpec",{enumerable:!0,get:function(){return Ne.pinnedPackageVersionFromSpec}});var As=us();Object.defineProperty(f,"McpPackageEcosystem",{enumerable:!0,get:function(){return As.McpPackageEcosystem}});Object.defineProperty(f,"resolveMcpPackageIdentity",{enumerable:!0,get:function(){return As.resolveMcpPackageIdentity}});var xt=gs();Object.defineProperty(f,"classifyMcpProvenance",{enumerable:!0,get:function(){return xt.classifyMcpProvenance}});Object.defineProperty(f,"displayPublisherName",{enumerable:!0,get:function(){return xt.displayPublisherName}});Object.defineProperty(f,"EMPTY_NPM_PUBLISHER",{enumerable:!0,get:function(){return xt.EMPTY_NPM_PUBLISHER}});Object.defineProperty(f,"isNpmRegistryPublisher",{enumerable:!0,get:function(){return xt.isNpmRegistryPublisher}});var $n=_s();Object.defineProperty(f,"parseFrontmatterDescription",{enumerable:!0,get:function(){return $n.parseFrontmatterDescription}});Object.defineProperty(f,"parseFrontmatterField",{enumerable:!0,get:function(){return $n.parseFrontmatterField}});Object.defineProperty(f,"usableCatalogText",{enumerable:!0,get:function(){return $n.usableCatalogText}});var me=ys();Object.defineProperty(f,"COMPONENT_INSPECTION_TEXT_MAX_BYTES",{enumerable:!0,get:function(){return me.COMPONENT_INSPECTION_TEXT_MAX_BYTES}});Object.defineProperty(f,"COMPONENT_SOURCE_REDACTION_PLACEHOLDER",{enumerable:!0,get:function(){return me.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}});Object.defineProperty(f,"SNAPSHOT_INSPECTION_TEXT_MAX_BYTES",{enumerable:!0,get:function(){return me.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES}});Object.defineProperty(f,"capComponentTextBytes",{enumerable:!0,get:function(){return me.capComponentTextBytes}});Object.defineProperty(f,"componentSourceContainsRedactableSecret",{enumerable:!0,get:function(){return me.componentSourceContainsRedactableSecret}});Object.defineProperty(f,"fitSnapshotInspectionTextBudget",{enumerable:!0,get:function(){return me.fitSnapshotInspectionTextBudget}});Object.defineProperty(f,"prepareComponentInspectionText",{enumerable:!0,get:function(){return me.prepareComponentInspectionText}});Object.defineProperty(f,"redactComponentSource",{enumerable:!0,get:function(){return me.redactComponentSource}})});import{existsSync as Tc,readFileSync as kc}from"node:fs";import{hostname as ro,userInfo as xc}from"node:os";import{randomBytes as yc}from"node:crypto";import{existsSync as cn,mkdirSync as Rc,readdirSync as Cc,readFileSync as Ic,renameSync as Xr,statSync as Qr,unlinkSync as Zr,writeFileSync as Ac}from"node:fs";import{basename as Oc,dirname as qr,join as eo,relative as Pc}from"node:path";function h(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
13
- `)}function Q(e,t){Rc(qr(e),{recursive:!0});let n=eo(qr(e),`.${Oc(e)}.${process.pid}.${yc(4).toString("hex")}.tmp`);try{Ac(n,t,"utf8");try{Xr(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){Zr(e),Xr(n,e);return}throw r}}catch(r){try{Zr(n)}catch{}throw r}}function ft(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function to(){process.stdout.write('{"continue":true}')}function I(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function un(){return new Promise(e=>{let t="";if(process.stdin.isTTY){e("");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",n=>{t+=n}),process.stdin.on("end",()=>{e(t)}),process.stdin.on("error",()=>{e(t)}),process.stdin.resume()})}async function ln(e){return new Promise(t=>{let n="",r=!1,o=i=>{r||(r=!0,clearTimeout(s),t(i||"{}"))},s=setTimeout(()=>{o(n)},e);if(process.stdin.isTTY){o("{}");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>{o(n)}),process.stdin.on("error",()=>{o(n)}),process.stdin.resume()})}async function J(e,t,n=3e3,r={}){let{execFile:o}=await import("node:child_process"),{promisify:s}=await import("node:util"),i=s(o);try{let{stdout:a}=await i(e,t,{timeout:n,windowsHide:!0,maxBuffer:1048576,cwd:r.cwd});return{ok:!0,stdout:a.trim()}}catch(a){let c=a,u=typeof c.code=="number"?c.code:typeof c.status=="number"?c.status:void 0;return{ok:!1,code:u,spawnFailed:u===void 0}}}async function w(e,t,n=3e3,r={}){let o=await J(e,t,n,r);return o.ok?o.stdout:""}async function dn(e=process.cwd()){let t=await J("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(I("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;h(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=I("CURSOR_PROJECT_DIR")??I("CLAUDE_PROJECT_DIR");if(n&&cn(n)){let r=await J("git",["rev-parse","--show-toplevel"],2e3,{cwd:n});return r.ok&&r.stdout?{root:r.stdout,inGitRepo:!0}:{root:n,inGitRepo:!1}}return{root:e,inGitRepo:!1}}async function pn(e=process.cwd()){return(await dn(e)).root}function j(e,t){try{return JSON.parse(e)}catch{return t}}var an=new Map;function F(e,t){let n=an.get(e);if(n!==void 0)return n;try{let r=j(Ic(e,"utf8"),t);return an.set(e,r),r}catch{return an.set(e,t),t}}function Se(e){return typeof e=="string"?e:""}function re(e,t){let n=e[t];if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return n;if(!t.includes("."))return;let r=t.split("."),o=e;for(let s of r){if(o===null||typeof o!="object"||Array.isArray(o))return;o=o[s]}if(typeof o=="string"||typeof o=="number"||typeof o=="boolean")return o}function _(e,t){let n=re(e,t);return typeof n=="string"?n:""}var ue=500;function no(e,t=2){if(!cn(e))return{entries:[],truncated:!1};let n=[],r=!1,o=(s,i)=>{if(i>t||r)return;let a;try{a=Cc(s,{withFileTypes:!0})}catch{return}for(let c of a){if(r)return;let u=eo(s,c.name);if(c.isDirectory()){o(u,i+1);continue}if(c.isFile()){try{n.push({name:Pc(e,u),size:Qr(u).size})}catch{continue}if(n.length>=ue){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function fn(e){return cn(e)?{present:!0,size:Qr(e).size}:{present:!1,size:0}}function Pe(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function mn(e=process.env){return Pe(b("CURSOR_SANDBOX",e))}var bc=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Nc(e){return bc.some(t=>!!b(t,e))}function Mc(e){if(b("KUBERNETES_SERVICE_HOST",e)||Pe(b("REMOTE_CONTAINERS",e))||Pe(b("DEVCONTAINER",e)))return!0;try{if(Tc("/.dockerenv")||kc("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function oo(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!b(t,e))}function wc(e,t=process.platform){return oo(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!b(n,e)):!1}function vc(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function Lc(e){return e==="linux"}function b(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return I(e)}function Uc(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!Dc(b("CURSOR_VERSION",n))}function Dc(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function gn(e){if(vc(e.sessionId))return!0;let t=e.hostname??ro(),n=e.osUser??so(e.env);return Uc(t,n,e.env)}function Fc(e){return Pe(b("CURSOR_AGENT",e.env))?!0:gn(e)}function Hc(e){return!!(process.stdin.isTTY||process.stdout.isTTY||(b("TERM",e)??b("TERM_PROGRAM",e))||(b("SSH_TTY",e)??b("SSH_CONNECTION",e))||(b("__CFBundleIdentifier",e)??b("XPC_SERVICE_NAME",e))||oo(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!b(t,e))||b("SESSIONNAME",e))}function $e(e={}){let t=e.env;if(b("GITHUB_ACTIONS",t))return"github_actions";if(Pe(b("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!wc(t,n)&&Fc(e)&&(Pe(b("CURSOR_AGENT",t))||Lc(n)))return"cursor_cloud";if(b("CODESPACES",t)||b("CODESPACE_NAME",t))return"codespaces";if(b("GITLAB_CI",t))return"gitlab_ci";if(Nc(t))return"managed";let r=b("CI",t);return r&&r!=="false"&&r!=="0"?"managed":Mc(t)?"container":Hc(t)?"interactive":"unknown"}async function _n(){return await w("systemd-detect-virt",[],1e3)}function so(e=process.env,t=xc){for(let n of["USER","LOGNAME","USERNAME"]){let r=e[n];if(typeof r=="string"){let o=r.trim();if(o.length>0)return o}}try{return t().username??""}catch{return""}}async function hn(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await w("sw_vers",["-productVersion"],1e3);else if(process.platform==="linux"){try{let{readFileSync:s}=await import("node:fs"),i=s("/etc/os-release","utf8"),a=i.match(/^PRETTY_NAME="?([^"\n]+)"?/m)?.[1],c=i.match(/^VERSION_ID="?([^"\n]+)"?/m)?.[1];t=a??c??""}catch{t=await w("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await w("uname",["-r"],1e3))}else t=await w("ver",[],1e3);let n=so(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await w("tty",[],500),o.includes("not a tty")&&(o="")}catch{o=""}return{os:e,os_version:t||null,user:n||null,shell:r||null,tty:o||null}}function Ke(){return ro()}import{createHash as jc}from"node:crypto";import{homedir as $c}from"node:os";import{dirname as uh,join as Kc,parse as lh,resolve as dh}from"node:path";var ao="https://hooks.ev-ai.ai",co=".claude/ev-ai-runtime-report.json",uo="config.json",ph=1024*1024,Bc=new Set(["localhost","127.0.0.1","[::1]","::1"]),Gc=["claude","cursor","codex"],lo=[co,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"],Sn=/^[A-Za-z0-9._~-]+$/;function gt(e){return e!==void 0&&Gc.includes(e)}function mt(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function Be(e){let t,n,r,o,s;for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0){if(a==="--runner"){let c=mt(e,i);t=c.value,i=c.next;continue}if(a.startsWith("--runner=")){t=a.slice(9);continue}if(a==="--url"){let c=mt(e,i);c.value&&(r=c.value),i=c.next;continue}if(a.startsWith("--url=")){r=a.slice(6);continue}if(a==="--token"){let c=mt(e,i);c.value&&(o=c.value),i=c.next;continue}if(a.startsWith("--token=")){o=a.slice(8);continue}if(a==="--base-url"){let c=mt(e,i);c.value&&(s=c.value),i=c.next;continue}if(a.startsWith("--base-url=")){s=a.slice(11);continue}!a.startsWith("-")&&n===void 0&&(n=a)}}return{runner:gt(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function _t(e,t=ao){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}function En(e=$c()){return Kc(e,".ev-ai",uo)}function po(e,t){return{...e,...t}}function io(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<=32||n===127||n===39)return!0}return!1}function Ge(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?Bc.has(t.hostname):!1}catch{return!1}}function yn(e){try{let n=new URL(e).pathname.split("/").filter(r=>r.length>0);if(n.length>=2&&n[n.length-1]==="hook"){let r=n[n.length-2];return r&&r.length>0?r:void 0}return}catch{return}}function Rn(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!Ge(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=yn(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!Sn.test(n))return`org token must match ${Sn.source} (got: ${n})`;if(io(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(io(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function fo(e){return new URL(e).toString()}function Cn(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token,n=typeof t=="string"?t.trim():void 0;return n?_t(n):""}function ht(e){try{let t=new URL(e),n=t.pathname.split("/").filter(r=>r.length>0);return n.length>=2&&n[n.length-1]==="hook"&&(n[n.length-2]="***",t.pathname=`/${n.join("/")}`),t.toString()}catch{return"<invalid-url>"}}function mo(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=_t(o,e.baseUrl?.trim()??void 0))}if(!n)return{};let r=Rn(n);return r?{problem:r}:{url:fo(n)}}function go(e){if(Rn(e))return;let t;try{t=new URL(e)}catch{return}let n=yn(e);if(!n)return;let o=t.pathname.split("/").filter(a=>a.length>0).slice(0,-2),s=o.length>0?`/${o.join("/")}`:"",i=`${t.origin}${s}/${n}`;return jc("sha256").update(i).digest("hex").slice(0,32)}var Et=2;var St="ev-ai-agent-hook";function zc(e){let t=e.split(/[/\\]/).pop();return t&&t.length>0?t:e}function _o(e){let t=zc(e);return t===St||t===`${St}.exe`}var mh=`current/${St}`,gh=`.ev-ai/agent-hook/${St}`,ho=5e3,So=5e3,In=3e3;var An=3e3,Eo=1500,yo=4*1024,On=256*1024,Vc=4*1024,Ro=32*1024,ze=840*60*1e3,Pn="1.2.3",_h=`@ev-ai/agent-hook@${Pn}`;import{createHash as rp}from"node:crypto";import{existsSync as op,mkdirSync as sp,readdirSync as ip,readFileSync as Js,unlinkSync as Xs,writeFileSync as ap}from"node:fs";import{homedir as Zs}from"node:os";import{join as Xn}from"node:path";import{createHash as Po,randomBytes as Jc}from"node:crypto";import{existsSync as To,mkdirSync as Tn,readFileSync as ko,unlinkSync as xo,writeFileSync as bo}from"node:fs";import{homedir as kn}from"node:os";import{dirname as yt,join as xn,resolve as Xc}from"node:path";var Wc=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),Yc=new Set(["github-actions","github actions","dependabot","renovate","cursoragent","cursor agent"]);function G(e,t){let n=(e??"").trim().toLowerCase(),r=(t??"").trim().toLowerCase();if(!n&&!r)return!1;if(n.includes("[bot]")||Yc.has(n)||r.includes("[bot]")||Wc.has(r))return!0;if(r.endsWith("@users.noreply.github.com")){let o=r.slice(0,r.indexOf("@")),s=o.includes("+")?o.slice(o.indexOf("+")+1):o;if(s.endsWith("bot")||s.includes("[bot]"))return!0}return!1}var Zc="installation.json",qc="cloud-bootstrap.lock",Qc=6e4;function No(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function oe(e=kn()){return xn(e,".ev-ai","agent-hook")}function eu(e=kn()){return xn(oe(e),Zc)}function Mo(e){return xn(yt(e),qc)}function wo(){return Jc(8).toString("hex")}function Te(e){return Po("sha256").update(e).digest("hex").slice(0,16)}function A(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function vo(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function tu(e=process.env){let t=A(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!vo(t)){h(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function Lo(e,t){return e&&vo(e)?e:(e&&h(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),tu(t))}function nu(e){return/^[0-9a-f]{16}$/.test(e)}function ru(e=process.env){if(A(e.GITHUB_ACTIONS)){let t=A(e.GITHUB_REPOSITORY_ID)??A(e.GITHUB_REPOSITORY),n=A(e.GITHUB_ACTOR)??A(e.GITHUB_TRIGGERING_ACTOR)??A(e.GITHUB_USER);if(t&&n)return Te(`github_actions|${t}|${n}`)}if(A(e.CODESPACES)||A(e.CODESPACE_NAME)){let t=A(e.CODESPACE_NAME);if(t)return Te(`codespaces|${t}`);let n=A(e.GITHUB_REPOSITORY_ID)??A(e.GITHUB_REPOSITORY),r=A(e.GITHUB_USER)??A(e.GITHUB_ACTOR);if(n&&r)return Te(`codespaces|${n}|${r}`)}if(A(e.GITLAB_CI)){let t=A(e.CI_PROJECT_ID)??A(e.CI_PROJECT_PATH),n=A(e.GITLAB_USER_LOGIN)??A(e.GITLAB_USER_EMAIL)??A(e.GITLAB_USER_NAME);if(t&&n)return Te(`gitlab|${t}|${n}`)}return null}var ou="cursoragent@cursor.com";function su(e){let t=A(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===ou?null:t}function iu(e,t){return A(e.CURSOR_PROJECT_DIR)??A(e.CLAUDE_PROJECT_DIR)??t}function au(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function cu(e){let t=await w("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?au(t):e}async function uu(e){let t=A(await w("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!G(null,t))return t;let n=A(await w("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!G(null,n)?n:null}function lu(e,t){let n=iu(e,t);return n?Te(`cursor_cloud|${n}|${su(e)??""}`):null}async function du(e,t){let n=A(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await cu(n),o=await uu(n);return Te(`claude_remote|${r}|${o??""}`)}function Co(e,t){let n=Lo(e,t);if(n)return n;let r=ru(t);return r||wo()}async function pu(e){let n=await w("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Xc(e);return Po("sha256").update(n).digest("hex").slice(0,16)}function fu(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r=="string"&&r.length>0&&(t[n]=r);return Object.keys(t).length>0?t:void 0}function mu(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=fu(t.platform_agent_ids);return{installation_id:t.installation_id,...t.pinned===!0?{pinned:!0}:{},...n?{platform_agent_ids:n}:{},...typeof t.operator_identity_hash=="string"?{operator_identity_hash:t.operator_identity_hash}:{},...typeof t.operator_identity_sent_at=="string"?{operator_identity_sent_at:t.operator_identity_sent_at}:{}}}catch{return}}function Ee(e){if(To(e))try{return mu(ko(e,"utf8"))}catch{}}function bn(e){return Ee(e)}function Uo(e,t,n){let r=Ee(e);if(!r||r.operator_identity_hash===t&&r.operator_identity_sent_at===n)return;let o={...r,operator_identity_hash:t,operator_identity_sent_at:n};try{Q(e,`${JSON.stringify(o,null,2)}
13
+ `)}function Q(e,t){Rc(qr(e),{recursive:!0});let n=eo(qr(e),`.${Oc(e)}.${process.pid}.${yc(4).toString("hex")}.tmp`);try{Ac(n,t,"utf8");try{Xr(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){Zr(e),Xr(n,e);return}throw r}}catch(r){try{Zr(n)}catch{}throw r}}function ft(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function to(){process.stdout.write('{"continue":true}')}function I(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function un(){return new Promise(e=>{let t="";if(process.stdin.isTTY){e("");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",n=>{t+=n}),process.stdin.on("end",()=>{e(t)}),process.stdin.on("error",()=>{e(t)}),process.stdin.resume()})}async function ln(e){return new Promise(t=>{let n="",r=!1,o=i=>{r||(r=!0,clearTimeout(s),t(i||"{}"))},s=setTimeout(()=>{o(n)},e);if(process.stdin.isTTY){o("{}");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>{o(n)}),process.stdin.on("error",()=>{o(n)}),process.stdin.resume()})}async function J(e,t,n=3e3,r={}){let{execFile:o}=await import("node:child_process"),{promisify:s}=await import("node:util"),i=s(o);try{let{stdout:a}=await i(e,t,{timeout:n,windowsHide:!0,maxBuffer:1048576,cwd:r.cwd});return{ok:!0,stdout:a.trim()}}catch(a){let c=a,u=typeof c.code=="number"?c.code:typeof c.status=="number"?c.status:void 0;return{ok:!1,code:u,spawnFailed:u===void 0}}}async function w(e,t,n=3e3,r={}){let o=await J(e,t,n,r);return o.ok?o.stdout:""}async function dn(e=process.cwd()){let t=await J("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(I("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;h(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=I("CURSOR_PROJECT_DIR")??I("CLAUDE_PROJECT_DIR");if(n&&cn(n)){let r=await J("git",["rev-parse","--show-toplevel"],2e3,{cwd:n});return r.ok&&r.stdout?{root:r.stdout,inGitRepo:!0}:{root:n,inGitRepo:!1}}return{root:e,inGitRepo:!1}}async function pn(e=process.cwd()){return(await dn(e)).root}function j(e,t){try{return JSON.parse(e)}catch{return t}}var an=new Map;function F(e,t){let n=an.get(e);if(n!==void 0)return n;try{let r=j(Ic(e,"utf8"),t);return an.set(e,r),r}catch{return an.set(e,t),t}}function Se(e){return typeof e=="string"?e:""}function re(e,t){let n=e[t];if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return n;if(!t.includes("."))return;let r=t.split("."),o=e;for(let s of r){if(o===null||typeof o!="object"||Array.isArray(o))return;o=o[s]}if(typeof o=="string"||typeof o=="number"||typeof o=="boolean")return o}function _(e,t){let n=re(e,t);return typeof n=="string"?n:""}var ue=500;function no(e,t=2){if(!cn(e))return{entries:[],truncated:!1};let n=[],r=!1,o=(s,i)=>{if(i>t||r)return;let a;try{a=Cc(s,{withFileTypes:!0})}catch{return}for(let c of a){if(r)return;let u=eo(s,c.name);if(c.isDirectory()){o(u,i+1);continue}if(c.isFile()){try{n.push({name:Pc(e,u),size:Qr(u).size})}catch{continue}if(n.length>=ue){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function fn(e){return cn(e)?{present:!0,size:Qr(e).size}:{present:!1,size:0}}function Pe(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function mn(e=process.env){return Pe(b("CURSOR_SANDBOX",e))}var bc=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Nc(e){return bc.some(t=>!!b(t,e))}function Mc(e){if(b("KUBERNETES_SERVICE_HOST",e)||Pe(b("REMOTE_CONTAINERS",e))||Pe(b("DEVCONTAINER",e)))return!0;try{if(Tc("/.dockerenv")||kc("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function oo(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!b(t,e))}function wc(e,t=process.platform){return oo(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!b(n,e)):!1}function vc(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function Lc(e){return e==="linux"}function b(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return I(e)}function Uc(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!Dc(b("CURSOR_VERSION",n))}function Dc(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function gn(e){if(vc(e.sessionId))return!0;let t=e.hostname??ro(),n=e.osUser??so(e.env);return Uc(t,n,e.env)}function Fc(e){return Pe(b("CURSOR_AGENT",e.env))?!0:gn(e)}function Hc(e){return!!(process.stdin.isTTY||process.stdout.isTTY||(b("TERM",e)??b("TERM_PROGRAM",e))||(b("SSH_TTY",e)??b("SSH_CONNECTION",e))||(b("__CFBundleIdentifier",e)??b("XPC_SERVICE_NAME",e))||oo(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!b(t,e))||b("SESSIONNAME",e))}function $e(e={}){let t=e.env;if(b("GITHUB_ACTIONS",t))return"github_actions";if(Pe(b("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!wc(t,n)&&Fc(e)&&(Pe(b("CURSOR_AGENT",t))||Lc(n)))return"cursor_cloud";if(b("CODESPACES",t)||b("CODESPACE_NAME",t))return"codespaces";if(b("GITLAB_CI",t))return"gitlab_ci";if(Nc(t))return"managed";let r=b("CI",t);return r&&r!=="false"&&r!=="0"?"managed":Mc(t)?"container":Hc(t)?"interactive":"unknown"}async function _n(){return await w("systemd-detect-virt",[],1e3)}function so(e=process.env,t=xc){for(let n of["USER","LOGNAME","USERNAME"]){let r=e[n];if(typeof r=="string"){let o=r.trim();if(o.length>0)return o}}try{return t().username??""}catch{return""}}async function hn(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await w("sw_vers",["-productVersion"],1e3);else if(process.platform==="linux"){try{let{readFileSync:s}=await import("node:fs"),i=s("/etc/os-release","utf8"),a=i.match(/^PRETTY_NAME="?([^"\n]+)"?/m)?.[1],c=i.match(/^VERSION_ID="?([^"\n]+)"?/m)?.[1];t=a??c??""}catch{t=await w("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await w("uname",["-r"],1e3))}else t=await w("ver",[],1e3);let n=so(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await w("tty",[],500),o.includes("not a tty")&&(o="")}catch{o=""}return{os:e,os_version:t||null,user:n||null,shell:r||null,tty:o||null}}function Ke(){return ro()}import{createHash as jc}from"node:crypto";import{homedir as $c}from"node:os";import{dirname as uh,join as Kc,parse as lh,resolve as dh}from"node:path";var ao="https://hooks.ev-ai.ai",co=".claude/ev-ai-runtime-report.json",uo="config.json",ph=1024*1024,Bc=new Set(["localhost","127.0.0.1","[::1]","::1"]),Gc=["claude","cursor","codex"],lo=[co,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"],Sn=/^[A-Za-z0-9._~-]+$/;function gt(e){return e!==void 0&&Gc.includes(e)}function mt(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function Be(e){let t,n,r,o,s;for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0){if(a==="--runner"){let c=mt(e,i);t=c.value,i=c.next;continue}if(a.startsWith("--runner=")){t=a.slice(9);continue}if(a==="--url"){let c=mt(e,i);c.value&&(r=c.value),i=c.next;continue}if(a.startsWith("--url=")){r=a.slice(6);continue}if(a==="--token"){let c=mt(e,i);c.value&&(o=c.value),i=c.next;continue}if(a.startsWith("--token=")){o=a.slice(8);continue}if(a==="--base-url"){let c=mt(e,i);c.value&&(s=c.value),i=c.next;continue}if(a.startsWith("--base-url=")){s=a.slice(11);continue}!a.startsWith("-")&&n===void 0&&(n=a)}}return{runner:gt(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function _t(e,t=ao){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}function En(e=$c()){return Kc(e,".ev-ai",uo)}function po(e,t){return{...e,...t}}function io(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<=32||n===127||n===39)return!0}return!1}function Ge(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?Bc.has(t.hostname):!1}catch{return!1}}function yn(e){try{let n=new URL(e).pathname.split("/").filter(r=>r.length>0);if(n.length>=2&&n[n.length-1]==="hook"){let r=n[n.length-2];return r&&r.length>0?r:void 0}return}catch{return}}function Rn(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!Ge(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=yn(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!Sn.test(n))return`org token must match ${Sn.source} (got: ${n})`;if(io(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(io(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function fo(e){return new URL(e).toString()}function Cn(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token,n=typeof t=="string"?t.trim():void 0;return n?_t(n):""}function ht(e){try{let t=new URL(e),n=t.pathname.split("/").filter(r=>r.length>0);return n.length>=2&&n[n.length-1]==="hook"&&(n[n.length-2]="***",t.pathname=`/${n.join("/")}`),t.toString()}catch{return"<invalid-url>"}}function mo(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=_t(o,e.baseUrl?.trim()??void 0))}if(!n)return{};let r=Rn(n);return r?{problem:r}:{url:fo(n)}}function go(e){if(Rn(e))return;let t;try{t=new URL(e)}catch{return}let n=yn(e);if(!n)return;let o=t.pathname.split("/").filter(a=>a.length>0).slice(0,-2),s=o.length>0?`/${o.join("/")}`:"",i=`${t.origin}${s}/${n}`;return jc("sha256").update(i).digest("hex").slice(0,32)}var Et=2;var St="ev-ai-agent-hook";function zc(e){let t=e.split(/[/\\]/).pop();return t&&t.length>0?t:e}function _o(e){let t=zc(e);return t===St||t===`${St}.exe`}var mh=`current/${St}`,gh=`.ev-ai/agent-hook/${St}`,ho=5e3,So=5e3,In=3e3;var An=3e3,Eo=1500,yo=4*1024,On=256*1024,Vc=4*1024,Ro=32*1024,ze=840*60*1e3,Pn="1.2.4",_h=`@ev-ai/agent-hook@${Pn}`;import{createHash as rp}from"node:crypto";import{existsSync as op,mkdirSync as sp,readdirSync as ip,readFileSync as Js,unlinkSync as Xs,writeFileSync as ap}from"node:fs";import{homedir as Zs}from"node:os";import{join as Xn}from"node:path";import{createHash as Po,randomBytes as Jc}from"node:crypto";import{existsSync as To,mkdirSync as Tn,readFileSync as ko,unlinkSync as xo,writeFileSync as bo}from"node:fs";import{homedir as kn}from"node:os";import{dirname as yt,join as xn,resolve as Xc}from"node:path";var Wc=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),Yc=new Set(["github-actions","github actions","dependabot","renovate","cursoragent","cursor agent"]);function G(e,t){let n=(e??"").trim().toLowerCase(),r=(t??"").trim().toLowerCase();if(!n&&!r)return!1;if(n.includes("[bot]")||Yc.has(n)||r.includes("[bot]")||Wc.has(r))return!0;if(r.endsWith("@users.noreply.github.com")){let o=r.slice(0,r.indexOf("@")),s=o.includes("+")?o.slice(o.indexOf("+")+1):o;if(s.endsWith("bot")||s.includes("[bot]"))return!0}return!1}var Zc="installation.json",qc="cloud-bootstrap.lock",Qc=6e4;function No(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function oe(e=kn()){return xn(e,".ev-ai","agent-hook")}function eu(e=kn()){return xn(oe(e),Zc)}function Mo(e){return xn(yt(e),qc)}function wo(){return Jc(8).toString("hex")}function Te(e){return Po("sha256").update(e).digest("hex").slice(0,16)}function A(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function vo(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function tu(e=process.env){let t=A(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!vo(t)){h(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function Lo(e,t){return e&&vo(e)?e:(e&&h(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),tu(t))}function nu(e){return/^[0-9a-f]{16}$/.test(e)}function ru(e=process.env){if(A(e.GITHUB_ACTIONS)){let t=A(e.GITHUB_REPOSITORY_ID)??A(e.GITHUB_REPOSITORY),n=A(e.GITHUB_ACTOR)??A(e.GITHUB_TRIGGERING_ACTOR)??A(e.GITHUB_USER);if(t&&n)return Te(`github_actions|${t}|${n}`)}if(A(e.CODESPACES)||A(e.CODESPACE_NAME)){let t=A(e.CODESPACE_NAME);if(t)return Te(`codespaces|${t}`);let n=A(e.GITHUB_REPOSITORY_ID)??A(e.GITHUB_REPOSITORY),r=A(e.GITHUB_USER)??A(e.GITHUB_ACTOR);if(n&&r)return Te(`codespaces|${n}|${r}`)}if(A(e.GITLAB_CI)){let t=A(e.CI_PROJECT_ID)??A(e.CI_PROJECT_PATH),n=A(e.GITLAB_USER_LOGIN)??A(e.GITLAB_USER_EMAIL)??A(e.GITLAB_USER_NAME);if(t&&n)return Te(`gitlab|${t}|${n}`)}return null}var ou="cursoragent@cursor.com";function su(e){let t=A(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===ou?null:t}function iu(e,t){return A(e.CURSOR_PROJECT_DIR)??A(e.CLAUDE_PROJECT_DIR)??t}function au(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function cu(e){let t=await w("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?au(t):e}async function uu(e){let t=A(await w("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!G(null,t))return t;let n=A(await w("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!G(null,n)?n:null}function lu(e,t){let n=iu(e,t);return n?Te(`cursor_cloud|${n}|${su(e)??""}`):null}async function du(e,t){let n=A(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await cu(n),o=await uu(n);return Te(`claude_remote|${r}|${o??""}`)}function Co(e,t){let n=Lo(e,t);if(n)return n;let r=ru(t);return r||wo()}async function pu(e){let n=await w("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Xc(e);return Po("sha256").update(n).digest("hex").slice(0,16)}function fu(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r=="string"&&r.length>0&&(t[n]=r);return Object.keys(t).length>0?t:void 0}function mu(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=fu(t.platform_agent_ids);return{installation_id:t.installation_id,...t.pinned===!0?{pinned:!0}:{},...n?{platform_agent_ids:n}:{},...typeof t.operator_identity_hash=="string"?{operator_identity_hash:t.operator_identity_hash}:{},...typeof t.operator_identity_sent_at=="string"?{operator_identity_sent_at:t.operator_identity_sent_at}:{}}}catch{return}}function Ee(e){if(To(e))try{return mu(ko(e,"utf8"))}catch{}}function bn(e){return Ee(e)}function Uo(e,t,n){let r=Ee(e);if(!r||r.operator_identity_hash===t&&r.operator_identity_sent_at===n)return;let o={...r,operator_identity_hash:t,operator_identity_sent_at:n};try{Q(e,`${JSON.stringify(o,null,2)}
14
14
  `)}catch(s){let i=s instanceof Error?s.message:String(s);h(`WARN: operator identity cache write failed open: ${i}`)}}function Do(e,t=Date.now()){if(!e)return!0;if(Ee(e)?.operator_identity_hash)return!1;let n=Mo(e);try{if(To(n)){let r=Number.NaN;try{r=Number(ko(n,"utf8").trim())}catch{}let o=t-r;if(Number.isFinite(o)&&o>=0&&o<Qc)return!1;try{xo(n)}catch{}}}catch{}try{return Tn(yt(n),{recursive:!0}),bo(n,`${t}
15
15
  `,{encoding:"utf8",flag:"wx"}),!0}catch(r){if($o(r))return!1;let o=r instanceof Error?r.message:String(r);return h(`WARN: cloud bootstrap claim failed open: ${o}`),!0}}function Fo(e){if(e)try{xo(Mo(e))}catch{}}function Ho(e,t){let r=Ee(e)?.platform_agent_ids?.[t];return typeof r=="string"&&r.length>0?r:void 0}function jo(e,t,n){if(!n)return;let r=Ee(e);if(!r||r.platform_agent_ids?.[t]===n)return;let o={installation_id:r.installation_id,platform_agent_ids:{...r.platform_agent_ids,[t]:n},...r.operator_identity_hash?{operator_identity_hash:r.operator_identity_hash}:{},...r.operator_identity_sent_at?{operator_identity_sent_at:r.operator_identity_sent_at}:{}};try{Q(e,`${JSON.stringify(o,null,2)}
16
16
  `)}catch(s){let i=s instanceof Error?s.message:String(s);h(`WARN: platform_agent_id cache write failed open: ${i}`)}}function $o(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function gu(e,t){Tn(yt(e),{recursive:!0}),bo(e,`${JSON.stringify(t,null,2)}
@@ -1,5 +1,5 @@
1
- import{createHash as ft}from"node:crypto";import{join as z}from"node:path";var M="signed-hook-v1",we=Buffer.from("ev-ai-hook-release-v1\0","utf8"),D=32;var We=64,Q=64;import{sign as so,verify as tn}from"node:crypto";var Bt=/^[A-Za-z0-9+/]+=*$/;function O(e){if(e.length===0||!Bt.test(e))return;let t=Buffer.from(e,"base64");if(t.toString("base64")===e)return t}import{createPrivateKey as jr,createPublicKey as Kt,timingSafeEqual as $r}from"node:crypto";var jt=Buffer.from("302a300506032b6570032100","hex"),Jr=Buffer.from("302e020100300506032b657004220420","hex");function $t(e){let t=Buffer.from(e,"base64");if(t.byteLength!==D||t.toString("base64")!==e)throw new Error("invalid production public key");return t}var Z=Object.freeze({"release-key-1":$t("jVk7k2gEEcdAiPOFtNZomu36bOpfkk0vgF9dC6FMcS0=")});function Xe(e){if(e.byteLength!==D)throw new Error("Ed25519 public key must be 32 bytes");return Kt({key:Buffer.concat([jt,Buffer.from(e)]),format:"der",type:"spki"})}function qe(e,t){if(!Object.hasOwn(e,t))return;let n=e[t];if(n?.byteLength===D)return n}var m={UNKNOWN_FORMAT:"unknown_format",UNKNOWN_KEY:"unknown_key",NON_CANONICAL_BASE64:"non_canonical_base64",INVALID_SIGNATURE_LENGTH:"invalid_signature_length",SIGNATURE_INVALID:"signature_invalid",TRAILING_BYTES:"trailing_bytes",UNKNOWN_FIELD:"unknown_field",DUPLICATE_FIELD:"duplicate_field",MISSING_FIELD:"missing_field",INVALID_TYPE:"invalid_type",INVALID_VERSION:"invalid_version",INVALID_URL:"invalid_url",URL_VERSION_MISMATCH:"url_version_mismatch",INVALID_SHA512:"invalid_sha512",INVALID_SIZE:"invalid_size",INVALID_NODE_ENGINE:"invalid_node_engine",INVALID_PROTOCOL:"invalid_protocol",INVALID_PACKAGE:"invalid_package",INVALID_JSON:"invalid_json",INVALID_ENVELOPE:"invalid_envelope",INVALID_KEY_ID:"invalid_key_id"},j={SIZE_MISMATCH:"size_mismatch",HASH_MISMATCH:"hash_mismatch"};function Qe(e){let t;try{t=new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch{return{ok:!1,reason:m.INVALID_JSON}}return Gt(t)}function Gt(e){if(e.length===0)return{ok:!1,reason:m.INVALID_JSON};if(e.trimStart()!==e||e.trimEnd()!==e)return{ok:!1,reason:m.TRAILING_BYTES};let t=new xe(e);try{let n=t.parseValue();return t.atEnd()?{ok:!0,value:n}:{ok:!1,reason:m.TRAILING_BYTES}}catch(n){return n instanceof ee?{ok:!1,reason:m.DUPLICATE_FIELD}:{ok:!1,reason:m.INVALID_JSON}}}var ee=class extends Error{constructor(){super("duplicate field")}},xe=class{text;i=0;constructor(t){this.text=t}atEnd(){return this.i>=this.text.length}parseValue(){this.skipWs();let t=this.text[this.i];if(t==="{")return this.parseObject();if(t==="[")return this.parseArray();if(t==='"')return this.parseString();if(t==="t"||t==="f"||t==="n")return this.parseLiteral();if(t==="-"||t!==void 0&&t>="0"&&t<="9")return this.parseNumber();throw new SyntaxError("invalid json")}skipWs(){let{text:t}=this;for(;this.i<t.length;){let n=t.charCodeAt(this.i);if(n!==32&&n!==10&&n!==13&&n!==9)break;this.i+=1}}parseObject(){this.expect("{"),this.skipWs();let t=Object.create(null),n=new Set;if(this.text[this.i]==="}")return this.i+=1,t;for(;;){if(this.skipWs(),this.text[this.i]!=='"')throw new SyntaxError("expected key");let r=this.parseString();if(n.has(r))throw new ee;n.add(r),this.skipWs(),this.expect(":"),t[r]=this.parseValue(),this.skipWs();let o=this.text[this.i];if(o===","){this.i+=1;continue}if(o==="}")return this.i+=1,t;throw new SyntaxError("expected comma or end of object")}}parseArray(){this.expect("["),this.skipWs();let t=[];if(this.text[this.i]==="]")return this.i+=1,t;for(;;){t.push(this.parseValue()),this.skipWs();let n=this.text[this.i];if(n===","){this.i+=1;continue}if(n==="]")return this.i+=1,t;throw new SyntaxError("expected comma or end of array")}}parseString(){this.expect('"');let{text:t}=this,n="";for(;this.i<t.length;){let r=t.charCodeAt(this.i);if(r===34)return this.i+=1,n;if(r===92){this.i+=1,n+=this.parseEscape();continue}if(r<32)throw new SyntaxError("unescaped control");n+=t[this.i],this.i+=1}throw new SyntaxError("unterminated string")}parseEscape(){let t=this.text[this.i];if(t===void 0)throw new SyntaxError("unterminated escape");switch(this.i+=1,t){case'"':case"\\":case"/":return t;case"b":return"\b";case"f":return"\f";case"n":return`
2
- `;case"r":return"\r";case"t":return" ";case"u":{let n=this.text.slice(this.i,this.i+4);if(!/^[0-9a-fA-F]{4}$/.test(n))throw new SyntaxError("invalid unicode escape");return this.i+=4,String.fromCharCode(Number.parseInt(n,16))}default:throw new SyntaxError("invalid escape")}}parseLiteral(){if(this.text.startsWith("true",this.i))return this.i+=4,!0;if(this.text.startsWith("false",this.i))return this.i+=5,!1;if(this.text.startsWith("null",this.i))return this.i+=4,null;throw new SyntaxError("invalid literal")}parseNumber(){let t=this.i,{text:n}=this;if(n[this.i]==="-"&&(this.i+=1),n[this.i]==="0")this.i+=1;else if(this.isDigit(n[this.i]))for(;this.isDigit(n[this.i]);)this.i+=1;else throw new SyntaxError("invalid number");if(n[this.i]==="."){if(this.i+=1,!this.isDigit(n[this.i]))throw new SyntaxError("invalid number");for(;this.isDigit(n[this.i]);)this.i+=1}if(n[this.i]==="e"||n[this.i]==="E"){if(this.i+=1,(n[this.i]==="+"||n[this.i]==="-")&&(this.i+=1),!this.isDigit(n[this.i]))throw new SyntaxError("invalid number");for(;this.isDigit(n[this.i]);)this.i+=1}let r=Number(n.slice(t,this.i));if(!Number.isFinite(r))throw new SyntaxError("invalid number");return r}expect(t){if(this.text[this.i]!==t)throw new SyntaxError(`expected ${t}`);this.i+=1}isDigit(t){return t!==void 0&&t>="0"&&t<="9"}};var et=["package","version","url","sha512","size","node_engine","min_launcher_protocol"],Jt=new Set(et),Yt=/^\d+\.\d+\.\d+$/,zt=/^>=(\d+)(?:\.(\d+)(?:\.(\d+))?)?$/,Wt=/^[@A-Za-z0-9._/~-]{1,214}$/;function Ae(e){let t=Qe(e);return t.ok?Xt(t.value):t}function Xt(e){if(!Oe(e))return{ok:!1,reason:m.INVALID_JSON};for(let u of Object.keys(e))if(!Jt.has(u))return{ok:!1,reason:m.UNKNOWN_FIELD};for(let u of et)if(!(u in e))return{ok:!1,reason:m.MISSING_FIELD};let t=e.package;if(typeof t!="string"||!Wt.test(t)||t.includes(".."))return{ok:!1,reason:m.INVALID_PACKAGE};let n=e.version;if(typeof n!="string"||!Yt.test(n))return{ok:!1,reason:m.INVALID_VERSION};let r=e.url;if(typeof r!="string")return{ok:!1,reason:m.INVALID_URL};let o=qt(r,n);if(o!==void 0)return{ok:!1,reason:o};let a=e.sha512;if(typeof a!="string")return{ok:!1,reason:m.INVALID_SHA512};if(O(a)?.byteLength!==Q)return{ok:!1,reason:m.INVALID_SHA512};let c=e.size;if(typeof c!="number"||!Number.isInteger(c)||c<1||c>4194304)return{ok:!1,reason:m.INVALID_SIZE};let i=e.node_engine;if(typeof i!="string"||zt.exec(i)===null)return{ok:!1,reason:m.INVALID_NODE_ENGINE};let l=e.min_launcher_protocol;return typeof l!="number"||!Number.isInteger(l)||l<1||!Number.isSafeInteger(l)?{ok:!1,reason:m.INVALID_PROTOCOL}:{ok:!0,manifest:{package:t,version:n,url:r,sha512:a,size:c,node_engine:i,min_launcher_protocol:l}}}function Oe(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function qt(e,t){if(e.includes("..")||/%2e/i.test(e)||/[\\?#]/.test(e))return m.INVALID_URL;let n;try{n=new URL(e)}catch{return m.INVALID_URL}if(n.href!==e)return m.INVALID_URL;if(!Zt(n))return m.INVALID_URL;if(n.username!==""||n.password!=="")return m.INVALID_URL;if(n.search!==""||n.hash!=="")return m.INVALID_URL;if(n.hostname===""||n.pathname.includes(".."))return m.INVALID_URL;let o=/\/(\d+\.\d+\.\d+)\/hook\.mjs$/.exec(n.pathname)?.[1];if(o===void 0)return m.INVALID_URL;if(o!==t)return m.URL_VERSION_MISMATCH}var Qt=new Set(["localhost","127.0.0.1","[::1]"]);function Zt(e){return e.protocol==="https:"?!0:e.protocol==="http:"?Qt.has(e.hostname):!1}var nn=["format","key_id","payload","signature"],rn=/^[A-Za-z0-9._-]{1,128}$/;function on(e,t){return Buffer.concat([we,Buffer.from(e,"utf8"),Buffer.from([0]),Buffer.from(t)])}function v(e,t){if(!Oe(e))return{ok:!1,reason:m.INVALID_ENVELOPE};if(e.format!==M)return{ok:!1,reason:m.UNKNOWN_FORMAT};for(let u of Object.keys(e))if(u!=="format"&&u!=="key_id"&&u!=="payload"&&u!=="signature")return{ok:!1,reason:m.UNKNOWN_FIELD};for(let u of nn)if(!(u in e))return{ok:!1,reason:m.MISSING_FIELD};let r=e.key_id;if(typeof r!="string"||!rn.test(r))return{ok:!1,reason:m.INVALID_KEY_ID};let o=qe(t,r);if(o===void 0)return{ok:!1,reason:m.UNKNOWN_KEY};let a=e.payload,s=e.signature;if(typeof a!="string"||typeof s!="string")return{ok:!1,reason:m.INVALID_ENVELOPE};let c=O(a),i=O(s);if(c===void 0||i===void 0)return{ok:!1,reason:m.NON_CANONICAL_BASE64};if(i.byteLength!==We)return{ok:!1,reason:m.INVALID_SIGNATURE_LENGTH};let l=!1;try{l=tn(null,on(r,c),Xe(o),i)}catch{l=!1}return l?Ae(c):{ok:!1,reason:m.SIGNATURE_INVALID}}import{createHash as sn,timingSafeEqual as an}from"node:crypto";function te(e,t){if(e.byteLength!==t.size)return{ok:!1,reason:j.SIZE_MISMATCH};let n=O(t.sha512);if(n?.byteLength!==Q)return{ok:!1,reason:j.HASH_MISMATCH};let r=sn("sha512").update(e).digest();return r.byteLength!==n.byteLength||!an(r,n)?{ok:!1,reason:j.HASH_MISMATCH}:{ok:!0}}var cn=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/,un=/^>=(\d+)(?:\.(\d+)(?:\.(\d+))?)?$/,ln=/^v?(\d+)\.(\d+)\.(\d+)/;function tt(e){let t=cn.exec(e);if(t)return{...ve(t),prerelease:t[4]?.split(".")}}function nt(e,t){let n=tt(e),r=tt(t);if(!(!n||!r))return n.major!==r.major?n.major-r.major:n.minor!==r.minor?n.minor-r.minor:n.patch!==r.patch?n.patch-r.patch:dn(n.prerelease,r.prerelease)}function ne(e,t){let n=nt(e,t);return n!==void 0&&n>=0}function fn(e){let t=un.exec(e.trim());return t?ve(t):void 0}function ve(e){return{major:Number(e[1]),minor:Number(e[2]??0),patch:Number(e[3]??0)}}function re(e,t){let n=fn(t),r=ln.exec(e.trim()),o=r?ve(r):void 0;return!n||!o?!1:o.major!==n.major?o.major>n.major:o.minor!==n.minor?o.minor>n.minor:o.patch>=n.patch}function dn(e,t){if(e===void 0&&t===void 0)return 0;if(e===void 0)return 1;if(t===void 0)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r++){let o=e[r],a=t[r];if(o===void 0)return-1;if(a===void 0)return 1;let s=pn(o,a);if(s!==0)return s}return 0}function pn(e,t){let n=/^\d+$/.test(e),r=/^\d+$/.test(t);if(n&&r){let o=Number(e)-Number(t);return o<0?-1:o>0?1:0}return n?-1:r?1:e<t?-1:e>t?1:0}var rt="EV_AI_LAUNCHER_REFRESH_SCOPE",ot="EV_AI_HOOK_UPDATE_TTL_MIN",No=Buffer.from([1]);var Io=1024*1024,Po=4*1024*1024,Fo=64*1024,Lo=64*1024,Mo=64*1024;var H=21600,Ne=604800,it=3e5,Ie=4096,Pe=4*1024*1024;import{randomBytes as hn}from"node:crypto";import{basename as gn,dirname as yn,join as Fe}from"node:path";import{open as st,mkdir as _n,readFile as kn,readdir as Sn,rename as Rn,stat as En,rmdir as bn,unlink as wn,utimes as xn}from"node:fs/promises";var oe=new WeakMap;function Le(e){if(e&&typeof e=="object"&&"code"in e)return e}function S(e){return Le(e)?.code==="ENOENT"}function Me(e){return Le(e)?.code==="EEXIST"}function An(e){let t=Le(e)?.code;return t==="EPERM"||t==="EBUSY"||t==="EACCES"}async function E(e,t){try{return await e.readdir(t)}catch(n){if(S(n))return[];throw n}}async function $(e,t){try{await e.unlink(t)}catch(n){if(!S(n))throw n}}async function ie(e,t,n){let r=await e.open(t,"wx");try{await e.write(r,n),await e.fsync(r)}finally{await e.close(r)}}function De(){return hn(8).toString("hex")}function On(e){return e.startsWith(".")}async function G(e,t,n){let r=await E(e,t);await Promise.all(r.map(async o=>{if(!On(o))return;let a=Fe(t,o);try{let s=await e.stat(a);n-s.mtimeMs>36e5&&await e.unlink(a)}catch(s){if(!S(s))throw s}}))}async function N(e,t,n){let r=yn(t),o=De(),a=`.${gn(t)}.`,s=Fe(r,`${a}${o}`),c=()=>e.unlink(s).catch(()=>{});await ie(e,s,n);try{await e.rename(s,t)}catch(i){if(!An(i))throw await c(),i;let l=Fe(r,`${a}bad.${o}`);try{await e.rename(t,l)}catch(u){if(!S(u))throw await c(),u}await e.rename(s,t)}await e.fsyncDir(r)}function I(){return{async open(e,t){let n=await st(e,t),r={path:e};return oe.set(r,n),r},async write(e,t){let n=at(e),r=typeof t=="string"?Buffer.from(t,"utf8"):t;await n.write(r)},async fsync(e){await at(e).sync()},async close(e){let t=oe.get(e);oe.delete(e),t&&await t.close()},rename:Rn,async readdir(e){return Sn(e)},readFile:kn,async stat(e){let t=await En(e);return{mtimeMs:t.mtimeMs,size:t.size,isDirectory:()=>t.isDirectory()}},async mkdir(e,t){await _n(e,t)},unlink:wn,rmdir:bn,utimes:xn,async fsyncDir(e){if(process.platform==="win32")return;let t=await st(e,"r");try{await t.sync()}finally{await t.close()}}}}function at(e){let t=oe.get(e);if(!t)throw new Error("closed");return t}function y(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var ut=Object.freeze({"test-key-1":ct("3SU59MnYNtXEjlWrtcg6kYpCuIg+mZBapne4x6Ao9vQ="),"test-key-2":ct("RoD7qRBoc0L26I5dWmV+pk8FQe4umOBMFfg6fIsl5UU=")});function ct(e){let t=Buffer.from(e,"base64");if(t.byteLength!==D||t.toString("base64")!==e)throw new Error("invalid test public key");return t}function U(e){return e?{...ut,...Z}:Z}import{join as J}from"node:path";function He(e){return J(e,".ev-ai","agent-hook","js","signed-v1")}function Ue(e){return J(He(e),"scopes")}function b(e,t){return J(Ue(e),t)}function w(e){return J(e,"attempts")}function se(e){return J(e,"scope.json")}function Te(e){return String(e).padStart(10,"0")}var vn=64;function x(e,t){return z(He(e),t?"dev-artifacts":"artifacts")}function Ce(e,t){return z(e,t)}function R(e,t){return z(e,t,"hook.mjs")}function ae(e,t){return z(e,t,"release.json")}function Nn(e,t){return z(e,t,"health.json")}function P(e){return ft("sha512").update(e).digest("hex")}function Be(e){if(e.length===0||!/^[A-Za-z0-9+/]+=*$/.test(e))return;let t=Buffer.from(e,"base64");if(!(t.byteLength!==vn||t.toString("base64")!==e))return t.toString("hex")}async function T(e,t,n){try{let r=await e.stat(t);return r.size<=0||r.size>Pe?"bad":P(await e.readFile(t))===n?"ok":"bad"}catch(r){if(S(r))return"missing";throw r}}async function C(e,t,n,r,o,a,s=process.version){let[c,i,l]=await Promise.all([lt(e,R(t,n)),lt(e,ae(t,n)),In(e,Nn(t,n))]);if(c===void 0)return{usable:!1,reason:"artifact_missing"};if(i===void 0)return{usable:!1,reason:"signature_invalid"};let u;try{u=JSON.parse(i.toString("utf8"))}catch{return{usable:!1,reason:"signature_invalid"}}let f=v(u,U(a));if(!f.ok)return{usable:!1,reason:"signature_invalid"};let{manifest:d}=f;if(c.byteLength!==d.size||c.byteLength>Pe)return{usable:!1,reason:"hash_mismatch"};let p=ft("sha512").update(c).digest();if(p.toString("hex")!==n)return{usable:!1,reason:"hash_mismatch"};let h=Buffer.from(d.sha512,"base64");if(p.byteLength!==h.byteLength||!p.equals(h))return{usable:!1,reason:"hash_mismatch"};if(!ne(d.version,r))return{usable:!1,reason:"below_floor"};if(!re(s,d.node_engine))return{usable:!1,reason:"incompatible_node"};if(d.min_launcher_protocol>1)return{usable:!1,reason:"incompatible_protocol"};if(l?.quarantined_until){let g=Date.parse(l.quarantined_until);if(Number.isFinite(g)&&g>o)return{usable:!1,reason:"quarantined"}}return{usable:!0,manifest:d,healthFails:l?.consecutive_startup_failures??0}}async function lt(e,t){try{return await e.readFile(t)}catch(n){if(S(n))return;throw n}}async function In(e,t){try{let n=await e.readFile(t),r=JSON.parse(n.toString("utf8"));if(!y(r))return;let o=r.consecutive_startup_failures;if(typeof o!="number"||!Number.isInteger(o)||o<0)return;let a={consecutive_startup_failures:o};return typeof r.quarantined_until=="string"&&(a.quarantined_until=r.quarantined_until),a}catch{return}}import{join as dt}from"node:path";var Pn=/^(\d{10})$/,Fn=/^(\d{10})\.done$/,Ln=/^[0-9a-f]{128}$/,Mn=64;function F(e){let t=e[ot];if(t===void 0||t==="")return H;let n=Number(t);return!Number.isInteger(n)||n<=0?H:Math.min(Math.max(H,n*60),Ne)}async function _(e,t,n=!1){let r=w(t),o=await E(e,r),a=new Map,s=new Map,c=pt(o,Pn),i=pt(o,Fn),l=async d=>{let p=await ht(e,dt(r,ce(d)));return p&&a.set(d,{record:Hn(p.value),mtimeMs:p.mtimeMs}),p!==void 0},u=async d=>{let p=Un((await ht(e,dt(r,ue(d))))?.value);return p&&s.set(d,p),p!==void 0};if(!n)return await Promise.all([...c.map(l),...i.map(u)]),{claims:a,dones:s};await Promise.all([mt(c,l),mt(i,u)]);let f=A(a);return f<A(s)&&i.includes(f)&&await u(f),{claims:a,dones:s}}function pt(e,t){return e.flatMap(n=>{let r=t.exec(n);return r?[Number(r[1])]:[]})}async function mt(e,t){for(let n of[...e].sort((r,o)=>o-r))if(await t(n))return}function A(e){let t=0;for(let n of e.keys())n>t&&(t=n);return t}function L(e,t,n){let r=A(e.claims),o=A(e.dones),a=r===0?{kind:"uninitialized"}:{kind:"bundled",why:"bootstrap_failed"},s;if(o>0){let p=e.dones.get(o);p&&(a=p.selection,s=p.outcome)}let c=r>0?e.claims.get(r):void 0,i=c?Dn(c):void 0,l=r>0?e.dones.get(r):void 0,u=Ve(l?.interval_s,n),f=i!==void 0?i+u*1e3:void 0,d=i!==void 0&&i-t>it;return{latest:r,startMs:i,intervalS:u,deadlineMs:f,selection:a,lastOutcome:s,futureDated:d,highestDone:o}}function Dn(e){if(e.record!=="empty"&&e.record.started_at){let t=Date.parse(e.record.started_at);if(Number.isFinite(t))return t}return e.mtimeMs}function ce(e){return Te(e)}function ue(e){return`${Te(e)}.done`}function Ve(e,t){return typeof e!="number"||!Number.isFinite(e)||e<=0?Math.max(H,t):Math.min(Math.max(Math.floor(e),H,t),Ne)}async function ht(e,t){let n;try{n=await e.stat(t)}catch(o){if(S(o))return;throw o}let r=n.mtimeMs;if(n.size===0||n.size>Ie)return{mtimeMs:r};try{let o=await e.readFile(t);return o.byteLength===0||o.byteLength>Ie?{mtimeMs:r}:{mtimeMs:r,value:JSON.parse(o.toString("utf8"))}}catch{return{mtimeMs:r}}}function Hn(e){if(!y(e))return"empty";let t={};return typeof e.started_at=="string"&&(t.started_at=e.started_at),(e.owner==="bootstrap"||e.owner==="refresh")&&(t.owner=e.owner),e.resync===!0&&(t.resync=!0),t}function Un(e){if(!y(e))return;let t=e;if(typeof t.finished_at!="string"||typeof t.outcome!="string"||typeof t.interval_s!="number"||!Number.isFinite(t.interval_s))return;let n=Tn(t.selection);if(n)return{finished_at:t.finished_at,interval_s:t.interval_s,outcome:t.outcome,selection:n}}function Tn(e){if(!y(e))return;let t=e;if(t.kind==="bundled")return t.why==="server"||t.why==="bootstrap_failed"?{kind:"bundled",why:t.why}:void 0;if(t.kind==="cached"&&typeof t.digest=="string"&&Ln.test(t.digest)&&typeof t.version=="string"&&t.version.length>0&&typeof t.sha512=="string"&&Cn(t.sha512)===t.digest)return{kind:"cached",digest:t.digest,version:t.version,sha512:t.sha512}}function Cn(e){if(e.length===0||!/^[A-Za-z0-9+/]+=*$/.test(e))return;let t=Buffer.from(e,"base64");if(!(t.byteLength!==Mn||t.toString("base64")!==e))return t.toString("hex")}import{join as le}from"node:path";async function fe(e,t,n){let r=w(t);await e.mkdir(r,{recursive:!0}),await G(e,r,n.nowMs);let o=L(await _(e,t,!0),n.nowMs,n.ttlFloorS);return o.futureDated?gt(e,t,{...n,resync:!0,n:o.latest+1}):o.deadlineMs!==void 0&&n.nowMs<o.deadlineMs?{kind:"too_soon",deadlineMs:o.deadlineMs,latest:o.latest}:gt(e,t,{...n,n:o.latest+1})}var de={kind:"bundled",why:"bootstrap_failed"};function pe(e,t,n,r,o,a){return(s,c,i)=>Kn(e,t,{n:n.n,startedAtMs:n.startedAtMs,nowMs:r(),budgetMs:o,intervalS:Ve(i,a),outcome:s,selection:c})}async function Kn(e,t,n){if(n.nowMs-n.startedAtMs>n.budgetMs+3e4)return{recorded:!1,why:"expired"};let r=await _(e,t);if(A(r.claims)>n.n)return{recorded:!1,why:"superseded"};if(r.dones.has(n.n))return{recorded:!1,why:"already_done"};let o={finished_at:new Date(n.nowMs).toISOString(),interval_s:n.intervalS,outcome:n.outcome,selection:n.selection};return await G(e,w(t),n.nowMs),await N(e,le(w(t),ue(n.n)),JSON.stringify(o)),await jn(e,t,n.n),{recorded:!0}}async function jn(e,t,n){let r=await _(e,t),o=n-8,a=A(r.dones),s=w(t),c=new Set([...r.claims.keys(),...r.dones.keys()]);await Promise.all([...c].map(async i=>{i>=o||i!==a&&(await $(e,le(s,ce(i))),await $(e,le(s,ue(i))))}))}async function gt(e,t,n){if(n.n<1||n.n>9999999999)return{kind:"lost"};let r=w(t),o=le(r,ce(n.n)),a=new Date(n.nowMs).toISOString(),s=De(),c={started_at:a,nonce:s,owner:n.owner};n.resync&&(c.resync=!0);try{await ie(e,o,JSON.stringify(c)),await e.fsyncDir(r)}catch(i){if(Me(i))return{kind:"lost"};throw i}return n.collectorRedacted!==void 0&&await $n(e,t,n.collectorRedacted,n.dev===!0),A((await _(e,t)).claims)>n.n?{kind:"lost"}:n.resync?{kind:"resynced",n:n.n,startedAt:a}:{kind:"claimed",n:n.n,startedAt:a,startedAtMs:n.nowMs,nonce:s,owner:n.owner}}async function $n(e,t,n,r){let o=se(t);try{await ie(e,o,Buffer.from(JSON.stringify({collector:n,dev:r}),"utf8")),await e.fsyncDir(t)}catch(a){if(Me(a))return;throw a}}import lr from"node:http";import fr from"node:https";import{URL as dr}from"node:url";import{createHash as Gn}from"node:crypto";import{access as Jn,readFile as Yn,stat as zn}from"node:fs/promises";import{homedir as Wn}from"node:os";import{dirname as Xn,join as Ke,parse as qn,resolve as yt}from"node:path";var Qn="https://hooks.ev-ai.ai",Zn=".claude/ev-ai-runtime-report.json",er="config.json",tr=1024*1024,Et=new Set(["localhost","127.0.0.1","[::1]","::1"]),nr=["claude","cursor","codex"],rr=[Zn,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"],_t=/^[A-Za-z0-9._~-]+$/;function or(e){return e!==void 0&&nr.includes(e)}function me(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function ir(e){let t,n,r,o,a;for(let s=0;s<e.length;s++){let c=e[s];if(c!==void 0){if(c==="--runner"){let i=me(e,s);t=i.value,s=i.next;continue}if(c.startsWith("--runner=")){t=c.slice(9);continue}if(c==="--url"){let i=me(e,s);i.value&&(r=i.value),s=i.next;continue}if(c.startsWith("--url=")){r=c.slice(6);continue}if(c==="--token"){let i=me(e,s);i.value&&(o=i.value),s=i.next;continue}if(c.startsWith("--token=")){o=c.slice(8);continue}if(c==="--base-url"){let i=me(e,s);i.value&&(a=i.value),s=i.next;continue}if(c.startsWith("--base-url=")){a=c.slice(11);continue}!c.startsWith("-")&&n===void 0&&(n=c)}}return{runner:or(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:a}}function bt(e,t=Qn){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}function je(e=Wn()){return Ke(e,".ev-ai",er)}function sr(e,t){return{...e,...t}}function kt(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<=32||n===127||n===39)return!0}return!1}function wt(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?Et.has(t.hostname):!1}catch{return!1}}function xt(e){try{let n=new URL(e).pathname.split("/").filter(r=>r.length>0);if(n.length>=2&&n[n.length-1]==="hook"){let r=n[n.length-2];return r&&r.length>0?r:void 0}return}catch{return}}function $e(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!wt(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=xt(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!_t.test(n))return`org token must match ${_t.source} (got: ${n})`;if(kt(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(kt(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function ar(e){return new URL(e).toString()}function St(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token,n=typeof t=="string"?t.trim():void 0;return n?bt(n):""}function B(e){try{return Et.has(new URL(e).hostname)}catch{return!1}}function At(e){try{let t=new URL(e),n=t.pathname.split("/").filter(r=>r.length>0);return n.length>=2&&n[n.length-1]==="hook"&&(n[n.length-2]="***",t.pathname=`/${n.join("/")}`),t.toString()}catch{return"<invalid-url>"}}function cr(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=bt(o,e.baseUrl?.trim()??void 0))}if(!n)return{};let r=$e(n);return r?{problem:r}:{url:ar(n)}}var Ge={access:Jn,stat:zn,readFile:(e,t)=>Yn(e,t)};async function ur(e,t,n=Ge){let r=yt(e),{root:o}=qn(r);for(;;){let s=Ke(r,".git");try{let i=await n.stat(s);if(i.isDirectory()||i.isFile())return r}catch{}if(r===o)break;let c=Xn(r);if(c===r)break;r=c}let a=t.CURSOR_PROJECT_DIR??t.CLAUDE_PROJECT_DIR;if(a)try{if((await n.stat(a)).isDirectory())return a}catch{}return yt(e)}async function W(e,t=Ge){try{let n=await t.stat(e);if(!n.isFile()||n.size>tr)return;let r=await t.readFile(e,"utf8"),o=JSON.parse(r);return o===null||typeof o!="object"||Array.isArray(o)?void 0:o}catch{return}}async function Rt(e,t){return(await Promise.all(rr.map(async r=>{let o=Ke(e,r);try{return await t.access(o),o}catch{return}}))).find(r=>r!==void 0)}async function Ot(e){let t=e.fs??Ge,n=cr(ir(e.argv));if(n.url)return{url:n.url,source:"argv"};let r=e.env.EV_AI_HOOK_MANIFEST;if(r)try{await t.access(r);let f=await W(r,t),d=f?St(f):"";return d?{url:d,source:"manifest_override"}:{source:"none"}}catch{}let o=await ur(e.cwd,e.env,t),a=je(e.home),[s,c]=await Promise.all([W(a,t),Rt(o,t).then(async f=>f??Rt(e.cwd,t))]),i=c?await W(c,t):void 0,l;s&&i?l=sr(i,s):s?l=s:i&&(l=i);let u=l?St(l):"";return u?{url:u,source:"manifest"}:{source:"none"}}function vt(e){if($e(e))return;let t;try{t=new URL(e)}catch{return}let n=xt(e);if(!n)return;let o=t.pathname.split("/").filter(c=>c.length>0).slice(0,-2),a=o.length>0?`/${o.join("/")}`:"",s=`${t.origin}${a}/${n}`;return Gn("sha256").update(s).digest("hex").slice(0,32)}function Nt(e){if($e(e))return;let t;try{t=new URL(e)}catch{return}let n=t.pathname.split("/").filter(o=>o.length>0);if(n.length<2||n[n.length-1]!=="hook")return;n[n.length-1]="version";let r=new URL(t.origin);if(r.pathname=`/${n.join("/")}`,r.search="",r.hash="",r.username="",r.password="",!(r.username||r.password)&&r.origin===t.origin&&wt(r.toString()))return r.toString()}function he(){return{getBounded:pr}}function ge(e,t){return e==="timeout"||e==="network"?"failed:timeout":e==="http_3xx"?"failed:http_3xx":t}function pr(e,t){let n;try{n=new dr(e)}catch{return Promise.resolve({ok:!1,reason:"origin_rejected"})}if(n.protocol==="http:"){if(!B(e))return Promise.resolve({ok:!1,reason:"origin_rejected"})}else if(n.protocol!=="https:")return Promise.resolve({ok:!1,reason:"origin_rejected"});let r=n.protocol==="http:"?lr:fr;return new Promise(o=>{let a=!1,s=[],c=0,i=f=>{a||(a=!0,t.signal?.removeEventListener("abort",l),o(f))},l=()=>{u.destroy(),i({ok:!1,reason:"timeout"})},u=r.request(n,{method:"GET",agent:!1,timeout:t.timeoutMs},f=>{let d=f.statusCode??0;if(d>=300&&d<400){f.resume(),i({ok:!1,reason:"http_3xx"});return}let p=f.headers["content-length"];if(typeof p=="string"){let h=Number(p);if(Number.isFinite(h)&&h>t.maxBytes){f.destroy(),i({ok:!1,reason:"too_large"});return}}f.on("data",h=>{if(c+=h.length,c>t.maxBytes){f.destroy(),i({ok:!1,reason:"too_large"});return}s.push(h)}),f.on("end",()=>{i({ok:!0,response:{status:d,headers:f.headers,body:Buffer.concat(s)}})}),f.on("error",()=>{i({ok:!1,reason:"network"})})});if(u.on("timeout",()=>{u.destroy(),i({ok:!1,reason:"timeout"})}),u.on("error",()=>{i({ok:!1,reason:"network"})}),t.signal){if(t.signal.aborted){l();return}t.signal.addEventListener("abort",l,{once:!0})}u.end()})}async function X(e,t){return e.EV_AI_AUTO_UPDATE==="0"?!0:(await W(je(t)))?.auto_update===!1}function Je(e){return!!e.CURSOR_SANDBOX}function ye(e,t,n,r){return{source:"bundled",hookPath:e.bundledHookPath,fallbackReason:t,scopeId:n?.scopeId,dev:n?.dev,...r}}import{join as hr}from"node:path";var ze=/^[0-9a-f]{128}$/;function gr(e){return Buffer.from(JSON.stringify({format:e.format,key_id:e.key_id,payload:e.payload,signature:e.signature}),"utf8")}async function _e(e,t,n,r,o,a,s,c){if(!ze.test(n)||P(r)!==n)return{ok:!1,reason:"repair_failed"};let i=Ce(t,n);await e.mkdir(i,{recursive:!0}),await G(e,i,s);let l=R(t,n),u=ae(t,n),f=gr(o);if(await T(e,l,n)==="ok"){let p=await yr(e,u);if(p?.equals(f))return await Ye(e,t,n),{ok:!0};let h=await _r(p,c);return h!==void 0&&h!==a.version?{ok:!1,reason:"metadata_conflict"}:(await N(e,u,f),await Ye(e,t,n),{ok:!0})}return await N(e,l,r),await N(e,u,f),await T(e,l,n)!=="ok"?{ok:!1,reason:"repair_failed"}:(await Ye(e,t,n),{ok:!0})}async function Pt(e,t,n){let r=Be(n.sha512);if(!(r===void 0||!ze.test(r)))return await T(e,R(t,r),r)==="ok"?r:void 0}async function yr(e,t){try{return await e.readFile(t)}catch{return}}async function _r(e,t){if(e===void 0)return;let n;try{n=JSON.parse(e.toString("utf8"))}catch{return}if(!y(n))return;let r=v(n,U(t));return r.ok?r.manifest.version:void 0}async function Ye(e,t,n){try{let o=(await E(e,t)).filter(i=>ze.test(i));if(o.length<=8)return;let a=o.filter(i=>i!==n),s=await Promise.all(a.map(async i=>{let l=Number.NEGATIVE_INFINITY;try{l=(await e.stat(ae(t,i))).mtimeMs}catch{}return{name:i,mtimeMs:l}}));s.sort((i,l)=>l.mtimeMs-i.mtimeMs);let c=s.slice(7);await Promise.all(c.map(i=>kr(e,t,i.name)))}catch{}}async function kr(e,t,n){let r=Ce(t,n);try{let o=await E(e,r);await Promise.all(o.map(a=>$(e,hr(r,a)))),await e.rmdir(r)}catch{}}function ke(e,t){return{launcher:e,protocol:String(1),current:t,platform:`${process.platform}-${process.arch}`,node:process.version,update_format:M}}function Rr(e,t,n=U(t)){if(!y(e))return{ok:!1,reason:"failed:metadata_mismatch"};let r=e.hook_js;if(r===void 0)return{ok:!0,directive:{kind:"none"}};if(!y(r))return{ok:!1,reason:"failed:metadata_mismatch"};if(r.use_bundled===!0)return{ok:!0,directive:{kind:"bundled",intervalS:wr(r.check_interval_s)}};let o=v(r,n);if(!o.ok)return{ok:!1,reason:"failed:metadata_mismatch"};let a=br(o.manifest.url,t);return a?a!==o.manifest.version?{ok:!1,reason:"failed:metadata_mismatch"}:{ok:!0,directive:{kind:"target",manifest:o.manifest,envelope:Er(r)}}:{ok:!1,reason:"failed:origin_rejected"}}async function Ft(e,t,n,r,o,a){let s=xr(e,t),c=await r.getBounded(s,{maxBytes:4096,timeoutMs:n,signal:a});if(!c.ok)return{ok:!1,reason:ge(c.reason,"failed:metadata_mismatch")};let{status:i,body:l}=c.response;if(i!==200)return{ok:!1,reason:`failed:http_${i}`};let u;try{u=JSON.parse(l.toString("utf8"))}catch{return{ok:!1,reason:"failed:metadata_mismatch"}}return Rr(u,o)}function Er(e){return{format:M,key_id:String(e.key_id),payload:String(e.payload),signature:String(e.signature)}}function br(e,t){let n;try{n=new URL(e)}catch{return}if(n.username!==""||n.password!==""||n.search!==""||n.hash!==""||n.pathname.includes(".."))return;let o=/\/(\d+\.\d+\.\d+)\/hook\.mjs$/.exec(n.pathname)?.[1];if(o&&(n.protocol==="https:"||t&&n.protocol==="http:"&&B(e)))return o}function wr(e){if(typeof e=="number"&&Number.isInteger(e)&&e>0)return e}function xr(e,t){let n=new URL(e);for(let[r,o]of Object.entries(t))n.searchParams.set(r,o);return n.toString()}async function Se(e,t,n,r,o,a){let s=Nt(e);return s?Ft(s,t,n,r,o,a):{ok:!1,reason:"failed:origin_rejected"}}async function Re(e,t,n,r,o,a,s,c,i,l){let{manifest:u,envelope:f}=r;if(!ne(u.version,o))return{ok:!1,reason:"skipped:below_floor"};if(!re(process.version,u.node_engine))return{ok:!1,reason:"skipped:incompatible_node"};if(u.min_launcher_protocol>1)return{ok:!1,reason:"skipped:incompatible_protocol"};let d=await Pt(e,n,u);if(d){let h=await C(e,n,d,o,a,i);if(h.usable)return{ok:!0,digest:d,reused:!0};if(h.reason==="quarantined")return{ok:!1,reason:"skipped:quarantined"};if(h.reason==="signature_invalid"){let g=R(n,d);if(await T(e,g,d)==="ok"){let V=await e.readFile(g),K=await _e(e,n,d,V,f,u,a,i);return K.ok?{ok:!0,digest:d,reused:!0}:{ok:!1,reason:`failed:${K.reason}`}}}}let p=await Ar(e,n,r,l,a,i);return p||Or(e,t,n,r,a,s,c,i)}async function Ar(e,t,n,r,o,a){if(r.length!==0)try{let s=await e.readFile(r);if(!te(s,n.manifest).ok)return;let c=P(s),i=await _e(e,t,c,s,n.envelope,n.manifest,o,a);return i.ok?{ok:!0,digest:c,reused:!1}:{ok:!1,reason:`failed:${i.reason}`}}catch{return}}async function Or(e,t,n,r,o,a,s,c){let{manifest:i,envelope:l}=r,u=await t.getBounded(i.url,{maxBytes:i.size,timeoutMs:a,signal:s});if(!u.ok)return{ok:!1,reason:ge(u.reason,"failed:extract_failed")};if(u.response.status!==200)return{ok:!1,reason:`failed:http_${u.response.status}`};let f=u.response.body;if(!te(f,i).ok)return{ok:!1,reason:"failed:integrity_mismatch"};let p=P(f),h=await _e(e,n,p,f,l,i,o,c);return h.ok?{ok:!0,digest:p,reused:!1}:{ok:!1,reason:`failed:${h.reason}`}}async function Ir(e){let t=e.fs??I(),n=e.http??he(),r=b(e.home,e.scope.scopeId),o=x(e.home,e.scope.dev),a=F(e.env),s=AbortSignal.timeout(3e3),c=await fe(t,r,{owner:"bootstrap",nowMs:e.nowMs,ttlFloorS:a,collectorRedacted:e.scope.collectorUrlRedacted,dev:e.scope.dev});if(c.kind!=="claimed"){let h=c.kind==="lost"||c.kind==="too_soon";return ye(e,h?"bootstrap_in_progress":"bootstrap_failed",e.scope,{didBootstrap:!1})}let i=pe(t,r,c,()=>Date.now(),3e3,a),l=async h=>(await i(h,de),ye(e,"bootstrap_failed",e.scope,{didBootstrap:!0}));if(s.aborted)return l("failed:bootstrap");let u=await Se(e.scope.collectorUrl,ke(e.bundledVersion,e.bundledVersion),1e3,n,e.scope.dev,s);if(!u.ok)return l(u.reason);let f=u.directive;if(f.kind==="none")return l("failed:bootstrap");if(f.kind==="bundled")return await i("bundled",{kind:"bundled",why:"server"},f.intervalS),ye(e,"server",e.scope,{didBootstrap:!0});let d=await Re(t,n,o,{manifest:f.manifest,envelope:f.envelope},e.bundledVersion,e.nowMs,2e3,s,e.scope.dev,e.bundledHookPath);if(!d.ok)return l(d.reason);let{digest:p}=d;return await i("updated",{kind:"cached",digest:p,version:f.manifest.version,sha512:f.manifest.sha512}),{source:"bootstrap",hookPath:R(o,p),scopeId:e.scope.scopeId,digest:p,dev:e.scope.dev,didBootstrap:!0}}async function Ee(e,t){let n=await Ot({argv:e,env:t.env,cwd:t.cwd,home:t.home});if(!n.url)return;let r=vt(n.url);if(!(!r||n.source==="none"))return{scopeId:r,collectorUrl:n.url,collectorUrlRedacted:At(n.url),source:n.source,dev:B(n.url)}}async function Lr(e,t,n,r,o){try{await Mr(e,t,n,r,o)}catch{}return 0}async function Mr(e,t,n,r,o){if(Je(t)||await X(t,r))return;let a=t[rt],s=await Ee(e,{env:t,cwd:n,home:r});if(!s||!a||s.scopeId!==a)return;let c=o?.fs??I(),i=o?.http??he(),l=o?.nowMs??Date.now(),u=F(t),f=b(r,s.scopeId),d=await fe(c,f,{owner:"refresh",nowMs:l,ttlFloorS:u,collectorRedacted:s.collectorUrlRedacted,dev:s.dev});if(d.kind!=="claimed")return;let p=pe(c,f,d,()=>Date.now(),6e4,u),h=o?.packageVersion??"",g=L(await _(c,f,!0),l,u).selection,V=g.kind==="uninitialized"?de:g,K=AbortSignal.timeout(6e4),be=await Se(s.collectorUrl,ke(h,g.kind==="cached"?g.version:h),5e3,i,s.dev,K);if(!be.ok){await p(be.reason,V);return}let k=be.directive;if(k.kind==="none"){await p("no_directive",V);return}if(k.kind==="bundled"){await p("bundled",{kind:"bundled",why:"server"},k.intervalS);return}let q=await Re(c,i,x(r,s.dev),{manifest:k.manifest,envelope:k.envelope},h,l,3e4,K,s.dev,o?.bundledHookPath??"");if(!q.ok){await p(q.reason,V);return}let Tt=g.kind==="cached"&&g.version===k.manifest.version&&g.sha512===k.manifest.sha512,{digest:Ct}=q;await p(Tt?q.reused?"current":"repaired":"updated",{kind:"cached",digest:Ct,version:k.manifest.version,sha512:k.manifest.sha512})}function Dr(e){return`${e.slice(0,4)}\u2026`}async function Hr(e,t,n){let r=e.includes("--json"),o=e.includes("--all"),a=e.slice(1).filter(p=>p!=="--json"&&p!=="--all"),s=await Ee(a,t),c=await X(t.env,t.home),i=I(),l=await Ut(t,n,s,i,c),u=await Ur(i,t.home,s?.scopeId),f=o?await Tr(t,n,i,c,u):[];if(r)return t.stdout.write(`${JSON.stringify({...l,otherScopes:f},null,2)}
3
- `),0;let d=[`launcher ${n.version} protocol ${n.evAi.launcherProtocol} revision ${n.evAi.launcherRevision} bundled hook ${n.version}`];if(d.push(...Ht(l)),o)for(let p of f)d.push(""),d.push(...Ht(p));else d.push(`other scopes ${u.length} (status --all)`);return d.push(`auto-update ${c?"off":"on"}`),t.stdout.write(`${d.join(`
1
+ import{createHash as dt}from"node:crypto";import{join as W}from"node:path";var M="signed-hook-v1",xe=Buffer.from("ev-ai-hook-release-v1\0","utf8"),D=32;var Xe=64,Q=64;import{sign as So,verify as ar}from"node:crypto";var Jt=/^[A-Za-z0-9+/]+=*$/;function O(e){if(e.length===0||!Jt.test(e))return;let t=Buffer.from(e,"base64");if(t.toString("base64")===e)return t}import{createPrivateKey as no,createPublicKey as zt,timingSafeEqual as oo}from"node:crypto";var Wt=Buffer.from("302a300506032b6570032100","hex"),so=Buffer.from("302e020100300506032b657004220420","hex");function Xt(e){let t=Buffer.from(e,"base64");if(t.byteLength!==D||t.toString("base64")!==e)throw new Error("invalid production public key");return t}var Z=Object.freeze({"release-key-1":Xt("jVk7k2gEEcdAiPOFtNZomu36bOpfkk0vgF9dC6FMcS0=")});function qe(e){if(e.byteLength!==D)throw new Error("Ed25519 public key must be 32 bytes");return zt({key:Buffer.concat([Wt,Buffer.from(e)]),format:"der",type:"spki"})}function Qe(e,t){if(!Object.hasOwn(e,t))return;let r=e[t];if(r?.byteLength===D)return r}var m={UNKNOWN_FORMAT:"unknown_format",UNKNOWN_KEY:"unknown_key",NON_CANONICAL_BASE64:"non_canonical_base64",INVALID_SIGNATURE_LENGTH:"invalid_signature_length",SIGNATURE_INVALID:"signature_invalid",TRAILING_BYTES:"trailing_bytes",UNKNOWN_FIELD:"unknown_field",DUPLICATE_FIELD:"duplicate_field",MISSING_FIELD:"missing_field",INVALID_TYPE:"invalid_type",INVALID_VERSION:"invalid_version",INVALID_URL:"invalid_url",URL_VERSION_MISMATCH:"url_version_mismatch",INVALID_SHA512:"invalid_sha512",INVALID_SIZE:"invalid_size",INVALID_NODE_ENGINE:"invalid_node_engine",INVALID_PROTOCOL:"invalid_protocol",INVALID_PACKAGE:"invalid_package",INVALID_JSON:"invalid_json",INVALID_ENVELOPE:"invalid_envelope",INVALID_KEY_ID:"invalid_key_id"},$={SIZE_MISMATCH:"size_mismatch",HASH_MISMATCH:"hash_mismatch"};function Ze(e){let t;try{t=new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch{return{ok:!1,reason:m.INVALID_JSON}}return qt(t)}function qt(e){if(e.length===0)return{ok:!1,reason:m.INVALID_JSON};if(e.trimStart()!==e||e.trimEnd()!==e)return{ok:!1,reason:m.TRAILING_BYTES};let t=new Ae(e);try{let r=t.parseValue();return t.atEnd()?{ok:!0,value:r}:{ok:!1,reason:m.TRAILING_BYTES}}catch(r){return r instanceof ee?{ok:!1,reason:m.DUPLICATE_FIELD}:{ok:!1,reason:m.INVALID_JSON}}}var ee=class extends Error{constructor(){super("duplicate field")}},Ae=class{text;i=0;constructor(t){this.text=t}atEnd(){return this.i>=this.text.length}parseValue(){this.skipWs();let t=this.text[this.i];if(t==="{")return this.parseObject();if(t==="[")return this.parseArray();if(t==='"')return this.parseString();if(t==="t"||t==="f"||t==="n")return this.parseLiteral();if(t==="-"||t!==void 0&&t>="0"&&t<="9")return this.parseNumber();throw new SyntaxError("invalid json")}skipWs(){let{text:t}=this;for(;this.i<t.length;){let r=t.charCodeAt(this.i);if(r!==32&&r!==10&&r!==13&&r!==9)break;this.i+=1}}parseObject(){this.expect("{"),this.skipWs();let t=Object.create(null),r=new Set;if(this.text[this.i]==="}")return this.i+=1,t;for(;;){if(this.skipWs(),this.text[this.i]!=='"')throw new SyntaxError("expected key");let n=this.parseString();if(r.has(n))throw new ee;r.add(n),this.skipWs(),this.expect(":"),t[n]=this.parseValue(),this.skipWs();let o=this.text[this.i];if(o===","){this.i+=1;continue}if(o==="}")return this.i+=1,t;throw new SyntaxError("expected comma or end of object")}}parseArray(){this.expect("["),this.skipWs();let t=[];if(this.text[this.i]==="]")return this.i+=1,t;for(;;){t.push(this.parseValue()),this.skipWs();let r=this.text[this.i];if(r===","){this.i+=1;continue}if(r==="]")return this.i+=1,t;throw new SyntaxError("expected comma or end of array")}}parseString(){this.expect('"');let{text:t}=this,r="";for(;this.i<t.length;){let n=t.charCodeAt(this.i);if(n===34)return this.i+=1,r;if(n===92){this.i+=1,r+=this.parseEscape();continue}if(n<32)throw new SyntaxError("unescaped control");r+=t[this.i],this.i+=1}throw new SyntaxError("unterminated string")}parseEscape(){let t=this.text[this.i];if(t===void 0)throw new SyntaxError("unterminated escape");switch(this.i+=1,t){case'"':case"\\":case"/":return t;case"b":return"\b";case"f":return"\f";case"n":return`
2
+ `;case"r":return"\r";case"t":return" ";case"u":{let r=this.text.slice(this.i,this.i+4);if(!/^[0-9a-fA-F]{4}$/.test(r))throw new SyntaxError("invalid unicode escape");return this.i+=4,String.fromCharCode(Number.parseInt(r,16))}default:throw new SyntaxError("invalid escape")}}parseLiteral(){if(this.text.startsWith("true",this.i))return this.i+=4,!0;if(this.text.startsWith("false",this.i))return this.i+=5,!1;if(this.text.startsWith("null",this.i))return this.i+=4,null;throw new SyntaxError("invalid literal")}parseNumber(){let t=this.i,{text:r}=this;if(r[this.i]==="-"&&(this.i+=1),r[this.i]==="0")this.i+=1;else if(this.isDigit(r[this.i]))for(;this.isDigit(r[this.i]);)this.i+=1;else throw new SyntaxError("invalid number");if(r[this.i]==="."){if(this.i+=1,!this.isDigit(r[this.i]))throw new SyntaxError("invalid number");for(;this.isDigit(r[this.i]);)this.i+=1}if(r[this.i]==="e"||r[this.i]==="E"){if(this.i+=1,(r[this.i]==="+"||r[this.i]==="-")&&(this.i+=1),!this.isDigit(r[this.i]))throw new SyntaxError("invalid number");for(;this.isDigit(r[this.i]);)this.i+=1}let n=Number(r.slice(t,this.i));if(!Number.isFinite(n))throw new SyntaxError("invalid number");return n}expect(t){if(this.text[this.i]!==t)throw new SyntaxError(`expected ${t}`);this.i+=1}isDigit(t){return t!==void 0&&t>="0"&&t<="9"}};var tt=["package","version","url","sha512","size","node_engine","min_launcher_protocol"],Qt=new Set(tt),Zt=/^\d+\.\d+\.\d+$/,er=/^>=(\d+)(?:\.(\d+)(?:\.(\d+))?)?$/,tr=/^[@A-Za-z0-9._/~-]{1,214}$/;function Oe(e){let t=Ze(e);return t.ok?rr(t.value):t}function rr(e){if(!ve(e))return{ok:!1,reason:m.INVALID_JSON};for(let u of Object.keys(e))if(!Qt.has(u))return{ok:!1,reason:m.UNKNOWN_FIELD};for(let u of tt)if(!(u in e))return{ok:!1,reason:m.MISSING_FIELD};let t=e.package;if(typeof t!="string"||!tr.test(t)||t.includes(".."))return{ok:!1,reason:m.INVALID_PACKAGE};let r=e.version;if(typeof r!="string"||!Zt.test(r))return{ok:!1,reason:m.INVALID_VERSION};let n=e.url;if(typeof n!="string")return{ok:!1,reason:m.INVALID_URL};let o=nr(n,r);if(o!==void 0)return{ok:!1,reason:o};let a=e.sha512;if(typeof a!="string")return{ok:!1,reason:m.INVALID_SHA512};if(O(a)?.byteLength!==Q)return{ok:!1,reason:m.INVALID_SHA512};let c=e.size;if(typeof c!="number"||!Number.isInteger(c)||c<1||c>4194304)return{ok:!1,reason:m.INVALID_SIZE};let i=e.node_engine;if(typeof i!="string"||er.exec(i)===null)return{ok:!1,reason:m.INVALID_NODE_ENGINE};let l=e.min_launcher_protocol;return typeof l!="number"||!Number.isInteger(l)||l<1||!Number.isSafeInteger(l)?{ok:!1,reason:m.INVALID_PROTOCOL}:{ok:!0,manifest:{package:t,version:r,url:n,sha512:a,size:c,node_engine:i,min_launcher_protocol:l}}}function ve(e){if(e===null||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function nr(e,t){if(e.includes("..")||/%2e/i.test(e)||/[\\?#]/.test(e))return m.INVALID_URL;let r;try{r=new URL(e)}catch{return m.INVALID_URL}if(r.href!==e)return m.INVALID_URL;if(!ir(r))return m.INVALID_URL;if(r.username!==""||r.password!=="")return m.INVALID_URL;if(r.search!==""||r.hash!=="")return m.INVALID_URL;if(r.hostname===""||r.pathname.includes(".."))return m.INVALID_URL;let o=/\/(\d+\.\d+\.\d+)\/hook\.mjs$/.exec(r.pathname)?.[1];if(o===void 0)return m.INVALID_URL;if(o!==t)return m.URL_VERSION_MISMATCH}var or=new Set(["localhost","127.0.0.1","[::1]"]);function ir(e){return e.protocol==="https:"?!0:e.protocol==="http:"?or.has(e.hostname):!1}var cr=["format","key_id","payload","signature"],ur=/^[A-Za-z0-9._-]{1,128}$/;function lr(e,t){return Buffer.concat([xe,Buffer.from(e,"utf8"),Buffer.from([0]),Buffer.from(t)])}function v(e,t){if(!ve(e))return{ok:!1,reason:m.INVALID_ENVELOPE};if(e.format!==M)return{ok:!1,reason:m.UNKNOWN_FORMAT};for(let u of Object.keys(e))if(u!=="format"&&u!=="key_id"&&u!=="payload"&&u!=="signature")return{ok:!1,reason:m.UNKNOWN_FIELD};for(let u of cr)if(!(u in e))return{ok:!1,reason:m.MISSING_FIELD};let n=e.key_id;if(typeof n!="string"||!ur.test(n))return{ok:!1,reason:m.INVALID_KEY_ID};let o=Qe(t,n);if(o===void 0)return{ok:!1,reason:m.UNKNOWN_KEY};let a=e.payload,s=e.signature;if(typeof a!="string"||typeof s!="string")return{ok:!1,reason:m.INVALID_ENVELOPE};let c=O(a),i=O(s);if(c===void 0||i===void 0)return{ok:!1,reason:m.NON_CANONICAL_BASE64};if(i.byteLength!==Xe)return{ok:!1,reason:m.INVALID_SIGNATURE_LENGTH};let l=!1;try{l=ar(null,lr(n,c),qe(o),i)}catch{l=!1}return l?Oe(c):{ok:!1,reason:m.SIGNATURE_INVALID}}import{createHash as fr,timingSafeEqual as dr}from"node:crypto";function te(e,t){if(e.byteLength!==t.size)return{ok:!1,reason:$.SIZE_MISMATCH};let r=O(t.sha512);if(r?.byteLength!==Q)return{ok:!1,reason:$.HASH_MISMATCH};let n=fr("sha512").update(e).digest();return n.byteLength!==r.byteLength||!dr(n,r)?{ok:!1,reason:$.HASH_MISMATCH}:{ok:!0}}var pr=/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?$/,mr=/^>=(\d+)(?:\.(\d+)(?:\.(\d+))?)?$/,hr=/^v?(\d+)\.(\d+)\.(\d+)/;function rt(e){let t=pr.exec(e);if(t)return{...Ne(t),prerelease:t[4]?.split(".")}}function nt(e,t){let r=rt(e),n=rt(t);if(!(!r||!n))return r.major!==n.major?r.major-n.major:r.minor!==n.minor?r.minor-n.minor:r.patch!==n.patch?r.patch-n.patch:_r(r.prerelease,n.prerelease)}function re(e,t){let r=nt(e,t);return r!==void 0&&r>=0}function gr(e){let t=mr.exec(e.trim());return t?Ne(t):void 0}function Ne(e){return{major:Number(e[1]),minor:Number(e[2]??0),patch:Number(e[3]??0)}}function ne(e,t){let r=gr(t),n=hr.exec(e.trim()),o=n?Ne(n):void 0;return!r||!o?!1:o.major!==r.major?o.major>r.major:o.minor!==r.minor?o.minor>r.minor:o.patch>=r.patch}function _r(e,t){if(e===void 0&&t===void 0)return 0;if(e===void 0)return 1;if(t===void 0)return-1;let r=Math.max(e.length,t.length);for(let n=0;n<r;n++){let o=e[n],a=t[n];if(o===void 0)return-1;if(a===void 0)return 1;let s=yr(o,a);if(s!==0)return s}return 0}function yr(e,t){let r=/^\d+$/.test(e),n=/^\d+$/.test(t);if(r&&n){let o=Number(e)-Number(t);return o<0?-1:o>0?1:0}return r?-1:n?1:e<t?-1:e>t?1:0}var ot="EV_AI_LAUNCHER_REFRESH_SCOPE",it="EV_AI_HOOK_UPDATE_TTL_MIN",jo=Buffer.from([1]);var $o=1024*1024,Go=4*1024*1024,Jo=64*1024,Yo=64*1024,zo=64*1024;var T=21600,Ie=604800,st=3e5,Pe=4096,Fe=4*1024*1024;import{randomBytes as Rr}from"node:crypto";import{basename as Sr,dirname as Er,join as Le}from"node:path";import{open as at,mkdir as br,readFile as wr,readdir as xr,rename as Ar,stat as Or,rmdir as vr,unlink as Nr,utimes as Ir}from"node:fs/promises";var oe=new WeakMap;function Me(e){if(e&&typeof e=="object"&&"code"in e)return e}function R(e){return Me(e)?.code==="ENOENT"}function De(e){return Me(e)?.code==="EEXIST"}function Pr(e){let t=Me(e)?.code;return t==="EPERM"||t==="EBUSY"||t==="EACCES"}async function E(e,t){try{return await e.readdir(t)}catch(r){if(R(r))return[];throw r}}async function G(e,t){try{await e.unlink(t)}catch(r){if(!R(r))throw r}}async function ie(e,t,r){let n=await e.open(t,"wx");try{await e.write(n,r),await e.fsync(n)}finally{await e.close(n)}}function Te(){return Rr(8).toString("hex")}function Fr(e){return e.startsWith(".")}async function J(e,t,r){let n=await E(e,t);await Promise.all(n.map(async o=>{if(!Fr(o))return;let a=Le(t,o);try{let s=await e.stat(a);r-s.mtimeMs>36e5&&await e.unlink(a)}catch(s){if(!R(s))throw s}}))}async function N(e,t,r){let n=Er(t),o=Te(),a=`.${Sr(t)}.`,s=Le(n,`${a}${o}`),c=()=>e.unlink(s).catch(()=>{});await ie(e,s,r);try{await e.rename(s,t)}catch(i){if(!Pr(i))throw await c(),i;let l=Le(n,`${a}bad.${o}`);try{await e.rename(t,l)}catch(u){if(!R(u))throw await c(),u}await e.rename(s,t)}await e.fsyncDir(n)}function I(){return{async open(e,t){let r=await at(e,t),n={path:e};return oe.set(n,r),n},async write(e,t){let r=ct(e),n=typeof t=="string"?Buffer.from(t,"utf8"):t;await r.write(n)},async fsync(e){await ct(e).sync()},async close(e){let t=oe.get(e);oe.delete(e),t&&await t.close()},rename:Ar,async readdir(e){return xr(e)},readFile:wr,async stat(e){let t=await Or(e);return{mtimeMs:t.mtimeMs,size:t.size,isDirectory:()=>t.isDirectory()}},async mkdir(e,t){await br(e,t)},unlink:Nr,rmdir:vr,utimes:Ir,async fsyncDir(e){if(process.platform==="win32")return;let t=await at(e,"r");try{await t.sync()}finally{await t.close()}}}}function ct(e){let t=oe.get(e);if(!t)throw new Error("closed");return t}function _(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var lt=Object.freeze({"test-key-1":ut("3SU59MnYNtXEjlWrtcg6kYpCuIg+mZBapne4x6Ao9vQ="),"test-key-2":ut("RoD7qRBoc0L26I5dWmV+pk8FQe4umOBMFfg6fIsl5UU=")});function ut(e){let t=Buffer.from(e,"base64");if(t.byteLength!==D||t.toString("base64")!==e)throw new Error("invalid test public key");return t}function U(e){return e?{...lt,...Z}:Z}import{join as Y}from"node:path";function Ue(e){return Y(e,".ev-ai","agent-hook","js","signed-v1")}function He(e){return Y(Ue(e),"scopes")}function b(e,t){return Y(He(e),t)}function w(e){return Y(e,"attempts")}function se(e){return Y(e,"scope.json")}function Ce(e){return String(e).padStart(10,"0")}var Lr=64;function x(e,t){return W(Ue(e),t?"dev-artifacts":"artifacts")}function Be(e,t){return W(e,t)}function S(e,t){return W(e,t,"hook.mjs")}function ae(e,t){return W(e,t,"release.json")}function Mr(e,t){return W(e,t,"health.json")}function P(e){return dt("sha512").update(e).digest("hex")}function Ve(e){if(e.length===0||!/^[A-Za-z0-9+/]+=*$/.test(e))return;let t=Buffer.from(e,"base64");if(!(t.byteLength!==Lr||t.toString("base64")!==e))return t.toString("hex")}async function H(e,t,r){try{let n=await e.stat(t);return n.size<=0||n.size>Fe?"bad":P(await e.readFile(t))===r?"ok":"bad"}catch(n){if(R(n))return"missing";throw n}}async function C(e,t,r,n,o,a,s=process.version){let[c,i,l]=await Promise.all([ft(e,S(t,r)),ft(e,ae(t,r)),Dr(e,Mr(t,r))]);if(c===void 0)return{usable:!1,reason:"artifact_missing"};if(i===void 0)return{usable:!1,reason:"signature_invalid"};let u;try{u=JSON.parse(i.toString("utf8"))}catch{return{usable:!1,reason:"signature_invalid"}}let f=v(u,U(a));if(!f.ok)return{usable:!1,reason:"signature_invalid"};let{manifest:d}=f;if(c.byteLength!==d.size||c.byteLength>Fe)return{usable:!1,reason:"hash_mismatch"};let p=dt("sha512").update(c).digest();if(p.toString("hex")!==r)return{usable:!1,reason:"hash_mismatch"};let h=Buffer.from(d.sha512,"base64");if(p.byteLength!==h.byteLength||!p.equals(h))return{usable:!1,reason:"hash_mismatch"};if(!re(d.version,n))return{usable:!1,reason:"below_floor"};if(!ne(s,d.node_engine))return{usable:!1,reason:"incompatible_node"};if(d.min_launcher_protocol>1)return{usable:!1,reason:"incompatible_protocol"};if(l?.quarantined_until){let g=Date.parse(l.quarantined_until);if(Number.isFinite(g)&&g>o)return{usable:!1,reason:"quarantined"}}return{usable:!0,manifest:d,healthFails:l?.consecutive_startup_failures??0}}async function ft(e,t){try{return await e.readFile(t)}catch(r){if(R(r))return;throw r}}async function Dr(e,t){try{let r=await e.readFile(t),n=JSON.parse(r.toString("utf8"));if(!_(n))return;let o=n.consecutive_startup_failures;if(typeof o!="number"||!Number.isInteger(o)||o<0)return;let a={consecutive_startup_failures:o};return typeof n.quarantined_until=="string"&&(a.quarantined_until=n.quarantined_until),a}catch{return}}import{join as pt}from"node:path";var Tr=/^(\d{10})$/,Ur=/^(\d{10})\.done$/,Hr=/^[0-9a-f]{128}$/,Cr=64;function F(e){let t=e[it];if(t===void 0||t==="")return T;let r=Number(t);return!Number.isInteger(r)||r<=0?T:Math.min(Math.max(T,r*60),Ie)}async function y(e,t,r=!1){let n=w(t),o=await E(e,n),a=new Map,s=new Map,c=mt(o,Tr),i=mt(o,Ur),l=async d=>{let p=await gt(e,pt(n,ce(d)));return p&&a.set(d,{record:Vr(p.value),mtimeMs:p.mtimeMs}),p!==void 0},u=async d=>{let p=Kr((await gt(e,pt(n,ue(d))))?.value);return p&&s.set(d,p),p!==void 0};if(!r)return await Promise.all([...c.map(l),...i.map(u)]),{claims:a,dones:s};await Promise.all([ht(c,l),ht(i,u)]);let f=A(a);return f<A(s)&&i.includes(f)&&await u(f),{claims:a,dones:s}}function mt(e,t){return e.flatMap(r=>{let n=t.exec(r);return n?[Number(n[1])]:[]})}async function ht(e,t){for(let r of[...e].sort((n,o)=>o-n))if(await t(r))return}function A(e){let t=0;for(let r of e.keys())r>t&&(t=r);return t}function L(e,t,r){let n=A(e.claims),o=A(e.dones),a=n===0?{kind:"uninitialized"}:{kind:"bundled",why:"bootstrap_failed"},s;if(o>0){let p=e.dones.get(o);p&&(a=p.selection,s=p.outcome)}let c=n>0?e.claims.get(n):void 0,i=c?Br(c):void 0,l=n>0?e.dones.get(n):void 0,u=Ke(l?.interval_s,r),f=i!==void 0?i+u*1e3:void 0,d=i!==void 0&&i-t>st;return{latest:n,startMs:i,intervalS:u,deadlineMs:f,selection:a,lastOutcome:s,futureDated:d,highestDone:o}}function Br(e){if(e.record!=="empty"&&e.record.started_at){let t=Date.parse(e.record.started_at);if(Number.isFinite(t))return t}return e.mtimeMs}function ce(e){return Ce(e)}function ue(e){return`${Ce(e)}.done`}function Ke(e,t){return typeof e!="number"||!Number.isFinite(e)||e<=0?Math.max(T,t):Math.min(Math.max(Math.floor(e),T,t),Ie)}async function gt(e,t){let r;try{r=await e.stat(t)}catch(o){if(R(o))return;throw o}let n=r.mtimeMs;if(r.size===0||r.size>Pe)return{mtimeMs:n};try{let o=await e.readFile(t);return o.byteLength===0||o.byteLength>Pe?{mtimeMs:n}:{mtimeMs:n,value:JSON.parse(o.toString("utf8"))}}catch{return{mtimeMs:n}}}function Vr(e){if(!_(e))return"empty";let t={};return typeof e.started_at=="string"&&(t.started_at=e.started_at),(e.owner==="bootstrap"||e.owner==="refresh")&&(t.owner=e.owner),e.resync===!0&&(t.resync=!0),t}function Kr(e){if(!_(e))return;let t=e;if(typeof t.finished_at!="string"||typeof t.outcome!="string"||typeof t.interval_s!="number"||!Number.isFinite(t.interval_s))return;let r=jr(t.selection);if(r)return{finished_at:t.finished_at,interval_s:t.interval_s,outcome:t.outcome,selection:r}}function jr(e){if(!_(e))return;let t=e;if(t.kind==="bundled")return t.why==="server"||t.why==="bootstrap_failed"?{kind:"bundled",why:t.why}:void 0;if(t.kind==="cached"&&typeof t.digest=="string"&&Hr.test(t.digest)&&typeof t.version=="string"&&t.version.length>0&&typeof t.sha512=="string"&&$r(t.sha512)===t.digest)return{kind:"cached",digest:t.digest,version:t.version,sha512:t.sha512}}function $r(e){if(e.length===0||!/^[A-Za-z0-9+/]+=*$/.test(e))return;let t=Buffer.from(e,"base64");if(!(t.byteLength!==Cr||t.toString("base64")!==e))return t.toString("hex")}import{join as le}from"node:path";async function fe(e,t,r){let n=w(t);await e.mkdir(n,{recursive:!0}),await J(e,n,r.nowMs);let o=L(await y(e,t,!0),r.nowMs,r.ttlFloorS);return o.futureDated?_t(e,t,{...r,resync:!0,n:o.latest+1}):o.deadlineMs!==void 0&&r.nowMs<o.deadlineMs?{kind:"too_soon",deadlineMs:o.deadlineMs,latest:o.latest}:_t(e,t,{...r,n:o.latest+1})}var de={kind:"bundled",why:"bootstrap_failed"};function pe(e,t,r,n,o,a){return(s,c,i)=>Yr(e,t,{n:r.n,startedAtMs:r.startedAtMs,nowMs:n(),budgetMs:o,intervalS:Ke(i,a),outcome:s,selection:c})}async function Yr(e,t,r){if(r.nowMs-r.startedAtMs>r.budgetMs+3e4)return{recorded:!1,why:"expired"};let n=await y(e,t);if(A(n.claims)>r.n)return{recorded:!1,why:"superseded"};if(n.dones.has(r.n))return{recorded:!1,why:"already_done"};let o={finished_at:new Date(r.nowMs).toISOString(),interval_s:r.intervalS,outcome:r.outcome,selection:r.selection};return await J(e,w(t),r.nowMs),await N(e,le(w(t),ue(r.n)),JSON.stringify(o)),await zr(e,t,r.n),{recorded:!0}}async function zr(e,t,r){let n=await y(e,t),o=r-8,a=A(n.dones),s=w(t),c=new Set([...n.claims.keys(),...n.dones.keys()]);await Promise.all([...c].map(async i=>{i>=o||i!==a&&(await G(e,le(s,ce(i))),await G(e,le(s,ue(i))))}))}async function _t(e,t,r){if(r.n<1||r.n>9999999999)return{kind:"lost"};let n=w(t),o=le(n,ce(r.n)),a=new Date(r.nowMs).toISOString(),s=Te(),c={started_at:a,nonce:s,owner:r.owner};r.resync&&(c.resync=!0);try{await ie(e,o,JSON.stringify(c)),await e.fsyncDir(n)}catch(i){if(De(i))return{kind:"lost"};throw i}return r.collectorRedacted!==void 0&&await Wr(e,t,r.collectorRedacted,r.dev===!0),A((await y(e,t)).claims)>r.n?{kind:"lost"}:r.resync?{kind:"resynced",n:r.n,startedAt:a}:{kind:"claimed",n:r.n,startedAt:a,startedAtMs:r.nowMs,nonce:s,owner:r.owner}}async function Wr(e,t,r,n){let o=se(t);try{await ie(e,o,Buffer.from(JSON.stringify({collector:r,dev:n}),"utf8")),await e.fsyncDir(t)}catch(a){if(De(a))return;throw a}}import{readFileSync as yn}from"node:fs";import{homedir as kn}from"node:os";import{join as Rn}from"node:path";import{createHash as Xr}from"node:crypto";import{access as qr,readFile as Qr,stat as Zr}from"node:fs/promises";import{homedir as en}from"node:os";import{dirname as tn,join as je,parse as rn,resolve as yt}from"node:path";var nn="https://hooks.ev-ai.ai",on=".claude/ev-ai-runtime-report.json",sn="config.json",an=1024*1024,bt=new Set(["localhost","127.0.0.1","[::1]","::1"]),cn=["claude","cursor","codex"],un=[on,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"],kt=/^[A-Za-z0-9._~-]+$/;function ln(e){return e!==void 0&&cn.includes(e)}function me(e,t){let r=e[t+1];return r&&!r.startsWith("--")?{value:r,next:t+1}:{next:t}}function fn(e){let t,r,n,o,a;for(let s=0;s<e.length;s++){let c=e[s];if(c!==void 0){if(c==="--runner"){let i=me(e,s);t=i.value,s=i.next;continue}if(c.startsWith("--runner=")){t=c.slice(9);continue}if(c==="--url"){let i=me(e,s);i.value&&(n=i.value),s=i.next;continue}if(c.startsWith("--url=")){n=c.slice(6);continue}if(c==="--token"){let i=me(e,s);i.value&&(o=i.value),s=i.next;continue}if(c.startsWith("--token=")){o=c.slice(8);continue}if(c==="--base-url"){let i=me(e,s);i.value&&(a=i.value),s=i.next;continue}if(c.startsWith("--base-url=")){a=c.slice(11);continue}!c.startsWith("-")&&r===void 0&&(r=c)}}return{runner:ln(t)?t:void 0,event:r,collectorUrl:n,orgToken:o,baseUrl:a}}function wt(e,t=nn){let r=t.replace(/\/+$/,""),n=e.trim();return`${r}/${n}/hook`}function $e(e=en()){return je(e,".ev-ai",sn)}function dn(e,t){return{...e,...t}}function Rt(e){for(let t=0;t<e.length;t++){let r=e.charCodeAt(t);if(r<=32||r===127||r===39)return!0}return!1}function xt(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?bt.has(t.hostname):!1}catch{return!1}}function At(e){try{let r=new URL(e).pathname.split("/").filter(n=>n.length>0);if(r.length>=2&&r[r.length-1]==="hook"){let n=r[r.length-2];return n&&n.length>0?n:void 0}return}catch{return}}function Ge(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!xt(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let r=At(e);if(!r)return`must end with /{orgToken}/hook (got: ${e})`;if(!kt.test(r))return`org token must match ${kt.source} (got: ${r})`;if(Rt(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(Rt(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function pn(e){return new URL(e).toString()}function St(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token,r=typeof t=="string"?t.trim():void 0;return r?wt(r):""}function B(e){try{return bt.has(new URL(e).hostname)}catch{return!1}}function Ot(e){try{let t=new URL(e),r=t.pathname.split("/").filter(n=>n.length>0);return r.length>=2&&r[r.length-1]==="hook"&&(r[r.length-2]="***",t.pathname=`/${r.join("/")}`),t.toString()}catch{return"<invalid-url>"}}function mn(e){let t=e.collectorUrl?.trim(),r;if(t)r=t;else{let o=e.orgToken?.trim();o&&(r=wt(o,e.baseUrl?.trim()??void 0))}if(!r)return{};let n=Ge(r);return n?{problem:n}:{url:pn(r)}}var Je={access:qr,stat:Zr,readFile:(e,t)=>Qr(e,t)};async function hn(e,t,r=Je){let n=yt(e),{root:o}=rn(n);for(;;){let s=je(n,".git");try{let i=await r.stat(s);if(i.isDirectory()||i.isFile())return n}catch{}if(n===o)break;let c=tn(n);if(c===n)break;n=c}let a=t.CURSOR_PROJECT_DIR??t.CLAUDE_PROJECT_DIR;if(a)try{if((await r.stat(a)).isDirectory())return a}catch{}return yt(e)}async function X(e,t=Je){try{let r=await t.stat(e);if(!r.isFile()||r.size>an)return;let n=await t.readFile(e,"utf8"),o=JSON.parse(n);return o===null||typeof o!="object"||Array.isArray(o)?void 0:o}catch{return}}async function Et(e,t){return(await Promise.all(un.map(async n=>{let o=je(e,n);try{return await t.access(o),o}catch{return}}))).find(n=>n!==void 0)}async function vt(e){let t=e.fs??Je,r=mn(fn(e.argv));if(r.url)return{url:r.url,source:"argv"};let n=e.env.EV_AI_HOOK_MANIFEST;if(n)try{await t.access(n);let f=await X(n,t),d=f?St(f):"";return d?{url:d,source:"manifest_override"}:{source:"none"}}catch{}let o=await hn(e.cwd,e.env,t),a=$e(e.home),[s,c]=await Promise.all([X(a,t),Et(o,t).then(async f=>f??Et(e.cwd,t))]),i=c?await X(c,t):void 0,l;s&&i?l=dn(i,s):s?l=s:i&&(l=i);let u=l?St(l):"";return u?{url:u,source:"manifest"}:{source:"none"}}function Nt(e){if(Ge(e))return;let t;try{t=new URL(e)}catch{return}let r=At(e);if(!r)return;let o=t.pathname.split("/").filter(c=>c.length>0).slice(0,-2),a=o.length>0?`/${o.join("/")}`:"",s=`${t.origin}${a}/${r}`;return Xr("sha256").update(s).digest("hex").slice(0,32)}var gn=/^[A-Za-z0-9._~-]+$/;function It(e,t){if(!gn.test(t)||Ge(e))return;let r;try{r=new URL(e)}catch{return}let n=r.pathname.split("/").filter(a=>a.length>0);if(n.length<2||n[n.length-1]!=="hook")return;n[n.length-1]=t;let o=new URL(r.origin);if(o.pathname=`/${n.join("/")}`,o.search="",o.hash="",o.username="",o.password="",!(o.username||o.password)&&o.origin===r.origin&&xt(o.toString()))return o.toString()}function Pt(e){return It(e,"version")}function Ft(e){return It(e,"error-report")}var Mt=/^[A-Za-z0-9._-]{8,64}$/;function Sn(e,t){try{let n=yn(Rn(e,".ev-ai","agent-hook","installation.json"),"utf8"),o=JSON.parse(n);if(o&&typeof o=="object"&&!Array.isArray(o)){let a=o.installation_id;if(typeof a=="string"&&Mt.test(a))return a}}catch{}let r=t.EV_AI_HOOK_INSTALLATION_ID?.trim();return r&&Mt.test(r)?r:void 0}async function he(e,t,r,n,o){if(!t.startsWith("failed:")||!n.postJson)return;let a=Ft(e);if(!a)return;let s;try{s=Sn(o?.home??kn(),o?.env??process.env)}catch{}try{await n.postJson(a,{reason:t.slice(0,512),phase:r,...s?{installation_id:s}:{}},{timeoutMs:500,signal:AbortSignal.timeout(500)})}catch{}}import En from"node:http";import bn from"node:https";import{URL as wn}from"node:url";function ge(){return{getBounded:Dt,postJson:On}}function _e(e,t){return e==="timeout"||e==="network"?"failed:timeout":e==="http_3xx"?"failed:http_3xx":t}function Dt(e,t){let r;try{r=new wn(e)}catch{return Promise.resolve({ok:!1,reason:"origin_rejected"})}if(r.protocol==="http:"){if(!B(e))return Promise.resolve({ok:!1,reason:"origin_rejected"})}else if(r.protocol!=="https:")return Promise.resolve({ok:!1,reason:"origin_rejected"});let n=r.protocol==="http:"?En:bn;return new Promise(o=>{let a=!1,s=[],c=0,i=f=>{a||(a=!0,t.signal?.removeEventListener("abort",l),o(f))},l=()=>{u.destroy(),i({ok:!1,reason:"timeout"})},u=n.request(r,{method:t.method??"GET",agent:!1,timeout:t.timeoutMs,headers:t.headers},f=>{let d=f.statusCode??0;if(d>=300&&d<400){f.resume(),i({ok:!1,reason:"http_3xx"});return}let p=f.headers["content-length"];if(typeof p=="string"){let h=Number(p);if(Number.isFinite(h)&&h>t.maxBytes){f.destroy(),i({ok:!1,reason:"too_large"});return}}f.on("data",h=>{if(c+=h.length,c>t.maxBytes){f.destroy(),i({ok:!1,reason:"too_large"});return}s.push(h)}),f.on("end",()=>{i({ok:!0,response:{status:d,headers:f.headers,body:Buffer.concat(s)}})}),f.on("error",()=>{i({ok:!1,reason:"network"})})});if(u.on("timeout",()=>{u.destroy(),i({ok:!1,reason:"timeout"})}),u.on("error",()=>{i({ok:!1,reason:"network"})}),t.signal){if(t.signal.aborted){l();return}t.signal.addEventListener("abort",l,{once:!0})}u.end(t.body)})}var xn=2048,An=1024;function On(e,t,r){let n;try{n=Buffer.from(JSON.stringify(t),"utf8")}catch{return Promise.resolve({ok:!1,reason:"network"})}return n.byteLength>xn?Promise.resolve({ok:!1,reason:"too_large"}):Dt(e,{maxBytes:An,timeoutMs:r.timeoutMs,signal:r.signal,method:"POST",body:n,headers:{"content-type":"application/json","content-length":n.byteLength}})}async function q(e,t){return e.EV_AI_AUTO_UPDATE==="0"?!0:(await X($e(t)))?.auto_update===!1}function Ye(e){return!!e.CURSOR_SANDBOX}function ye(e,t,r,n){return{source:"bundled",hookPath:e.bundledHookPath,fallbackReason:t,scopeId:r?.scopeId,dev:r?.dev,...n}}import{join as Nn}from"node:path";var We=/^[0-9a-f]{128}$/;function In(e){return Buffer.from(JSON.stringify({format:e.format,key_id:e.key_id,payload:e.payload,signature:e.signature}),"utf8")}async function ke(e,t,r,n,o,a,s,c){if(!We.test(r)||P(n)!==r)return{ok:!1,reason:"repair_failed"};let i=Be(t,r);await e.mkdir(i,{recursive:!0}),await J(e,i,s);let l=S(t,r),u=ae(t,r),f=In(o);if(await H(e,l,r)==="ok"){let p=await Pn(e,u);if(p?.equals(f))return await ze(e,t,r),{ok:!0};let h=await Fn(p,c);return h!==void 0&&h!==a.version?{ok:!1,reason:"metadata_conflict"}:(await N(e,u,f),await ze(e,t,r),{ok:!0})}return await N(e,l,n),await N(e,u,f),await H(e,l,r)!=="ok"?{ok:!1,reason:"repair_failed"}:(await ze(e,t,r),{ok:!0})}async function Ut(e,t,r){let n=Ve(r.sha512);if(!(n===void 0||!We.test(n)))return await H(e,S(t,n),n)==="ok"?n:void 0}async function Pn(e,t){try{return await e.readFile(t)}catch{return}}async function Fn(e,t){if(e===void 0)return;let r;try{r=JSON.parse(e.toString("utf8"))}catch{return}if(!_(r))return;let n=v(r,U(t));return n.ok?n.manifest.version:void 0}async function ze(e,t,r){try{let o=(await E(e,t)).filter(i=>We.test(i));if(o.length<=8)return;let a=o.filter(i=>i!==r),s=await Promise.all(a.map(async i=>{let l=Number.NEGATIVE_INFINITY;try{l=(await e.stat(ae(t,i))).mtimeMs}catch{}return{name:i,mtimeMs:l}}));s.sort((i,l)=>l.mtimeMs-i.mtimeMs);let c=s.slice(7);await Promise.all(c.map(i=>Ln(e,t,i.name)))}catch{}}async function Ln(e,t,r){let n=Be(t,r);try{let o=await E(e,n);await Promise.all(o.map(a=>G(e,Nn(n,a)))),await e.rmdir(n)}catch{}}function Re(e,t){return{launcher:e,protocol:String(1),current:t,platform:`${process.platform}-${process.arch}`,node:process.version,update_format:M}}function Dn(e,t,r=U(t)){if(!_(e))return{ok:!1,reason:"failed:metadata_mismatch"};let n=e.hook_js;if(n===void 0)return{ok:!0,directive:{kind:"none"}};if(!_(n))return{ok:!1,reason:"failed:metadata_mismatch"};if(n.use_bundled===!0)return{ok:!0,directive:{kind:"bundled",intervalS:Hn(n.check_interval_s)}};let o=v(n,r);if(!o.ok)return{ok:!1,reason:"failed:metadata_mismatch"};let a=Un(o.manifest.url,t);return a?a!==o.manifest.version?{ok:!1,reason:"failed:metadata_mismatch"}:{ok:!0,directive:{kind:"target",manifest:o.manifest,envelope:Tn(n)}}:{ok:!1,reason:"failed:origin_rejected"}}async function Ht(e,t,r,n,o,a){let s=Cn(e,t),c=await n.getBounded(s,{maxBytes:4096,timeoutMs:r,signal:a});if(!c.ok)return{ok:!1,reason:_e(c.reason,"failed:metadata_mismatch")};let{status:i,body:l}=c.response;if(i!==200)return{ok:!1,reason:`failed:http_${i}`};let u;try{u=JSON.parse(l.toString("utf8"))}catch{return{ok:!1,reason:"failed:metadata_mismatch"}}return Dn(u,o)}function Tn(e){return{format:M,key_id:String(e.key_id),payload:String(e.payload),signature:String(e.signature)}}function Un(e,t){let r;try{r=new URL(e)}catch{return}if(r.username!==""||r.password!==""||r.search!==""||r.hash!==""||r.pathname.includes(".."))return;let o=/\/(\d+\.\d+\.\d+)\/hook\.mjs$/.exec(r.pathname)?.[1];if(o&&(r.protocol==="https:"||t&&r.protocol==="http:"&&B(e)))return o}function Hn(e){if(typeof e=="number"&&Number.isInteger(e)&&e>0)return e}function Cn(e,t){let r=new URL(e);for(let[n,o]of Object.entries(t))r.searchParams.set(n,o);return r.toString()}async function Se(e,t,r,n,o,a){let s=Pt(e);return s?Ht(s,t,r,n,o,a):{ok:!1,reason:"failed:origin_rejected"}}async function Ee(e,t,r,n,o,a,s,c,i,l){let{manifest:u,envelope:f}=n;if(!re(u.version,o))return{ok:!1,reason:"skipped:below_floor"};if(!ne(process.version,u.node_engine))return{ok:!1,reason:"skipped:incompatible_node"};if(u.min_launcher_protocol>1)return{ok:!1,reason:"skipped:incompatible_protocol"};let d=await Ut(e,r,u);if(d){let h=await C(e,r,d,o,a,i);if(h.usable)return{ok:!0,digest:d,reused:!0};if(h.reason==="quarantined")return{ok:!1,reason:"skipped:quarantined"};if(h.reason==="signature_invalid"){let g=S(r,d);if(await H(e,g,d)==="ok"){let V=await e.readFile(g),K=await ke(e,r,d,V,f,u,a,i);return K.ok?{ok:!0,digest:d,reused:!0}:{ok:!1,reason:`failed:${K.reason}`}}}}let p=await Bn(e,r,n,l,a,i);return p||Vn(e,t,r,n,a,s,c,i)}async function Bn(e,t,r,n,o,a){if(n.length!==0)try{let s=await e.readFile(n);if(!te(s,r.manifest).ok)return;let c=P(s),i=await ke(e,t,c,s,r.envelope,r.manifest,o,a);return i.ok?{ok:!0,digest:c,reused:!1}:{ok:!1,reason:`failed:${i.reason}`}}catch{return}}async function Vn(e,t,r,n,o,a,s,c){let{manifest:i,envelope:l}=n,u=await t.getBounded(i.url,{maxBytes:i.size,timeoutMs:a,signal:s});if(!u.ok)return{ok:!1,reason:_e(u.reason,"failed:extract_failed")};if(u.response.status!==200)return{ok:!1,reason:`failed:http_${u.response.status}`};let f=u.response.body;if(!te(f,i).ok)return{ok:!1,reason:"failed:integrity_mismatch"};let p=P(f),h=await ke(e,r,p,f,l,i,o,c);return h.ok?{ok:!0,digest:p,reused:!1}:{ok:!1,reason:`failed:${h.reason}`}}async function $n(e){let t=e.fs??I(),r=e.http??ge(),n=b(e.home,e.scope.scopeId),o=x(e.home,e.scope.dev),a=F(e.env),s=AbortSignal.timeout(3e3),c=await fe(t,n,{owner:"bootstrap",nowMs:e.nowMs,ttlFloorS:a,collectorRedacted:e.scope.collectorUrlRedacted,dev:e.scope.dev});if(c.kind!=="claimed"){let h=c.kind==="lost"||c.kind==="too_soon";return ye(e,h?"bootstrap_in_progress":"bootstrap_failed",e.scope,{didBootstrap:!1})}let i=pe(t,n,c,()=>Date.now(),3e3,a),l=async h=>(await i(h,de),ye(e,"bootstrap_failed",e.scope,{didBootstrap:!0}));if(s.aborted)return l("failed:bootstrap");let u=await Se(e.scope.collectorUrl,Re(e.bundledVersion,e.bundledVersion),1e3,r,e.scope.dev,s);if(!u.ok)return l(u.reason);let f=u.directive;if(f.kind==="none")return l("failed:bootstrap");if(f.kind==="bundled")return await i("bundled",{kind:"bundled",why:"server"},f.intervalS),ye(e,"server",e.scope,{didBootstrap:!0});let d=await Ee(t,r,o,{manifest:f.manifest,envelope:f.envelope},e.bundledVersion,e.nowMs,2e3,s,e.scope.dev,e.bundledHookPath);if(!d.ok)return he(e.scope.collectorUrl,d.reason,"bootstrap",r,{home:e.home,env:e.env}),l(d.reason);let{digest:p}=d;return await i("updated",{kind:"cached",digest:p,version:f.manifest.version,sha512:f.manifest.sha512}),{source:"bootstrap",hookPath:S(o,p),scopeId:e.scope.scopeId,digest:p,dev:e.scope.dev,didBootstrap:!0}}async function be(e,t){let r=await vt({argv:e,env:t.env,cwd:t.cwd,home:t.home});if(!r.url)return;let n=Nt(r.url);if(!(!n||r.source==="none"))return{scopeId:n,collectorUrl:r.url,collectorUrlRedacted:Ot(r.url),source:r.source,dev:B(r.url)}}async function Yn(e,t,r,n,o){try{await zn(e,t,r,n,o)}catch{}return 0}async function zn(e,t,r,n,o){if(Ye(t)||await q(t,n))return;let a=t[ot],s=await be(e,{env:t,cwd:r,home:n});if(!s||!a||s.scopeId!==a)return;let c=o?.fs??I(),i=o?.http??ge(),l=o?.nowMs??Date.now(),u=F(t),f=b(n,s.scopeId),d=await fe(c,f,{owner:"refresh",nowMs:l,ttlFloorS:u,collectorRedacted:s.collectorUrlRedacted,dev:s.dev});if(d.kind!=="claimed")return;let p=pe(c,f,d,()=>Date.now(),6e4,u),h=o?.packageVersion??"",g=L(await y(c,f,!0),l,u).selection,V=g.kind==="uninitialized"?de:g,K=AbortSignal.timeout(6e4),we=await Se(s.collectorUrl,Re(h,g.kind==="cached"?g.version:h),5e3,i,s.dev,K);if(!we.ok){await p(we.reason,V);return}let k=we.directive;if(k.kind==="none"){await p("no_directive",V);return}if(k.kind==="bundled"){await p("bundled",{kind:"bundled",why:"server"},k.intervalS);return}let j=await Ee(c,i,x(n,s.dev),{manifest:k.manifest,envelope:k.envelope},h,l,3e4,K,s.dev,o?.bundledHookPath??"");if(!j.ok){he(s.collectorUrl,j.reason,"refresh",i,{home:n,env:t}),await p(j.reason,V);return}let $t=g.kind==="cached"&&g.version===k.manifest.version&&g.sha512===k.manifest.sha512,{digest:Gt}=j;await p($t?j.reused?"current":"repaired":"updated",{kind:"cached",digest:Gt,version:k.manifest.version,sha512:k.manifest.sha512})}function Wn(e){return`${e.slice(0,4)}\u2026`}async function Xn(e,t,r){let n=e.includes("--json"),o=e.includes("--all"),a=e.slice(1).filter(p=>p!=="--json"&&p!=="--all"),s=await be(a,t),c=await q(t.env,t.home),i=I(),l=await jt(t,r,s,i,c),u=await qn(i,t.home,s?.scopeId),f=o?await Qn(t,r,i,c,u):[];if(n)return t.stdout.write(`${JSON.stringify({...l,otherScopes:f},null,2)}
3
+ `),0;let d=[`launcher ${r.version} protocol ${r.evAi.launcherProtocol} revision ${r.evAi.launcherRevision} bundled hook ${r.version}`];if(d.push(...Kt(l)),o)for(let p of f)d.push(""),d.push(...Kt(p));else d.push(`other scopes ${u.length} (status --all)`);return d.push(`auto-update ${c?"off":"on"}`),t.stdout.write(`${d.join(`
4
4
  `)}
5
- `),0}async function Ut(e,t,n,r,o){let a=!o;if(o)return{...Dt(n,a),selection:"bundled",fallbackReason:"kill_switch"};if(!n)return{selection:"bundled",fallbackReason:"no_collector_url",autoUpdate:a};let s=e.now(),c=await _(r,b(e.home,n.scopeId),!0),i=L(c,s,F(e.env)),l="bundled",u,f;if(i.selection.kind==="cached"){let d=x(e.home,n.dev),p=await C(r,d,i.selection.digest,t.version,s,n.dev);p.usable?(l=`cached ${i.selection.version}`,f=`usable (protocol ${p.manifest.min_launcher_protocol})`):u=p.reason}else i.selection.kind==="bundled"?u=i.selection.why:u="uninitialized";return{...Dt(n,a),selection:l,fallbackReason:u,usable:f,lastAttempt:i.startMs!==void 0?new Date(i.startMs).toISOString():void 0,nextNotBefore:i.deadlineMs!==void 0?new Date(i.deadlineMs).toISOString():void 0,intervalS:i.intervalS,lastResult:i.lastOutcome}}function Dt(e,t){return{scopeId:e?.scopeId,collectorUrlRedacted:e?.collectorUrlRedacted,urlSource:e?.source,autoUpdate:t}}function Ht(e){let t=[];e.scopeId?t.push(`this repo scope ${Dr(e.scopeId)} ${e.collectorUrlRedacted} (source: ${e.urlSource})`):t.push("this repo (no collector url)");let n=e.fallbackReason?` (${e.fallbackReason})`:e.usable?` ${e.usable}`:"";return t.push(` selection ${e.selection}${n}`),e.lastAttempt&&t.push(` schedule last attempt ${e.lastAttempt} next not before ${e.nextNotBefore} (interval ${Math.round((e.intervalS??0)/3600)} h)`),e.lastResult&&t.push(` last result ${e.lastResult}`),t}async function Ur(e,t,n){return(await E(e,Ue(t))).filter(r=>r!==n)}function Tr(e,t,n,r,o){return Promise.all(o.map(async a=>{let s=await Cr(n,b(e.home,a)),c={scopeId:a,collectorUrl:"",collectorUrlRedacted:s.collector??"",source:"manifest",dev:s.dev};return Ut(e,t,c,n,r)}))}async function Cr(e,t){try{let n=JSON.parse((await e.readFile(se(t))).toString("utf8"));if(y(n))return{collector:typeof n.collector=="string"?n.collector:void 0,dev:n.dev===!0}}catch{}return{dev:!1}}export{Ir as bootstrap,Lr as runRefresh,Hr as runStatus};
5
+ `),0}async function jt(e,t,r,n,o){let a=!o;if(o)return{...Vt(r,a),selection:"bundled",fallbackReason:"kill_switch"};if(!r)return{selection:"bundled",fallbackReason:"no_collector_url",autoUpdate:a};let s=e.now(),c=await y(n,b(e.home,r.scopeId),!0),i=L(c,s,F(e.env)),l="bundled",u,f;if(i.selection.kind==="cached"){let d=x(e.home,r.dev),p=await C(n,d,i.selection.digest,t.version,s,r.dev);p.usable?(l=`cached ${i.selection.version}`,f=`usable (protocol ${p.manifest.min_launcher_protocol})`):u=p.reason}else i.selection.kind==="bundled"?u=i.selection.why:u="uninitialized";return{...Vt(r,a),selection:l,fallbackReason:u,usable:f,lastAttempt:i.startMs!==void 0?new Date(i.startMs).toISOString():void 0,nextNotBefore:i.deadlineMs!==void 0?new Date(i.deadlineMs).toISOString():void 0,intervalS:i.intervalS,lastResult:i.lastOutcome}}function Vt(e,t){return{scopeId:e?.scopeId,collectorUrlRedacted:e?.collectorUrlRedacted,urlSource:e?.source,autoUpdate:t}}function Kt(e){let t=[];e.scopeId?t.push(`this repo scope ${Wn(e.scopeId)} ${e.collectorUrlRedacted} (source: ${e.urlSource})`):t.push("this repo (no collector url)");let r=e.fallbackReason?` (${e.fallbackReason})`:e.usable?` ${e.usable}`:"";return t.push(` selection ${e.selection}${r}`),e.lastAttempt&&t.push(` schedule last attempt ${e.lastAttempt} next not before ${e.nextNotBefore} (interval ${Math.round((e.intervalS??0)/3600)} h)`),e.lastResult&&t.push(` last result ${e.lastResult}`),t}async function qn(e,t,r){return(await E(e,He(t))).filter(n=>n!==r)}function Qn(e,t,r,n,o){return Promise.all(o.map(async a=>{let s=await Zn(r,b(e.home,a)),c={scopeId:a,collectorUrl:"",collectorUrlRedacted:s.collector??"",source:"manifest",dev:s.dev};return jt(e,t,c,r,n)}))}async function Zn(e,t){try{let r=JSON.parse((await e.readFile(se(t))).toString("utf8"));if(_(r))return{collector:typeof r.collector=="string"?r.collector:void 0,dev:r.dev===!0}}catch{}return{dev:!1}}export{$n as bootstrap,Yn as runRefresh,Xn as runStatus};
@@ -44,7 +44,7 @@ var HOOK_INPUT_FULL_MAX_BYTES = 256 * 1024;
44
44
  var HOOK_INPUT_MCP_MAX_BYTES = 4 * 1024;
45
45
  var GZIP_MIN_BYTES = 32 * 1024;
46
46
  var USER_SPEC_COOLDOWN_MS = 14 * 60 * 60 * 1e3;
47
- var PACKAGE_VERSION = "1.2.3";
47
+ var PACKAGE_VERSION = "1.2.4";
48
48
  var NPX_PACKAGE_SPEC = `@ev-ai/agent-hook@${PACKAGE_VERSION}`;
49
49
  var HOOK_STATUS_MESSAGE = "ev-ai runtime report";
50
50
 
@@ -17,7 +17,7 @@ var HOOK_INPUT_FULL_MAX_BYTES = 256 * 1024;
17
17
  var HOOK_INPUT_MCP_MAX_BYTES = 4 * 1024;
18
18
  var GZIP_MIN_BYTES = 32 * 1024;
19
19
  var USER_SPEC_COOLDOWN_MS = 14 * 60 * 60 * 1e3;
20
- var PACKAGE_VERSION = "1.2.3";
20
+ var PACKAGE_VERSION = "1.2.4";
21
21
  var NPX_PACKAGE_SPEC = `@ev-ai/agent-hook@${PACKAGE_VERSION}`;
22
22
  var HOOK_STATUS_MESSAGE = "ev-ai runtime report";
23
23
 
@@ -15,7 +15,7 @@ var HOOK_INPUT_FULL_MAX_BYTES = 256 * 1024;
15
15
  var HOOK_INPUT_MCP_MAX_BYTES = 4 * 1024;
16
16
  var GZIP_MIN_BYTES = 32 * 1024;
17
17
  var USER_SPEC_COOLDOWN_MS = 14 * 60 * 60 * 1e3;
18
- var PACKAGE_VERSION = "1.2.3";
18
+ var PACKAGE_VERSION = "1.2.4";
19
19
  var NPX_PACKAGE_SPEC = `@ev-ai/agent-hook@${PACKAGE_VERSION}`;
20
20
  var HOOK_STATUS_MESSAGE = "ev-ai runtime report";
21
21
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ev-ai/agent-hook",
3
- "version": "1.2.3",
3
+ "version": "1.2.4",
4
4
  "description": "Cross-runner runtime telemetry hook for Claude Code, Cursor, and Codex",
5
5
  "type": "module",
6
6
  "bin": {