@ev-ai/agent-hook 1.2.1 → 1.2.2
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/README.md +33 -2
- package/dist/cli.mjs +7 -7
- package/dist/hook.mjs +6 -6
- package/dist/launcher-update.mjs +4 -4
- package/dist/launcher.mjs +3 -2
- package/dist/managed-hooks-snippet.cjs +1 -1
- package/dist/managed-hooks-snippet.mjs +1 -1
- package/dist/plugin-hooks.mjs +1 -1
- package/package.json +2 -2
package/dist/hook.mjs
CHANGED
|
@@ -10,14 +10,14 @@ var gc=Object.create;var Yr=Object.defineProperty;var _c=Object.getOwnPropertyDe
|
|
|
10
10
|
`).trimEnd();return(0,J.usableCatalogText)(m)}});var As=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=Yl;T.capComponentTextBytes=Cs;T.prepareComponentInspectionText=Jl;T.redactComponentSource=jn;T.componentSourceContainsRedactableSecret=ld;T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER="[REDACTED]";T.COMPONENT_INSPECTION_TEXT_MAX_BYTES=256*1024;T.SNAPSHOT_INSPECTION_TEXT_MAX_BYTES=3*1024*1024;function Yl(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 Cs(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 Jl(e){if(!(e==null||e.length===0))return Cs(jn(e),T.COMPONENT_INSPECTION_TEXT_MAX_BYTES)}var Xl="(?:[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_.-]*)",Zl=new RegExp(`(\\b${Xl})(\\s*[:=]\\s*)(?:(")([^"\\n]*)(")|(')([^'\\n]*)(')|([^\\s"'][^"'\\n]*))`,"gi"),ql=[/^(?: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 ql.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 ed=[/\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],td=/\b[A-Za-z0-9_+/-]{32,}={0,2}\b/g,nd=/^[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 rd(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 od(e){return e.replace(td,t=>{if(nd.test(t))return t;let n=/[A-Za-z]/.test(t),r=/\d/.test(t);return n&&r&&rd(t)>=3.5?T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER:t})}var sd=/\b(Bearer\s+)[A-Za-z0-9._~+/=-]{8,}/gi,id=/\b([a-z][a-z0-9+.-]*:\/\/)([^\s/@:]+):([^\s/@]*)@/gi,ad=/([?&](?:access_token|api_key|apikey|auth|authorization|client_secret|key|password|secret|token)=)[^&\s"'<>]+/gi,cd=/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----/,Rs=/-----END [A-Z0-9 ]*PRIVATE KEY-----/;function Is(e){return e.replace(Zl,(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??"",E=s??c??"";return E===""||E.includes(T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER)||Hn(E)?t:`${p}${d}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}${g}`}let m=l??"";if(r==="="){let d=Ql(m).replace(/`+$/,""),g=Is(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 ud(e){let t=e.replace(id,(n,r)=>`${r}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}:${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}@`);t=t.replace(ad,(n,r)=>`${r}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}`),t=t.replace(sd,(n,r)=>`${r}${T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER}`);for(let n of ed)t=t.replace(n,T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER);return Is(od(t))}function jn(e){if(e.length===0)return e;let t=e.split(`
|
|
11
11
|
`),n=!1;return t.map(o=>n?Rs.test(o)?(n=!1,o):o.trim().length===0?o:T.COMPONENT_SOURCE_REDACTION_PLACEHOLDER:cd.test(o)&&!Rs.test(o)?(n=!0,o):ud(o)).join(`
|
|
12
12
|
`)}function ld(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=yd;f.installationRootExternalKey=Rd;f.normalizeRepositoryRelativePath=Os;f.nativeKeyForSkillPath=Cd;f.nativeKeyForRulePath=Id;f.nativeKeyForCommandPath=Ad;f.serializeComponentIdentity=Ts;f.buildComponentReference=Pd;f.validateComponentReference=Td;var dd=sn("node:crypto"),pd=sn("node:path"),fd="cmp1_",md=/^cmp1_[A-Za-z0-9_-]{43}$/,gd=["/skills/","/skills-cursor/"],_d=/(?:^|\/)\.(?:cursor|claude|codex)\/rules\/(.+)$/i,hd=/(?:^|\/)\.(?:cursor|claude|codex)\/(?:commands|prompts)\/(.+)$/i,Ed=[".cursor",".claude",".codex"],Sd={".claude.json":".claude",".agents":".codex"};f.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE",RULE:"RULE",COMMAND:"COMMAND"};function yd(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>Ed.includes(o));return n||(t.map(o=>Sd[o]).find(o=>o!==void 0)??"unknown")}function Rd(e,t){return`runtime-install:${e}/${t}`}function kt(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function Os(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=pd.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return kt(n,"sourcePath")}function Cd(e){let t=e.replaceAll("\\","/");for(let n of gd){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function Ps(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 Id(e){return Ps(e,_d,/\.(mdc|md|rules)$/i)}function Ad(e){return Ps(e,hd,/\.(md|mdc|toml)$/i)}function Od(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function Ts(e){let t=[kt(e.installationRootExternalKey,"installationRootExternalKey"),kt(e.installableKind,"installableKind"),Os(e.sourcePath),kt(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(Od).join("|")}`,"utf8")}function Pd(e){let t=(0,dd.createHash)("sha256").update(Ts(e)).digest("base64url");return`${fd}${t}`}function Td(e){return md.test(e)}var X=Ot();Object.defineProperty(f,"buildMcpFamilyCanonicalKey",{enumerable:!0,get:function(){return X.buildMcpFamilyCanonicalKey}});Object.defineProperty(f,"foldMcpName",{enumerable:!0,get:function(){return X.foldMcpName}});Object.defineProperty(f,"hashMcpLaunchIdentity",{enumerable:!0,get:function(){return X.hashMcpLaunchIdentity}});Object.defineProperty(f,"launchContainsCredentials",{enumerable:!0,get:function(){return X.launchContainsCredentials}});Object.defineProperty(f,"maskMcpLaunchForDisplay",{enumerable:!0,get:function(){return X.maskMcpLaunchForDisplay}});Object.defineProperty(f,"MCP_LAUNCH_IDENTITY_ALGORITHM",{enumerable:!0,get:function(){return X.MCP_LAUNCH_IDENTITY_ALGORITHM}});Object.defineProperty(f,"MCP_MISSING_LAUNCH_SERIALIZED",{enumerable:!0,get:function(){return X.MCP_MISSING_LAUNCH_SERIALIZED}});Object.defineProperty(f,"normalizeMcpToolNames",{enumerable:!0,get:function(){return X.normalizeMcpToolNames}});Object.defineProperty(f,"projectMcpLaunchIdentity",{enumerable:!0,get:function(){return X.projectMcpLaunchIdentity}});Object.defineProperty(f,"projectMcpMissingLaunchIdentity",{enumerable:!0,get:function(){return X.projectMcpMissingLaunchIdentity}});Object.defineProperty(f,"serializeMcpLaunchIdentity",{enumerable:!0,get:function(){return X.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 ks=fs();Object.defineProperty(f,"McpPackageEcosystem",{enumerable:!0,get:function(){return ks.McpPackageEcosystem}});Object.defineProperty(f,"resolveMcpPackageIdentity",{enumerable:!0,get:function(){return ks.resolveMcpPackageIdentity}});var xt=Ss();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 Kn=ys();Object.defineProperty(f,"parseFrontmatterDescription",{enumerable:!0,get:function(){return Kn.parseFrontmatterDescription}});Object.defineProperty(f,"parseFrontmatterField",{enumerable:!0,get:function(){return Kn.parseFrontmatterField}});Object.defineProperty(f,"usableCatalogText",{enumerable:!0,get:function(){return Kn.usableCatalogText}});var me=As();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 kc,readFileSync as xc}from"node:fs";import{hostname as no,userInfo as bc}from"node:os";import{randomBytes as Rc}from"node:crypto";import{existsSync as cn,mkdirSync as Cc,readdirSync as Ic,readFileSync as Ac,renameSync as Jr,statSync as qr,unlinkSync as Xr,writeFileSync as Oc}from"node:fs";import{basename as Pc,dirname as Zr,join as Qr,relative as Tc}from"node:path";function h(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
|
|
13
|
-
`)}function Z(e,t){Cc(Zr(e),{recursive:!0});let n=Qr(Zr(e),`.${Pc(e)}.${process.pid}.${Rc(4).toString("hex")}.tmp`);try{Oc(n,t,"utf8");try{Jr(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){Xr(e),Jr(n,e);return}throw r}}catch(r){try{Xr(n)}catch{}throw r}}function ft(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function eo(){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 Y(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 v(e,t,n=3e3,r={}){let o=await Y(e,t,n,r);return o.ok?o.stdout:""}async function dn(e=process.cwd()){let t=await Y("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 Y("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 D(e,t){let n=an.get(e);if(n!==void 0)return n;try{let r=j(Ac(e,"utf8"),t);return an.set(e,r),r}catch{return an.set(e,t),t}}function Ee(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 to(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=Ic(s,{withFileTypes:!0})}catch{return}for(let c of a){if(r)return;let u=Qr(s,c.name);if(c.isDirectory()){o(u,i+1);continue}if(c.isFile()){try{n.push({name:Tc(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 Nc=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Mc(e){return Nc.some(t=>!!b(t,e))}function wc(e){if(b("KUBERNETES_SERVICE_HOST",e)||Pe(b("REMOTE_CONTAINERS",e))||Pe(b("DEVCONTAINER",e)))return!0;try{if(kc("/.dockerenv")||xc("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function ro(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!b(t,e))}function vc(e,t=process.platform){return ro(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!b(n,e)):!1}function Lc(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function Uc(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 Dc(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!Fc(b("CURSOR_VERSION",n))}function Fc(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function gn(e){if(Lc(e.sessionId))return!0;let t=e.hostname??no(),n=e.osUser??oo(e.env);return Dc(t,n,e.env)}function Hc(e){return Pe(b("CURSOR_AGENT",e.env))?!0:gn(e)}function jc(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))||ro(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!b(t,e))||b("SESSIONNAME",e))}function Ke(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(!vc(t,n)&&Hc(e)&&(Pe(b("CURSOR_AGENT",t))||Uc(n)))return"cursor_cloud";if(b("CODESPACES",t)||b("CODESPACE_NAME",t))return"codespaces";if(b("GITLAB_CI",t))return"gitlab_ci";if(Mc(t))return"managed";let r=b("CI",t);return r&&r!=="false"&&r!=="0"?"managed":wc(t)?"container":jc(t)?"interactive":"unknown"}async function _n(){return await v("systemd-detect-virt",[],1e3)}function oo(e=process.env,t=bc){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 v("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 v("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await v("uname",["-r"],1e3))}else t=await v("ver",[],1e3);let n=oo(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await v("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 $e(){return no()}import{createHash as Kc}from"node:crypto";import{homedir as $c}from"node:os";import{dirname as ih,join as Bc,parse as ah,resolve as ch}from"node:path";var io="https://hooks.ev-ai.ai",ao=".claude/ev-ai-runtime-report.json",co="config.json",uh=1024*1024,Gc=new Set(["localhost","127.0.0.1","[::1]","::1"]),zc=["claude","cursor","codex"],uo=[ao,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"],En=/^[A-Za-z0-9._~-]+$/;function gt(e){return e!==void 0&&zc.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=io){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}function Sn(e=$c()){return Bc(e,".ev-ai",co)}function lo(e,t){return{...e,...t}}function so(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:"?Gc.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(!En.test(n))return`org token must match ${En.source} (got: ${n})`;if(so(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(so(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function po(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 fo(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:po(n)}}function mo(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 Kc("sha256").update(i).digest("hex").slice(0,32)}var St=2;var go="EV_AI_LAUNCHER_VERSION";var _o="EV_AI_HOOK_SOURCE",ho="EV_AI_HOOK_FALLBACK_REASON",Eo="EV_AI_LAUNCHER_SCOPE",So="EV_AI_LAUNCHER_READY_FD";var Et="ev-ai-agent-hook";function Vc(e){let t=e.split(/[/\\]/).pop();return t&&t.length>0?t:e}function yo(e){let t=Vc(e);return t===Et||t===`${Et}.exe`}var dh=`current/${Et}`,ph=`.ev-ai/agent-hook/${Et}`,Ro=5e3,Co=5e3,In=3e3;var An=3e3,Io=1500,Ao=4*1024,On=256*1024,Wc=4*1024,Oo=32*1024,ze=840*60*1e3,Pn="1.2.1",fh=`@ev-ai/agent-hook@${Pn}`;import{createHash as op}from"node:crypto";import{existsSync as sp,mkdirSync as ip,readdirSync as ap,readFileSync as Qs,unlinkSync as ei,writeFileSync as cp}from"node:fs";import{homedir as ti}from"node:os";import{join as Xn}from"node:path";import{createHash as bo,randomBytes as Xc}from"node:crypto";import{existsSync as No,mkdirSync as Tn,readFileSync as Mo,unlinkSync as wo,writeFileSync as vo}from"node:fs";import{homedir as kn}from"node:os";import{dirname as yt,join as xn,resolve as Zc}from"node:path";var Yc=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),Jc=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]")||Jc.has(n)||r.includes("[bot]")||Yc.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 qc="installation.json",Qc="cloud-bootstrap.lock",eu=6e4;function Lo(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function oe(e=kn()){return xn(e,".ev-ai","agent-hook")}function tu(e=kn()){return xn(oe(e),qc)}function Uo(e){return xn(yt(e),Qc)}function Do(){return Xc(8).toString("hex")}function Te(e){return bo("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 Fo(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function nu(e=process.env){let t=A(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!Fo(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 Ho(e,t){return e&&Fo(e)?e:(e&&h(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),nu(t))}function ru(e){return/^[0-9a-f]{16}$/.test(e)}function ou(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 su="cursoragent@cursor.com";function iu(e){let t=A(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===su?null:t}function au(e,t){return A(e.CURSOR_PROJECT_DIR)??A(e.CLAUDE_PROJECT_DIR)??t}function cu(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function uu(e){let t=await v("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?cu(t):e}async function lu(e){let t=A(await v("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!G(null,t))return t;let n=A(await v("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!G(null,n)?n:null}function du(e,t){let n=au(e,t);return n?Te(`cursor_cloud|${n}|${iu(e)??""}`):null}async function pu(e,t){let n=A(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await uu(n),o=await lu(n);return Te(`claude_remote|${r}|${o??""}`)}function Po(e,t){let n=Ho(e,t);if(n)return n;let r=ou(t);return r||Do()}async function fu(e){let n=await v("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Zc(e);return bo("sha256").update(n).digest("hex").slice(0,16)}function mu(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 gu(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=mu(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 Se(e){if(No(e))try{return gu(Mo(e,"utf8"))}catch{}}function bn(e){return Se(e)}function jo(e,t,n){let r=Se(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{Z(e,`${JSON.stringify(o,null,2)}
|
|
13
|
+
`)}function Z(e,t){Cc(Zr(e),{recursive:!0});let n=Qr(Zr(e),`.${Pc(e)}.${process.pid}.${Rc(4).toString("hex")}.tmp`);try{Oc(n,t,"utf8");try{Jr(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){Xr(e),Jr(n,e);return}throw r}}catch(r){try{Xr(n)}catch{}throw r}}function ft(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function eo(){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 Y(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 v(e,t,n=3e3,r={}){let o=await Y(e,t,n,r);return o.ok?o.stdout:""}async function dn(e=process.cwd()){let t=await Y("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 Y("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 D(e,t){let n=an.get(e);if(n!==void 0)return n;try{let r=j(Ac(e,"utf8"),t);return an.set(e,r),r}catch{return an.set(e,t),t}}function Ee(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 to(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=Ic(s,{withFileTypes:!0})}catch{return}for(let c of a){if(r)return;let u=Qr(s,c.name);if(c.isDirectory()){o(u,i+1);continue}if(c.isFile()){try{n.push({name:Tc(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 Nc=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Mc(e){return Nc.some(t=>!!b(t,e))}function wc(e){if(b("KUBERNETES_SERVICE_HOST",e)||Pe(b("REMOTE_CONTAINERS",e))||Pe(b("DEVCONTAINER",e)))return!0;try{if(kc("/.dockerenv")||xc("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function ro(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!b(t,e))}function vc(e,t=process.platform){return ro(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!b(n,e)):!1}function Lc(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function Uc(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 Dc(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!Fc(b("CURSOR_VERSION",n))}function Fc(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function gn(e){if(Lc(e.sessionId))return!0;let t=e.hostname??no(),n=e.osUser??oo(e.env);return Dc(t,n,e.env)}function Hc(e){return Pe(b("CURSOR_AGENT",e.env))?!0:gn(e)}function jc(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))||ro(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!b(t,e))||b("SESSIONNAME",e))}function Ke(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(!vc(t,n)&&Hc(e)&&(Pe(b("CURSOR_AGENT",t))||Uc(n)))return"cursor_cloud";if(b("CODESPACES",t)||b("CODESPACE_NAME",t))return"codespaces";if(b("GITLAB_CI",t))return"gitlab_ci";if(Mc(t))return"managed";let r=b("CI",t);return r&&r!=="false"&&r!=="0"?"managed":wc(t)?"container":jc(t)?"interactive":"unknown"}async function _n(){return await v("systemd-detect-virt",[],1e3)}function oo(e=process.env,t=bc){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 v("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 v("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await v("uname",["-r"],1e3))}else t=await v("ver",[],1e3);let n=oo(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await v("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 $e(){return no()}import{createHash as Kc}from"node:crypto";import{homedir as $c}from"node:os";import{dirname as uh,join as Bc,parse as lh,resolve as dh}from"node:path";var io="https://hooks.ev-ai.ai",ao=".claude/ev-ai-runtime-report.json",co="config.json",ph=1024*1024,Gc=new Set(["localhost","127.0.0.1","[::1]","::1"]),zc=["claude","cursor","codex"],uo=[ao,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"],En=/^[A-Za-z0-9._~-]+$/;function gt(e){return e!==void 0&&zc.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=io){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}function Sn(e=$c()){return Bc(e,".ev-ai",co)}function lo(e,t){return{...e,...t}}function so(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:"?Gc.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(!En.test(n))return`org token must match ${En.source} (got: ${n})`;if(so(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(so(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function po(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 fo(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:po(n)}}function mo(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 Kc("sha256").update(i).digest("hex").slice(0,32)}var St=2;var go="EV_AI_LAUNCHER_VERSION";var _o="EV_AI_HOOK_SOURCE",ho="EV_AI_HOOK_FALLBACK_REASON",Eo="EV_AI_LAUNCHER_SCOPE",So="EV_AI_LAUNCHER_READY_FD";var Et="ev-ai-agent-hook";function Vc(e){let t=e.split(/[/\\]/).pop();return t&&t.length>0?t:e}function yo(e){let t=Vc(e);return t===Et||t===`${Et}.exe`}var mh=`current/${Et}`,gh=`.ev-ai/agent-hook/${Et}`,Ro=5e3,Co=5e3,In=3e3;var An=3e3,Io=1500,Ao=4*1024,On=256*1024,Wc=4*1024,Oo=32*1024,ze=840*60*1e3,Pn="1.2.2",_h=`@ev-ai/agent-hook@${Pn}`;import{createHash as op}from"node:crypto";import{existsSync as sp,mkdirSync as ip,readdirSync as ap,readFileSync as Qs,unlinkSync as ei,writeFileSync as cp}from"node:fs";import{homedir as ti}from"node:os";import{join as Xn}from"node:path";import{createHash as bo,randomBytes as Xc}from"node:crypto";import{existsSync as No,mkdirSync as Tn,readFileSync as Mo,unlinkSync as wo,writeFileSync as vo}from"node:fs";import{homedir as kn}from"node:os";import{dirname as yt,join as xn,resolve as Zc}from"node:path";var Yc=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),Jc=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]")||Jc.has(n)||r.includes("[bot]")||Yc.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 qc="installation.json",Qc="cloud-bootstrap.lock",eu=6e4;function Lo(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function oe(e=kn()){return xn(e,".ev-ai","agent-hook")}function tu(e=kn()){return xn(oe(e),qc)}function Uo(e){return xn(yt(e),Qc)}function Do(){return Xc(8).toString("hex")}function Te(e){return bo("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 Fo(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function nu(e=process.env){let t=A(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!Fo(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 Ho(e,t){return e&&Fo(e)?e:(e&&h(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),nu(t))}function ru(e){return/^[0-9a-f]{16}$/.test(e)}function ou(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 su="cursoragent@cursor.com";function iu(e){let t=A(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===su?null:t}function au(e,t){return A(e.CURSOR_PROJECT_DIR)??A(e.CLAUDE_PROJECT_DIR)??t}function cu(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function uu(e){let t=await v("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?cu(t):e}async function lu(e){let t=A(await v("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!G(null,t))return t;let n=A(await v("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!G(null,n)?n:null}function du(e,t){let n=au(e,t);return n?Te(`cursor_cloud|${n}|${iu(e)??""}`):null}async function pu(e,t){let n=A(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await uu(n),o=await lu(n);return Te(`claude_remote|${r}|${o??""}`)}function Po(e,t){let n=Ho(e,t);if(n)return n;let r=ou(t);return r||Do()}async function fu(e){let n=await v("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Zc(e);return bo("sha256").update(n).digest("hex").slice(0,16)}function mu(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 gu(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=mu(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 Se(e){if(No(e))try{return gu(Mo(e,"utf8"))}catch{}}function bn(e){return Se(e)}function jo(e,t,n){let r=Se(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{Z(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 Ko(e,t=Date.now()){if(!e)return!0;if(Se(e)?.operator_identity_hash)return!1;let n=Uo(e);try{if(No(n)){let r=Number.NaN;try{r=Number(Mo(n,"utf8").trim())}catch{}let o=t-r;if(Number.isFinite(o)&&o>=0&&o<eu)return!1;try{wo(n)}catch{}}}catch{}try{return Tn(yt(n),{recursive:!0}),vo(n,`${t}
|
|
15
15
|
`,{encoding:"utf8",flag:"wx"}),!0}catch(r){if(zo(r))return!1;let o=r instanceof Error?r.message:String(r);return h(`WARN: cloud bootstrap claim failed open: ${o}`),!0}}function $o(e){if(e)try{wo(Uo(e))}catch{}}function Bo(e,t){let r=Se(e)?.platform_agent_ids?.[t];return typeof r=="string"&&r.length>0?r:void 0}function Go(e,t,n){if(!n)return;let r=Se(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{Z(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 zo(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function _u(e,t){Tn(yt(e),{recursive:!0}),vo(e,`${JSON.stringify(t,null,2)}
|
|
17
17
|
`,{encoding:"utf8",flag:"wx"})}function To(e,t){try{return _u(e,t),t}catch(n){if(!zo(n))throw n;return Se(e)}}function ko(e,t){Tn(yt(e),{recursive:!0}),Z(e,`${JSON.stringify(t,null,2)}
|
|
18
18
|
`)}function xo(e,t){return{installation_id:e,...t&&t===e?{pinned:!0}:{}}}async function Vo(e,t={}){let n=t.home??kn(),r=t.env??process.env,o=await fu(e),s=tu(n),i={sessionId:t.sessionId,hostname:A(r.HOSTNAME)??void 0,osUser:A(r.USER)??A(r.LOGNAME)??A(r.USERNAME)??void 0,env:r},a=Ke(i),c=Ho(t.overrideId,r),u=a==="cursor_cloud"&&gn(i)?du(r,e):a==="claude_remote"?await pu(r,e):null,l=Se(s);if(l){let E=l;if(c&&c===l.installation_id&&l.pinned!==!0&&(E={...l,pinned:!0},ko(s,E)),!!u&&u!==E.installation_id&&!c&&E.pinned!==!0&&ru(E.installation_id)&&u){let y={installation_id:u,...E.platform_agent_ids?{platform_agent_ids:E.platform_agent_ids}:{}};return ko(s,y),{installationId:u,storePath:s,repoKey:o}}return{installationId:E.installation_id,storePath:s,repoKey:o}}let p=c??u??Po(void 0,r),m=To(s,xo(p,c));if(m)return{installationId:m.installation_id,storePath:s,repoKey:o};let d=c??u??Po(void 0,r),g=To(s,xo(d===p?Do():d,c));if(g)return{installationId:g.installation_id,storePath:s,repoKey:o};throw new Error(`Failed to create installation record at ${s}`)}import{existsSync as wu}from"node:fs";import{existsSync as Iu}from"node:fs";import{homedir as Jo}from"node:os";import{join as Au}from"node:path";import{existsSync as hu,readdirSync as Wo}from"node:fs";import{homedir as Rt}from"node:os";import{join as $}from"node:path";function Eu(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/ClaudeCode";case"win32":return $(process.env.ProgramFiles??"C:\\Program Files","ClaudeCode");default:return"/etc/claude-code"}}function Su(e=process.platform){let t=Eu(e),n=[$(t,"managed-settings.json")],r=$(t,"managed-settings.d");try{if(!hu(r))return n;let o=Wo(r).filter(s=>s.endsWith(".json")&&!s.startsWith(".")).sort().map(s=>$(r,s));n.push(...o)}catch{}return n}function Nn(e=process.platform,t=Rt()){return{serverManaged:$(t,".claude","remote-settings.json"),fileBased:Su(e)}}function yu(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/Cursor";case"win32":return $(process.env.ProgramData??"C:\\ProgramData","Cursor");default:return"/etc/cursor"}}function Ru(e=process.platform,t=Rt()){let n=[$(yu(e),"hooks.json")],r=$(t,".cursor","managed");try{for(let o of Wo(r,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||n.push($(r,o.name,"hooks.json"))}catch{}return n}function Cu(e=process.platform,t=Rt()){let n=e==="win32"?$(process.env.ProgramData??"C:\\ProgramData","OpenAI","Codex"):"/etc/codex",r=[$(n,"requirements.toml")];return e!=="win32"&&r.push($(n,"managed_config.toml")),r.push($(t,".codex","managed_config.toml"),$(n,"config.toml")),r}function Ct(e,t=process.platform,n=Rt()){switch(e){case"claude":{let{serverManaged:r,fileBased:o}=Nn(t,n);return[r,...o]}case"cursor":return Ru(t,n);default:return Cu(t,n)}}function Xo(e){return e.settings.filter(t=>t.toLowerCase().endsWith(".json"))}var Ou={claude:{shared:{skillRoots:[".claude/skills"],dirs:[{dir:".claude/agents",kind:"SUBAGENT",extensions:[".md"]},{dir:".claude/commands",kind:"COMMAND",extensions:[".md"]},{dir:".claude/rules",kind:"RULE",extensions:[".mdc",".md"]}],memory:[["CLAUDE.md"],["CLAUDE.local.md"],[".claude/CLAUDE.md"]],settings:[".claude/settings.json",".claude/settings.local.json",".claude/hooks.json"]},homeOnly:{mcpJson:[".claude.json"],plugins:"claude",managed:"claude"},projectOnly:{mcpJson:[".mcp.json","mcp.json"]}},cursor:{shared:{skillRoots:[".cursor/skills"],dirs:[{dir:".cursor/agents",kind:"SUBAGENT",extensions:[".md"]},{dir:".cursor/commands",kind:"COMMAND",extensions:[".md"]},{dir:".cursor/rules",kind:"RULE",extensions:[".mdc",".md"]}],memory:[["AGENTS.md"]],settings:[".cursor/hooks.json",".cursor/cli-config.json"],mcpJson:[".cursor/mcp.json"]},homeOnly:{skillRoots:[".cursor/skills-cursor"],memory:[[".cursor/AGENTS.md"]],plugins:"cursor",managed:"cursor"},projectOnly:{skillRoots:[".agents/skills"]}},codex:{shared:{skillRoots:[".agents/skills",".codex/skills"],dirs:[{dir:".codex/agents",kind:"SUBAGENT",extensions:[".toml",".md"]},{dir:".codex/prompts",kind:"COMMAND",extensions:[".md"]},{dir:".codex/rules",kind:"RULE",extensions:[".md",".rules"]}],memory:[["AGENTS.override.md","AGENTS.md"]],settings:[".codex/hooks.json",".codex/config.toml"],mcpToml:[".codex/config.toml"]},homeOnly:{memory:[[".codex/AGENTS.override.md",".codex/AGENTS.md"]],managed:"codex"}}};function Yo(e,t){if(!(!e&&!t))return[...e??[],...t??[]]}function Pu(e,t={}){let{shared:n}=e;return{skillRoots:[...n.skillRoots,...t.skillRoots??[]],dirs:n.dirs,memory:[...n.memory,...t.memory??[]],settings:[...n.settings,...t.settings??[]],mcpJson:Yo(n.mcpJson,t.mcpJson),mcpToml:Yo(n.mcpToml,t.mcpToml),plugins:t.plugins??n.plugins,managed:t.managed??n.managed}}function Zo(e){return Object.fromEntries(Object.entries(Ou).map(([t,n])=>[t,Pu(n,n[e])]))}var ke=Zo("homeOnly"),de=Zo("projectOnly");function Tu(e){return[...e.skillRoots,...e.dirs.map(t=>t.dir),...e.memory.flat(),...e.settings,...e.mcpJson??[],...e.mcpToml??[]]}function ku(e,t){return Tu(e).some(n=>Iu(Au(t,n)))}function qo(e,t){for(let n of e)if(ku(n,t))return!0;return!1}function le(e){return[...new Set(e)]}function pe(e){let t=[],n=[],r=[],o=[],s=[],i=[],a=[];for(let c of e){t.push(...c.skillRoots);for(let u of c.dirs)u.kind==="SUBAGENT"?n.push(u.dir):u.kind==="COMMAND"?r.push(u.dir):o.push(u.dir);s.push(...c.memory.flat()),i.push(...c.settings),a.push(...c.mcpJson??[],...c.mcpToml??[])}return{skills:le(t),subagents:le(n),commands:le(r),rules:le(o),memory:le(s),settings:le(i),mcp:le(a)}}function xu(e,t=Jo(),n=process.platform){let r=[];for(let o of e)o.managed&&r.push(...Ct(o.managed,n,t));return le(r)}var fe=pe(Object.values(ke));function Qo(e=Jo(),t=process.platform){return xu(Object.values(ke),e,t)}import{existsSync as bu}from"node:fs";import{resolve as Mn}from"node:path";function z(e){return Mn(e).replaceAll("\\","/").replace(/\/$/,"")}function ye(e,t){let n=new Set(t),r=[];for(let o of e)n.delete(o)&&r.push(o);for(let o of[...n].sort())r.push(o);return r}function It(e,t){if(!e)return t;let n=`${e}/`,r=[],o=[];for(let s of t)s===e||s.startsWith(n)?r.push(s):o.push(s);return r.length===0?t:[...r,...o]}var Nu=/^(?!\.)[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*$/;function Ve(e){let t=e.replaceAll("\\","/").replace(/^\.\//,"");return!t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")||!Nu.test(t)?null:t}function xe(e,t){let n=new Set,r=[];for(let o of[e,t]){if(!o)continue;let s=z(o);n.has(s)||(n.add(s),r.push(s))}return r}function Mu(e,t){let n=`${e}/`;return t===e||t.startsWith(n)}function q(e,t,n,r=bu){for(let o of e)for(let s of t){let i=z(Mn(o,s)),a=Mn(o,s,n).replaceAll("\\","/");if(Mu(i,a)&&r(a))return a}return null}var ts=/(?:^|\/|[\s"'=(])(?:\.cursor\/|\.claude\/|\.agents\/)skills(?:-cursor)?\/([^/]+)\/SKILL\.md/i,ns=/(?:^|\/|[\s"'=(])\.codex\/commands\/([^/]+)\.md\b/i,vu=/(?:^|\s)\/([a-z][a-z0-9-]{1,63}(?:\/[a-z][a-z0-9-]{1,63}){0,5})\b/gi,es=new Set(["applications","app","bin","boot","data","dev","etc","home","lib","media","mnt","node_modules","opt","pkg","private","proc","projects","repos","run","sbin","src","srv","sys","tmp","usr","users","var","volumes","workspace","workspaces"]),Lu=/^[a-z][a-z0-9-]{1,63}$/,Uu=[".cursor/skills",".claude/skills",".agents/skills"],Du=[".cursor/skills",".cursor/skills-cursor",".claude/skills",".agents/skills"],Fu=ye(Uu,pe(Object.values(de)).skills),Hu=ye(Du,pe(Object.values(ke)).skills),ju=new Set(["read","read_file","view"]),Ku=new Set(["bash","shell","zsh"]);function wn(e){let t=e.replace(/\\/g,"/");return ts.exec(t)?.[1]??null}function $u(e){let t=e.replace(/\\/g,"/"),r=ns.exec(t)?.[1];return r?r.toLowerCase():null}function Bu(e){return wn(e)??$u(e)}function Gu(e){for(let t of["path","file_path","target_file"]){let n=e[t];if(typeof n=="string"&&n.length>0)return n}return null}function At(e){return typeof e=="string"?At(j(e,null)):!e||typeof e!="object"?null:Gu(e)}function rs(e){if(typeof e=="string")return rs(j(e,null));if(!e||typeof e!="object")return null;let t=e.command;return typeof t=="string"&&t.length>0?t:null}function vn(e){let t=rs(e.tool_input);if(t)return t;let n=Ee(e.command);return n.length>0?n:null}function zu(e){let t=e.replace(/\\/g,"/"),n=ts.exec(t);if(n?.[1])return n[1];let o=ns.exec(t)?.[1];return o?o.toLowerCase():null}function Vu(e){return typeof e.tool_name=="string"?e.tool_name:typeof e.tool=="string"?e.tool:""}function Ln(e){let t=At(e.tool_input)??Ee(e.file_path);return t.length>0?t:null}function We(e,t,n){let r=Vu(e).toLowerCase();if(ju.has(r)){let o=Ln(e);return o?t(o):null}if(Ku.has(r)){let o=vn(e);return o?n(o):null}return null}function os(e){return We(e,Bu,zu)}function Wu(e){let t=new Set,n=[];for(let r of e.matchAll(vu)){let o=r[1]?.toLowerCase();!o||t.has(o)||Yu(o)||(t.add(o),n.push(o))}return n}function Yu(e){let t=e.split("/")[0];return es.has(e)||t!==void 0&&es.has(t)}function ss(e){let t=e.skillId.toLowerCase();if(!Lu.test(t))return null;let n=e.exists??wu,r=`${t}/SKILL.md`,o=q(xe(e.launchCwd,e.gitRoot),Fu,r,n);return o!==null?o:e.home?q([z(e.home)],Hu,r,n):null}function Ju(e){return Ee(e.prompt)}function is(e){let t=_(e,"command_name");if(t){let r=_(e,"expansion_type");if(r&&r!=="slash_command")return[];let o=t.replace(/^\//,"").toLowerCase();return o?[o]:[]}let n=Ju(e);return n?Wu(n):[]}var $n=je(Me(),1);import{existsSync as xd}from"node:fs";var Ce={claude:".claude",cursor:".cursor",codex:".codex",opencode:".opencode"};function Je(e){let n=e.replace(/^\/+|\/+$/g,"").toLowerCase().split("/").filter(Boolean);return n.length<2?"":n.join("/")}function kd(e){if(!e)return"";let t=e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1");t=t.replace(/\.git$/i,"");let n=t.match(/^git@[^:]+:(.+)$/);if(n?.[1])return Je(n[1]);let r=t.match(/^ssh:\/\/[^/]+\/(.+)$/i);if(r?.[1])return Je(r[1]);t=t.replace(/^https:\/\//i,""),t=t.replace(/^http:\/\//i,""),t=t.replace(/^ssh:\/\//i,"");let o=t.match(/^[^/]+\/(.+)$/);return o?.[1]?Je(o[1]):Je(t)}async function Xe(e=process.cwd()){let t=await Y("git",["rev-parse","--is-inside-work-tree"],2e3,{cwd:e});if(!t.ok||t.stdout!=="true")return null;let[n,r,o,s]=await Promise.all([Y("git",["remote","get-url","origin"],2e3,{cwd:e}),Y("git",["branch","--show-current"],2e3,{cwd:e}),Y("git",["rev-parse","HEAD"],2e3,{cwd:e}),Y("git",["status","--porcelain"],2e3,{cwd:e})]),i=n.ok?n.stdout:null;return{remote:i===null?null:i.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1"),branch:r.ok?r.stdout:null,head:o.ok?o.stdout:null,dirty:s.ok?s.stdout.length>0:null}}async function xs(e,t,n,r=process.cwd(),o,s,i){if(t)return t;let a=Ce[n];if(!a)return"";let c=Lo(n,e.scope_path,i);if(s){let g=Bo(s,c);if(g)return g}let u=o??await Xe(r),l=u?.remote?kd(u.remote):"";if(l||(l=Je(process.env.GITHUB_REPOSITORY??"")),!l)return"";let p=e.scope_path??"",m=p?`${p}/`:"",d=`${l}:${m}${a}`;return s&&Go(s,c,d),d}var bd=[".cursor/rules",".claude/rules",".codex/rules"],Nd=pe(Object.values(de)).rules;function Md(e){return ye(It(e?Ce[e]:void 0,bd),Nd)}var wd=/(?:^|\/|[\s"'=(])((?:\.cursor|\.claude|\.codex)\/rules\/[^'"\s]+?\.(?:mdc|md|rules))\b/i;function bs(e){let t=Ve(e.relativePath);if(!t)return null;let n=e.exists??xd,r=xe(e.launchCwd,e.gitRoot),o=Md(e.runnerPlatform),s=q(r,o,t,n);if(s!==null)return s;if(!t.includes("/")){let i=q(r,["."],t,n);if(i!==null)return i}return e.home?q([z(e.home)],o,t,n):null}function vd(e){let t=e.replace(/\\/g,"/"),r=wd.exec(t)?.[1];return r?(0,$n.nativeKeyForRulePath)(r):null}function Ns(e){return We(e,$n.nativeKeyForRulePath,vd)}function Ms(e){return e.replace(/\.(mdc|md|rules)$/i,"")}function ws(e){let t=e.attachments;if(!Array.isArray(t))return[];let n=new Set,r=[];for(let o of t){if(!o||typeof o!="object"||Array.isArray(o))continue;let s=o;if(s.type!=="rule")continue;let i=typeof s.file_path=="string"?s.file_path:"",a=Ve(i);!a||n.has(a)||(n.add(a),r.push(a))}return r}var Bn=je(Me(),1);import{existsSync as Ld}from"node:fs";var Ud=[".cursor/commands",".claude/commands",".codex/prompts"],Dd=pe(Object.values(de)).commands;function Fd(e){return ye(It(e?Ce[e]:void 0,Ud),Dd)}var Hd=/(?:^|\/|[\s"'=(])((?:\.cursor|\.claude|\.codex)\/(?:commands|prompts)\/[^'"\s]+?\.(?:md|mdc))\b/i;function vs(e){let t=Ve(e.commandId);if(!t)return null;let n=e.exists??Ld,r=`${t}.md`,o=Fd(e.runnerPlatform),s=q(xe(e.launchCwd,e.gitRoot),o,r,n);return s!==null?s:e.home?q([z(e.home)],o,r,n):null}function jd(e){let t=e.replace(/\\/g,"/"),r=Hd.exec(t)?.[1];return r?(0,Bn.nativeKeyForCommandPath)(r):null}function Ls(e){return We(e,Bn.nativeKeyForCommandPath,jd)}import{existsSync as Ds}from"node:fs";import{homedir as Fs}from"node:os";import{join as Ze,resolve as Gn,sep as Us}from"node:path";function zn(e){return[...new Set([e,e.replaceAll(/[^A-Za-z0-9_-]/g,"_"),e.replaceAll(/[^A-Za-z0-9_-]+/g,"_")])]}function Vn(e,t){let n=t.toLowerCase();return zn(e).some(r=>r.toLowerCase()===n)}function bt(e,t,n){if(!Ds(e))return;let r=D(e,{});for(let[o,s]of Object.entries(r.mcpServers??{}))n.set(o,{declared:{name:o,...t},config:s})}function Kd(e,t,n){if(!Ds(e))return;let r=D(e,{}),o=Gn(t),s=null;for(let a of Object.keys(r.projects??{})){let c=Gn(a);(o===c||o.startsWith(c.endsWith(Us)?c:c+Us))&&(s===null||c.length>Gn(s).length)&&(s=a)}if(s===null)return;let i=r.projects?.[s]?.mcpServers??{};for(let[a,c]of Object.entries(i))n.set(a,{declared:{name:a,source:"claude_json_project",sourcePath:".claude.json",scope:"user"},config:c})}function Hs(e,t,n,r){let o=new Map;for(let s of e.mcp_servers??[])s.name&&o.set(s.name,{declared:{name:s.name,source:"manifest"}});return n==="claude"?(bt(Ze(r,".claude.json"),{source:"claude_json_user"},o),Kd(Ze(r,".claude.json"),t,o)):n==="cursor"&&bt(Ze(r,".cursor/mcp.json"),{source:"cursor_mcp_user"},o),bt(Ze(t,".mcp.json"),{source:"mcp_json"},o),bt(Ze(t,".cursor/mcp.json"),{source:"cursor_mcp"},o),o}async function Wn(e,t=process.cwd(),n="claude",r=Fs()){return[...Hs(e,t,n,r).values()].map(o=>o.declared)}function js(e,t,n=process.cwd(),r="claude",o=Fs()){let s=Hs(t,n,r,o),i=s.get(e);if(i!==void 0)return i.config??null;for(let[a,c]of s)if(Vn(a,e))return c.config??null;return null}function Yn(e){let t=fo(e);if(t.problem){h(`WARN: ignoring --url/--token collector override: ${t.problem}`);return}return t.url}function Ks(e,t){if(_(e,"conversation_id"))return!0;if(t==="")return!1;let n=t[0];return n?.toLowerCase()===n}function $d(){return!!(I("CURSOR_VERSION")??I("CURSOR_PROJECT_DIR"))}function Jn(e,t,n){return e!=="claude"&&e!=="codex"?!1:Ks(t,n)?!0:$d()}function qe(e,t,n,r){if(Ks(e,t))return"cursor";if(gt(r))return r;let o=_(e,"conversation_id"),s=_(e,"turn_id"),i=_(e,"session_id"),a=t.toLowerCase(),c="unknown";return o||t===a&&t!==""?c="cursor":s?c="codex":(i||a==="sessionstart"||a==="sessionend"||a==="stop"||a==="stopfailure"||a==="pretooluse"||a==="posttooluse"||a==="posttoolusefailure"||a==="permissiondenied"||a==="subagentstart"||a==="subagentstop"||a==="userpromptexpansion"||a==="userpromptsubmit")&&(c="claude"),gt(n)&&(c=n),c}function Nt(e,t){let n=e.toLowerCase();return n==="sessionend"||n==="stopfailure"||n==="subagentstop"?!0:n==="stop"&&t==="codex"}function Bd(e){switch(e){case"sessionstart":return"session_start";case"stop":case"sessionend":case"stopfailure":return"session_end";case"pretooluse":case"posttooluse":case"posttoolusefailure":case"permissiondenied":case"beforemcpexecution":case"beforeshellexecution":case"aftershellexecution":case"beforereadfile":case"afterfileedit":case"subagentstart":case"subagentstop":return"tool_invoked";case"beforesubmitprompt":case"userpromptexpansion":case"userpromptsubmit":return"skill_invoked";default:return""}}function $s(e){let t=e.toLowerCase();return t==="userpromptsubmit"||t==="beforesubmitprompt"}function Bs(e,t){return e.toLowerCase()==="userpromptsubmit"&&t==="claude"}function Gs(e){let t=e.toLowerCase();return t==="posttooluse"?!0:t==="posttoolusefailure"||t==="permissiondenied"?!1:null}function zs(e,t,n){let r=_(e,"session_id")||_(e,"conversation_id"),o=_(e,"prompt.id")||_(e,"prompt_id")||_(e,"generation_id")||_(e,"turn_id"),s=_(e,"hook_event_name")||_(e,"event"),i=_(e,"source"),a=qe(e,s,t,n);return{sessionId:r,turnId:o,runnerEvent:s,hookSource:i,runnerPlatform:a}}var Gd=["session_start","session_end","tool_invoked","skill_invoked"];function zd(e){return Gd.includes(e)}function Vs(e,t){return e&&zd(e)?e:Bd(t.toLowerCase())}var Vd={beforeshellexecution:"Shell",aftershellexecution:"Shell",beforereadfile:"Read",afterfileedit:"Write"};function Ws(e){return/^mcp__/i.test(e)||/^MCP:/i.test(e)}function Ys(e,t=""){let n=_(e,"tool_name")||_(e,"tool")||null,r=t.toLowerCase();n?r==="beforemcpexecution"&&!Ws(n)&&(n=`MCP:${n}`):n=Vd[r]??null;let o=e.tool_input,i=(o&&typeof o=="object"?Ee(o.skill)||Ee(o.skill_name):"")||_(e,"skill_name")||null,a=n&&e.tool_name!==n&&e.tool!==n?{...e,tool_name:n}:e;i??=os(a);let c=Ns(a),u=Ls(a);return{toolName:n,skillName:i,ruleName:c,commandName:u}}var Wd=/^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/;function Js(e){for(let t of["subagent_type","agent_type"]){let n=_(e,t);if(n&&Wd.test(n))return n}return null}function Xs(e){let t=re(e,"duration_ms");if(typeof t=="number")return t;let n=re(e,"duration");return typeof n=="number"?n:null}var Yd="error",Jd="interrupted",Xd="permission_denied",Zd=/^[A-Za-z][A-Za-z0-9_.-]{0,63}$/;function Qe(e){return Zd.test(e)?e:null}function qd(e){for(let t of["failure_type","error_type"]){let n=Qe(_(e,t));if(n)return n}return null}function Zs(e,t){return re(e,"is_interrupt")===!0?Jd:t.toLowerCase()==="permissiondenied"?Xd:qd(e)??Yd}function Qd(e,t){let n=null;for(let r of t)r&&(e===r||e.startsWith(`${r}_`)||e.startsWith(`${r}-`))&&(n===null||r.length>n.length)&&(n=r);return n}function ep(e,t){let n=null;for(let r of t)!r||!Vn(r,e)||(n===null||r.length>n.length)&&(n=r);return n}function tp(e,t){let n=null,r=0;for(let s of t)if(s)for(let i of zn(s)){let a=`${i}__`;e.length>a.length&&e.slice(0,a.length).toLowerCase()===a.toLowerCase()&&i.length>r&&(n={mcpServer:s,mcpTool:e.slice(a.length)},r=i.length)}if(n!==null)return n;let o=/^(.+?)__(.+)$/.exec(e);return!o?.[1]||!o[2]?{mcpServer:null,mcpTool:null}:{mcpServer:ep(o[1],t)??o[1],mcpTool:o[2]}}function np(e,t){if(/^mcp__/i.test(e))return tp(e.slice(5),t);if(/^MCP:/i.test(e)){let n=e.slice(4);if(!n)return{mcpServer:null,mcpTool:null};let r=n.indexOf(":");if(r>0)return{mcpServer:n.slice(0,r),mcpTool:n.slice(r+1)||null};let o=n.indexOf("__");return o>0?{mcpServer:n.slice(0,o),mcpTool:n.slice(o+2)||null}:{mcpServer:Qd(n,t),mcpTool:n}}return{mcpServer:null,mcpTool:null}}function rp(e,t){let n=`${t}__`;return e.length>n.length&&e.toLowerCase().startsWith(n.toLowerCase())?e.slice(n.length):e}function qs(e,t=[],n=""){let r=e?np(e,t):{mcpServer:null,mcpTool:null},o=Qe(n.trim());if(!o)return r;let s=r.mcpTool;return!s&&e&&!Ws(e)&&(s=e),s&&(s=rp(s,o)),{mcpServer:o,mcpTool:s}}var ni=3e4,up="claims",lp=!0,dp=100,pp=new Set(["sessionstart","sessionend","stopfailure"]),fp=["tool_name","tool","command","file_path","url"];function mp(e=ti()){return Xn(oe(e),up)}function ri(e){let t=e.split(`
|
|
19
19
|
`,1)[0]??"";return Number(t.trim())}function oi(e){return op("sha256").update(e).digest("hex").slice(0,32)}function gp(e){let t=[];for(let n of fp){let r=_(e,n).trim();r&&t.push(`${n}=${r}`)}return t.length===0?"":oi(t.join("\0"))}function _p(e){let t=e.sessionId.trim();if(!t)return;let n=e.runnerEvent.trim().toLowerCase(),r=e.turnId.trim(),o=e.toolUseId.trim(),s=e.subagentId?.trim()??"",i=e.callFingerprint?.trim()??"",a=!!(o||r||s),c=pp.has(n);if(!a&&!c)return;let u=e.runnerPlatform.trim()||"unknown";return oi(`${u}|${t}|${n}|${r}|${o}|${i}|${s}`)}function hp(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function Ep(e,t){return Xn(e,t)}function Sp(e,t=Date.now()){let n;try{n=ap(e)}catch{return}let r=0;for(let o of n){if(r>=dp)break;r+=1;let s=Xn(e,o),i=Number.NaN;try{i=ri(Qs(s,"utf8"))}catch{continue}let a=t-i;if(!(!Number.isFinite(a)||a<0||a<ni))try{ei(s)}catch{}}}function yp(e,t,n=Date.now()){let r=Ep(t,e);try{if(sp(r)){let o=Number.NaN;try{o=ri(Qs(r,"utf8"))}catch{}let s=n-o;if(Number.isFinite(s)&&s>=0&&s<ni)return!1;try{ei(r)}catch{}}}catch{}try{ip(t,{recursive:!0}),cp(r,`${n}
|
|
20
|
-
`,{encoding:"utf8",flag:"wx"})}catch(o){if(hp(o))return!1;let s=o instanceof Error?o.message:String(o);return h(`WARN: event claim failed open: ${s}`),!0}return Sp(t,n),!0}function Rp(e,t,n){let r=_(e,"session_id")||_(e,"conversation_id"),o=_(e,"prompt.id")||_(e,"prompt_id")||_(e,"generation_id")||_(e,"turn_id"),s=_(e,"tool_use_id"),i=_(e,"subagent_id")||_(e,"agent_id"),a=qe(e,t,void 0,n),c=gp(e);return{runnerPlatform:a,sessionId:r,runnerEvent:t,turnId:o,toolUseId:s,subagentId:i,callFingerprint:c}}function si(e,t,n,r=ti(),o=Date.now()){if(!lp)return!0;let s=_p(Rp(e,t,n));if(!s)return!0;let i=yp(s,mp(r),o);return!i&&I("EV_AI_HOOK_DEBUG")&&h(`DEBUG: duplicate hook event suppressed (claim ${s.slice(0,8)}\u2026)`),i}import{closeSync as Cp,writeSync as Ip}from"node:fs";var Ap=Buffer.from([1]),ii=So;function ai(e=process.env){let t=e[ii];if(delete e[ii],t===void 0)return;let n=Number.parseInt(t,10);if(!(!Number.isInteger(n)||n<3)){try{Ip(n,Ap)}catch{}try{Cp(n)}catch{}}}function Zn(e=process.env){let t=e[go];if(!t)return;let n=e[ho],r=e[Eo];return{launcherVersion:t,hookSource:e[_o]??"",fallbackReason:n??void 0,launcherScope:r??void 0}}function ci(e,t){return(e?mo(e):void 0)===t}import{realpathSync as
|
|
20
|
+
`,{encoding:"utf8",flag:"wx"})}catch(o){if(hp(o))return!1;let s=o instanceof Error?o.message:String(o);return h(`WARN: event claim failed open: ${s}`),!0}return Sp(t,n),!0}function Rp(e,t,n){let r=_(e,"session_id")||_(e,"conversation_id"),o=_(e,"prompt.id")||_(e,"prompt_id")||_(e,"generation_id")||_(e,"turn_id"),s=_(e,"tool_use_id"),i=_(e,"subagent_id")||_(e,"agent_id"),a=qe(e,t,void 0,n),c=gp(e);return{runnerPlatform:a,sessionId:r,runnerEvent:t,turnId:o,toolUseId:s,subagentId:i,callFingerprint:c}}function si(e,t,n,r=ti(),o=Date.now()){if(!lp)return!0;let s=_p(Rp(e,t,n));if(!s)return!0;let i=yp(s,mp(r),o);return!i&&I("EV_AI_HOOK_DEBUG")&&h(`DEBUG: duplicate hook event suppressed (claim ${s.slice(0,8)}\u2026)`),i}import{closeSync as Cp,writeSync as Ip}from"node:fs";var Ap=Buffer.from([1]),ii=So;function ai(e=process.env){let t=e[ii];if(delete e[ii],t===void 0)return;let n=Number.parseInt(t,10);if(!(!Number.isInteger(n)||n<3)){try{Ip(n,Ap)}catch{}try{Cp(n)}catch{}}}function Zn(e=process.env){let t=e[go];if(!t)return;let n=e[ho],r=e[Eo];return{launcherVersion:t,hookSource:e[_o]??"",fallbackReason:n??void 0,launcherScope:r??void 0}}function ci(e,t){return(e?mo(e):void 0)===t}import{realpathSync as c_}from"node:fs";import{homedir as ec}from"node:os";var P=je(Me(),1);import{existsSync as Op,readFileSync as Pp}from"node:fs";import{homedir as ui}from"node:os";import{join as Tp}from"node:path";var kp="cloud-cache.json",xp=1440*60*1e3,bp=900*1e3;function Np(e=ui()){return Tp(oe(e),kp)}function Mp(e){if(!Op(e))return;let t=j(Pp(e,"utf8"),{});if(!(typeof t.context!="string"||typeof t.probed_at!="number"||t.result!==null&&t.result!==void 0&&typeof t.result!="object"))return{context:t.context,probed_at:t.probed_at,result:t.result??null}}function wp(e,t){try{Z(e,`${JSON.stringify(t)}
|
|
21
21
|
`)}catch(n){let r=n instanceof Error?n.message:String(n);h(`WARN: cloud cache write failed open: ${r}`)}}function vp(e,t,n){if(!e||e.context!==t)return!1;let r=e.result===null?bp:xp;return n-e.probed_at<r}async function Lp(e){let t=await fetch("http://169.254.169.254/latest/api/token",{method:"PUT",headers:{"X-aws-ec2-metadata-token-ttl-seconds":"60"},signal:AbortSignal.timeout(e)}).catch(()=>{});if(!t?.ok)return;let n=(await t.text()).trim();if(!n)return;let r={"X-aws-ec2-metadata-token":n},[o,s]=await Promise.all([fetch("http://169.254.169.254/latest/meta-data/placement/region",{headers:r,signal:AbortSignal.timeout(e)}).catch(()=>{}),fetch("http://169.254.169.254/latest/meta-data/instance-id",{headers:r,signal:AbortSignal.timeout(e)}).catch(()=>{})]);if(!o?.ok&&!s?.ok)return;let i=o?.ok?(await o.text()).trim():"",a=s?.ok?(await s.text()).trim():"";if(!(!i&&!a))return{provider:"aws",region:i,instance_id:a}}async function Up(e){let t=await fetch("http://metadata.google.internal/computeMetadata/v1/instance/?recursive=true",{headers:{"Metadata-Flavor":"Google"},signal:AbortSignal.timeout(e)}).catch(()=>{});if(!t?.ok)return;let n=await t.json(),r=typeof n.zone=="string"?n.zone.split("/").pop()??"":"",o=n.id===void 0?"":String(n.id);if(!(!r&&!o))return{provider:"gcp",region:r,instance_id:o}}async function Dp(e){let t=await fetch("http://169.254.169.254/metadata/instance?api-version=2021-02-01",{headers:{Metadata:"true"},signal:AbortSignal.timeout(e)}).catch(()=>{});if(!t?.ok)return;let n=await t.json(),r=n.compute?.location??"",o=n.compute?.vmId??"";if(!(!r&&!o))return{provider:"azure",region:r,instance_id:o}}async function Fp(e){let t=await Promise.allSettled([Lp(e),Up(e),Dp(e)]);for(let n of t)if(n.status==="fulfilled"&&n.value)return n.value;return null}async function qn(e,t){if(e==="interactive")return null;let n=t?.home??ui(),r=t?.timeoutMs??1e3,o=t?.nowMs??Date.now(),s=Np(n),i=Mp(s);if(vp(i,e,o))return i.result;let a=await Fp(r);return wp(s,{context:e,probed_at:o,result:a}),a}var Hp=["CI","GITHUB_ACTIONS","GITLAB_CI","CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER","KUBERNETES_SERVICE_HOST","REMOTE_CONTAINERS","DEVCONTAINER","GITHUB_REPOSITORY","GITHUB_REPOSITORY_ID","GITHUB_REF","GITHUB_SHA","GITHUB_RUN_ID","GITHUB_WORKFLOW","GITHUB_ACTOR","GITHUB_TRIGGERING_ACTOR","GITHUB_ACTOR_ID","GITHUB_USER","GITLAB_USER_LOGIN","GITLAB_USER_NAME","GITLAB_USER_EMAIL","BUILD_REQUESTEDFOR","BUILD_REQUESTEDFOREMAIL","BUILD_REQUESTEDFORID","BUILDKITE_BUILD_CREATOR","BUILDKITE_BUILD_CREATOR_EMAIL","BUILD_USER","BUILD_USER_ID","BUILD_USER_EMAIL","CHANGE_AUTHOR","CHANGE_AUTHOR_EMAIL","CIRCLE_USERNAME","CODEBUILD_INITIATOR","DRONE_COMMIT_AUTHOR","DRONE_COMMIT_AUTHOR_NAME","DRONE_COMMIT_AUTHOR_EMAIL","EV_AI_HOOK_OPERATOR_NAME","EV_AI_HOOK_OPERATOR_EMAIL","EV_AI_HOOK_OPERATOR_LOGIN","GIT_AUTHOR_NAME","GIT_AUTHOR_EMAIL","GIT_COMMITTER_NAME","GIT_COMMITTER_EMAIL","EMAIL","RUNNER_OS","RUNNER_ARCH","NODE_ENV","TERM_PROGRAM","CLAUDE_CODE_REMOTE","CLAUDE_CODE_REMOTE_SESSION_ID","CURSOR_AGENT","CURSOR_VERSION","CURSOR_CODE_REMOTE","CURSOR_USER_EMAIL","CODESPACES","CODESPACE_NAME","ANTHROPIC_BASE_URL","OPENAI_BASE_URL","OPENAI_API_BASE","AZURE_OPENAI_ENDPOINT","GOOGLE_GEMINI_BASE_URL","GEMINI_API_BASE","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX"],jp=["CURSOR_PROJECT_DIR"],Kp=new Set(["key","api-key","api_key","apikey","token","sig","signature","access_token","password","pwd","secret","client_secret"]);function $p(e){try{let t=new URL(e);(t.username||t.password)&&(t.username="",t.password="");for(let[n]of t.searchParams)Kp.has(n.toLowerCase())&&t.searchParams.set(n,"[redacted]");return t.toString()}catch{return e}}function Qn(e=process.env){let t=Hp.map(r=>Object.prototype.hasOwnProperty.call(e,r)?{name:r,present:!0,value:$p(e[r]??"")}:{name:r,present:!1}),n=jp.map(r=>({name:r,present:Object.prototype.hasOwnProperty.call(e,r)&&!!e[r]}));return[...t,...n]}import{homedir as Sf}from"node:os";import{homedir as li}from"node:os";import{join as Bp}from"node:path";function Gp(e=li()){return Bp(e,".claude.json")}function Mt(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function di(e=li()){let n=D(Gp(e),{}).oauthAccount;if(!n||typeof n!="object")return null;let r=Mt(n.emailAddress),o=Mt(n.fullName)??Mt(n.displayName),s=Mt(n.accountUuid),i=r??s;return!i||G(o,r)?null:{git_user_name:null,git_user_email:null,platform_login:i,identity_source:"claude_oauth"}}import{homedir as mi}from"node:os";import{join as pi}from"node:path";var zp="https://api.openai.com/auth";function we(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function gi(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function Vp(e){let t=e.split(".");if(t.length!==3||t.some(r=>r.length===0))return null;let n=t[1];if(!n)return null;try{let r=JSON.parse(Buffer.from(n,"base64url").toString("utf8"));return gi(r)}catch{return null}}function fi(e,t,n){return we(e[n])??we(t?.[n])}function Wp(e=process.env,t=mi()){let n=we(e.CODEX_HOME)??pi(t,".codex");return pi(n,"auth.json")}function _i(e=process.env,t=mi()){let n=D(Wp(e,t),{}),r=we(n.auth_mode);if(r!==null&&r!=="chatgpt"||r===null&&we(n.OPENAI_API_KEY))return null;let o=we(n.tokens?.id_token);if(!o)return null;let s=Vp(o);if(!s)return null;let i=gi(s[zp]),a=fi(s,i,"name"),c=fi(s,i,"email");return!c||G(a,c)?null:{git_user_name:null,git_user_email:null,platform_login:c,identity_source:"codex_oauth"}}import{homedir as Lt}from"node:os";import{join as ae}from"node:path";import{join as Yp}from"node:path";var Jp="cursor-ide-identity.json",Xp=ze;function Ei(e){return Yp(oe(e),Jp)}function hi(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function Si(e){let t=D(e,{}),n=t.read_at_ms,r=t.db_path;if(!(typeof n!="number"||!Number.isFinite(n)||typeof r!="string"))return{read_at_ms:n,db_path:r,email:hi(t.email),auth_id:hi(t.auth_id)}}function yi(e,t,n){if(e?.db_path!==t)return!1;let r=n-e.read_at_ms;return r>=0&&r<Xp}function Ri(e,t){try{Z(e,`${JSON.stringify(t)}
|
|
22
22
|
`)}catch(n){let r=n instanceof Error?n.message:String(n);h(`WARN: cursor IDE identity cache write failed open: ${r}`)}}import{execFileSync as Zp}from"node:child_process";import{existsSync as qp}from"node:fs";import{createRequire as Qp}from"node:module";import{pathToFileURL as ef}from"node:url";var Ii=Qp(import.meta.url),wt=`
|
|
23
23
|
SELECT key, value
|
|
@@ -38,8 +38,8 @@ ${e}`);if(m?.[1])for(let y of m[1].split(`
|
|
|
38
38
|
`);return Nm("sha512").update(t).digest("hex").slice(0,16)}function wm(e){let t=process.platform==="win32"?it(I("LOCALAPPDATA")??e,"npm-cache"):it(e,".npm"),n=I("npm_config_cache")??I("NPM_CONFIG_CACHE");return n===void 0||n===t?[t]:[n,t]}function ua(e){return typeof e=="string"&&e.length>0&&e.length<=_e.PACKAGE_FIELD_MAX?e:null}function vm(e,t,n){let r=Mm(e);for(let o of wm(n)){let s=it(o,"_npx",r),i=D(it(s,"node_modules",...t.split("/"),"package.json"),{}),a=ua(i.version);if(a!==null)return a;let c=D(it(s,"package-lock.json"),{}),u=ua(c.packages?.[`node_modules/${t}`]?.version);if(u!==null)return u}return null}function Lm(e){return e.length<=_e.PACKAGE_FIELD_MAX?e:`${e.slice(0,_e.PACKAGE_FIELD_MAX-1)}\u2026`}function Cr(e,t,n){if(typeof e!="string"||e.length===0)return null;let r=(0,_e.npxPackageSpecs)(e,t??[]),o=r[0];if(o===void 0)return null;let s=(0,_e.packageNameFromSpec)(o);if(s===null)return null;let i=vm(r,s,n);return{package_name:s,package_spec:Lm(o),...i===null?{}:{package_version:i,package_version_source:"npx_cache"}}}function la(e,t){if(typeof e!="string"||e.length===0)return null;let[n,...r]=Gt(e.trim());return n===void 0?null:Cr(n,r,t)}function zt(e,t){if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e,r=Array.isArray(n.args)?n.args.filter(o=>typeof o=="string"):[];return Cr(typeof n.command=="string"?n.command:null,r,t)}function da(e,t){let n=/^\s*command\s*=\s*(.+)$/m.exec(e);return n===null?null:Cr(ve(n[1]??""),ot(e,"args"),t)}function Fm(e){if(!e||typeof e!="object"||Array.isArray(e))return"unknown";let t=e;return typeof t.type=="string"&&t.type.length>0?t.type:typeof t.url=="string"?"http":typeof t.command=="string"?"stdio":"unknown"}function pa(e,t,n){if(!e.claimFile(t))return;let o=e.readJson(t,{})?.mcpServers;if(!o||typeof o!="object")return;let s=e.componentPath(t);for(let[i,a]of Object.entries(o)){if(e.truncated)return;let c=Fm(a),u=ta(a,c);Object.assign(u,zt(a,e.home)??{});let l=na(a);e.push({kind:"MCP_SERVER",name:i,path:s,content_hash:Rr(i,u,l),origin:n,enabled:l,attributes:u})}}function fa(e,t,n){if(!Um(t)||!e.claimFile(t))return;let r;try{r=Dm(t,"utf8")}catch{return}let o=e.componentPath(t),s=/^\[mcp_servers(?:\.(\w+)|\."([^"]+)"|\.'([^']+)')\]\s*$/gm,i;for(;(i=s.exec(r))!==null;){if(e.truncated)return;let a=i[1]??i[2]??i[3];if(!a)continue;let c=r.slice(i.index+i[0].length),u=c.search(/^\[mcp_servers(?:\.(?:\w+|"[^"]+"|'[^']+'))\]\s*$/m),l=u===-1?c:c.slice(0,u),p="unknown";/^\s*url\s*=/m.test(l)?p="http":/^\s*command\s*=/m.test(l)&&(p="stdio");let m=oa(l,p);Object.assign(m,da(l,e.home)??{});let d=ra(l);e.push({kind:"MCP_SERVER",name:a,path:o,content_hash:Rr(a,m,d),origin:n,enabled:d,attributes:m})}}import{existsSync as Hm,readdirSync as jm}from"node:fs";import{join as B}from"node:path";var ma=50;function Ir(e,t,n,r){if(!Hm(t))return{componentCount:0,expandTruncated:!1};let o=e.components.length,{expanded:s}=e.withPluginExpandCap(ma,()=>{Ie(e,{dir:B(t,"skills"),kind:"SKILL",origin:n,enabled:r,nested:"SKILL.md"}),Ie(e,{dir:B(t,"commands"),kind:"COMMAND",origin:n,enabled:r,extensions:[".md"]}),Ie(e,{dir:B(t,"agents"),kind:"SUBAGENT",origin:n,enabled:r,extensions:[".md"]})});Le(e,B(t,"hooks","hooks.json"),n),Le(e,B(t,"hooks.json"),n);let i=e.components.length-o,a=s>=ma;return{componentCount:i,expandTruncated:a}}function Ar(e,t){e.push({kind:"PLUGIN",name:t.pluginKey,path:t.rowPath,content_hash:t.contentHash,origin:"user",enabled:t.enabled,attributes:{...t.marketplace?{marketplace:t.marketplace}:{},...t.version?{version:t.version}:{},scope:t.scope,component_count:t.componentCount,...t.expandTruncated?{expand_truncated:!0}:{}}})}function ga(e){let t=B(e.home,".claude/plugins/installed_plugins.json"),n=e.readJson(t,{});if(!n)return;let r=n.plugins??{},s=e.readJson(B(e.home,".claude/settings.json"),{})?.enabledPlugins??{},i=e.componentPath(t);for(let[a,c]of Object.entries(r)){if(e.truncated)return;let u=Array.isArray(c)?c:[c],l=u[0]??{},p=s[a]===!0,m=a.includes("@")?a.split("@").slice(1).join("@"):"",d=typeof l.version=="string"?l.version:"",g=typeof l.scope=="string"?l.scope:"user",E=`plugin:${a}`,S=0,y=!1;for(let R of u)if(typeof R.installPath=="string"&&R.installPath.length>0){let H=Ir(e,R.installPath,E,p);S+=H.componentCount,y=y||H.expandTruncated}Ar(e,{pluginKey:a,rowPath:i,enabled:p,scope:g,version:d||void 0,marketplace:m||void 0,componentCount:S,expandTruncated:y,contentHash:U(`${a}|${d}|${g}|${p}|${S}`)})}}function Km(e){let t=e,n="";try{let r=jm(e,{withFileTypes:!0}).filter(o=>o.isDirectory()).map(o=>o.name);if(r.length===1&&r[0])t=B(e,r[0]),n=r[0];else if(r.length>1){let o=[...r].sort(),s=o[o.length-1];s&&(t=B(e,s),n=s)}}catch{}return{installPath:t,version:n}}var $m=/^\d+$/;function Bm(e){let t=e.filter(n=>!$m.test(n.pluginId));return t.length>0?t:e}function _a(e){let t=[{base:B(e.home,".cursor/plugins/local"),scope:"local"},{base:B(e.home,".cursor/plugins/cache"),scope:"cache"}];for(let{base:n,scope:r}of t)if(!e.truncated)for(let o of e.readEntries(n)){if(!o.isDirectory()||e.truncated)continue;if(r==="local"){let a=o.name,c=B(n,o.name),u=`plugin:${a}`,{componentCount:l,expandTruncated:p}=Ir(e,c,u,!0);Ar(e,{pluginKey:a,rowPath:e.componentPath(c),enabled:!0,scope:"local",componentCount:l,expandTruncated:p,contentHash:U(`${a}|local|${l}`)});continue}let s=o.name,i=[];for(let a of e.readEntries(B(n,s))){if(!a.isDirectory())continue;let c=B(n,s,a.name),{installPath:u,version:l}=Km(c);i.push({pluginId:a.name,installPath:u,version:l})}for(let a of Bm(i)){if(e.truncated)break;let c=`${a.pluginId}@${s}`,u=`plugin:${c}`,{componentCount:l,expandTruncated:p}=Ir(e,a.installPath,u,!0);Ar(e,{pluginKey:c,rowPath:e.componentPath(a.installPath),enabled:!0,scope:"cache",version:a.version||void 0,marketplace:s,componentCount:l,expandTruncated:p,contentHash:U(`${c}|${a.version}|${l}`)})}}}function zm(e,t){let{layout:n,levelDir:r,origin:o,includeMachineWide:s}=t;for(let i of n.skillRoots)Ie(e,{dir:Ue(r,i),kind:"SKILL",origin:o,enabled:!0,nested:"SKILL.md"});for(let i of n.dirs)Ie(e,{dir:Ue(r,i.dir),kind:i.kind,origin:o,enabled:!0,extensions:i.extensions});for(let i of n.memory){let a=Vi(i.map(c=>Ue(r,c)));a&&jt(e,{absolutePath:a,kind:"MEMORY",origin:o,enabled:!0,name:Gm(a)})}for(let i of Xo(n))Le(e,Ue(r,i),o);for(let i of n.mcpJson??[])pa(e,Ue(r,i),o);for(let i of n.mcpToml??[])fa(e,Ue(r,i),o);if(s){if(n.managed)for(let i of Ct(n.managed,process.platform,e.home))i.toLowerCase().endsWith(".json")&&Le(e,i,o);n.plugins==="claude"?ga(e):n.plugins==="cursor"&&_a(e)}}function ha(e,t){try{let n=new Ht(e,{pathMode:t.pathMode,maxEntries:t.maxEntries});for(let r of t.layouts)zm(n,{layout:r,levelDir:t.levelDir,origin:t.origin,includeMachineWide:t.includeMachineWide});return{scopeRef:t.scopeRef,anchor:t.levelDir,components:n.components,truncated:n.truncated}}catch{return}}function Or(e,t,n={}){let r={},o=n.shouldWalk;if(o===void 0||o("user","")){let c=ha(t,{layouts:Object.values(ke),levelDir:t,origin:"user",includeMachineWide:!0,pathMode:"home-relative",maxEntries:ue,scopeRef:""});c&&(r.user=c)}let s=n.inGitRepo===!0,i=null,a=n.launchCwd;if(a!==void 0){let c=Object.values(de),u=fr({launchCwd:a,gitRoot:n.gitRoot,inGitRepo:s,remote:n.remote,home:t,hasProjectSpec:l=>qo(c,l)});i=u.parentRel;for(let l of u.anchors){let p=nr(l.dir);if(o!==void 0&&!o(l.scope,p))continue;let m=ha(t,{layouts:c,levelDir:l.dir,origin:l.scope,includeMachineWide:!1,pathMode:"tilde",maxEntries:mr,scopeRef:p});m&&(r[l.scope]=m)}r.parent||(i=null)}return{scopes:r,parentRel:i,cwdInGitRepo:s}}function Pr(e,t,n={}){let r=n.truncated===!0,o=tt(e),s=new Set(e.map(l=>V(l.path,l.name)));if(n.forceFull===!0||t===void 0)return{hash:o,count:e.length,truncated:r,full:!0,upserts:e,removed:[],unchanged:!1};let a=[],c=t;for(let l of e){let p=V(l.path,l.name);c[p]!==l.content_hash&&a.push(l)}let u=[];if(!r){for(let l of Object.keys(c))if(!s.has(l)){let p=ki(l);p&&u.push(p)}}return{hash:o,count:e.length,truncated:r,full:!1,upserts:a,removed:u,unchanged:a.length===0&&u.length===0}}var Sa=2*1024*1024,Vm=new Set(["HOOK","MCP_SERVER","PLUGIN"]);function Tr(e,t,n){let r=new Set(t.map(s=>V(s.path,s.name))),o=[];for(let s of e)s.text!==void 0&&(n.has(s.content_hash)||r.has(V(s.path,s.name))||o.push(s));return o}function kr(e,t,n){let r=new Set(e);for(let s of t)r.add(s);let o=new Set(n.map(s=>s.content_hash));return[...r].filter(s=>o.has(s))}function Ea(e){return Buffer.byteLength(JSON.stringify(e),"utf8")}function ya(e){if(e.text===void 0)return e;let{text:t,...n}=e;return n}function xr(e,t=Sa){let n=[],r=[];for(let l of e)Vm.has(l.kind)?n.push(l):r.push(l);r.sort((l,p)=>(l.text?.length??0)-(p.text?.length??0));let o=[...n,...r],s=[],i=2,a=0,c=0,u=[];for(let l of o){let p=s.length>0?1:0,m=Ea(l)+p;if(i+m<=t){s.push(l),i+=m,l.text!==void 0&&u.push(l.content_hash);continue}if(l.text!==void 0){let d=ya(l),g=Ea(d)+p;if(i+g<=t){s.push(d),i+=g,a+=1;continue}}c+=1}return{components:s,textDeferredCount:a,droppedCount:c,textHashesSent:u}}function br(e,t){return t.size===0?e:e.map(n=>n.text===void 0||!t.has(n.content_hash)?n:ya(n))}var Wm=["user","cwd","repo","parent"];function Nr(e){let{collected:t,cacheFor:n,nowMs:r,maxBytes:o}=e,s=[];for(let x of Wm){let k=t.scopes[x];if(!k)continue;let F=n(x,k.scopeRef),L=F.components,K=Pr(k.components,L,{forceFull:L===void 0,truncated:k.truncated}),te=new Set(F.textHashes),M=Tr(k.components,K.upserts,te),w=br([...K.upserts,...M],te);s.push({scope:x,walk:k,delta:K,outgoing:w,outgoingKeys:new Set(w.map(C=>V(C.path,C.name))),deliveredTextHashes:te,cachedComponents:L})}let i=s.flatMap(x=>x.outgoing),a=xr(i,o),c=new Set(a.components.map(x=>V(x.path,x.name))),u=[],l=[],p=[],m=[],d=[],g=[],E=[];for(let x of s){let{scope:k,walk:F,delta:L}=x;g.push(...F.components),u.push(k);let K=a.components.filter(C=>x.outgoingKeys.has(V(C.path,C.name))),te=[...x.outgoingKeys].some(C=>!c.has(C)),M=L.truncated||te;M?p.push(k):L.full&&l.push(k),m.push(...K),!L.full&&!M&&d.push(...L.removed);let w=L.full?{}:{...x.cachedComponents??{}};if(!M)for(let C of L.removed)delete w[V(C.path,C.name)];for(let C of K)w[V(C.path,C.name)]=C.content_hash;E.push({scope:k,scopeRef:F.scopeRef,components:w,textHashes:kr(x.deliveredTextHashes,K.filter(C=>C.text!==void 0).map(C=>C.content_hash),F.components),collectedAtMs:r,included:K.length>0||L.removed.length>0&&!M||L.full})}let S={user_spec_hash:tt(g),user_spec_count:g.length,user_spec_truncated:p.length>0};u.length>0&&(S.user_spec_scopes=u,S.user_spec_full_scopes=l,S.user_spec_truncated_scopes=p,S.user_spec_cwd_in_git_repo=t.cwdInGitRepo),l.length>0&&l.length===u.length&&(S.user_spec_full=!0),m.length>0&&(S.user_spec=m),d.length>0&&(S.user_spec_removed=d),a.textDeferredCount>0&&(S.user_spec_text_deferred=a.textDeferredCount);let y=t.scopes.cwd;y&&(S.user_spec_cwd_scope_ref=y.scopeRef);let R=t.scopes.repo;R&&(S.user_spec_repo_scope_ref=R.scopeRef);let H=t.scopes.parent;return H&&(S.user_spec_parent_scope_ref=H.scopeRef,t.parentRel&&(S.user_spec_parent_rel=t.parentRel)),{fields:S,scopes:E}}var ct={cwd:"cwd_spec",repo:"repo_spec",parent:"parent_spec"};function Vt(e){return e==="cwd"||e==="repo"||e==="parent"}function at(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Mr(e){return!at(e)||!at(e.components)||!Object.values(e.components).every(t=>typeof t=="string")||!Array.isArray(e.text_hashes)||!e.text_hashes.every(t=>typeof t=="string")?!1:typeof e.collected_at_ms=="number"&&Number.isFinite(e.collected_at_ms)}function Ra(e){return Ym(e)}function Ca(e){return Jm(e)}function Ia(e){return Xm(e)}function Ym(e){if(!at(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r=="string"&&(t[n]=r);return t}function Jm(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function wr(e,t){if(!at(e))return;let n=e[t];return Mr(n)?n:void 0}function Xm(e){if(!at(e))return{};let t={};for(let[n,r]of Object.entries(e))Mr(r)&&(t[n]=r);return t}function vr(e,t=20){let n=[];for(let[r,o]of Object.entries(e))Mr(o)&&n.push([r,o]);return n.sort((r,o)=>o[1].collected_at_ms-r[1].collected_at_ms),Object.fromEntries(n.slice(0,t))}var eg=200,Aa=200,tg=["allow","deny","ask"],ng=/(?<=^|[\s(,=:])(?:~|[A-Za-z]:)?[\\/][^\s,)]+/g,Ur="<path>",rg=new RegExp(`${Ur}(?:\\s+[A-Za-z.][^\\s,)]*[\\\\/][^\\s,)]*)+`,"g");function og(e){let t=e.replace(ng,Ur).replace(rg,Ur);return t.length>Aa?`${t.slice(0,Aa)}...`:t}function Yt(e){let t=D(e,{}),n=[];for(let r of tg)for(let o of t.permissions?.[r]??[])typeof o=="string"&&o.length>0&&n.push({key:og(o),mode:r});return{model:t.model??"",permissionKeys:n}}function sg(e){let{serverManaged:t,fileBased:n}=Nn(process.platform,e),r=Yt(t);if(r.model||r.permissionKeys.length>0)return r;let o="",s=[];for(let i of n){let a=Yt(i);a.model&&(o=a.model),s.push(...a.permissionKeys)}return{model:o,permissionKeys:s}}function ig(e){let t=new Set,n=[];for(let r of e){let o=`${r.mode}\0${r.key}`;t.has(o)||(t.add(o),n.push(r))}return n}var ag=10,cg="self-config-cache.json",Pa=2;function Jt(){return I("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off"}function ug(){return I("EV_AI_HOOK_CWD_SPEC")?.toLowerCase()==="off"}function lg(e,t=Date.now()){return e===void 0||!Number.isFinite(e)?!0:t-e>=ze}var dg={claude:["claude"],cursor:["agent","cursor-agent"],codex:["codex"]};async function pg(e,t=v){let n=dg[e];if(!n||n.length===0)return null;let r=async o=>{let s=n[o];if(s===void 0)return null;let a=((await t(s,["--version"],2e3)).split(`
|
|
39
39
|
`)[0]??"").trim();return a||r(o+1)};return r(0)}function fg(e=Oa()){return De(e,".ev-ai","agent-hook",cg)}function mg(e){let n=[...e].sort((r,o)=>r.name.localeCompare(o.name)).map(r=>`${r.name}:${r.size}`).join(`
|
|
40
40
|
`);return U(n)}function Wt(e,t,n=!1){let r=mg(e),o=e.length;return t===r?n?{hash:r,count:o,truncated:n}:{hash:r,count:o}:n?{hash:r,count:o,entries:e,truncated:n}:{hash:r,count:o,entries:e}}function Lr(e,t,n=[]){let r=0,o=!1,s=new Set;for(let i of[...t.map(a=>De(e,a)),...n]){let a=Qm(i);if(s.has(a))continue;s.add(a);let c=fn(i);c.present&&(o=!0,r+=c.size)}return o?{present:!0,size:r}:{present:!1,size:0}}function gg(e){return Zm(e)?j(qm(e,"utf8"),{}):{}}function _g(e,t){try{Z(e,`${JSON.stringify(t)}
|
|
41
|
-
`)}catch(n){let r=n instanceof Error?n.message:String(n);h(`WARN: self-config cache write failed open: ${r}`)}}function hg(e,t,n){if(t==="user")return e.user_spec_collected_at_ms;if(Vt(t))return wr(e[ct[t]],n)?.collected_at_ms}function Eg(e,t,n){if(t==="user")return{components:Ra(e.user_spec_components),textHashes:Ca(e.user_spec_text_hashes)};if(!Vt(t))return{components:void 0,textHashes:[]};let r=wr(e[ct[t]],n);return r?{components:r.components,textHashes:r.text_hashes}:{components:void 0,textHashes:[]}}function Sg(e,t,n,r){let o={...e,send_count:n};for(let s of Object.keys(t)){let i=t[s];i.entries!==void 0&&(o[s]=i.hash)}if(r){o.user_spec_layout_version=Pa,r.home&&(o.user_spec_collected_at_ms=r.home.collectedAtMs,r.home.included&&(o.user_spec=r.hash,o.user_spec_components=r.home.components),o.user_spec_text_hashes=r.home.textHashes);for(let s of r.project){if(!Vt(s.scope))continue;let i=ct[s.scope],a=Ia(o[i]),c=a[s.scopeRef];a[s.scopeRef]={components:s.included?s.components:c?.components??{},text_hashes:s.textHashes,collected_at_ms:s.collectedAtMs},o[i]=vr(a)}}return o}async function Ta(e,t=process.cwd(),n=Oa(),r={}){let o=e==="claude",s=r.gitRoot??t,i=await pg(e),a="",c=[];if(o){let M=sg(n),w=Yt(De(n,".claude/settings.json")),C=Yt(De(t,".claude/settings.local.json"));a=M.model||C.model||w.model,c=ig([...M.permissionKeys,...w.permissionKeys,...C.permissionKeys]).slice(0,eg)}let u={present:!1,size:0},l=M=>{let w=[],C=!1;for(let ne of M){let pt=to(De(n,ne));if(w=w.concat(pt.entries),C=C||pt.truncated,w.length>=ue){w=w.slice(0,ue),C=!0;break}}return{entries:w,truncated:C}},p=fg(n),m=gg(p),d=m[e]??{},g=(d.send_count??0)+1,E=g>0&&g%ag===0,S=M=>E?void 0:d[M],y=l(fe.skills),R=l(fe.subagents),H=l(fe.commands),x=l(fe.rules),k={skills:Wt(y.entries,S("skills"),y.truncated),subagents:Wt(R.entries,S("subagents"),R.truncated),commands:Wt(H.entries,S("commands"),H.truncated),rules:Wt(x.entries,S("rules"),x.truncated)},F={runner_platform:e,config_scope:"user",cli_version:i,claude_version:o?i:null,model:o&&a||null,permission_keys:c,user_scope:{skills:k.skills,subagents:k.subagents,commands:k.commands,rules:k.rules,memory:Lr(n,fe.memory),settings:Lr(n,fe.settings,Qo(n)),mcp:Lr(n,fe.mcp)},local_settings:o?fn(De(t,".claude/settings.local.json")):u},L=null,K=r.nowMs??Date.now();if(!Jt()){let M=d.user_spec_layout_version!==Pa,w=Or(e,n,{launchCwd:ug()?void 0:r.launchCwd,gitRoot:s,inGitRepo:r.inGitRepo,remote:r.remote,shouldWalk:(C,ne)=>M||lg(hg(d,C,ne),K)});if(Object.keys(w.scopes).length>0){let C=Nr({collected:w,cacheFor:(ne,pt)=>M?{components:void 0,textHashes:[]}:Eg(d,ne,pt),nowMs:K});Object.assign(F,C.fields),L={hash:C.fields.user_spec_hash,home:C.scopes.find(ne=>ne.scope==="user")??null,project:C.scopes.filter(ne=>ne.scope!=="user")}}}let te=Sg(d,k,g,L);return{config:F,commit:()=>{m[e]=te,_g(p,m)}}}import{homedir as
|
|
42
|
-
${n}`}function Wa(e,t=[],n=process.execPath,r=import.meta.url,o=Ga){if(yo(n))return{command:n,args:[e,...t]};let s=
|
|
43
|
-
`);if(t<0)return null;let n;try{n=JSON.parse(e.slice(0,t))}catch{return null}return{meta:n,body:e.slice(t+1)}}async function Ya(e,t=fetch){let n=await e(),r=
|
|
44
|
-
`,l=I("EV_AI_HOOK_DEBUG");l==="full"?h(`DEBUG envelope=${JSON.stringify(c)}`):l==="1"&&h(`DEBUG summary=${Vg(c,Buffer.byteLength(u,"utf8"))}`);let p=process.argv.includes(en),m=I("EV_AI_HOOK_SYNC")==="1";return Nt(n.runnerEvent,n.runnerPlatform)||p||m?Xg(e,u,o):(await Zg(e,u,o),!1)}import{createReadStream as qg}from"node:fs";import{stat as Qg}from"node:fs/promises";import{basename as e_,resolve as t_}from"node:path";import{createInterface as n_}from"node:readline";var r_=1024*1024;function o_(e){let t=e.replace(/\\/g,"/");return t.includes("/.claude/projects/")&&e_(t).endsWith(".jsonl")}async function Za(e){if(!e||!o_(e))return null;try{let t=t_(e),n=await Qg(t);if(!n.isFile())return null;let r=Math.max(0,n.size-r_),o=[],s=n_({input:qg(t,{encoding:"utf8",start:r}),crlfDelay:1/0});for await(let i of s)i.length!==0&&o.push(i);r>0&&o.length>0&&o.shift();for(let i=o.length-1;i>=0;i--){let a=o[i];if(a)try{let c=JSON.parse(a);if(c.type!=="assistant")continue;let u=c.message;if(!u||typeof u!="object")continue;let l=u.model;if(typeof l=="string"&&l.length>0)return l}catch{continue}}return null}catch{return null}}function nn(e){return{sessionId:e.sessionId,turnId:e.turnId,installationId:e.manifest.installationId,runnerPlatform:e.runnerPlatform,platformAgentId:e.platformAgentId,runnerEvent:e.runnerEvent}}function dt(e,t){return{gitRoot:e.manifest.gitRoot,...t?{home:t}:{}}}function $r(e){return{gitRoot:e.manifest.gitRoot,inGitRepo:e.manifest.inGitRepo,runnerEvent:e.runnerEvent}}async function tc(e){let t=Date.now();await g_(e);let{gitRoot:n}=e.manifest;await rn(e,n);let r=$r(e);return{buildStartedAtMs:t,gitRoot:n,hookInput:Dt(e.hookInput,e.manifest.manifest,r),envelopeFields:nn(e),launchCwd:dr(e.hookInput,r),home:ec()}}function qa(e){try{return z(s_(e))}catch{return null}}function nc(e){return e.startsWith("/")||/^[A-Za-z]:\//.test(e)}function Qa(e,t){let n=e.replaceAll("\\","/");if(!nc(n))return null;let r=z(e),o=z(t),s=qa(e)??r,i=qa(t)??o;return s.startsWith(`${i}/`)?s.slice(i.length+1):r.startsWith(`${o}/`)?r.slice(o.length+1):null}function i_(e,t,n){if(!e)return{repositorySourcePath:null,userSourcePath:null};let r=e.replaceAll("\\","/"),s=Qa(e,t)??(nc(r)?null:r),i=Qa(e,n);return{repositorySourcePath:s,userSourcePath:i}}function tn(e,t,n,r,o,s){let{repositorySourcePath:i,userSourcePath:a}=i_(e,t,n),c=i??a,u=c===null?null:o(c),l=u!==null&&c!==null?a_({installableKind:r,sourcePath:c,nativeKey:u,inRepository:i!==null,platformAgentId:s.platformAgentId,installationId:s.manifest.installationId}):void 0;return{sourcePath:c,nativeKey:u,componentReference:l}}function a_(e){try{let t=e.inRepository?l_(e.platformAgentId,e.sourcePath):(0,P.installationRootExternalKey)(e.installationId,(0,P.userConfigRootFromPath)(e.sourcePath));return t?(0,P.buildComponentReference)({installationRootExternalKey:t,installableKind:e.installableKind,sourcePath:e.sourcePath,nativeKey:e.nativeKey}):void 0}catch{return}}function Br(e,t,n){return He("tool_invoked",{...n,success:null,duration_ms:null,hook_input:t.hookInput},t.envelopeFields,Fe,e.manifest.collectorUrl,t.buildStartedAtMs,dt(e,t.home))}function c_(e){return Bs(e.runnerEvent,e.runnerPlatform)?[]:is(e.hookInput)}function u_(e,t){return Br(e,t,{})}var rc=new Set([...Object.values(Ce),".github"]);function l_(e,t){let n=e.indexOf(":");if(n<=0)return null;let r=e.slice(0,n),o=t.replaceAll("\\","/").split("/").filter(Boolean),s=o.findIndex(i=>rc.has(i));return s<0?null:`${r}:${o.slice(0,s+1).join("/")}`}function d_(e,t,n,r,o,s,i){if(e===null||t===null||!(i!==null||/^mcp__.+?__.+$/i.test(e)||/^MCP:[^:]+:.+$/i.test(e)||/^MCP:.+__.+$/i.test(e)||e.toLowerCase()===`mcp:${t.toLowerCase()}`))return;let c=s.find(g=>g.name.toLowerCase()===t.toLowerCase()),u=c?.sourcePath??(c?.source==="claude_json_user"?".claude.json":c?.source==="cursor_mcp_user"?".cursor/mcp.json":c?.source==="codex_toml_user"||c===void 0&&o==="codex"?".codex/config.toml":void 0);if((c?.scope==="user"||c?.source==="claude_json_user"||c?.source==="cursor_mcp_user"||c?.source==="codex_toml_user"||c===void 0&&o==="codex")&&u)try{let g=(0,P.userConfigRootFromPath)(u);return(0,P.buildComponentReference)({installationRootExternalKey:(0,P.installationRootExternalKey)(r,g),installableKind:P.ComponentKind.INTERFACE,sourcePath:u,nativeKey:c?.name??t})}catch{return}if(n===null)return;let p=n.indexOf(":");if(p<=0||p===n.length-1)return;let m=n.slice(p+1),d=m.replaceAll("\\","/").split("/").at(-1);if(!(d===void 0||!rc.has(d)))try{return(0,P.buildComponentReference)({installationRootExternalKey:n,installableKind:P.ComponentKind.INTERFACE,sourcePath:m,nativeKey:t})}catch{return}}function p_(...e){for(let t of e)if(t)return t;return null}function W(e,t,n){if(e.status==="fulfilled")return e.value;let r=e.reason instanceof Error?e.reason.message:String(e.reason);return h(`WARN: ${n} failed open: ${r}`),t}function f_(e){let t={present:!1,size:0},n={hash:"",count:0};return{config:{runner_platform:e,config_scope:"user",cli_version:null,claude_version:null,model:null,permission_keys:[],user_scope:{skills:n,subagents:n,commands:n,rules:n,memory:t,settings:t,mcp:t},local_settings:t},commit:()=>{}}}function m_(e,t){return{runner_platform:e,config_scope:"user",...t?{operator:t}:{}}}var Oe=new Set,lt=null;async function g_(e){if(Jt())return;let t=e.manifest.installationId,n=e.manifest.installationStorePath;if(Oe.has(t))return;if(!ir(n)){Oe.add(t);return}let r=Ke({sessionId:e.sessionId,hostname:$e()});if(bi(r)){if(lt){await lt;return}lt=(async()=>{if(Oe.has(t)||!ir(n)){Oe.add(t);return}if(!Ko(n)){Oe.add(t);return}let o=!1;try{let s=Date.now(),{gitRoot:i}=e.manifest,a=String(e.runnerPlatform),[c,u,l,p,m]=await Promise.allSettled([Xe(i),_n(),qn(r),hn(),sr({gitRoot:i,installationStorePath:n,forceResend:!1,runnerPlatform:a})]),d=W(c,null,"gitSnapshot"),g=W(u,"","detectVirt"),E=W(l,null,"probeCloud"),S=W(p,{},"hostEnv"),y=W(m,{commit:()=>{}},"resolveOperatorForSend");await rn(e,i,d);let R={identity:{host:$e(),context:r,virt:g||null,cloud:E,git:d},host_env:S,env_vars:Qn(),self_config:m_(a,y.operator),run_meta:{trigger:"cloud_identity_bootstrap"}};o=!!await He("session_start",R,nn(e),Fe,e.manifest.collectorUrl,s,dt(e)),o&&(y.commit(),Oe.add(t))}finally{$o(n)}})().finally(()=>{lt=null}),await lt}}async function rn(e,t,n){try{let r=n===void 0?await Xe(t):n;e.platformAgentId=await xs(e.manifest.manifest,e.platformAgentId,String(e.runnerPlatform),t,r,e.manifest.installationStorePath,e.manifest.repoKey)}catch(r){let o=r instanceof Error?r.message:String(r);h(`WARN: derivePlatformAgentId failed open: ${o}`)}}async function __(e){let t=Date.now(),{gitRoot:n}=e.manifest,r=Ke({sessionId:e.sessionId,hostname:$e()}),o=String(e.runnerPlatform),s=$r(e),i=dr(e.hookInput,s),a=Xe(n),c=Jt()?Promise.resolve({commit:()=>{}}):sr({gitRoot:n,installationStorePath:e.manifest.installationStorePath,forceResend:!1,runnerPlatform:o}),[u,l,p,m,d,g,E]=await Promise.allSettled([a,_n(),qn(r),hn(),Wn(e.manifest.manifest,n,o),a.catch(()=>null).then(C=>Ta(o,n,void 0,{installationStorePath:e.manifest.installationStorePath,gitRoot:n,launchCwd:i,inGitRepo:e.manifest.inGitRepo,remote:C?.remote??null})),c]),S=W(u,null,"gitSnapshot"),y=W(l,"","detectVirt"),R=W(p,null,"probeCloud"),H=W(m,{},"hostEnv"),x=W(d,[],"mcpDeclared"),k=W(g,f_(o),"selfConfig"),F=W(E,{commit:()=>{}},"resolveOperatorForSend"),L=k.config;await rn(e,n,S);let K=_(e.hookInput,"model");K&&(L.model=K);let te={identity:{host:$e(),context:r,virt:y||null,cloud:R,git:S},host_env:H,env_vars:Qn(),mcp:{declared:x},self_config:L,run_meta:{trigger:e.hookSource||"startup"},hook_input:Dt(e.hookInput,e.manifest.manifest,{...s,launchCwd:i})},M={};try{M=await $a(ec())}catch{M={}}await He("session_start",te,{...nn(e),...M},Fe,e.manifest.collectorUrl,t,dt(e))&&(k.commit(),F.commit(),Oe.add(e.manifest.installationId))}async function h_(e){let t=Date.now(),{gitRoot:n}=e.manifest;await rn(e,n);let r=e.runnerEvent.toLowerCase(),o=p_(_(e.hookInput,"status"),_(e.hookInput,"stop_reason"),_(e.hookInput,"reason"),Qe(_(e.hookInput,"error")),r==="stop"?re(e.hookInput,"is_interrupt")===!0?"interrupted":"completed":""),s=e.runnerPlatform==="claude"?await Za(_(e.hookInput,"transcript_path")):null,i=Dt(e.hookInput,e.manifest.manifest,$r(e));s&&(i.model=s),r!=="stopfailure"&&!Li(e.manifest.manifest)&&i.last_assistant_message===void 0&&(i.last_assistant_message=""),await He("session_end",{status:o,...s?{model:s}:{},hook_input:i},nn(e),Fe,e.manifest.collectorUrl,t,dt(e))}function oc(e,t,n,r){let o=r??ss({skillId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home}),s=tn(o,t.gitRoot,t.home,P.ComponentKind.SKILL,P.nativeKeyForSkillPath,e);if(s.sourcePath!==null&&wn(s.sourcePath)?.toLowerCase()===n.toLowerCase())return s.componentReference===void 0?{}:{componentReference:s.componentReference};let i=r??vs({commandId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),a=tn(i,t.gitRoot,t.home,P.ComponentKind.COMMAND,P.nativeKeyForCommandPath,e);return a.nativeKey?.toLowerCase()!==n.toLowerCase()?{}:{commandName:a.nativeKey,...a.componentReference===void 0?{}:{componentReference:a.componentReference}}}function E_(e,t,n){let r=At(e.hookInput.tool_input);return Promise.all(n.map(o=>{let s=oc(e,t,o,r);return Br(e,t,{tool_name:"Skill",skill_name:o,...s.commandName===void 0?{}:{command_name:s.commandName},...s.componentReference===void 0?{}:{component_reference:s.componentReference}})}))}function S_(e,t,n){return Promise.all(n.map(r=>{let o=bs({relativePath:r,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),s=tn(o,t.gitRoot,t.home,P.ComponentKind.RULE,P.nativeKeyForRulePath,e),i=s.nativeKey??Ms(r);return Br(e,t,{tool_name:"Rule",rule_name:i,...s.componentReference===void 0?{}:{component_reference:s.componentReference}})}))}var y_=[{kind:P.ComponentKind.SKILL,nativeKeyFn:P.nativeKeyForSkillPath},{kind:P.ComponentKind.RULE,nativeKeyFn:P.nativeKeyForRulePath},{kind:P.ComponentKind.COMMAND,nativeKeyFn:P.nativeKeyForCommandPath}];function R_(e,t,n){if(n.skillName===null&&n.ruleName===null&&n.commandName===null)return{};let r=Ln(e.hookInput);if(r===null)return n.skillName===null?{}:oc(e,t,n.skillName,null);for(let o of y_){let s=tn(r,t.gitRoot,t.home,o.kind,o.nativeKeyFn,e);if(s.nativeKey!==null)return{...s.componentReference===void 0?{}:{componentReference:s.componentReference},...o.kind===P.ComponentKind.RULE?{ruleName:s.nativeKey}:{},...o.kind===P.ComponentKind.COMMAND?{commandName:s.nativeKey}:{}}}return{}}var C_=/mcp/i;function I_(e,t,n,r){let o=C_.test(e.runnerEvent);if(!r.hasMcpIdentity&&!o)return{};let s=o?la(t,n):zt(r.declaredConfig,n);return s===null?{}:Object.fromEntries(Object.entries(s).filter(i=>typeof i[1]=="string").map(([i,a])=>[`mcp_${i}`,a]))}async function A_(e){let t=await tc(e),n=Ys(e.hookInput,e.runnerEvent),{toolName:r,skillName:o}=n,s=vn(e.hookInput),i=ca(s,t.home),a=Xs(e.hookInput),c=Gs(e.runnerEvent),u=c===!1?Zs(e.hookInput,e.runnerEvent):null,l=await Wn(e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home).catch(()=>[]),p=Qe(_(e.hookInput,"mcp_server_name")),{mcpServer:m,mcpTool:d}=qs(r,l.map(F=>F.name),p??""),g=d_(r,m,e.platformAgentId,e.manifest.installationId,String(e.runnerPlatform),l,p),E=g===void 0?R_(e,t,n):{},S=m===null?null:js(m,e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home),y=I_(e,s,t.home,{hasMcpIdentity:!!m||!!d,declaredConfig:S}),R=g??E.componentReference,H=E.ruleName??n.ruleName,x=E.commandName??n.commandName,k=Js(e.hookInput);await He("tool_invoked",{tool_name:r,skill_name:o,...H?{rule_name:H}:{},...x?{command_name:x}:{},success:c,duration_ms:a,...i?{executable:i}:{},...u?{failure_reason:u}:{},...m?{mcp_server:m}:{},...d?{mcp_tool:d}:{},...y,...R?{component_reference:R}:{},...k?{subagent_type:k}:{},hook_input:t.hookInput},t.envelopeFields,Fe,e.manifest.collectorUrl,t.buildStartedAtMs,dt(e,t.home))}async function sc(e){switch(e.internalEvent){case"session_start":await __(e);return;case"session_end":await h_(e);return;case"skill_invoked":{let t=c_(e),n=ws(e.hookInput),r=$s(e.runnerEvent);if(t.length===0&&n.length===0&&!r)return;let o=await tc(e);await Promise.all([r&&t.length===0&&n.length===0?u_(e,o):void 0,t.length===0?void 0:E_(e,o,t),n.length===0?void 0:S_(e,o,n)]);return}case"tool_invoked":await A_(e);return;default:return}}function ic(e){return e!=="session_start"&&e!=="session_end"&&e!=="tool_invoked"&&e!=="skill_invoked"&&e!==""}import{existsSync as zr,readFileSync as O_}from"node:fs";import{dirname as P_,isAbsolute as T_,join as k_,relative as x_}from"node:path";function ac(e){for(let t of uo){let n=k_(e,t);if(zr(n))return n}}async function b_(e=process.cwd(),t){let n=t??await pn(e);return ac(n)??ac(e)}async function N_(e,t){let n=t??await pn(P_(e)),r=x_(n,e);if(r.startsWith("..")||T_(r))return!1;let o=await Y("git",["ls-files","--error-unmatch",r],2e3,{cwd:n});return o.ok?!0:o.code===1?!1:(h(`WARN: git ls-files failed for manifest ${e} (code=${String(o.code)}); treating as tracked`),!0)}function Gr(e){let t=O_(e,"utf8");return j(t,{})}function M_(){return{schema_version:St,mcp_servers:[]}}function w_(e,t,n,r){!t||!n||(e.capture_hook_input==="full"&&r.has("capture_hook_input")&&(h(`WARN: ignoring capture_hook_input=full in git-tracked manifest ${t}; use EV_AI_HOOK_CAPTURE_FULL_INPUT=1 or an untracked operator manifest`),delete e.capture_hook_input),e.debug===!0&&r.has("debug")&&(h(`WARN: ignoring debug=true in git-tracked manifest ${t}; set debug on ~/.ev-ai/config.json`),delete e.debug))}async function cc(e=process.cwd(),t={}){let{root:n,inGitRepo:r}=await dn(e),o=I("EV_AI_HOOK_MANIFEST"),s=o&&zr(o)?o:void 0,i=s?void 0:zr(Sn())?Sn():void 0,a=s?void 0:await b_(e,n),c=i?Gr(i):void 0,u=a?Gr(a):void 0,l,p,m,d=new Set;if(s){l=Gr(s),p=s,m=s;for(let R of Object.keys(l))d.add(R)}else if(c&&u){l=lo(u,c),p=i,m=a;for(let R of Object.keys(u))R in c||d.add(R)}else if(c)l=c,p=i;else if(u){l=u,p=a,m=a;for(let R of Object.keys(u))d.add(R)}else l=M_();delete l.installation_id;let g=m?await N_(m,n):!1;w_(l,m,g,d);let{installationId:E,storePath:S,repoKey:y}=await Vo(n,{sessionId:t.sessionId});return{manifestPath:p??S,manifest:l,installationId:E,installationStorePath:S,repoKey:y,collectorUrl:Cn(l),platformAgentId:l.platform_agent_id??"",gitRoot:n,inGitRepo:r}}import{createHash as v_}from"node:crypto";import{mkdirSync as L_,readdirSync as U_,readFileSync as D_,statSync as uc,unlinkSync as F_,writeFileSync as H_}from"node:fs";import{homedir as on}from"node:os";import{join as Vr}from"node:path";var j_="turns",lc=1440*60*1e3,K_=100,$_=new Set(["stop","stopfailure","sessionend"]);function Wr(e=on()){return Vr(oe(e),j_)}function B_(e){return v_("sha256").update(e).digest("hex").slice(0,32)}function dc(e,t){return Vr(e,B_(t))}function G_(e,t=Date.now()){let n;try{n=U_(e)}catch{return}let r=0;for(let o of n){if(r>=K_)return;r+=1;try{let s=Vr(e,o);t-uc(s).mtimeMs>lc&&F_(s)}catch{}}}function z_(e,t,n=on()){let r=e.trim(),o=t.trim();if(!(!r||!o))try{let s=Wr(n);L_(s,{recursive:!0}),H_(dc(s,r),o,"utf8")}catch{}}function V_(e,t=on()){let n=e.trim();if(!n)return"";try{let r=dc(Wr(t),n);return Date.now()-uc(r).mtimeMs>lc?"":D_(r,"utf8").trim()}catch{return""}}function pc(e,t,n,r=on()){let o=t.trim(),s=$_.has(n.trim().toLowerCase());return s&&G_(Wr(r)),o?(z_(e,o,r),o):s?V_(e,r):""}async function fc(e,t,n,r){let o=t??await ln(An),s=j(o,{}),i=_(s,"session_id")||_(s,"conversation_id"),a=await cc(process.cwd(),{sessionId:i});if(!a)return;r&&(a.collectorUrl=r);let c=zs(s,a.manifest.platform,n),u=Vs(e,c.runnerEvent);if(!u){h(`WARN: unknown hook event '${c.runnerEvent}'; skipping telemetry`);return}let l={hookInput:s,sessionId:c.sessionId,turnId:pc(c.sessionId,c.turnId,c.runnerEvent),runnerEvent:c.runnerEvent,runnerPlatform:c.runnerPlatform,hookSource:c.hookSource,internalEvent:u,manifest:a,platformAgentId:a.platformAgentId};if(ic(u)){h(`WARN: unsupported internal event '${u}'`);return}await sc(l)}function W_(e,t){if(I("EV_AI_HOOK_SYNC")==="1")return!0;let n=Be(e),r=j(t,{}),o=n.event??(_(r,"hook_event_name")||_(r,"event")),s=qe(r,o,void 0,n.runner);return Nt(o,s)}async function mc(e=process.argv.slice(2)){if(ai(),e[0]===Kr){try{await Ya(un)}catch{}return 0}if(e[0]===en){try{let t=Be(e.slice(1)),n=await un(),r=j(n,{}),o=t.event??(_(r,"hook_event_name")||_(r,"event"));if(mn()||Jn(t.runner,r,o))return 0;await fc(t.event,n,t.runner,Yn(t))}catch(t){let n=t instanceof Error?t.message:String(t);h(`WARN: detached work failed open: ${n}`)}return 0}try{let t=await ln(An),n=Be(e),r=Yn(n),o=j(t,{}),s=n.event??(_(o,"hook_event_name")||_(o,"event"));if(mn()||Jn(n.runner,o,s)||!si(o,s,n.runner))return 0;W_(e,t)?await fc(n.event,t,n.runner,r):await Xa(t,e)}catch(t){let n=t instanceof Error?t.message:String(t);h(`WARN: hook failed open: ${n}`)}finally{eo()}return 0}mc().then(e=>{process.exit(e)}).catch(e=>{let t=e instanceof Error?e.message:String(e);process.stderr.write(`[ev-ai-agent-hook] ${t}
|
|
41
|
+
`)}catch(n){let r=n instanceof Error?n.message:String(n);h(`WARN: self-config cache write failed open: ${r}`)}}function hg(e,t,n){if(t==="user")return e.user_spec_collected_at_ms;if(Vt(t))return wr(e[ct[t]],n)?.collected_at_ms}function Eg(e,t,n){if(t==="user")return{components:Ra(e.user_spec_components),textHashes:Ca(e.user_spec_text_hashes)};if(!Vt(t))return{components:void 0,textHashes:[]};let r=wr(e[ct[t]],n);return r?{components:r.components,textHashes:r.text_hashes}:{components:void 0,textHashes:[]}}function Sg(e,t,n,r){let o={...e,send_count:n};for(let s of Object.keys(t)){let i=t[s];i.entries!==void 0&&(o[s]=i.hash)}if(r){o.user_spec_layout_version=Pa,r.home&&(o.user_spec_collected_at_ms=r.home.collectedAtMs,r.home.included&&(o.user_spec=r.hash,o.user_spec_components=r.home.components),o.user_spec_text_hashes=r.home.textHashes);for(let s of r.project){if(!Vt(s.scope))continue;let i=ct[s.scope],a=Ia(o[i]),c=a[s.scopeRef];a[s.scopeRef]={components:s.included?s.components:c?.components??{},text_hashes:s.textHashes,collected_at_ms:s.collectedAtMs},o[i]=vr(a)}}return o}async function Ta(e,t=process.cwd(),n=Oa(),r={}){let o=e==="claude",s=r.gitRoot??t,i=await pg(e),a="",c=[];if(o){let M=sg(n),w=Yt(De(n,".claude/settings.json")),C=Yt(De(t,".claude/settings.local.json"));a=M.model||C.model||w.model,c=ig([...M.permissionKeys,...w.permissionKeys,...C.permissionKeys]).slice(0,eg)}let u={present:!1,size:0},l=M=>{let w=[],C=!1;for(let ne of M){let pt=to(De(n,ne));if(w=w.concat(pt.entries),C=C||pt.truncated,w.length>=ue){w=w.slice(0,ue),C=!0;break}}return{entries:w,truncated:C}},p=fg(n),m=gg(p),d=m[e]??{},g=(d.send_count??0)+1,E=g>0&&g%ag===0,S=M=>E?void 0:d[M],y=l(fe.skills),R=l(fe.subagents),H=l(fe.commands),x=l(fe.rules),k={skills:Wt(y.entries,S("skills"),y.truncated),subagents:Wt(R.entries,S("subagents"),R.truncated),commands:Wt(H.entries,S("commands"),H.truncated),rules:Wt(x.entries,S("rules"),x.truncated)},F={runner_platform:e,config_scope:"user",cli_version:i,claude_version:o?i:null,model:o&&a||null,permission_keys:c,user_scope:{skills:k.skills,subagents:k.subagents,commands:k.commands,rules:k.rules,memory:Lr(n,fe.memory),settings:Lr(n,fe.settings,Qo(n)),mcp:Lr(n,fe.mcp)},local_settings:o?fn(De(t,".claude/settings.local.json")):u},L=null,K=r.nowMs??Date.now();if(!Jt()){let M=d.user_spec_layout_version!==Pa,w=Or(e,n,{launchCwd:ug()?void 0:r.launchCwd,gitRoot:s,inGitRepo:r.inGitRepo,remote:r.remote,shouldWalk:(C,ne)=>M||lg(hg(d,C,ne),K)});if(Object.keys(w.scopes).length>0){let C=Nr({collected:w,cacheFor:(ne,pt)=>M?{components:void 0,textHashes:[]}:Eg(d,ne,pt),nowMs:K});Object.assign(F,C.fields),L={hash:C.fields.user_spec_hash,home:C.scopes.find(ne=>ne.scope==="user")??null,project:C.scopes.filter(ne=>ne.scope!=="user")}}}let te=Sg(d,k,g,L);return{config:F,commit:()=>{m[e]=te,_g(p,m)}}}import{homedir as zg}from"node:os";import{join as va}from"node:path";var lR=Buffer.from([1]);var dR=1024*1024,pR=4*1024*1024,fR=64*1024,mR=64*1024,gR=64*1024;var Dr=4096,_R=4*1024*1024;import{open as ka,mkdir as yg,readFile as Rg,readdir as Cg,rename as Ig,stat as Ag,rmdir as Og,unlink as Pg,utimes as Tg}from"node:fs/promises";var Xt=new WeakMap;function kg(e){if(e&&typeof e=="object"&&"code"in e)return e}function Fr(e){return kg(e)?.code==="ENOENT"}async function ba(e,t){try{return await e.readdir(t)}catch(n){if(Fr(n))return[];throw n}}function Na(){return{async open(e,t){let n=await ka(e,t),r={path:e};return Xt.set(r,n),r},async write(e,t){let n=xa(e),r=typeof t=="string"?Buffer.from(t,"utf8"):t;await n.write(r)},async fsync(e){await xa(e).sync()},async close(e){let t=Xt.get(e);Xt.delete(e),t&&await t.close()},rename:Ig,async readdir(e){return Cg(e)},readFile:Rg,async stat(e){let t=await Ag(e);return{mtimeMs:t.mtimeMs,size:t.size,isDirectory:()=>t.isDirectory()}},async mkdir(e,t){await yg(e,t)},unlink:Pg,rmdir:Og,utimes:Tg,async fsyncDir(e){if(process.platform==="win32")return;let t=await ka(e,"r");try{await t.sync()}finally{await t.close()}}}}function xa(e){let t=Xt.get(e);if(!t)throw new Error("closed");return t}function Zt(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}import{join as qt}from"node:path";function xg(e){return qt(e,".ev-ai","agent-hook","js","signed-v1")}function bg(e){return qt(xg(e),"scopes")}function Ma(e,t){return qt(bg(e),t)}function wa(e){return qt(e,"attempts")}function Hr(e){return String(e).padStart(10,"0")}var Ng=/^(\d{10})$/,Mg=/^(\d{10})\.done$/,wg=/^[0-9a-f]{128}$/,vg=64;async function Fa(e,t,n=!1){let r=wa(t),o=await ba(e,r),s=new Map,i=new Map,a=La(o,Ng),c=La(o,Mg),u=async m=>{let d=await Da(e,va(r,Lg(m)));return d&&s.set(m,{record:Dg(d.value),mtimeMs:d.mtimeMs}),d!==void 0},l=async m=>{let d=Fg((await Da(e,va(r,Ug(m))))?.value);return d&&i.set(m,d),d!==void 0};if(!n)return await Promise.all([...a.map(u),...c.map(l)]),{claims:s,dones:i};await Promise.all([Ua(a,u),Ua(c,l)]);let p=ut(s);return p<ut(i)&&c.includes(p)&&await l(p),{claims:s,dones:i}}function La(e,t){return e.flatMap(n=>{let r=t.exec(n);return r?[Number(r[1])]:[]})}async function Ua(e,t){for(let n of[...e].sort((r,o)=>o-r))if(await t(n))return}function ut(e){let t=0;for(let n of e.keys())n>t&&(t=n);return t}function Ha(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 Lg(e){return Hr(e)}function Ug(e){return`${Hr(e)}.done`}async function Da(e,t){let n;try{n=await e.stat(t)}catch(o){if(Fr(o))return;throw o}let r=n.mtimeMs;if(n.size===0||n.size>Dr)return{mtimeMs:r};try{let o=await e.readFile(t);return o.byteLength===0||o.byteLength>Dr?{mtimeMs:r}:{mtimeMs:r,value:JSON.parse(o.toString("utf8"))}}catch{return{mtimeMs:r}}}function Dg(e){if(!Zt(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 Fg(e){if(!Zt(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=Hg(t.selection);if(n)return{finished_at:t.finished_at,interval_s:t.interval_s,outcome:t.outcome,selection:n}}function Hg(e){if(!Zt(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"&&wg.test(t.digest)&&typeof t.version=="string"&&t.version.length>0&&typeof t.sha512=="string"&&jg(t.sha512)===t.digest)return{kind:"cached",digest:t.digest,version:t.version,sha512:t.sha512}}function jg(e){if(e.length===0||!/^[A-Za-z0-9+/]+=*$/.test(e))return;let t=Buffer.from(e,"base64");if(!(t.byteLength!==vg||t.toString("base64")!==e))return t.toString("hex")}function Gg(e){return e==="bootstrap"?3e3:6e4}function Ka(e,t){let n=ut(e.claims);if(n===0)return;let r=ut(e.dones),o=e.claims.get(n),s=e.dones.get(n);if(o&&!s){let a=Ha(o),c=o.record==="empty"?void 0:o.record.owner,u=Gg(c)+3e4;if(t-a>u)return{n,latest_claim:n,outcome:"incomplete",finished_at:null,selection_version:ja(e.dones.get(r)?.selection)}}if(r===0)return;let i=e.dones.get(r);if(i)return{n:r,latest_claim:n,outcome:i.outcome,finished_at:i.finished_at,selection_version:ja(i.selection)}}function ja(e){return e?.kind==="cached"&&typeof e.version=="string"?e.version:null}async function $a(e=zg(),t=process.env){let n=Zn(t),r=n?.launcherScope;if(!n||!r)return{};try{let o=await Fa(Na(),Ma(e,r)),s=Ka(o,Date.now());return s?{launcher_scope:r,launcher_attempt:s}:{launcher_scope:r}}catch{return{launcher_scope:r}}}function Fe(e,t,n){let r={installation_id:n.installationId};n.platformAgentId&&(r.platform_agent_id=n.platformAgentId),n.sessionId&&(r.session_id=n.sessionId),n.turnId&&(r.turn_id=n.turnId);let o={schema_version:St,event:e,timestamp:ft(),session_id:n.sessionId||null,turn_id:n.turnId||null,installation_id:n.installationId,platform:n.runnerPlatform,platform_agent_id:n.platformAgentId||null,runner_event:n.runnerEvent||null,agent_hook_version:Pn,host_arch:process.arch,node_version:process.version,correlation:r,payload:t},s=Zn();return s&&(o.launcher_version=s.launcherVersion,o.hook_source=s.hookSource,o.hook_fallback_reason=s.fallbackReason??null,o.launcher_scope_match=ci(n.collectorUrl,s.launcherScope)),e==="session_start"&&(n.launcher_scope&&(o.launcher_scope=n.launcher_scope),n.launcher_attempt&&(o.launcher_attempt=n.launcher_attempt)),o}import{existsSync as Ga}from"node:fs";import{spawn as za}from"node:child_process";import{fileURLToPath as Wg}from"node:url";import{gzipSync as Vg}from"node:zlib";function jr(e){return I("EV_AI_HOOK_COMPRESS")==="off"?{body:e}:Buffer.byteLength(e,"utf8")<Oo?{body:e}:{body:Vg(Buffer.from(e,"utf8")),contentEncoding:"gzip"}}function Qt(e){let t={"Content-Type":"application/json"};return e!==void 0&&(t["Content-Encoding"]=e),t}function Ba(e){return typeof e=="string"?Buffer.byteLength(e,"utf8"):e.length}var Kr="__post",en="__work";async function Yg(e,t,n={}){if(I("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off")return e;let r=await or(n.gitRoot??process.cwd(),v,process.env,{runnerPlatform:t,home:n.home}),o=e.self_config,s=o!==null&&typeof o=="object"&&!Array.isArray(o)?o:{};return{...e,self_config:{...s,runner_platform:typeof s.runner_platform=="string"?s.runner_platform:t,operator:r}}}function Jg(e,t){let n=e.payload,r=n&&typeof n=="object"&&!Array.isArray(n)?Object.keys(n):[],o=e.correlation&&typeof e.correlation=="object"?Object.keys(e.correlation):[];return JSON.stringify({event:e.event,schema_version:e.schema_version,agent_hook_version:e.agent_hook_version,host_arch:e.host_arch,node_version:e.node_version,build_ms:e.build_ms,body_bytes:t,correlation_keys:o,payload_keys:r})}function Va(e){switch(e){case"session_start":return Ro;case"session_end":return Co;case"tool_invoked":case"skill_invoked":return In;default:return In}}function Xg(e,t,n){return`${JSON.stringify({url:e,timeoutMs:t})}
|
|
42
|
+
${n}`}function Wa(e,t=[],n=process.execPath,r=import.meta.url,o=Ga){if(yo(n))return{command:n,args:[e,...t]};let s=Wg(r);return o(s)?{command:n,args:[s,e,...t]}:{command:n,args:[e,...t]}}function Zg(e=process.execPath,t=import.meta.url,n=Ga){return Wa(Kr,[],e,t,n)}function qg(e){let t=e.indexOf(`
|
|
43
|
+
`);if(t<0)return null;let n;try{n=JSON.parse(e.slice(0,t))}catch{return null}return{meta:n,body:e.slice(t+1)}}async function Ya(e,t=fetch){let n=await e(),r=qg(n);if(!r)return;let{meta:o,body:s}=r,i=jr(s),a=Qt(i.contentEncoding);try{await t(o.url,{method:"POST",headers:a,body:i.body,signal:AbortSignal.timeout(Number(o.timeoutMs))})}catch{}}async function Qg(e,t,n,r=fetch){let o=Va(e),s=jr(t),i=Qt(s.contentEncoding),a=Ba(s.body);h(`POST event=${e} url=${ht(n)} size=${a} encoding=${s.contentEncoding??"identity"} platform=${process.platform}`);let c=Date.now();try{let u=await r(n,{method:"POST",headers:i,body:s.body,signal:AbortSignal.timeout(o)});if(!u.ok&&s.contentEncoding==="gzip"&&(u.status===400||u.status===415)){try{await u.text()}catch{}h(`POST gzip rejected http=${u.status} \u2014 retrying uncompressed`),u=await r(n,{method:"POST",headers:Qt(),body:t,signal:AbortSignal.timeout(o)})}let l=Date.now()-c;if(u.ok)return h(`POST outcome=ok elapsed_ms=${l} http=${u.status}`),!0;let p=(await u.text()).slice(0,200).replace(/[\n\r]/g,"");return h(`POST outcome=fail elapsed_ms=${l} http=${u.status} body=${p}`),!1}catch(u){let l=Date.now()-c,p=u instanceof Error?u.message:String(u);return h(`POST outcome=fail elapsed_ms=${l} http=000 body=${p}`),!1}}async function Ja(e,t,n,r,o){try{let s=r(e,t,{detached:!0,stdio:["pipe","ignore","ignore"],windowsHide:!0});s.on("error",()=>{}),s.stdin.on("error",()=>{});let i=!1;return await new Promise(a=>{let c=setTimeout(()=>{if(!i){h(`WARN: ${o} stdin handoff timed out \u2014 continuing fail-open`);try{s.stdin.destroy()}catch{}}a()},Io),u=()=>{i=!0,clearTimeout(c),a()};s.stdin.end(n,()=>u()),s.stdin.once("error",()=>u())}),s.unref(),s}catch(s){let i=s instanceof Error?s.message:String(s);return h(`WARN: ${o} spawn failed open: ${i}`),null}}async function e_(e,t,n,r=za,o=Zg){let s=Va(e),i=Xg(n,s,t),{command:a,args:c}=o();return Ja(a,c,i,r,"detached post")}async function Xa(e,t,n=za,r=Wa){let{command:o,args:s}=r(en,t);return Ja(o,s,e,n,"detached work")}async function He(e,t,n,r,o,s,i){if(!o)return h("WARN: collector URL missing \u2014 pass --url on the hook command or set collector_url in manifest"),!1;if(!Ge(o))return h(`WARN: collector URL blocked (https required): ${ht(o)}`),!1;let a=await Yg(t,n.runnerPlatform,i),c=r(e,a,{...n,collectorUrl:o});s!==void 0&&(c.build_ms=Math.max(0,Date.now()-s));let u=`${JSON.stringify(c)}
|
|
44
|
+
`,l=I("EV_AI_HOOK_DEBUG");l==="full"?h(`DEBUG envelope=${JSON.stringify(c)}`):l==="1"&&h(`DEBUG summary=${Jg(c,Buffer.byteLength(u,"utf8"))}`);let p=process.argv.includes(en),m=I("EV_AI_HOOK_SYNC")==="1";return Nt(n.runnerEvent,n.runnerPlatform)||p||m?Qg(e,u,o):(await e_(e,u,o),!1)}import{createReadStream as t_}from"node:fs";import{stat as n_}from"node:fs/promises";import{basename as r_,resolve as o_}from"node:path";import{createInterface as s_}from"node:readline";var i_=1024*1024;function a_(e){let t=e.replace(/\\/g,"/");return t.includes("/.claude/projects/")&&r_(t).endsWith(".jsonl")}async function Za(e){if(!e||!a_(e))return null;try{let t=o_(e),n=await n_(t);if(!n.isFile())return null;let r=Math.max(0,n.size-i_),o=[],s=s_({input:t_(t,{encoding:"utf8",start:r}),crlfDelay:1/0});for await(let i of s)i.length!==0&&o.push(i);r>0&&o.length>0&&o.shift();for(let i=o.length-1;i>=0;i--){let a=o[i];if(a)try{let c=JSON.parse(a);if(c.type!=="assistant")continue;let u=c.message;if(!u||typeof u!="object")continue;let l=u.model;if(typeof l=="string"&&l.length>0)return l}catch{continue}}return null}catch{return null}}function nn(e){return{sessionId:e.sessionId,turnId:e.turnId,installationId:e.manifest.installationId,runnerPlatform:e.runnerPlatform,platformAgentId:e.platformAgentId,runnerEvent:e.runnerEvent}}function dt(e,t){return{gitRoot:e.manifest.gitRoot,...t?{home:t}:{}}}function $r(e){return{gitRoot:e.manifest.gitRoot,inGitRepo:e.manifest.inGitRepo,runnerEvent:e.runnerEvent}}async function tc(e){let t=Date.now();await E_(e);let{gitRoot:n}=e.manifest;await rn(e,n);let r=$r(e);return{buildStartedAtMs:t,gitRoot:n,hookInput:Dt(e.hookInput,e.manifest.manifest,r),envelopeFields:nn(e),launchCwd:dr(e.hookInput,r),home:ec()}}function qa(e){try{return z(c_(e))}catch{return null}}function nc(e){return e.startsWith("/")||/^[A-Za-z]:\//.test(e)}function Qa(e,t){let n=e.replaceAll("\\","/");if(!nc(n))return null;let r=z(e),o=z(t),s=qa(e)??r,i=qa(t)??o;return s.startsWith(`${i}/`)?s.slice(i.length+1):r.startsWith(`${o}/`)?r.slice(o.length+1):null}function u_(e,t,n){if(!e)return{repositorySourcePath:null,userSourcePath:null};let r=e.replaceAll("\\","/"),s=Qa(e,t)??(nc(r)?null:r),i=Qa(e,n);return{repositorySourcePath:s,userSourcePath:i}}function tn(e,t,n,r,o,s){let{repositorySourcePath:i,userSourcePath:a}=u_(e,t,n),c=i??a,u=c===null?null:o(c),l=u!==null&&c!==null?l_({installableKind:r,sourcePath:c,nativeKey:u,inRepository:i!==null,platformAgentId:s.platformAgentId,installationId:s.manifest.installationId}):void 0;return{sourcePath:c,nativeKey:u,componentReference:l}}function l_(e){try{let t=e.inRepository?f_(e.platformAgentId,e.sourcePath):(0,P.installationRootExternalKey)(e.installationId,(0,P.userConfigRootFromPath)(e.sourcePath));return t?(0,P.buildComponentReference)({installationRootExternalKey:t,installableKind:e.installableKind,sourcePath:e.sourcePath,nativeKey:e.nativeKey}):void 0}catch{return}}function Br(e,t,n){return He("tool_invoked",{...n,success:null,duration_ms:null,hook_input:t.hookInput},t.envelopeFields,Fe,e.manifest.collectorUrl,t.buildStartedAtMs,dt(e,t.home))}function d_(e){return Bs(e.runnerEvent,e.runnerPlatform)?[]:is(e.hookInput)}function p_(e,t){return Br(e,t,{})}var rc=new Set([...Object.values(Ce),".github"]);function f_(e,t){let n=e.indexOf(":");if(n<=0)return null;let r=e.slice(0,n),o=t.replaceAll("\\","/").split("/").filter(Boolean),s=o.findIndex(i=>rc.has(i));return s<0?null:`${r}:${o.slice(0,s+1).join("/")}`}function m_(e,t,n,r,o,s,i){if(e===null||t===null||!(i!==null||/^mcp__.+?__.+$/i.test(e)||/^MCP:[^:]+:.+$/i.test(e)||/^MCP:.+__.+$/i.test(e)||e.toLowerCase()===`mcp:${t.toLowerCase()}`))return;let c=s.find(g=>g.name.toLowerCase()===t.toLowerCase()),u=c?.sourcePath??(c?.source==="claude_json_user"?".claude.json":c?.source==="cursor_mcp_user"?".cursor/mcp.json":c?.source==="codex_toml_user"||c===void 0&&o==="codex"?".codex/config.toml":void 0);if((c?.scope==="user"||c?.source==="claude_json_user"||c?.source==="cursor_mcp_user"||c?.source==="codex_toml_user"||c===void 0&&o==="codex")&&u)try{let g=(0,P.userConfigRootFromPath)(u);return(0,P.buildComponentReference)({installationRootExternalKey:(0,P.installationRootExternalKey)(r,g),installableKind:P.ComponentKind.INTERFACE,sourcePath:u,nativeKey:c?.name??t})}catch{return}if(n===null)return;let p=n.indexOf(":");if(p<=0||p===n.length-1)return;let m=n.slice(p+1),d=m.replaceAll("\\","/").split("/").at(-1);if(!(d===void 0||!rc.has(d)))try{return(0,P.buildComponentReference)({installationRootExternalKey:n,installableKind:P.ComponentKind.INTERFACE,sourcePath:m,nativeKey:t})}catch{return}}function g_(...e){for(let t of e)if(t)return t;return null}function W(e,t,n){if(e.status==="fulfilled")return e.value;let r=e.reason instanceof Error?e.reason.message:String(e.reason);return h(`WARN: ${n} failed open: ${r}`),t}function __(e){let t={present:!1,size:0},n={hash:"",count:0};return{config:{runner_platform:e,config_scope:"user",cli_version:null,claude_version:null,model:null,permission_keys:[],user_scope:{skills:n,subagents:n,commands:n,rules:n,memory:t,settings:t,mcp:t},local_settings:t},commit:()=>{}}}function h_(e,t){return{runner_platform:e,config_scope:"user",...t?{operator:t}:{}}}var Oe=new Set,lt=null;async function E_(e){if(Jt())return;let t=e.manifest.installationId,n=e.manifest.installationStorePath;if(Oe.has(t))return;if(!ir(n)){Oe.add(t);return}let r=Ke({sessionId:e.sessionId,hostname:$e()});if(bi(r)){if(lt){await lt;return}lt=(async()=>{if(Oe.has(t)||!ir(n)){Oe.add(t);return}if(!Ko(n)){Oe.add(t);return}let o=!1;try{let s=Date.now(),{gitRoot:i}=e.manifest,a=String(e.runnerPlatform),[c,u,l,p,m]=await Promise.allSettled([Xe(i),_n(),qn(r),hn(),sr({gitRoot:i,installationStorePath:n,forceResend:!1,runnerPlatform:a})]),d=W(c,null,"gitSnapshot"),g=W(u,"","detectVirt"),E=W(l,null,"probeCloud"),S=W(p,{},"hostEnv"),y=W(m,{commit:()=>{}},"resolveOperatorForSend");await rn(e,i,d);let R={identity:{host:$e(),context:r,virt:g||null,cloud:E,git:d},host_env:S,env_vars:Qn(),self_config:h_(a,y.operator),run_meta:{trigger:"cloud_identity_bootstrap"}};o=!!await He("session_start",R,nn(e),Fe,e.manifest.collectorUrl,s,dt(e)),o&&(y.commit(),Oe.add(t))}finally{$o(n)}})().finally(()=>{lt=null}),await lt}}async function rn(e,t,n){try{let r=n===void 0?await Xe(t):n;e.platformAgentId=await xs(e.manifest.manifest,e.platformAgentId,String(e.runnerPlatform),t,r,e.manifest.installationStorePath,e.manifest.repoKey)}catch(r){let o=r instanceof Error?r.message:String(r);h(`WARN: derivePlatformAgentId failed open: ${o}`)}}async function S_(e){let t=Date.now(),{gitRoot:n}=e.manifest,r=Ke({sessionId:e.sessionId,hostname:$e()}),o=String(e.runnerPlatform),s=$r(e),i=dr(e.hookInput,s),a=Xe(n),c=Jt()?Promise.resolve({commit:()=>{}}):sr({gitRoot:n,installationStorePath:e.manifest.installationStorePath,forceResend:!1,runnerPlatform:o}),[u,l,p,m,d,g,E]=await Promise.allSettled([a,_n(),qn(r),hn(),Wn(e.manifest.manifest,n,o),a.catch(()=>null).then(C=>Ta(o,n,void 0,{installationStorePath:e.manifest.installationStorePath,gitRoot:n,launchCwd:i,inGitRepo:e.manifest.inGitRepo,remote:C?.remote??null})),c]),S=W(u,null,"gitSnapshot"),y=W(l,"","detectVirt"),R=W(p,null,"probeCloud"),H=W(m,{},"hostEnv"),x=W(d,[],"mcpDeclared"),k=W(g,__(o),"selfConfig"),F=W(E,{commit:()=>{}},"resolveOperatorForSend"),L=k.config;await rn(e,n,S);let K=_(e.hookInput,"model");K&&(L.model=K);let te={identity:{host:$e(),context:r,virt:y||null,cloud:R,git:S},host_env:H,env_vars:Qn(),mcp:{declared:x},self_config:L,run_meta:{trigger:e.hookSource||"startup"},hook_input:Dt(e.hookInput,e.manifest.manifest,{...s,launchCwd:i})},M={};try{M=await $a(ec())}catch{M={}}await He("session_start",te,{...nn(e),...M},Fe,e.manifest.collectorUrl,t,dt(e))&&(k.commit(),F.commit(),Oe.add(e.manifest.installationId))}async function y_(e){let t=Date.now(),{gitRoot:n}=e.manifest;await rn(e,n);let r=e.runnerEvent.toLowerCase(),o=g_(_(e.hookInput,"status"),_(e.hookInput,"stop_reason"),_(e.hookInput,"reason"),Qe(_(e.hookInput,"error")),r==="stop"?re(e.hookInput,"is_interrupt")===!0?"interrupted":"completed":""),s=e.runnerPlatform==="claude"?await Za(_(e.hookInput,"transcript_path")):null,i=Dt(e.hookInput,e.manifest.manifest,$r(e));s&&(i.model=s),r!=="stopfailure"&&!Li(e.manifest.manifest)&&i.last_assistant_message===void 0&&(i.last_assistant_message=""),await He("session_end",{status:o,...s?{model:s}:{},hook_input:i},nn(e),Fe,e.manifest.collectorUrl,t,dt(e))}function oc(e,t,n,r){let o=r??ss({skillId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home}),s=tn(o,t.gitRoot,t.home,P.ComponentKind.SKILL,P.nativeKeyForSkillPath,e);if(s.sourcePath!==null&&wn(s.sourcePath)?.toLowerCase()===n.toLowerCase())return s.componentReference===void 0?{}:{componentReference:s.componentReference};let i=r??vs({commandId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),a=tn(i,t.gitRoot,t.home,P.ComponentKind.COMMAND,P.nativeKeyForCommandPath,e);return a.nativeKey?.toLowerCase()!==n.toLowerCase()?{}:{commandName:a.nativeKey,...a.componentReference===void 0?{}:{componentReference:a.componentReference}}}function R_(e,t,n){let r=At(e.hookInput.tool_input);return Promise.all(n.map(o=>{let s=oc(e,t,o,r);return Br(e,t,{tool_name:"Skill",skill_name:o,...s.commandName===void 0?{}:{command_name:s.commandName},...s.componentReference===void 0?{}:{component_reference:s.componentReference}})}))}function C_(e,t,n){return Promise.all(n.map(r=>{let o=bs({relativePath:r,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),s=tn(o,t.gitRoot,t.home,P.ComponentKind.RULE,P.nativeKeyForRulePath,e),i=s.nativeKey??Ms(r);return Br(e,t,{tool_name:"Rule",rule_name:i,...s.componentReference===void 0?{}:{component_reference:s.componentReference}})}))}var I_=[{kind:P.ComponentKind.SKILL,nativeKeyFn:P.nativeKeyForSkillPath},{kind:P.ComponentKind.RULE,nativeKeyFn:P.nativeKeyForRulePath},{kind:P.ComponentKind.COMMAND,nativeKeyFn:P.nativeKeyForCommandPath}];function A_(e,t,n){if(n.skillName===null&&n.ruleName===null&&n.commandName===null)return{};let r=Ln(e.hookInput);if(r===null)return n.skillName===null?{}:oc(e,t,n.skillName,null);for(let o of I_){let s=tn(r,t.gitRoot,t.home,o.kind,o.nativeKeyFn,e);if(s.nativeKey!==null)return{...s.componentReference===void 0?{}:{componentReference:s.componentReference},...o.kind===P.ComponentKind.RULE?{ruleName:s.nativeKey}:{},...o.kind===P.ComponentKind.COMMAND?{commandName:s.nativeKey}:{}}}return{}}var O_=/mcp/i;function P_(e,t,n,r){let o=O_.test(e.runnerEvent);if(!r.hasMcpIdentity&&!o)return{};let s=o?la(t,n):zt(r.declaredConfig,n);return s===null?{}:Object.fromEntries(Object.entries(s).filter(i=>typeof i[1]=="string").map(([i,a])=>[`mcp_${i}`,a]))}async function T_(e){let t=await tc(e),n=Ys(e.hookInput,e.runnerEvent),{toolName:r,skillName:o}=n,s=vn(e.hookInput),i=ca(s,t.home),a=Xs(e.hookInput),c=Gs(e.runnerEvent),u=c===!1?Zs(e.hookInput,e.runnerEvent):null,l=await Wn(e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home).catch(()=>[]),p=Qe(_(e.hookInput,"mcp_server_name")),{mcpServer:m,mcpTool:d}=qs(r,l.map(F=>F.name),p??""),g=m_(r,m,e.platformAgentId,e.manifest.installationId,String(e.runnerPlatform),l,p),E=g===void 0?A_(e,t,n):{},S=m===null?null:js(m,e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home),y=P_(e,s,t.home,{hasMcpIdentity:!!m||!!d,declaredConfig:S}),R=g??E.componentReference,H=E.ruleName??n.ruleName,x=E.commandName??n.commandName,k=Js(e.hookInput);await He("tool_invoked",{tool_name:r,skill_name:o,...H?{rule_name:H}:{},...x?{command_name:x}:{},success:c,duration_ms:a,...i?{executable:i}:{},...u?{failure_reason:u}:{},...m?{mcp_server:m}:{},...d?{mcp_tool:d}:{},...y,...R?{component_reference:R}:{},...k?{subagent_type:k}:{},hook_input:t.hookInput},t.envelopeFields,Fe,e.manifest.collectorUrl,t.buildStartedAtMs,dt(e,t.home))}async function sc(e){switch(e.internalEvent){case"session_start":await S_(e);return;case"session_end":await y_(e);return;case"skill_invoked":{let t=d_(e),n=ws(e.hookInput),r=$s(e.runnerEvent);if(t.length===0&&n.length===0&&!r)return;let o=await tc(e);await Promise.all([r&&t.length===0&&n.length===0?p_(e,o):void 0,t.length===0?void 0:R_(e,o,t),n.length===0?void 0:C_(e,o,n)]);return}case"tool_invoked":await T_(e);return;default:return}}function ic(e){return e!=="session_start"&&e!=="session_end"&&e!=="tool_invoked"&&e!=="skill_invoked"&&e!==""}import{existsSync as zr,readFileSync as k_}from"node:fs";import{dirname as x_,isAbsolute as b_,join as N_,relative as M_}from"node:path";function ac(e){for(let t of uo){let n=N_(e,t);if(zr(n))return n}}async function w_(e=process.cwd(),t){let n=t??await pn(e);return ac(n)??ac(e)}async function v_(e,t){let n=t??await pn(x_(e)),r=M_(n,e);if(r.startsWith("..")||b_(r))return!1;let o=await Y("git",["ls-files","--error-unmatch",r],2e3,{cwd:n});return o.ok?!0:o.code===1?!1:(h(`WARN: git ls-files failed for manifest ${e} (code=${String(o.code)}); treating as tracked`),!0)}function Gr(e){let t=k_(e,"utf8");return j(t,{})}function L_(){return{schema_version:St,mcp_servers:[]}}function U_(e,t,n,r){!t||!n||(e.capture_hook_input==="full"&&r.has("capture_hook_input")&&(h(`WARN: ignoring capture_hook_input=full in git-tracked manifest ${t}; use EV_AI_HOOK_CAPTURE_FULL_INPUT=1 or an untracked operator manifest`),delete e.capture_hook_input),e.debug===!0&&r.has("debug")&&(h(`WARN: ignoring debug=true in git-tracked manifest ${t}; set debug on ~/.ev-ai/config.json`),delete e.debug))}async function cc(e=process.cwd(),t={}){let{root:n,inGitRepo:r}=await dn(e),o=I("EV_AI_HOOK_MANIFEST"),s=o&&zr(o)?o:void 0,i=s?void 0:zr(Sn())?Sn():void 0,a=s?void 0:await w_(e,n),c=i?Gr(i):void 0,u=a?Gr(a):void 0,l,p,m,d=new Set;if(s){l=Gr(s),p=s,m=s;for(let R of Object.keys(l))d.add(R)}else if(c&&u){l=lo(u,c),p=i,m=a;for(let R of Object.keys(u))R in c||d.add(R)}else if(c)l=c,p=i;else if(u){l=u,p=a,m=a;for(let R of Object.keys(u))d.add(R)}else l=L_();delete l.installation_id;let g=m?await v_(m,n):!1;U_(l,m,g,d);let{installationId:E,storePath:S,repoKey:y}=await Vo(n,{sessionId:t.sessionId});return{manifestPath:p??S,manifest:l,installationId:E,installationStorePath:S,repoKey:y,collectorUrl:Cn(l),platformAgentId:l.platform_agent_id??"",gitRoot:n,inGitRepo:r}}import{createHash as D_}from"node:crypto";import{mkdirSync as F_,readdirSync as H_,readFileSync as j_,statSync as uc,unlinkSync as K_,writeFileSync as $_}from"node:fs";import{homedir as on}from"node:os";import{join as Vr}from"node:path";var B_="turns",lc=1440*60*1e3,G_=100,z_=new Set(["stop","stopfailure","sessionend"]);function Wr(e=on()){return Vr(oe(e),B_)}function V_(e){return D_("sha256").update(e).digest("hex").slice(0,32)}function dc(e,t){return Vr(e,V_(t))}function W_(e,t=Date.now()){let n;try{n=H_(e)}catch{return}let r=0;for(let o of n){if(r>=G_)return;r+=1;try{let s=Vr(e,o);t-uc(s).mtimeMs>lc&&K_(s)}catch{}}}function Y_(e,t,n=on()){let r=e.trim(),o=t.trim();if(!(!r||!o))try{let s=Wr(n);F_(s,{recursive:!0}),$_(dc(s,r),o,"utf8")}catch{}}function J_(e,t=on()){let n=e.trim();if(!n)return"";try{let r=dc(Wr(t),n);return Date.now()-uc(r).mtimeMs>lc?"":j_(r,"utf8").trim()}catch{return""}}function pc(e,t,n,r=on()){let o=t.trim(),s=z_.has(n.trim().toLowerCase());return s&&W_(Wr(r)),o?(Y_(e,o,r),o):s?J_(e,r):""}async function fc(e,t,n,r){let o=t??await ln(An),s=j(o,{}),i=_(s,"session_id")||_(s,"conversation_id"),a=await cc(process.cwd(),{sessionId:i});if(!a)return;r&&(a.collectorUrl=r);let c=zs(s,a.manifest.platform,n),u=Vs(e,c.runnerEvent);if(!u){h(`WARN: unknown hook event '${c.runnerEvent}'; skipping telemetry`);return}let l={hookInput:s,sessionId:c.sessionId,turnId:pc(c.sessionId,c.turnId,c.runnerEvent),runnerEvent:c.runnerEvent,runnerPlatform:c.runnerPlatform,hookSource:c.hookSource,internalEvent:u,manifest:a,platformAgentId:a.platformAgentId};if(ic(u)){h(`WARN: unsupported internal event '${u}'`);return}await sc(l)}function X_(e,t){if(I("EV_AI_HOOK_SYNC")==="1")return!0;let n=Be(e),r=j(t,{}),o=n.event??(_(r,"hook_event_name")||_(r,"event")),s=qe(r,o,void 0,n.runner);return Nt(o,s)}async function mc(e=process.argv.slice(2)){if(ai(),e[0]===Kr){try{await Ya(un)}catch{}return 0}if(e[0]===en){try{let t=Be(e.slice(1)),n=await un(),r=j(n,{}),o=t.event??(_(r,"hook_event_name")||_(r,"event"));if(mn()||Jn(t.runner,r,o))return 0;await fc(t.event,n,t.runner,Yn(t))}catch(t){let n=t instanceof Error?t.message:String(t);h(`WARN: detached work failed open: ${n}`)}return 0}try{let t=await ln(An),n=Be(e),r=Yn(n),o=j(t,{}),s=n.event??(_(o,"hook_event_name")||_(o,"event"));if(mn()||Jn(n.runner,o,s)||!si(o,s,n.runner))return 0;X_(e,t)?await fc(n.event,t,n.runner,r):await Xa(t,e)}catch(t){let n=t instanceof Error?t.message:String(t);h(`WARN: hook failed open: ${n}`)}finally{eo()}return 0}mc().then(e=>{process.exit(e)}).catch(e=>{let t=e instanceof Error?e.message:String(e);process.stderr.write(`[ev-ai-agent-hook] ${t}
|
|
45
45
|
`),process.exit(1)});
|