@ev-ai/agent-hook 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COLLECTED-DATA.md +1 -1
- package/README.md +1 -1
- package/dist/cli.mjs +38 -29
- package/dist/hook.mjs +33 -24
- package/dist/plugin-hooks.mjs +118 -24
- package/package.json +1 -1
package/dist/cli.mjs
CHANGED
|
@@ -2,33 +2,42 @@
|
|
|
2
2
|
import { createRequire as __createRequire } from 'node:module';
|
|
3
3
|
const require = __createRequire(import.meta.url);
|
|
4
4
|
|
|
5
|
-
var ma=Object.create;var xr=Object.defineProperty;var ga=Object.getOwnPropertyDescriptor;var ha=Object.getOwnPropertyNames;var _a=Object.getPrototypeOf,Sa=Object.prototype.hasOwnProperty;var Zt=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Or=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ya=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ha(t))!Sa.call(e,o)&&o!==n&&xr(e,o,{get:()=>t[o],enumerable:!(r=ga(t,o))||r.enumerable});return e};var qt=(e,t,n)=>(n=e!=null?ma(_a(e)):{},ya(t||!e||!e.__esModule?xr(n,"default",{value:e,enumerable:!0}):n,e));var cs=Or(G=>{"use strict";Object.defineProperty(G,"__esModule",{value:!0});G.MCP_LAUNCH_IDENTITY_ALGORITHM=void 0;G.launchContainsCredentials=Hl;G.serializeMcpLaunchIdentity=as;G.hashMcpLaunchIdentity=Ct;G.projectMcpLaunchIdentity=jl;G.maskMcpLaunchForDisplay=Kl;G.normalizeMcpToolNames=Bl;var Ul=Zt("node:crypto");G.MCP_LAUNCH_IDENTITY_ALGORITHM="mcp-launch-v1";var is=new Set(["access_token","api_key","apikey","auth","authorization","key","password","secret","token"]),Dl=/^(?:--?(?:token|api[-_]?key|password|secret|authorization)(?:=|\s+)|(?:sk-|ghp_|xox[baprs]-|Bearer\s+))/i;function pe(e){return e.toLocaleLowerCase("en-US")}function Pe(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function Hl(e){return e.kind==="url"?Fl(e.url):e.kind==="command"?e.arguments.some(t=>Dl.test(t)):!1}function Fl(e){try{let t=new URL(e);if(t.username.length>0||t.password.length>0)return!0;for(let n of t.searchParams.keys())if(is.has(pe(n)))return!0;return!1}catch{let t=e.split("://",2),n=t.length===2?t[1]:e,r=n.indexOf("@"),o=n.indexOf("/");if(r>0&&(o===-1||r<o))return!0;let s=e.split("?",2)[1];return s===void 0?!1:s.split("&").some(i=>{let a=pe(i.split("=",1)[0]??"");return is.has(a)})}}function as(e){if(e.kind==="url")return[G.MCP_LAUNCH_IDENTITY_ALGORITHM,"url",Pe(pe(e.url))].join("|");if(e.kind==="command"){let t=[...e.arguments].map(n=>pe(n)).sort((n,r)=>n<r?-1:n>r?1:0);return[G.MCP_LAUNCH_IDENTITY_ALGORITHM,"command",Pe(pe(e.command)),String(t.length),...t.map(Pe)].join("|")}return[G.MCP_LAUNCH_IDENTITY_ALGORITHM,"unknown",Pe(e.installationRootExternalKey),Pe(e.sourcePath),Pe(e.nativeKey)].join("|")}function Ct(e){return(0,Ul.createHash)("sha256").update(e).digest("hex")}function jl(e){let t=as(e);return e.kind==="url"?{kind:"url",url:pe(e.url),arguments:[],serialized:t,contentHash:Ct(t)}:e.kind==="command"?{kind:"command",command:pe(e.command),arguments:[...e.arguments].map(n=>pe(n)).sort((n,r)=>n<r?-1:n>r?1:0),serialized:t,contentHash:Ct(t)}:{kind:"unknown",arguments:[],serialized:t,contentHash:Ct(t)}}var $l=/^(https?:\/\/)([^/?#]*@)/i;function Kl(e){return e.replace($l,"$1***@").replace(/([?&](?:access_token|api_key|apikey|auth|authorization|key|password|secret|token)=)([^&]*)/gi,"$1***")}function Bl(e){let t=new Set,n=[];for(let r of e)r.length===0||t.has(r)||(t.add(r),n.push(r));return n.sort((r,o)=>r<o?-1:r>o?1:0),n}});var It=Or(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.serializeMcpLaunchIdentity=A.projectMcpLaunchIdentity=A.normalizeMcpToolNames=A.MCP_LAUNCH_IDENTITY_ALGORITHM=A.maskMcpLaunchForDisplay=A.launchContainsCredentials=A.hashMcpLaunchIdentity=A.ComponentKind=void 0;A.userConfigRootFromPath=Ql;A.installationRootExternalKey=eu;A.normalizeRepositoryRelativePath=ls;A.nativeKeyForSkillPath=tu;A.nativeKeyForRulePath=nu;A.nativeKeyForCommandPath=ru;A.serializeComponentIdentity=ds;A.buildComponentReference=su;A.validateComponentReference=iu;var Gl=Zt("node:crypto"),zl=Zt("node:path"),Jl="cmp1_",Wl=/^cmp1_[A-Za-z0-9_-]{43}$/,Vl=["/skills/","/skills-cursor/"],Yl=/(?:^|\/)\.(?:cursor|claude|codex)\/rules\/(.+)$/i,Xl=/(?:^|\/)\.(?:cursor|claude|codex)\/(?:commands|prompts)\/(.+)$/i,Zl=[".cursor",".claude",".codex"],ql={".claude.json":".claude",".agents":".codex"};A.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE",RULE:"RULE",COMMAND:"COMMAND"};function Ql(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>Zl.includes(o));return n||(t.map(o=>ql[o]).find(o=>o!==void 0)??"unknown")}function eu(e,t){return`runtime-install:${e}/${t}`}function kt(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function ls(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=zl.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return kt(n,"sourcePath")}function tu(e){let t=e.replaceAll("\\","/");for(let n of Vl){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function us(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 nu(e){return us(e,Yl,/\.(mdc|md|rules)$/i)}function ru(e){return us(e,Xl,/\.(md|mdc|toml)$/i)}function ou(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function ds(e){let t=[kt(e.installationRootExternalKey,"installationRootExternalKey"),kt(e.installableKind,"installableKind"),ls(e.sourcePath),kt(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(ou).join("|")}`,"utf8")}function su(e){let t=(0,Gl.createHash)("sha256").update(ds(e)).digest("base64url");return`${Jl}${t}`}function iu(e){return Wl.test(e)}var Ee=cs();Object.defineProperty(A,"hashMcpLaunchIdentity",{enumerable:!0,get:function(){return Ee.hashMcpLaunchIdentity}});Object.defineProperty(A,"launchContainsCredentials",{enumerable:!0,get:function(){return Ee.launchContainsCredentials}});Object.defineProperty(A,"maskMcpLaunchForDisplay",{enumerable:!0,get:function(){return Ee.maskMcpLaunchForDisplay}});Object.defineProperty(A,"MCP_LAUNCH_IDENTITY_ALGORITHM",{enumerable:!0,get:function(){return Ee.MCP_LAUNCH_IDENTITY_ALGORITHM}});Object.defineProperty(A,"normalizeMcpToolNames",{enumerable:!0,get:function(){return Ee.normalizeMcpToolNames}});Object.defineProperty(A,"projectMcpLaunchIdentity",{enumerable:!0,get:function(){return Ee.projectMcpLaunchIdentity}});Object.defineProperty(A,"serializeMcpLaunchIdentity",{enumerable:!0,get:function(){return Ee.serializeMcpLaunchIdentity}})});import{realpathSync as mm}from"node:fs";import{resolve as gm}from"node:path";import{fileURLToPath as hm,pathToFileURL as _m}from"node:url";var Ea="https://hooks.ev-ai.ai";function at(e,t=Ea){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}var ct=".claude/ev-ai-runtime-report.json",vr="node_modules/@ev-ai/agent-hook/dist/hook.mjs",re="ev-ai-agent-hook",Pr="https://cdn.ev-ai.ai/agent-hook",Qt=`current/${re}`,en=`.ev-ai/agent-hook/${re}`,br=5e3,wr=5e3,tn=3e3;var nn=3e3,Tr=1500,Mr=4*1024,Nr=32*1024,Ra=4*1024,Lr=32*1024,q="1.1.2",lt=`@ev-ai/agent-hook@${q}`,Ur="ev-ai runtime report",Dr=["claude","cursor","codex"];import{chmodSync as xo,cpSync as Oo,existsSync as ie,mkdirSync as In,readFileSync as Ac,rmSync as _t,symlinkSync as xc,writeFileSync as Oc}from"node:fs";import{homedir as ee}from"node:os";import{basename as vc,dirname as An,isAbsolute as Pc,join as v,relative as vo,resolve as Io,sep as bc}from"node:path";import{fileURLToPath as wc}from"node:url";var Ca=new Set(["localhost","127.0.0.1","[::1]","::1"]),Hr=/^[A-Za-z0-9._~-]+$/;function Fr(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 ut(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?Ca.has(t.hostname):!1}catch{return!1}}function De(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!ut(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=ka(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!Hr.test(n))return`org token must match ${Hr.source} (got: ${n})`;if(Fr(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(Fr(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function He(e){return new URL(e).toString()}function ka(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.length>0?r:void 0}return}catch{return}}function rn(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 jr(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token?.trim();return t?at(t):""}import{existsSync as Ia,readdirSync as $r}from"node:fs";import{homedir as dt}from"node:os";import{join as j}from"node:path";function Kr(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/ClaudeCode";case"win32":return j(process.env.ProgramFiles??"C:\\Program Files","ClaudeCode");default:return"/etc/claude-code"}}function on(e=process.platform){let t=Kr(e),n=[j(t,"managed-settings.json")],r=j(t,"managed-settings.d");try{if(!Ia(r))return n;let o=$r(r).filter(s=>s.endsWith(".json")&&!s.startsWith(".")).sort().map(s=>j(r,s));n.push(...o)}catch{}return n}function sn(e=process.platform,t=dt()){return{serverManaged:j(t,".claude","remote-settings.json"),fileBased:on(e)}}function Aa(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/Cursor";case"win32":return j(process.env.ProgramData??"C:\\ProgramData","Cursor");default:return"/etc/cursor"}}function xa(e=process.platform,t=dt()){let n=[j(Aa(e),"hooks.json")],r=j(t,".cursor","managed");try{for(let o of $r(r,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||n.push(j(r,o.name,"hooks.json"))}catch{}return n}function Oa(e=process.platform,t=dt()){let n=e==="win32"?j(process.env.ProgramData??"C:\\ProgramData","OpenAI","Codex"):"/etc/codex",r=[j(n,"requirements.toml")];return e!=="win32"&&r.push(j(n,"managed_config.toml")),r.push(j(t,".codex","managed_config.toml"),j(n,"config.toml")),r}function pt(e,t=process.platform,n=dt()){switch(e){case"claude":{let{serverManaged:r,fileBased:o}=sn(t,n);return[r,...o]}case"cursor":return xa(t,n);default:return Oa(t,n)}}import{createHash as ro,randomBytes as Xa}from"node:crypto";import{existsSync as oo,mkdirSync as hn,readFileSync as so,unlinkSync as io,writeFileSync as ao}from"node:fs";import{homedir as _n}from"node:os";import{dirname as mt,join as Sn,resolve as Za}from"node:path";var va=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),Pa=new Set(["github-actions","github actions","dependabot","renovate","cursoragent","cursor agent"]);function B(e,t){let n=(e??"").trim().toLowerCase(),r=(t??"").trim().toLowerCase();if(!n&&!r)return!1;if(n.includes("[bot]")||Pa.has(n)||r.includes("[bot]")||va.has(r))return!0;if(r.endsWith("@users.noreply.github.com")){let o=r.slice(0,r.indexOf("@")),s=o.includes("+")?o.slice(o.indexOf("+")+1):o;if(s.endsWith("bot")||s.includes("[bot]"))return!0}return!1}import{existsSync as Da,readFileSync as Ha}from"node:fs";import{hostname as Xr,userInfo as Fa}from"node:os";import{randomBytes as ba}from"node:crypto";import{existsSync as cn,mkdirSync as wa,readdirSync as Ta,readFileSync as Ma,renameSync as Br,statSync as Jr,unlinkSync as Gr,writeFileSync as Na}from"node:fs";import{basename as La,dirname as zr,join as Wr,relative as Ua}from"node:path";function d(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
|
|
6
|
-
`)}function oe(e,t){wa(zr(e),{recursive:!0});let n=Wr(zr(e),`.${La(e)}.${process.pid}.${ba(4).toString("hex")}.tmp`);try{Na(n,t,"utf8");try{Br(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){Gr(e),Br(n,e);return}throw r}}catch(r){try{Gr(n)}catch{}throw r}}function ft(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function Vr(){process.stdout.write('{"continue":true}')}function R(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function Fe(){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 W(e,t,n=3e3,r={}){let{execFile:o}=await import("node:child_process"),{promisify:s}=await import("node:util"),i=s(o);try{let{stdout:a}=await i(e,t,{timeout:n,windowsHide:!0,maxBuffer:1048576,cwd:r.cwd});return{ok:!0,stdout:a.trim()}}catch(a){let c=a,l=typeof c.code=="number"?c.code:typeof c.status=="number"?c.status:void 0;return{ok:!1,code:l,spawnFailed:l===void 0}}}async function b(e,t,n=3e3,r={}){let o=await W(e,t,n,r);return o.ok?o.stdout:""}async function un(e=process.cwd()){let t=await W("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(R("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;d(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=R("CURSOR_PROJECT_DIR")??R("CLAUDE_PROJECT_DIR");if(n&&cn(n)){let r=await W("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 Q(e=process.cwd()){return(await un(e)).root}function F(e,t){try{return JSON.parse(e)}catch{return t}}var an=new Map;function H(e,t){let n=an.get(e);if(n!==void 0)return n;try{let r=F(Ma(e,"utf8"),t);return an.set(e,r),r}catch{return an.set(e,t),t}}function ge(e){return typeof e=="string"?e:""}function he(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 g(e,t){let n=he(e,t);return typeof n=="string"?n:""}var se=500;function Yr(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=Ta(s,{withFileTypes:!0})}catch{return}for(let c of a){if(r)return;let l=Wr(s,c.name);if(c.isDirectory()){o(l,i+1);continue}if(c.isFile()){try{n.push({name:Ua(e,l),size:Jr(l).size})}catch{continue}if(n.length>=se){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function dn(e){return cn(e)?{present:!0,size:Jr(e).size}:{present:!1,size:0}}function Ae(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function pn(e=process.env){return Ae(P("CURSOR_SANDBOX",e))}var ja=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function $a(e){return ja.some(t=>!!P(t,e))}function Ka(e){if(P("KUBERNETES_SERVICE_HOST",e)||Ae(P("REMOTE_CONTAINERS",e))||Ae(P("DEVCONTAINER",e)))return!0;try{if(Da("/.dockerenv")||Ha("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function Zr(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!P(t,e))}function Ba(e,t=process.platform){return Zr(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!P(n,e)):!1}function Ga(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function za(e){return e==="linux"}function P(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return R(e)}function Ja(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!Wa(P("CURSOR_VERSION",n))}function Wa(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function fn(e){if(Ga(e.sessionId))return!0;let t=e.hostname??Xr(),n=e.osUser??qr(e.env);return Ja(t,n,e.env)}function Va(e){return Ae(P("CURSOR_AGENT",e.env))?!0:fn(e)}function Ya(e){return!!(process.stdin.isTTY||process.stdout.isTTY||(P("TERM",e)??P("TERM_PROGRAM",e))||(P("SSH_TTY",e)??P("SSH_CONNECTION",e))||(P("__CFBundleIdentifier",e)??P("XPC_SERVICE_NAME",e))||Zr(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!P(t,e))||P("SESSIONNAME",e))}function je(e={}){let t=e.env;if(P("GITHUB_ACTIONS",t))return"github_actions";if(Ae(P("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!Ba(t,n)&&Va(e)&&(Ae(P("CURSOR_AGENT",t))||za(n)))return"cursor_cloud";if(P("CODESPACES",t)||P("CODESPACE_NAME",t))return"codespaces";if(P("GITLAB_CI",t))return"gitlab_ci";if($a(t))return"managed";let r=P("CI",t);return r&&r!=="false"&&r!=="0"?"managed":Ka(t)?"container":Ya(t)?"interactive":"unknown"}async function mn(){return await b("systemd-detect-virt",[],1e3)}function qr(e=process.env,t=Fa){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 gn(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await b("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 b("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await b("uname",["-r"],1e3))}else t=await b("ver",[],1e3);let n=qr(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await b("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 Xr()}var qa="installation.json",Qa="cloud-bootstrap.lock",ec=6e4;function co(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function Ke(e=_n()){return Sn(e,".ev-ai","agent-hook")}function tc(e=_n()){return Sn(Ke(e),qa)}function lo(e){return Sn(mt(e),Qa)}function uo(){return Xa(8).toString("hex")}function xe(e){return ro("sha256").update(e).digest("hex").slice(0,16)}function C(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function po(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function nc(e=process.env){let t=C(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!po(t)){d(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function fo(e,t){return e&&po(e)?e:(e&&d(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),nc(t))}function rc(e){return/^[0-9a-f]{16}$/.test(e)}function oc(e=process.env){if(C(e.GITHUB_ACTIONS)){let t=C(e.GITHUB_REPOSITORY_ID)??C(e.GITHUB_REPOSITORY),n=C(e.GITHUB_ACTOR)??C(e.GITHUB_TRIGGERING_ACTOR)??C(e.GITHUB_USER);if(t&&n)return xe(`github_actions|${t}|${n}`)}if(C(e.CODESPACES)||C(e.CODESPACE_NAME)){let t=C(e.CODESPACE_NAME);if(t)return xe(`codespaces|${t}`);let n=C(e.GITHUB_REPOSITORY_ID)??C(e.GITHUB_REPOSITORY),r=C(e.GITHUB_USER)??C(e.GITHUB_ACTOR);if(n&&r)return xe(`codespaces|${n}|${r}`)}if(C(e.GITLAB_CI)){let t=C(e.CI_PROJECT_ID)??C(e.CI_PROJECT_PATH),n=C(e.GITLAB_USER_LOGIN)??C(e.GITLAB_USER_EMAIL)??C(e.GITLAB_USER_NAME);if(t&&n)return xe(`gitlab|${t}|${n}`)}return null}var sc="cursoragent@cursor.com";function ic(e){let t=C(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===sc?null:t}function ac(e,t){return C(e.CURSOR_PROJECT_DIR)??C(e.CLAUDE_PROJECT_DIR)??t}function cc(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function lc(e){let t=await b("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?cc(t):e}async function uc(e){let t=C(await b("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!B(null,t))return t;let n=C(await b("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!B(null,n)?n:null}function dc(e,t){let n=ac(e,t);return n?xe(`cursor_cloud|${n}|${ic(e)??""}`):null}async function pc(e,t){let n=C(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await lc(n),o=await uc(n);return xe(`claude_remote|${r}|${o??""}`)}function Qr(e,t){let n=fo(e,t);if(n)return n;let r=oc(t);return r||uo()}async function fc(e){let n=await b("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Za(e);return ro("sha256").update(n).digest("hex").slice(0,16)}function mc(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 gc(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=mc(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 _e(e){if(oo(e))try{return gc(so(e,"utf8"))}catch{}}function yn(e){return _e(e)}function mo(e,t,n){let r=_e(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{oe(e,`${JSON.stringify(o,null,2)}
|
|
7
|
-
`)}catch(s){let i=s instanceof Error?s.message:String(s);d(`WARN: operator identity cache write failed open: ${i}`)}}function
|
|
8
|
-
`,{encoding:"utf8",flag:"wx"}),!0}catch(r){if(
|
|
9
|
-
`)}catch(s){let i=s instanceof Error?s.message:String(s);d(`WARN: platform_agent_id cache write failed open: ${i}`)}}function
|
|
10
|
-
`,{encoding:"utf8",flag:"wx"})}function
|
|
11
|
-
`)}function
|
|
12
|
-
To install a released binary instead: curl -fsSL https://cdn.ev-ai.ai/agent-hook/install.sh | sh`);let r=
|
|
13
|
-
curl -fsSL ${
|
|
5
|
+
var Ya=Object.create;var zr=Object.defineProperty;var qa=Object.getOwnPropertyDescriptor;var Xa=Object.getOwnPropertyNames;var Za=Object.getPrototypeOf,Qa=Object.prototype.hasOwnProperty;var un=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var ht=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ec=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Xa(t))!Qa.call(e,o)&&o!==n&&zr(e,o,{get:()=>t[o],enumerable:!(r=qa(t,o))||r.enumerable});return e};var Be=(e,t,n)=>(n=e!=null?Ya(Za(e)):{},ec(t||!e||!e.__esModule?zr(n,"default",{value:e,enumerable:!0}):n,e));var zn=ht(T=>{"use strict";Object.defineProperty(T,"__esModule",{value:!0});T.MCP_MISSING_LAUNCH_SERIALIZED=T.MCP_LAUNCH_IDENTITY_ALGORITHM=void 0;T.foldMcpName=xs;T.buildMcpFamilyCanonicalKey=ku;T.launchContainsCredentials=xu;T.serializeMcpLaunchIdentity=Os;T.hashMcpLaunchIdentity=Ze;T.projectMcpMissingLaunchIdentity=vu;T.projectMcpLaunchIdentity=bu;T.maskMcpLaunchForDisplay=Tu;T.normalizeMcpToolNames=Mu;var Iu=un("node:crypto");T.MCP_LAUNCH_IDENTITY_ALGORITHM="mcp-launch-v1";T.MCP_MISSING_LAUNCH_SERIALIZED=`${T.MCP_LAUNCH_IDENTITY_ALGORITHM}|missing`;function ie(e){return e.toLocaleLowerCase("en-US")}function xs(e){return ie(e)}function ku(e){return`interface:${xs(e)}`}var As=new Set(["access_token","api_key","apikey","auth","authorization","key","password","secret","token"]),Au=/^(?:--?(?:token|api[-_]?key|password|secret|authorization)(?:=|\s+)|(?:sk-|ghp_|xox[baprs]-|Bearer\s+))/i;function Ne(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function xu(e){return e.kind==="url"?Ou(e.url):e.kind==="command"?e.arguments.some(t=>Au.test(t)):!1}function Ou(e){try{let t=new URL(e);if(t.username.length>0||t.password.length>0)return!0;for(let n of t.searchParams.keys())if(As.has(ie(n)))return!0;return!1}catch{let t=e.split("://",2),n=t.length===2?t[1]:e,r=n.indexOf("@"),o=n.indexOf("/");if(r>0&&(o===-1||r<o))return!0;let s=e.split("?",2)[1];return s===void 0?!1:s.split("&").some(i=>{let a=ie(i.split("=",1)[0]??"");return As.has(a)})}}function Os(e){if(e.kind==="url")return[T.MCP_LAUNCH_IDENTITY_ALGORITHM,"url",Ne(ie(e.url))].join("|");if(e.kind==="command"){let t=[...e.arguments].map(n=>ie(n)).sort((n,r)=>n<r?-1:n>r?1:0);return[T.MCP_LAUNCH_IDENTITY_ALGORITHM,"command",Ne(ie(e.command)),String(t.length),...t.map(Ne)].join("|")}return[T.MCP_LAUNCH_IDENTITY_ALGORITHM,"unknown",Ne(e.installationRootExternalKey),Ne(e.sourcePath),Ne(e.nativeKey)].join("|")}function Ze(e){return(0,Iu.createHash)("sha256").update(e).digest("hex")}var Pu=Ze(T.MCP_MISSING_LAUNCH_SERIALIZED);function vu(){return{kind:"unknown",arguments:[],serialized:T.MCP_MISSING_LAUNCH_SERIALIZED,contentHash:Pu}}function bu(e){let t=Os(e);return e.kind==="url"?{kind:"url",url:ie(e.url),arguments:[],serialized:t,contentHash:Ze(t)}:e.kind==="command"?{kind:"command",command:ie(e.command),arguments:[...e.arguments].map(n=>ie(n)).sort((n,r)=>n<r?-1:n>r?1:0),serialized:t,contentHash:Ze(t)}:{kind:"unknown",arguments:[],serialized:t,contentHash:Ze(t)}}var wu=/^(https?:\/\/)([^/?#]*@)/i;function Tu(e){return e.replace(wu,"$1***@").replace(/([?&](?:access_token|api_key|apikey|auth|authorization|key|password|secret|token)=)([^&]*)/gi,"$1***")}function Mu(e){let t=new Set,n=[];for(let r of e)r.length===0||t.has(r)||(t.add(r),n.push(r));return n.sort((r,o)=>r<o?-1:r>o?1:0),n}});var Jn=ht(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.PACKAGE_FIELD_MAX=void 0;he.npxExecBin=Ps;he.packageNameFromSpec=Wn;he.npxPackageSpecs=$u;he.PACKAGE_FIELD_MAX=128;var Nu=/^(?:@[A-Za-z0-9~-][A-Za-z0-9._~-]*\/)?[A-Za-z0-9~-][A-Za-z0-9._~-]*$/,Lu=new Set(["-p","--package"]),Uu=new Set(["-c","--call"]),Du=new Set(["--registry","--userconfig","--globalconfig","--prefix","--cache","--node-options","--workspace","-w","--loglevel"]),Hu=new Set(["-y","--yes","-n","--no","-q","-s","--quiet","--silent","--offline","--prefer-offline","--prefer-online","--ignore-existing","--ignore-scripts","--legacy-peer-deps","--foreground-scripts"]),Fu=/^--no-/;function ju(e){return Hu.has(e)||Fu.test(e)}function Ps(e){let n=(e.replace(/\\/g,"/").split("/").pop()??"").replace(/\.(cmd|exe|bat|ps1)$/i,"").toLowerCase();return n==="npx"?"npx":n==="npm"?"npm":null}function Wn(e){if(e.length===0||e.length>he.PACKAGE_FIELD_MAX)return null;let t=e.lastIndexOf("@"),n=t>0?e.slice(0,t):e;return Nu.test(n)?n:null}function $u(e,t){let n=Ps(e);if(n===null)return[];let r=[...t];if(n==="npm"){let i=r[0]?.toLowerCase();if(i!=="exec"&&i!=="x")return[];r=r.slice(1)}let o=[],s=null;for(let i=0;i<r.length;i+=1){let a=r[i]??"";if(a==="--"){s=r[i+1]??null;break}if(!a.startsWith("-")){s=a;break}let c=a.indexOf("="),u=c===-1?a:a.slice(0,c);if(Uu.has(u))return[];if(Lu.has(u)){let l=c===-1?r[i+1]:a.slice(c+1);l!==void 0&&l.length>0&&o.push(l),c===-1&&(i+=1);continue}if(!(c!==-1||ju(u))){if(Du.has(u)){i+=1;continue}return[]}}return o.length>0?o.every(i=>Wn(i)!==null)?o:[]:s===null||Wn(s)===null?[]:[s]}});var Ns=ht(Ae=>{"use strict";Object.defineProperty(Ae,"__esModule",{value:!0});Ae.EMPTY_NPM_PUBLISHER=void 0;Ae.isNpmRegistryPublisher=Bu;Ae.classifyMcpProvenance=Zu;var ws=zn(),Vn=Jn();Ae.EMPTY_NPM_PUBLISHER="npm:";var vs="npm:",Ku=/^[A-Za-z0-9._-]+$/;function Bu(e){return e.startsWith(vs)&&e!==Ae.EMPTY_NPM_PUBLISHER&&Ku.test(e.slice(vs.length))}function bs(e){let t=e.split(".").map(Number);return t.length!==4||t.some(n=>!Number.isInteger(n)||n<0||n>255)?!1:t[0]===0||t[0]===10||t[0]===127||t[0]===169&&t[1]===254||t[0]===172&&(t[1]??0)>=16&&(t[1]??0)<=31||t[0]===192&&t[1]===168}function Gu(e){let t=/^::ffff:(\d{1,3}(?:\.\d{1,3}){3})$/i.exec(e);if(t?.[1])return t[1];let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i.exec(e);if(!n)return;let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8&255}.${r&255}.${o>>8&255}.${o&255}`}function Yn(e){return e.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.$/,"")}function zu(e){let t=Yn(e),n=Gu(t);return t==="localhost"||t.endsWith(".localhost")||t==="::1"||t.endsWith(".local")||!t.includes(".")&&!t.includes(":")||bs(t)||n!==void 0&&bs(n)||/^(?:fc|fd)[0-9a-f]{2}:/i.test(t)||/^fe[89ab][0-9a-f]:/i.test(t)}function Wu(e){let t=Yn(e);return t.includes(":")||/^[0-9.]+$/.test(t)||t.split(".").filter(Boolean).length<2?null:t}function Ju(e){let t=Yn(e.hostname),n=t.includes(":")?`[${t}]`:t,r=e.port?`:${e.port}`:"";return`${e.protocol}//${n}${r}`}function Ts(e){let t={kind:"url",url:e};if((0,ws.launchContainsCredentials)(t))return{origin:"UNKNOWN"};try{let n=new URL(e);if(!["http:","https:"].includes(n.protocol)||zu(n.hostname))return{origin:"UNKNOWN"};let r=Wu(n.hostname);return{origin:"THIRD_PARTY",...r===null?{}:{publisherName:r},packageSourceUrl:Ju(n)}}catch{return{origin:"UNKNOWN"}}}var Ms="mcp-remote";function Vu(e,t){if(e===Ms)return t.find(n=>/^https?:\/\//i.test(n))}function Yu(e,t){return{origin:"THIRD_PARTY",...t?{publisherName:t}:{},packageName:e,packageKey:e}}function qu(e,t,n){let r=Vu(e,t);return r!==void 0?Ts(r):e===Ms?{origin:"UNKNOWN"}:Yu(e,n)}function Xu(e){let t=e.replaceAll("\\","/");return t.startsWith("~/")||t.startsWith("/")||/^[A-Za-z]:\//.test(t)?!1:t.startsWith("./")||t.startsWith("../")||t==="scripts"||t.startsWith("scripts/")}function Zu(e){let t=e.launch;if(t===void 0||t.kind==="unknown")return{origin:"UNKNOWN"};if((0,ws.launchContainsCredentials)(t))return{origin:"UNKNOWN"};if(t.kind==="url")return Ts(t.url);let r=(0,Vn.npxPackageSpecs)(t.command,t.arguments)[0];if(r!==void 0){let o=(0,Vn.packageNameFromSpec)(r);if(o===null)return{origin:"UNKNOWN"};let s=qu(o,t.arguments,e.publisherName),i=typeof e.packageName=="string"?(0,Vn.packageNameFromSpec)(e.packageName):null;return i!==null&&i===o&&s.packageName!==void 0?{...s,packageName:i,packageKey:i}:s}return Xu(t.command)?{origin:"INTERNAL"}:{origin:"UNKNOWN"}}});var Le=ht(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.isNpmRegistryPublisher=h.EMPTY_NPM_PUBLISHER=h.classifyMcpProvenance=h.packageNameFromSpec=h.npxPackageSpecs=h.npxExecBin=h.PACKAGE_FIELD_MAX=h.serializeMcpLaunchIdentity=h.projectMcpMissingLaunchIdentity=h.projectMcpLaunchIdentity=h.normalizeMcpToolNames=h.MCP_MISSING_LAUNCH_SERIALIZED=h.MCP_LAUNCH_IDENTITY_ALGORITHM=h.maskMcpLaunchForDisplay=h.launchContainsCredentials=h.hashMcpLaunchIdentity=h.foldMcpName=h.buildMcpFamilyCanonicalKey=h.ComponentKind=void 0;h.userConfigRootFromPath=cd;h.installationRootExternalKey=ld;h.normalizeRepositoryRelativePath=Ls;h.nativeKeyForSkillPath=ud;h.nativeKeyForRulePath=dd;h.nativeKeyForCommandPath=pd;h.serializeComponentIdentity=Ds;h.buildComponentReference=md;h.validateComponentReference=gd;var Qu=un("node:crypto"),ed=un("node:path"),td="cmp1_",nd=/^cmp1_[A-Za-z0-9_-]{43}$/,rd=["/skills/","/skills-cursor/"],od=/(?:^|\/)\.(?:cursor|claude|codex)\/rules\/(.+)$/i,sd=/(?:^|\/)\.(?:cursor|claude|codex)\/(?:commands|prompts)\/(.+)$/i,id=[".cursor",".claude",".codex"],ad={".claude.json":".claude",".agents":".codex"};h.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE",RULE:"RULE",COMMAND:"COMMAND"};function cd(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>id.includes(o));return n||(t.map(o=>ad[o]).find(o=>o!==void 0)??"unknown")}function ld(e,t){return`runtime-install:${e}/${t}`}function Tt(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function Ls(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=ed.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return Tt(n,"sourcePath")}function ud(e){let t=e.replaceAll("\\","/");for(let n of rd){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function Us(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 dd(e){return Us(e,od,/\.(mdc|md|rules)$/i)}function pd(e){return Us(e,sd,/\.(md|mdc|toml)$/i)}function fd(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function Ds(e){let t=[Tt(e.installationRootExternalKey,"installationRootExternalKey"),Tt(e.installableKind,"installableKind"),Ls(e.sourcePath),Tt(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(fd).join("|")}`,"utf8")}function md(e){let t=(0,Qu.createHash)("sha256").update(Ds(e)).digest("base64url");return`${td}${t}`}function gd(e){return nd.test(e)}var Y=zn();Object.defineProperty(h,"buildMcpFamilyCanonicalKey",{enumerable:!0,get:function(){return Y.buildMcpFamilyCanonicalKey}});Object.defineProperty(h,"foldMcpName",{enumerable:!0,get:function(){return Y.foldMcpName}});Object.defineProperty(h,"hashMcpLaunchIdentity",{enumerable:!0,get:function(){return Y.hashMcpLaunchIdentity}});Object.defineProperty(h,"launchContainsCredentials",{enumerable:!0,get:function(){return Y.launchContainsCredentials}});Object.defineProperty(h,"maskMcpLaunchForDisplay",{enumerable:!0,get:function(){return Y.maskMcpLaunchForDisplay}});Object.defineProperty(h,"MCP_LAUNCH_IDENTITY_ALGORITHM",{enumerable:!0,get:function(){return Y.MCP_LAUNCH_IDENTITY_ALGORITHM}});Object.defineProperty(h,"MCP_MISSING_LAUNCH_SERIALIZED",{enumerable:!0,get:function(){return Y.MCP_MISSING_LAUNCH_SERIALIZED}});Object.defineProperty(h,"normalizeMcpToolNames",{enumerable:!0,get:function(){return Y.normalizeMcpToolNames}});Object.defineProperty(h,"projectMcpLaunchIdentity",{enumerable:!0,get:function(){return Y.projectMcpLaunchIdentity}});Object.defineProperty(h,"projectMcpMissingLaunchIdentity",{enumerable:!0,get:function(){return Y.projectMcpMissingLaunchIdentity}});Object.defineProperty(h,"serializeMcpLaunchIdentity",{enumerable:!0,get:function(){return Y.serializeMcpLaunchIdentity}});var Mt=Jn();Object.defineProperty(h,"PACKAGE_FIELD_MAX",{enumerable:!0,get:function(){return Mt.PACKAGE_FIELD_MAX}});Object.defineProperty(h,"npxExecBin",{enumerable:!0,get:function(){return Mt.npxExecBin}});Object.defineProperty(h,"npxPackageSpecs",{enumerable:!0,get:function(){return Mt.npxPackageSpecs}});Object.defineProperty(h,"packageNameFromSpec",{enumerable:!0,get:function(){return Mt.packageNameFromSpec}});var qn=Ns();Object.defineProperty(h,"classifyMcpProvenance",{enumerable:!0,get:function(){return qn.classifyMcpProvenance}});Object.defineProperty(h,"EMPTY_NPM_PUBLISHER",{enumerable:!0,get:function(){return qn.EMPTY_NPM_PUBLISHER}});Object.defineProperty(h,"isNpmRegistryPublisher",{enumerable:!0,get:function(){return qn.isNpmRegistryPublisher}})});import{realpathSync as bg}from"node:fs";import{resolve as wg}from"node:path";import{fileURLToPath as Tg,pathToFileURL as Mg}from"node:url";var tc="https://hooks.ev-ai.ai";function _t(e,t=tc){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}var St=".claude/ev-ai-runtime-report.json",Wr="node_modules/@ev-ai/agent-hook/dist/hook.mjs",q="ev-ai-agent-hook";function nc(e){let t=e.split(/[/\\]/).pop();return t&&t.length>0?t:e}function yt(e){let t=nc(e);return t===q||t===`${q}.exe`}var Jr="https://cdn.ev-ai.ai/agent-hook";var dn=`current/${q}`,pn=`.ev-ai/agent-hook/${q}`,Vr=5e3,Yr=5e3,fn=3e3;var mn=3e3,qr=1500,Xr=4*1024,Zr=32*1024,rc=4*1024,Qr=32*1024,Ge=840*60*1e3,ne="1.1.4",Et=`@ev-ai/agent-hook@${ne}`,eo="ev-ai runtime report",to=["claude","cursor","codex"];import{chmodSync as zo,cpSync as Wo,existsSync as ue,mkdirSync as Un,readFileSync as pl,rmSync as Ot,symlinkSync as fl,writeFileSync as ml}from"node:fs";import{homedir as oe}from"node:os";import{dirname as Dn,isAbsolute as gl,join as P,relative as Jo,resolve as Bo,sep as hl}from"node:path";import{fileURLToPath as _l}from"node:url";var oc=new Set(["localhost","127.0.0.1","[::1]","::1"]),no=/^[A-Za-z0-9._~-]+$/;function ro(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 Rt(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?oc.has(t.hostname):!1}catch{return!1}}function ze(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!Rt(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=sc(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!no.test(n))return`org token must match ${no.source} (got: ${n})`;if(ro(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(ro(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function We(e){return new URL(e).toString()}function sc(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.length>0?r:void 0}return}catch{return}}function gn(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 oo(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token?.trim();return t?_t(t):""}import{existsSync as ic,readdirSync as so}from"node:fs";import{homedir as Ct}from"node:os";import{join as K}from"node:path";function io(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/ClaudeCode";case"win32":return K(process.env.ProgramFiles??"C:\\Program Files","ClaudeCode");default:return"/etc/claude-code"}}function hn(e=process.platform){let t=io(e),n=[K(t,"managed-settings.json")],r=K(t,"managed-settings.d");try{if(!ic(r))return n;let o=so(r).filter(s=>s.endsWith(".json")&&!s.startsWith(".")).sort().map(s=>K(r,s));n.push(...o)}catch{}return n}function _n(e=process.platform,t=Ct()){return{serverManaged:K(t,".claude","remote-settings.json"),fileBased:hn(e)}}function ac(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/Cursor";case"win32":return K(process.env.ProgramData??"C:\\ProgramData","Cursor");default:return"/etc/cursor"}}function cc(e=process.platform,t=Ct()){let n=[K(ac(e),"hooks.json")],r=K(t,".cursor","managed");try{for(let o of so(r,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||n.push(K(r,o.name,"hooks.json"))}catch{}return n}function lc(e=process.platform,t=Ct()){let n=e==="win32"?K(process.env.ProgramData??"C:\\ProgramData","OpenAI","Codex"):"/etc/codex",r=[K(n,"requirements.toml")];return e!=="win32"&&r.push(K(n,"managed_config.toml")),r.push(K(t,".codex","managed_config.toml"),K(n,"config.toml")),r}function It(e,t=process.platform,n=Ct()){switch(e){case"claude":{let{serverManaged:r,fileBased:o}=_n(t,n);return[r,...o]}case"cursor":return cc(t,n);default:return lc(t,n)}}import{createHash as Co,randomBytes as Tc}from"node:crypto";import{existsSync as Io,mkdirSync as On,readFileSync as ko,unlinkSync as Ao,writeFileSync as xo}from"node:fs";import{homedir as Pn}from"node:os";import{dirname as At,join as vn,resolve as Mc}from"node:path";var uc=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),dc=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]")||dc.has(n)||r.includes("[bot]")||uc.has(r))return!0;if(r.endsWith("@users.noreply.github.com")){let o=r.slice(0,r.indexOf("@")),s=o.includes("+")?o.slice(o.indexOf("+")+1):o;if(s.endsWith("bot")||s.includes("[bot]"))return!0}return!1}import{existsSync as yc,readFileSync as Ec}from"node:fs";import{hostname as go,userInfo as Rc}from"node:os";import{randomBytes as pc}from"node:crypto";import{existsSync as yn,mkdirSync as fc,readdirSync as mc,readFileSync as gc,renameSync as ao,statSync as uo,unlinkSync as co,writeFileSync as hc}from"node:fs";import{basename as _c,dirname as lo,join as po,relative as Sc}from"node:path";function d(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
|
|
6
|
+
`)}function X(e,t){fc(lo(e),{recursive:!0});let n=po(lo(e),`.${_c(e)}.${process.pid}.${pc(4).toString("hex")}.tmp`);try{hc(n,t,"utf8");try{ao(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){co(e),ao(n,e);return}throw r}}catch(r){try{co(n)}catch{}throw r}}function kt(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function fo(){process.stdout.write('{"continue":true}')}function C(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function Je(){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 En(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 V(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 M(e,t,n=3e3,r={}){let o=await V(e,t,n,r);return o.ok?o.stdout:""}async function Rn(e=process.cwd()){let t=await V("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(C("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;d(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=C("CURSOR_PROJECT_DIR")??C("CLAUDE_PROJECT_DIR");if(n&&yn(n)){let r=await V("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 re(e=process.cwd()){return(await Rn(e)).root}function j(e,t){try{return JSON.parse(e)}catch{return t}}var Sn=new Map;function U(e,t){let n=Sn.get(e);if(n!==void 0)return n;try{let r=j(gc(e,"utf8"),t);return Sn.set(e,r),r}catch{return Sn.set(e,t),t}}function ye(e){return typeof e=="string"?e:""}function Ee(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 g(e,t){let n=Ee(e,t);return typeof n=="string"?n:""}var le=500;function mo(e,t=2){if(!yn(e))return{entries:[],truncated:!1};let n=[],r=!1,o=(s,i)=>{if(i>t||r)return;let a;try{a=mc(s,{withFileTypes:!0})}catch{return}for(let c of a){if(r)return;let u=po(s,c.name);if(c.isDirectory()){o(u,i+1);continue}if(c.isFile()){try{n.push({name:Sc(e,u),size:uo(u).size})}catch{continue}if(n.length>=le){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function Cn(e){return yn(e)?{present:!0,size:uo(e).size}:{present:!1,size:0}}function be(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function In(e=process.env){return be(b("CURSOR_SANDBOX",e))}var Cc=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Ic(e){return Cc.some(t=>!!b(t,e))}function kc(e){if(b("KUBERNETES_SERVICE_HOST",e)||be(b("REMOTE_CONTAINERS",e))||be(b("DEVCONTAINER",e)))return!0;try{if(yc("/.dockerenv")||Ec("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function ho(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!b(t,e))}function Ac(e,t=process.platform){return ho(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!b(n,e)):!1}function xc(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function Oc(e){return e==="linux"}function b(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return C(e)}function Pc(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!vc(b("CURSOR_VERSION",n))}function vc(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function kn(e){if(xc(e.sessionId))return!0;let t=e.hostname??go(),n=e.osUser??_o(e.env);return Pc(t,n,e.env)}function bc(e){return be(b("CURSOR_AGENT",e.env))?!0:kn(e)}function wc(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))||ho(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!b(t,e))||b("SESSIONNAME",e))}function Ve(e={}){let t=e.env;if(b("GITHUB_ACTIONS",t))return"github_actions";if(be(b("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!Ac(t,n)&&bc(e)&&(be(b("CURSOR_AGENT",t))||Oc(n)))return"cursor_cloud";if(b("CODESPACES",t)||b("CODESPACE_NAME",t))return"codespaces";if(b("GITLAB_CI",t))return"gitlab_ci";if(Ic(t))return"managed";let r=b("CI",t);return r&&r!=="false"&&r!=="0"?"managed":kc(t)?"container":wc(t)?"interactive":"unknown"}async function An(){return await M("systemd-detect-virt",[],1e3)}function _o(e=process.env,t=Rc){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 xn(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await M("sw_vers",["-productVersion"],1e3);else if(process.platform==="linux"){try{let{readFileSync:s}=await import("node:fs"),i=s("/etc/os-release","utf8"),a=i.match(/^PRETTY_NAME="?([^"\n]+)"?/m)?.[1],c=i.match(/^VERSION_ID="?([^"\n]+)"?/m)?.[1];t=a??c??""}catch{t=await M("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await M("uname",["-r"],1e3))}else t=await M("ver",[],1e3);let n=_o(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await M("tty",[],500),o.includes("not a tty")&&(o="")}catch{o=""}return{os:e,os_version:t||null,user:n||null,shell:r||null,tty:o||null}}function Ye(){return go()}var Nc="installation.json",Lc="cloud-bootstrap.lock",Uc=6e4;function Oo(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function Re(e=Pn()){return vn(e,".ev-ai","agent-hook")}function Dc(e=Pn()){return vn(Re(e),Nc)}function Po(e){return vn(At(e),Lc)}function vo(){return Tc(8).toString("hex")}function we(e){return Co("sha256").update(e).digest("hex").slice(0,16)}function I(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function bo(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function Hc(e=process.env){let t=I(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!bo(t)){d(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function wo(e,t){return e&&bo(e)?e:(e&&d(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),Hc(t))}function Fc(e){return/^[0-9a-f]{16}$/.test(e)}function jc(e=process.env){if(I(e.GITHUB_ACTIONS)){let t=I(e.GITHUB_REPOSITORY_ID)??I(e.GITHUB_REPOSITORY),n=I(e.GITHUB_ACTOR)??I(e.GITHUB_TRIGGERING_ACTOR)??I(e.GITHUB_USER);if(t&&n)return we(`github_actions|${t}|${n}`)}if(I(e.CODESPACES)||I(e.CODESPACE_NAME)){let t=I(e.CODESPACE_NAME);if(t)return we(`codespaces|${t}`);let n=I(e.GITHUB_REPOSITORY_ID)??I(e.GITHUB_REPOSITORY),r=I(e.GITHUB_USER)??I(e.GITHUB_ACTOR);if(n&&r)return we(`codespaces|${n}|${r}`)}if(I(e.GITLAB_CI)){let t=I(e.CI_PROJECT_ID)??I(e.CI_PROJECT_PATH),n=I(e.GITLAB_USER_LOGIN)??I(e.GITLAB_USER_EMAIL)??I(e.GITLAB_USER_NAME);if(t&&n)return we(`gitlab|${t}|${n}`)}return null}var $c="cursoragent@cursor.com";function Kc(e){let t=I(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===$c?null:t}function Bc(e,t){return I(e.CURSOR_PROJECT_DIR)??I(e.CLAUDE_PROJECT_DIR)??t}function Gc(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function zc(e){let t=await M("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?Gc(t):e}async function Wc(e){let t=I(await M("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!G(null,t))return t;let n=I(await M("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!G(null,n)?n:null}function Jc(e,t){let n=Bc(e,t);return n?we(`cursor_cloud|${n}|${Kc(e)??""}`):null}async function Vc(e,t){let n=I(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await zc(n),o=await Wc(n);return we(`claude_remote|${r}|${o??""}`)}function So(e,t){let n=wo(e,t);if(n)return n;let r=jc(t);return r||vo()}async function Yc(e){let n=await M("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Mc(e);return Co("sha256").update(n).digest("hex").slice(0,16)}function qc(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 Xc(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=qc(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 Ce(e){if(Io(e))try{return Xc(ko(e,"utf8"))}catch{}}function bn(e){return Ce(e)}function To(e,t,n){let r=Ce(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{X(e,`${JSON.stringify(o,null,2)}
|
|
7
|
+
`)}catch(s){let i=s instanceof Error?s.message:String(s);d(`WARN: operator identity cache write failed open: ${i}`)}}function Mo(e,t=Date.now()){if(!e)return!0;if(Ce(e)?.operator_identity_hash)return!1;let n=Po(e);try{if(Io(n)){let r=Number.NaN;try{r=Number(ko(n,"utf8").trim())}catch{}let o=t-r;if(Number.isFinite(o)&&o>=0&&o<Uc)return!1;try{Ao(n)}catch{}}}catch{}try{return On(At(n),{recursive:!0}),xo(n,`${t}
|
|
8
|
+
`,{encoding:"utf8",flag:"wx"}),!0}catch(r){if(Do(r))return!1;let o=r instanceof Error?r.message:String(r);return d(`WARN: cloud bootstrap claim failed open: ${o}`),!0}}function No(e){if(e)try{Ao(Po(e))}catch{}}function Lo(e,t){let r=Ce(e)?.platform_agent_ids?.[t];return typeof r=="string"&&r.length>0?r:void 0}function Uo(e,t,n){if(!n)return;let r=Ce(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{X(e,`${JSON.stringify(o,null,2)}
|
|
9
|
+
`)}catch(s){let i=s instanceof Error?s.message:String(s);d(`WARN: platform_agent_id cache write failed open: ${i}`)}}function Do(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function Zc(e,t){On(At(e),{recursive:!0}),xo(e,`${JSON.stringify(t,null,2)}
|
|
10
|
+
`,{encoding:"utf8",flag:"wx"})}function yo(e,t){try{return Zc(e,t),t}catch(n){if(!Do(n))throw n;return Ce(e)}}function Eo(e,t){On(At(e),{recursive:!0}),X(e,`${JSON.stringify(t,null,2)}
|
|
11
|
+
`)}function Ro(e,t){return{installation_id:e,...t&&t===e?{pinned:!0}:{}}}async function xt(e,t={}){let n=t.home??Pn(),r=t.env??process.env,o=await Yc(e),s=Dc(n),i={sessionId:t.sessionId,hostname:I(r.HOSTNAME)??void 0,osUser:I(r.USER)??I(r.LOGNAME)??I(r.USERNAME)??void 0,env:r},a=Ve(i),c=wo(t.overrideId,r),u=a==="cursor_cloud"&&kn(i)?Jc(r,e):a==="claude_remote"?await Vc(r,e):null,l=Ce(s);if(l){let S=l;if(c&&c===l.installation_id&&l.pinned!==!0&&(S={...l,pinned:!0},Eo(s,S)),!!u&&u!==S.installation_id&&!c&&S.pinned!==!0&&Fc(S.installation_id)&&u){let E={installation_id:u,...S.platform_agent_ids?{platform_agent_ids:S.platform_agent_ids}:{}};return Eo(s,E),{installationId:u,storePath:s,repoKey:o}}return{installationId:S.installation_id,storePath:s,repoKey:o}}let p=c??u??So(void 0,r),m=yo(s,Ro(p,c));if(m)return{installationId:m.installation_id,storePath:s,repoKey:o};let f=c??u??So(void 0,r),_=yo(s,Ro(f===p?vo():f,c));if(_)return{installationId:_.installation_id,storePath:s,repoKey:o};throw new Error(`Failed to create installation record at ${s}`)}import{existsSync as Ho,readFileSync as Qc}from"node:fs";import{homedir as el}from"node:os";import{dirname as tl,isAbsolute as nl,join as Fo,relative as rl}from"node:path";var Tn=[St,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"];function ol(e=el()){return Fo(e,".ev-ai")}function wn(e){for(let t of Tn){let n=Fo(e,t);if(Ho(n))return n}}async function sl(e=process.cwd(),t){let n=C("EV_AI_HOOK_MANIFEST");if(n&&Ho(n))return n;let r=wn(ol());if(r)return r;let o=t??await re(e);return wn(o)??wn(e)}async function il(e,t){let n=t??await re(tl(e)),r=rl(n,e);if(r.startsWith("..")||nl(r))return!1;let o=await V("git",["ls-files","--error-unmatch",r],2e3,{cwd:n});return o.ok?!0:o.code===1?!1:(d(`WARN: git ls-files failed for manifest ${e} (code=${String(o.code)}); treating as tracked`),!0)}function al(e){let t=Qc(e,"utf8");return j(t,{})}function cl(){return{schema_version:2,mcp_servers:[]}}async function jo(e=process.cwd(),t={}){let{root:n,inGitRepo:r}=await Rn(e),o=await sl(e,n),s=o?al(o):cl();delete s.installation_id;let i=o?await il(o,n):!1;s.capture_hook_input==="full"&&o&&i&&(d(`WARN: ignoring capture_hook_input=full in git-tracked manifest ${o}; use EV_AI_HOOK_CAPTURE_FULL_INPUT=1 or an untracked operator manifest`),delete s.capture_hook_input);let{installationId:a,storePath:c,repoKey:u}=await xt(n,{sessionId:t.sessionId});return{manifestPath:o??c,manifest:s,installationId:a,installationStorePath:c,repoKey:u,collectorUrl:oo(s),platformAgentId:s.platform_agent_id??"",gitRoot:n,inGitRepo:r}}function $o(e){return{schema_version:2,...e?{collector_url:e}:{},mcp_servers:[]}}var ll=["darwin-arm64","darwin-x64","linux-arm64","linux-x64","windows-x64","windows-arm64"];function ul(e){return e==="windows-x64"||e==="windows-arm64"}function Mn(e=process.platform,t=process.arch){if(e==="darwin")return t==="arm64"?"darwin-arm64":t==="x64"?"darwin-x64":void 0;if(e==="linux")return t==="arm64"?"linux-arm64":t==="x64"?"linux-x64":void 0;if(e==="win32")return t==="x64"?"windows-x64":t==="arm64"?"windows-arm64":void 0}function Ko(e=process.platform,t=process.arch){let n=Mn(e,t);if(!n)throw new Error(`Unsupported platform ${e}-${t}. Supported: ${ll.join(", ")}.`);return n}function dl(e){return ul(e)?`${q}.exe`:q}function Nn(e){return`compile-out/bin/${e}/${dl(e)}`}function Sl(e,t){let n=e.collectorUrl?.trim();if(!n)throw new Error(`${t} requires --url <https://hooks.ev-ai.ai/{orgToken}/hook>`);let r=ze(n);if(r)throw new Error(`collector URL rejected: ${r}`);return We(n)}function yl(e){let t=e.collectorUrl?.trim();if(!t)return;let n=ze(t);if(n)throw new Error(`collector URL rejected: ${n}`);return We(t)}function El(e){return Sl(e,"install")}function Vo(e){let t={};for(let n=0;n<e.length;n++){let r=e[n];if(r==="--url"){let o=e[n+1];o&&!o.startsWith("--")&&(t.collectorUrl=o,n+=1);continue}if(r==="--collector-url")throw new Error("--collector-url was renamed to --url")}return t}function Yo(e){let t={};for(let n=0;n<e.length;n++){let r=e[n];if(r==="--url"){let o=e[n+1];o&&!o.startsWith("--")&&(t.collectorUrl=o,n+=1);continue}if(r==="--collector-url")throw new Error("--collector-url was renamed to --url");if(r==="--update")throw new Error("--update was removed; use the `update` command instead of `install --update`");if(r==="--delivery"){let o=e[n+1];(o==="npx"||o==="binary"||o==="local")&&(t.delivery=o,n+=1);continue}if(r==="--force"){t.force=!0;continue}if(r==="--no-claude"){t.skipClaude=!0;continue}if(r==="--no-cursor"){t.skipCursor=!0;continue}if(r==="--no-codex"){t.skipCodex=!0;continue}}return t}function qo(e=process.execPath){return Xo(e)?"binary":"npx"}function Rl(){return P(oe(),".ev-ai","agent-hook")}function Cl(e=oe()){return P(e,".ev-ai","agent-hook",dn)}function Il(){let e=Dn(_l(import.meta.url)),t=P(e,"hook.mjs");return ue(t)?t:P(e,"..","dist","hook.mjs")}function Xo(e=process.execPath){return yt(e)}function Zo(e,t){let n=Jo(Bo(e),Bo(t));return!n.startsWith("..")&&!gl(n)}function Pt(e){return e.split(hl).join("/")}function kl(e){return`node "$(git rev-parse --show-toplevel)/${Pt(e)}"`}function Al(e){return`"$(git rev-parse --show-toplevel)/${Pt(e)}"`}function xl(e){return P(e,pn)}function Qo(e,t){let n=xl(e);Un(Dn(n),{recursive:!0}),Wo(t,n,{force:!0});try{zo(n,493)}catch{}return n}function Ol(e){let t=P(Rl(),"current");try{Ot(t,{recursive:!0,force:!0})}catch{}fl(e,t,process.platform==="win32"?"junction":"dir")}function es(e,t=ne,n=oe()){let r=P(n,".ev-ai","agent-hook",t),o=P(r,q);Un(r,{recursive:!0}),Wo(e,o,{force:!0});try{zo(o,493)}catch{}return Ol(r),P(n,".ev-ai","agent-hook",dn)}function ts(e){let t=Mn();if(!t)return;let n=[P(e,Nn(t)),P(e,"packages","agent-hook",Nn(t))];for(let r of n)if(ue(r)&&Zo(e,r))return r}function Pl(e=oe()){let t=Cl(e);return ue(t)?t:void 0}function vl(e,t=oe()){let n=Pl(t);return n||(Xo()?es(process.execPath,ne,t):ts(e))}function bl(e,t=oe()){let n=ts(e);if(!n)throw new Error(`update requires a locally compiled binary \u2014 run this package\u2019s build:hook-binary script first.
|
|
12
|
+
To install a released binary instead: curl -fsSL https://cdn.ev-ai.ai/agent-hook/install.sh | sh`);let r=es(n,ne,t),o=Qo(e,n);return{sourcePath:n,projectPath:o,globalPath:r}}function Go(e){let t=[P(e,"packages","agent-hook","dist","hook.mjs"),P(e,Wr)],n=Il();ue(n)&&Zo(e,n)&&t.unshift(n);for(let r of t){if(!ue(r))continue;let o=Pt(Jo(e,r));return{command:kl(o),hookPath:o,strategy:"dev_mjs"}}}function wl(e=Et){return`npx -y --prefer-offline ${e}`}function Tl(e,t=oe(),n=qo()){if(n==="npx")return{command:wl(),hookPath:Et,strategy:"npx"};if(n==="local"){let s=Go(e);if(s)return s;throw new Error("local delivery requires packages/agent-hook/dist/hook.mjs (or node_modules/@ev-ai/agent-hook/dist/hook.mjs) under the git root \u2014 run yarn workspace @ev-ai/agent-hook build first")}let r=vl(e,t);if(r){Qo(e,r);let s=Pt(pn);return{command:Al(s),hookPath:s,strategy:"project_binary"}}let o=Go(e);if(o)return o;throw new Error(`ev-ai-agent-hook binary not found. Install from CDN:
|
|
13
|
+
curl -fsSL ${Jr}/install.sh | sh
|
|
14
14
|
Or use npx delivery:
|
|
15
|
-
npx ${
|
|
16
|
-
`,"utf8")}function te(e){if(ie(e))try{return JSON.parse(Ac(e,"utf8"))}catch(t){throw t instanceof SyntaxError?new Error(`Invalid JSON in ${e} \u2014 fix or remove the file`,{cause:t}):t}}function Wc(e,t){let n=Co(t.collectorUrl),r={...e,schema_version:e?.schema_version??n.schema_version};return t.collectorUrl!==void 0?r.collector_url=t.collectorUrl:r.collector_url=e?.collector_url??n.collector_url,delete r.repo_ingest_token,delete r.installation_id,r.mcp_servers??=n.mcp_servers,r}function Vc(e){return(e.schema_version??2)===2&&e.collector_url===void 0&&(e.mcp_servers?.length??0)===0&&e.platform_agent_id===void 0&&e.capture_hook_input===void 0&&e.repo_ingest_token===void 0}function Ho(e,t){let n=v(e,ct),r=te(n),o=Wc(r,t);return t.collectorUrl!==void 0||ie(n)||!Vc(o)?(ae(n,o),{manifestPath:n,wrote:!0}):{manifestPath:void 0,wrote:!1}}function kn(e){if(e===null||typeof e!="object")return!1;let t=e,n=String(t.CLAUDE_CODE_ENABLE_TELEMETRY??"").toLowerCase();return n==="1"||n==="true"?!0:Object.keys(t).some(r=>r.startsWith("OTEL_"))}function Yc(e){if(kn(process.env))return!0;let t=ee();return[...on(),v(t,".claude","settings.json"),v(t,".claude","remote-settings.json"),v(e,".claude","settings.json"),v(e,".claude","settings.local.json")].some(r=>{try{let o=te(r);return o?kn(o.env):!1}catch{return!1}})}function Xc(e){try{let t=te(v(e,".claude","settings.json"));return t?kn(t.env):!1}catch{return!1}}function Fo(e){return Array.isArray(e)?e:[]}function yt(e){let t=[],n=r=>!!r&&typeof r=="object"&&Do(r.command);for(let r of Fo(e)){if(!r||typeof r!="object"){t.push(r);continue}let o=Array.isArray(r.hooks)?r.hooks:[],s=o.filter(i=>!n(i));if(!(s.length===0&&o.some(n))){if(s.length!==o.length){t.push({...r,hooks:s});continue}t.push(r)}}return t}function jo(e,t){return[...yt(e),...t]}function On(e){return Array.isArray(e)?e.filter(t=>!t||typeof t!="object"?!0:!Do(t.command)):[]}function Zc(e,t){return[...On(e),{command:t}]}function qc(e){let t=()=>({hooks:[{type:"command",command:e}]});return{SessionStart:[t()],UserPromptExpansion:[t()],PreToolUse:[t()],PostToolUse:[t()],PostToolUseFailure:[t()],PermissionDenied:[t()],Stop:[t()],StopFailure:[t()],SessionEnd:[t()],SubagentStart:[t()],SubagentStop:[t()]}}function Qc(e){let t={type:"command",command:e,statusMessage:Ur},n=()=>({hooks:[t]});return{SessionStart:[n()],UserPromptSubmit:[n()],PreToolUse:[n()],PostToolUse:[n()],Stop:[n()]}}var el=["sessionStart","beforeSubmitPrompt","preToolUse","postToolUse","postToolUseFailure","beforeShellExecution","beforeReadFile","beforeMCPExecution","subagentStart","subagentStop","stop"],tl=["afterShellExecution","afterFileEdit"];function nl(e,t=tl){let n={...e};for(let r of t){if(!(r in n))continue;let o=On(n[r]);o.length===0?delete n[r]:n[r]=o}return n}function rl(e,t,n={}){let r=v(e,".claude/settings.json"),o=xn(t,"claude"),s=te(r)??{};if(Yc(e)&&!n.force){if(s.hooks&&typeof s.hooks=="object"){let u={...s.hooks};for(let p of Object.keys(u))u[p]=yt(u[p]),Fo(u[p]).length===0&&delete u[p];Object.keys(u).length===0?delete s.hooks:s.hooks=u,ae(r,s)}return!1}let a=s.hooks&&typeof s.hooks=="object"?s.hooks:{},c=qc(o),l={...a};for(let[u,p]of Object.entries(c))l[u]=jo(a[u],p);return s.hooks=l,ae(r,s),!0}function ol(e,t){let n=v(e,".cursor/hooks.json"),r=xn(t,"cursor"),o=te(n)??{},s=o.hooks&&typeof o.hooks=="object"?o.hooks:{},i=nl({...s});for(let a of el)i[a]=Zc(i[a],r);ae(n,{...o,version:typeof o.version=="number"?o.version:1,hooks:i})}function sl(e,t){let n=v(e,".codex/hooks.json"),r=xn(t,"codex"),o=te(n)??{},s=o.hooks&&typeof o.hooks=="object"?o.hooks:{},i=Qc(r),a={...s};for(let[c,l]of Object.entries(i))a[c]=jo(s[c],l);ae(n,{...o,hooks:a})}function il(e){let t=v(e,".claude/settings.json"),n=te(t);if(!n?.hooks||typeof n.hooks!="object")return;let r={...n.hooks},o=!1;for(let s of Object.keys(r)){let i=r[s],a=yt(i);JSON.stringify(i)!==JSON.stringify(a)&&(o=!0),a.length===0?delete r[s]:r[s]=a}o&&(Object.keys(r).length===0?delete n.hooks:n.hooks=r,ae(t,n),d(`Removed ev-ai hooks from ${t}`))}function al(e){let t=v(e,".cursor/hooks.json"),n=te(t);if(!n?.hooks||typeof n.hooks!="object")return;let r={...n.hooks},o=!1,s=0;for(let i of Object.keys(r)){let a=r[i],c=On(a);JSON.stringify(a)!==JSON.stringify(c)&&(o=!0),c.length===0?delete r[i]:(r[i]=c,s+=c.length)}if(o){if(s===0&&Object.keys(r).length===0&&Object.keys(n).filter(a=>a!=="hooks"&&a!=="version").length===0){_t(t,{force:!0}),d(`Removed ${t}`);return}ae(t,{...n,hooks:r}),d(`Removed ev-ai hooks from ${t}`)}}function cl(e){let t=v(e,".codex/hooks.json"),n=te(t);if(!n?.hooks||typeof n.hooks!="object")return;let r={...n.hooks},o=!1,s=0;for(let i of Object.keys(r)){let a=r[i],c=yt(a);JSON.stringify(a)!==JSON.stringify(c)&&(o=!0),c.length===0?delete r[i]:(r[i]=c,s+=c.length)}if(o){if(s===0&&Object.keys(r).length===0&&Object.keys(n).filter(a=>a!=="hooks").length===0){_t(t,{force:!0}),d(`Removed ${t}`);return}ae(t,{...n,hooks:r}),d(`Removed ev-ai hooks from ${t}`)}}function vn(e=process.platform,t=process.arch,n={}){if(e==="win32")throw new Error("Windows install is not supported yet. Use macOS/Linux, or wait for phase-2 native commands.");(n.requireBinaryArch??!0)&&ko(e,t)}async function $o(e={}){let t=Nc(e);e.collectorUrl=t;let n=e.skipClaude===!0,r=e.skipCursor===!0,o=e.skipCodex===!0;if(n&&r&&o)throw new Error("at least one runner must be wired; refuse --no-claude --no-cursor --no-codex together");let s=e.delivery??wo();vn(process.platform,process.arch,{requireBinaryArch:s==="binary"});let i=e.cwd??process.cwd(),a=await Q(i),{command:c,hookPath:l,strategy:u}=Jc(a,ee(),s),{installationId:p,storePath:m}=await gt(a,{overrideId:e.installationId}),{manifestPath:f,wrote:h}=Ho(a,e),S=[];return n?d("Skipped Claude hook \u2014 --no-claude"):rl(a,c,{force:e.force})?(S.push("Claude"),e.force&&Xc(a)&&d("Forced Claude hook despite project native OTEL \u2014 expect duplicate session/tool events")):d("Skipped Claude hook \u2014 native OTEL telemetry already enabled (avoids duplicate events); pass --force to wire anyway"),r?d("Skipped Cursor hook \u2014 --no-cursor"):(ol(a,c),S.push("Cursor")),o?d("Skipped Codex hook \u2014 --no-codex"):(sl(a,c),S.push("Codex")),d(`Installed hook (${u}) at ${l}`),d(`Installation identity ${p} at ${m}`),h&&f?d(`Shared manifest written to ${f}`):d("Using package default collector config (no shared manifest file needed)"),d(S.length>0?`Wired ${S.join(", ")} hooks in ${a} (commands include --runner)`:`No runner hooks wired in ${a} (Claude skipped by OTEL; Cursor/Codex excluded via flags)`),u==="npx"?d("Hook commands use npx and may be committed; teammates need Node on PATH only (no install step, no env vars when collector_url is in the shared manifest)."):u==="project_binary"?d("Hook commands are git-root-relative and may be committed; each collaborator runs install once to populate .ev-ai/agent-hook/ (gitignored)."):u==="dev_mjs"&&d("Hook commands use node + monorepo packages/agent-hook/dist/hook.mjs (local delivery; rebuild with yarn workspace @ev-ai/agent-hook build)."),h&&f&&e.collectorUrl&&d("Shared manifest includes collector_url \u2014 commit it with hook configs so teammates post without env vars."),{gitRoot:a,hookPath:l,manifestPath:f,installationStorePath:m,strategy:u}}async function Ko(e=process.cwd()){vn(process.platform,process.arch,{requireBinaryArch:!0});let t=await Q(e),{projectPath:n,globalPath:r}=Gc(t);d(`Refreshed ${r}`),d(`Refreshed ${n}`),d("Hook configs and shared manifest left unchanged")}async function Bo(e={}){let t=Mc(e);e.collectorUrl=t,vn(process.platform,process.arch,{requireBinaryArch:!1});let n=e.cwd??process.cwd(),r=await Q(n),{manifestPath:o,wrote:s}=Ho(r,e);if(t!==void 0&&(!o||!s))throw new Error("configure failed to write shared collector manifest");return s&&o?d(`Wrote ${o}`):t===void 0&&d("No --url given and no shared manifest yet \u2014 pass --url <\u2026/{orgToken}/hook> to write collector destination."),d("Manifest only \u2014 enable ev-ai marketplace plugins. Do not also run file-wiring install for the same events."),{gitRoot:r,manifestPath:o}}function Go(e){for(let t of[()=>il(e),()=>al(e),()=>cl(e)])try{t()}catch(n){let r=n instanceof Error?n.message:String(n);d(`WARN: strip skipped a hook file: ${r}`)}}async function zo(e=process.cwd()){let t=await Q(e);return Go(t),d("Stripped ev-ai file-wired hooks; shared collector manifest left in place."),d("Next: enable ev-ai marketplace plugins, then restart runners."),{gitRoot:t}}async function Jo(e=process.cwd()){let t=await Q(e);Go(t);for(let n of ht){let r=v(t,n);if(ie(r))try{_t(r,{force:!0}),d(`Removed ${r}`)}catch(o){let s=o instanceof Error?o.message:String(o);d(`WARN: uninstall could not remove ${r}: ${s}`)}}}import{createHash as Du}from"node:crypto";import{existsSync as Hu,mkdirSync as Fu,readdirSync as ju,readFileSync as Ns,unlinkSync as Ls,writeFileSync as $u}from"node:fs";import{homedir as Us}from"node:os";import{join as Kn}from"node:path";import{existsSync as yl}from"node:fs";import{existsSync as ll}from"node:fs";import{homedir as Vo}from"node:os";import{join as ul}from"node:path";function Yo(e){return e.settings.filter(t=>t.toLowerCase().endsWith(".json"))}var dl={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 Wo(e,t){if(!(!e&&!t))return[...e??[],...t??[]]}function pl(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:Wo(n.mcpJson,t.mcpJson),mcpToml:Wo(n.mcpToml,t.mcpToml),plugins:t.plugins??n.plugins,managed:t.managed??n.managed}}function Xo(e){return Object.fromEntries(Object.entries(dl).map(([t,n])=>[t,pl(n,n[e])]))}var Oe=Xo("homeOnly"),le=Xo("projectOnly");function fl(e){return[...e.skillRoots,...e.dirs.map(t=>t.dir),...e.memory.flat(),...e.settings,...e.mcpJson??[],...e.mcpToml??[]]}function ml(e,t){return fl(e).some(n=>ll(ul(t,n)))}function Zo(e,t){for(let n of e)if(ml(n,t))return!0;return!1}function ce(e){return[...new Set(e)]}function ue(e){let t=[],n=[],r=[],o=[],s=[],i=[],a=[];for(let c of e){t.push(...c.skillRoots);for(let l of c.dirs)l.kind==="SUBAGENT"?n.push(l.dir):l.kind==="COMMAND"?r.push(l.dir):o.push(l.dir);s.push(...c.memory.flat()),i.push(...c.settings),a.push(...c.mcpJson??[],...c.mcpToml??[])}return{skills:ce(t),subagents:ce(n),commands:ce(r),rules:ce(o),memory:ce(s),settings:ce(i),mcp:ce(a)}}function gl(e,t=Vo(),n=process.platform){let r=[];for(let o of e)o.managed&&r.push(...pt(o.managed,n,t));return ce(r)}var de=ue(Object.values(Oe));function qo(e=Vo(),t=process.platform){return gl(Object.values(Oe),e,t)}import{existsSync as hl}from"node:fs";import{resolve as Pn}from"node:path";function z(e){return Pn(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 Et(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 _l=/^(?!\.)[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*$/;function Be(e){let t=e.replaceAll("\\","/").replace(/^\.\//,"");return!t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")||!_l.test(t)?null:t}function ve(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 Sl(e,t){let n=`${e}/`;return t===e||t.startsWith(n)}function Y(e,t,n,r=hl){for(let o of e)for(let s of t){let i=z(Pn(o,s)),a=Pn(o,s,n).replaceAll("\\","/");if(Sl(i,a)&&r(a))return a}return null}var es=/(?:^|\/|[\s"'=(])(?:\.cursor\/|\.claude\/|\.agents\/)skills(?:-cursor)?\/([^/]+)\/SKILL\.md/i,ts=/(?:^|\/|[\s"'=(])\.codex\/commands\/([^/]+)\.md\b/i,El=/(?:^|\s)\/([a-z][a-z0-9-]{1,63}(?:\/[a-z][a-z0-9-]{1,63}){0,5})\b/gi,Qo=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"]),Rl=/^[a-z][a-z0-9-]{1,63}$/,Cl=[".cursor/skills",".claude/skills",".agents/skills"],kl=[".cursor/skills",".cursor/skills-cursor",".claude/skills",".agents/skills"],Il=ye(Cl,ue(Object.values(le)).skills),Al=ye(kl,ue(Object.values(Oe)).skills),xl=new Set(["read","read_file","view"]),Ol=new Set(["bash","shell","zsh"]);function bn(e){let t=e.replace(/\\/g,"/");return es.exec(t)?.[1]??null}function vl(e){let t=e.replace(/\\/g,"/"),r=ts.exec(t)?.[1];return r?r.toLowerCase():null}function Pl(e){return bn(e)??vl(e)}function bl(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 Rt(e){return typeof e=="string"?Rt(F(e,null)):!e||typeof e!="object"?null:bl(e)}function ns(e){if(typeof e=="string")return ns(F(e,null));if(!e||typeof e!="object")return null;let t=e.command;return typeof t=="string"&&t.length>0?t:null}function wn(e){let t=ns(e.tool_input);if(t)return t;let n=ge(e.command);return n.length>0?n:null}function wl(e){let t=e.replace(/\\/g,"/"),n=es.exec(t);if(n?.[1])return n[1];let o=ts.exec(t)?.[1];return o?o.toLowerCase():null}function Tl(e){return typeof e.tool_name=="string"?e.tool_name:typeof e.tool=="string"?e.tool:""}function Tn(e){let t=Rt(e.tool_input)??ge(e.file_path);return t.length>0?t:null}function Ge(e,t,n){let r=Tl(e).toLowerCase();if(xl.has(r)){let o=Tn(e);return o?t(o):null}if(Ol.has(r)){let o=wn(e);return o?n(o):null}return null}function rs(e){return Ge(e,Pl,wl)}function Ml(e){let t=new Set,n=[];for(let r of e.matchAll(El)){let o=r[1]?.toLowerCase();!o||t.has(o)||Nl(o)||(t.add(o),n.push(o))}return n}function Nl(e){let t=e.split("/")[0];return Qo.has(e)||t!==void 0&&Qo.has(t)}function os(e){let t=e.skillId.toLowerCase();if(!Rl.test(t))return null;let n=e.exists??yl,r=`${t}/SKILL.md`,o=Y(ve(e.launchCwd,e.gitRoot),Il,r,n);return o!==null?o:e.home?Y([z(e.home)],Al,r,n):null}function Ll(e){return ge(e.prompt)}function ss(e){let t=g(e,"command_name");if(t){let r=g(e,"expansion_type");if(r&&r!=="slash_command")return[];let o=t.replace(/^\//,"").toLowerCase();return o?[o]:[]}let n=Ll(e);return n?Ml(n):[]}var Mn=qt(It(),1);import{existsSync as cu}from"node:fs";var Re={claude:".claude",cursor:".cursor",codex:".codex",opencode:".opencode"};function ze(e){let n=e.replace(/^\/+|\/+$/g,"").toLowerCase().split("/").filter(Boolean);return n.length<2?"":n.join("/")}function au(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 ze(n[1]);let r=t.match(/^ssh:\/\/[^/]+\/(.+)$/i);if(r?.[1])return ze(r[1]);t=t.replace(/^https:\/\//i,""),t=t.replace(/^http:\/\//i,""),t=t.replace(/^ssh:\/\//i,"");let o=t.match(/^[^/]+\/(.+)$/);return o?.[1]?ze(o[1]):ze(t)}async function Je(e=process.cwd()){let t=await W("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([W("git",["remote","get-url","origin"],2e3,{cwd:e}),W("git",["branch","--show-current"],2e3,{cwd:e}),W("git",["rev-parse","HEAD"],2e3,{cwd:e}),W("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 ps(e,t,n,r=process.cwd(),o,s,i){if(t)return t;let a=Re[n];if(!a)return"";let c=co(n,e.scope_path,i);if(s){let h=_o(s,c);if(h)return h}let l=o??await Je(r),u=l?.remote?au(l.remote):"";if(u||(u=ze(process.env.GITHUB_REPOSITORY??"")),!u)return"";let p=e.scope_path??"",m=p?`${p}/`:"",f=`${u}:${m}${a}`;return s&&So(s,c,f),f}var lu=[".cursor/rules",".claude/rules",".codex/rules"],uu=ue(Object.values(le)).rules;function du(e){return ye(Et(e?Re[e]:void 0,lu),uu)}var pu=/(?:^|\/|[\s"'=(])((?:\.cursor|\.claude|\.codex)\/rules\/[^'"\s]+?\.(?:mdc|md|rules))\b/i;function fs(e){let t=Be(e.relativePath);if(!t)return null;let n=e.exists??cu,r=ve(e.launchCwd,e.gitRoot),o=du(e.runnerPlatform),s=Y(r,o,t,n);if(s!==null)return s;if(!t.includes("/")){let i=Y(r,["."],t,n);if(i!==null)return i}return e.home?Y([z(e.home)],o,t,n):null}function fu(e){let t=e.replace(/\\/g,"/"),r=pu.exec(t)?.[1];return r?(0,Mn.nativeKeyForRulePath)(r):null}function ms(e){return Ge(e,Mn.nativeKeyForRulePath,fu)}function gs(e){return e.replace(/\.(mdc|md|rules)$/i,"")}function hs(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=Be(i);!a||n.has(a)||(n.add(a),r.push(a))}return r}var Nn=qt(It(),1);import{existsSync as mu}from"node:fs";var gu=[".cursor/commands",".claude/commands",".codex/prompts"],hu=ue(Object.values(le)).commands;function _u(e){return ye(Et(e?Re[e]:void 0,gu),hu)}var Su=/(?:^|\/|[\s"'=(])((?:\.cursor|\.claude|\.codex)\/(?:commands|prompts)\/[^'"\s]+?\.(?:md|mdc))\b/i;function _s(e){let t=Be(e.commandId);if(!t)return null;let n=e.exists??mu,r=`${t}.md`,o=_u(e.runnerPlatform),s=Y(ve(e.launchCwd,e.gitRoot),o,r,n);return s!==null?s:e.home?Y([z(e.home)],o,r,n):null}function yu(e){let t=e.replace(/\\/g,"/"),r=Su.exec(t)?.[1];return r?(0,Nn.nativeKeyForCommandPath)(r):null}function Ss(e){return Ge(e,Nn.nativeKeyForCommandPath,yu)}import{existsSync as Es}from"node:fs";import{homedir as Rs}from"node:os";import{join as We,resolve as Ln,sep as ys}from"node:path";function Un(e){return[...new Set([e,e.replaceAll(/[^A-Za-z0-9_-]/g,"_"),e.replaceAll(/[^A-Za-z0-9_-]+/g,"_")])]}function Dn(e,t){let n=t.toLowerCase();return Un(e).some(r=>r.toLowerCase()===n)}function At(e,t,n){if(!Es(e))return;let r=H(e,{});for(let[o,s]of Object.entries(r.mcpServers??{}))n.set(o,{declared:{name:o,...t},config:s})}function Eu(e,t,n){if(!Es(e))return;let r=H(e,{}),o=Ln(t),s=null;for(let a of Object.keys(r.projects??{})){let c=Ln(a);(o===c||o.startsWith(c.endsWith(ys)?c:c+ys))&&(s===null||c.length>Ln(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 Cs(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"?(At(We(r,".claude.json"),{source:"claude_json_user"},o),Eu(We(r,".claude.json"),t,o)):n==="cursor"&&At(We(r,".cursor/mcp.json"),{source:"cursor_mcp_user"},o),At(We(t,".mcp.json"),{source:"mcp_json"},o),At(We(t,".cursor/mcp.json"),{source:"cursor_mcp"},o),o}async function Hn(e,t=process.cwd(),n="claude",r=Rs()){return[...Cs(e,t,n,r).values()].map(o=>o.declared)}function ks(e,t,n=process.cwd(),r="claude",o=Rs()){let s=Cs(t,n,r,o),i=s.get(e);if(i!==void 0)return i.config??null;for(let[a,c]of s)if(Dn(a,e))return c.config??null;return null}function Fn(e){return e!==void 0&&Dr.includes(e)}function xt(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function Ot(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=xt(e,i);t=c.value,i=c.next;continue}if(a.startsWith("--runner=")){t=a.slice(9);continue}if(a==="--url"){let c=xt(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=xt(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=xt(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:Fn(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function jn(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=at(o,e.baseUrl?.trim()??void 0))}if(!n)return;let r=De(n);if(r){d(`WARN: ignoring --url/--token collector override: ${r}`);return}return He(n)}function Is(e,t){if(g(e,"conversation_id"))return!0;if(t==="")return!1;let n=t[0];return n?.toLowerCase()===n}function Ru(){return!!(R("CURSOR_VERSION")??R("CURSOR_PROJECT_DIR"))}function $n(e,t,n){return e!=="claude"&&e!=="codex"?!1:Is(t,n)?!0:Ru()}function Ve(e,t,n,r){if(Is(e,t))return"cursor";if(Fn(r))return r;let o=g(e,"conversation_id"),s=g(e,"turn_id"),i=g(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")&&(c="claude"),Fn(n)&&(c=n),c}function vt(e,t){let n=e.toLowerCase();return n==="sessionend"||n==="stopfailure"||n==="subagentstop"?!0:n==="stop"&&t==="codex"}function Cu(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 As(e){let t=e.toLowerCase();return t==="posttooluse"?!0:t==="posttoolusefailure"||t==="permissiondenied"?!1:null}function xs(e,t,n){let r=g(e,"session_id")||g(e,"conversation_id"),o=g(e,"prompt.id")||g(e,"prompt_id")||g(e,"generation_id")||g(e,"turn_id"),s=g(e,"hook_event_name")||g(e,"event"),i=g(e,"source"),a=Ve(e,s,t,n);return{sessionId:r,turnId:o,runnerEvent:s,hookSource:i,runnerPlatform:a}}var ku=["session_start","session_end","tool_invoked","skill_invoked"];function Iu(e){return ku.includes(e)}function Os(e,t){return e&&Iu(e)?e:Cu(t.toLowerCase())}var Au={beforeshellexecution:"Shell",aftershellexecution:"Shell",beforereadfile:"Read",afterfileedit:"Write"};function vs(e){return/^mcp__/i.test(e)||/^MCP:/i.test(e)}function Ps(e,t=""){let n=g(e,"tool_name")||g(e,"tool")||null,r=t.toLowerCase();n?r==="beforemcpexecution"&&!vs(n)&&(n=`MCP:${n}`):n=Au[r]??null;let o=e.tool_input,i=(o&&typeof o=="object"?ge(o.skill)||ge(o.skill_name):"")||g(e,"skill_name")||null,a=n&&e.tool_name!==n&&e.tool!==n?{...e,tool_name:n}:e;i??=rs(a);let c=ms(a),l=Ss(a);return{toolName:n,skillName:i,ruleName:c,commandName:l}}var xu=/^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/;function bs(e){for(let t of["subagent_type","agent_type"]){let n=g(e,t);if(n&&xu.test(n))return n}return null}function ws(e){let t=he(e,"duration_ms");if(typeof t=="number")return t;let n=he(e,"duration");return typeof n=="number"?n:null}var Ou="error",vu="interrupted",Pu="permission_denied",bu=/^[A-Za-z][A-Za-z0-9_.-]{0,63}$/;function Ye(e){return bu.test(e)?e:null}function wu(e){for(let t of["failure_type","error_type"]){let n=Ye(g(e,t));if(n)return n}return null}function Ts(e,t){return he(e,"is_interrupt")===!0?vu:t.toLowerCase()==="permissiondenied"?Pu:wu(e)??Ou}function Tu(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 Mu(e,t){let n=null;for(let r of t)!r||!Dn(r,e)||(n===null||r.length>n.length)&&(n=r);return n}function Nu(e,t){let n=null,r=0;for(let s of t)if(s)for(let i of Un(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:Mu(o[1],t)??o[1],mcpTool:o[2]}}function Lu(e,t){if(/^mcp__/i.test(e))return Nu(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:Tu(n,t),mcpTool:n}}return{mcpServer:null,mcpTool:null}}function Uu(e,t){let n=`${t}__`;return e.length>n.length&&e.toLowerCase().startsWith(n.toLowerCase())?e.slice(n.length):e}function Ms(e,t=[],n=""){let r=e?Lu(e,t):{mcpServer:null,mcpTool:null},o=Ye(n.trim());if(!o)return r;let s=r.mcpTool;return!s&&e&&!vs(e)&&(s=e),s&&(s=Uu(s,o)),{mcpServer:o,mcpTool:s}}var Ds=3e4,Ku="claims",Bu=!0,Gu=100,zu=new Set(["sessionstart","sessionend","stopfailure"]),Ju=["tool_name","tool","command","file_path","url"];function Wu(e=Us()){return Kn(Ke(e),Ku)}function Hs(e){let t=e.split(`
|
|
17
|
-
`,1)[0]??"";return Number(t.trim())}function
|
|
18
|
-
`,{encoding:"utf8",flag:"wx"})}catch(o){if(
|
|
19
|
-
`)}catch(n){let r=n instanceof Error?n.message:String(n);d(`WARN: cloud cache write failed open: ${r}`)}}function
|
|
20
|
-
`)
|
|
21
|
-
`)){let o=r.trim();if(!o)continue;let s=o.indexOf(" ");if(s<=0)continue;let i=o.slice(0,s).toLowerCase(),a=o.slice(s+1).trim();a&&(i==="user.name"?t=a:i==="user.email"&&(n=a))}return{git_user_name:t,git_user_email:n,platform_login:null}}async function Md(e,t=b){let n=await t("git",["config","--get-regexp","^user\\.(name|email)$"],2e3,{cwd:e});return Td(n)}function Nd(e=process.env){let t=k(e.GIT_AUTHOR_NAME),n=k(e.GIT_AUTHOR_EMAIL);if(t||n)return{git_user_name:t,git_user_email:n,platform_login:null,identity_source:"git_env"};let r=k(e.GIT_COMMITTER_NAME),o=k(e.GIT_COMMITTER_EMAIL);if(r||o)return{git_user_name:r,git_user_email:o,platform_login:null,identity_source:"git_env"};let s=k(e.EMAIL);return s?{git_user_name:null,git_user_email:s,platform_login:null,identity_source:"git_env"}:null}function ne(e,t,n,r=null){return!e&&!t&&!r?null:{git_user_name:e,git_user_email:t,platform_login:r,identity_source:n}}function Ld(e=process.env){let t=k(e.EV_AI_HOOK_OPERATOR_EMAIL),n=k(e.EV_AI_HOOK_OPERATOR_LOGIN),r=ne(k(e.EV_AI_HOOK_OPERATOR_NAME),t,"configured",t??n);if(r)return r;let o=k(e.GITHUB_ACTOR)??k(e.GITHUB_TRIGGERING_ACTOR)??k(e.GITHUB_USER),s=ne(o,null,"github",o);if(s)return s;let i=k(e.GITLAB_USER_LOGIN),a=k(e.GITLAB_USER_EMAIL),c=ne(k(e.GITLAB_USER_NAME)??i,a,"gitlab",a??i);if(c)return c;let l=k(e.BUILD_REQUESTEDFOREMAIL),u=ne(k(e.BUILD_REQUESTEDFOR),l,"azure_devops",l??k(e.BUILD_REQUESTEDFORID));if(u)return u;let p=k(e.BUILDKITE_BUILD_CREATOR_EMAIL),m=ne(k(e.BUILDKITE_BUILD_CREATOR),p,"buildkite",p);if(m)return m;let f=k(e.BUILD_USER_EMAIL)??k(e.CHANGE_AUTHOR_EMAIL),h=ne(k(e.BUILD_USER)??k(e.CHANGE_AUTHOR),f,"jenkins",f??k(e.BUILD_USER_ID));if(h)return h;let S=k(e.CIRCLE_USERNAME),_=ne(S,null,"circleci",S);if(_)return _;let E=k(e.CODEBUILD_INITIATOR),w=ne(E,null,"codebuild",E);if(w)return w;let N=k(e.DRONE_COMMIT_AUTHOR_EMAIL),x=k(e.DRONE_COMMIT_AUTHOR),O=ne(x??k(e.DRONE_COMMIT_AUTHOR_NAME),N,"drone",N??x);if(O)return O;if(qs(e.CLAUDE_CODE_REMOTE)||qs(e.CURSOR_AGENT)){let L=k(e.CURSOR_USER_EMAIL);return{git_user_name:null,git_user_email:null,platform_login:L&&!B(null,L)?L:null,identity_source:"cloud"}}return null}function Jn(e){return!!((e.git_user_name??e.git_user_email)&&!B(e.git_user_name,e.git_user_email))}function k(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function qs(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function Ud(e,t,n){return e==="claude"?Bs(t):e==="cursor"?Xs(t):e==="codex"?Vs(n,t):null}async function Wn(e,t=b,n=process.env,r={}){let o=await Md(e,t),s=Nd(n),i=Jn(o)?o:s&&Jn(s)?s:null,a=Ud(r.runnerPlatform,r.home??bd(),n);if(a)return{git_user_name:i?.git_user_name??null,git_user_email:i?.git_user_email??null,platform_login:a.platform_login,identity_source:a.identity_source};let c=Ld(n);return c?.platform_login?{git_user_name:i?.git_user_name??null,git_user_email:i?.git_user_email??null,platform_login:c.platform_login,identity_source:c.identity_source}:i?{...i,platform_login:null,identity_source:Jn(o)?"git_config":"git_env"}:c||(o.git_user_name||o.git_user_email?{...o,identity_source:"git_config"}:s||{git_user_name:null,git_user_email:null,platform_login:null,identity_source:"git_config"})}async function Qs(e){let{gitRoot:t,installationStorePath:n,forceResend:r}=e,o=e.exec??b,s=e.env??process.env,i=await Wn(t,o,s,{runnerPlatform:e.runnerPlatform,home:e.home}),a=wd(i.git_user_name,i.git_user_email,i.identity_source,i.platform_login),l=(n?yn(n):void 0)?.operator_identity_hash;if(!(r||l!==void 0&&l!==a||!l))return{commit:()=>{}};let f=n;return{operator:i,commit:()=>{f&&mo(f,a,ft())}}}function Vn(e){return e?!yn(e)?.operator_identity_hash:!0}function ei(e){return!0}import{existsSync as af,readFileSync as cf}from"node:fs";import{homedir as zi}from"node:os";import{join as Ne,resolve as lf}from"node:path";import{basename as Qp,join as Me}from"node:path";import{dirname as ci,resolve as Tt}from"node:path";import{existsSync as Dd}from"node:fs";import{homedir as ri}from"node:os";import{relative as oi,resolve as X,sep as fe}from"node:path";var Hd=["session_id","conversation_id","turn_id","generation_id","prompt.id","prompt_id","hook_event_name","event","source","status","stop_reason","reason","tool_name","tool","tool_use_id","skill_name","command_name","expansion_type","command_source","permission_mode","model","model_id","agent_id","agent_type","subagent_id","subagent_type","subagent_model","is_parallel_worker","effort","effort.level","duration_ms","duration","sandbox","failure_type","is_interrupt"];function Fd(e){return e.capture_hook_input==="full"?!0:e.capture_hook_input==="allowlist"?!1:R("EV_AI_HOOK_CAPTURE_FULL_INPUT")==="1"}function jd(e){let t={};for(let n of Hd){let r=he(e,n);r!==void 0&&(t[n]=r)}return t}function bt(e,t){if(typeof e!="string"||e.length===0||!t)return null;let n=X(e),r=X(t),o=oi(r,n);return!o||o==="."?".":o.startsWith(`..${fe}`)||o===".."||X(r,o)!==n?null:o.split(fe).join("/")}function si(e,t){let n=oi(X(t),X(e)).split(fe).join("/");return!n||n==="."?null:n===".."||n.startsWith("../")&&n.split("/").every(r=>r==="..")?n:null}function ii(e){return typeof e!="string"||e.length===0?null:X(e).split(fe).join("/")}function $d(){let e=R("CURSOR_PROJECT_DIR");if(!e)return null;let t=X(e);return Dd(t)?t.split(fe).join("/"):null}function Yn(e,t){return bt(e,t)!==null}function Kd(e,t){let n=X(t??ri(),".cursor").split(fe).join("/");return Yn(e,n)}function Bd(e,t,n){return t!==null&&Yn(e,t)?!0:t!==null&&Kd(e,n.home)?!1:n.inGitRepo===!0&&n.gitRoot!==void 0&&Yn(e,n.gitRoot)?!0:t===null}function ai(e,t){let n=ii(e.cwd);if(n!==null)return n;let r=X(process.cwd()).split(fe).join("/"),o=$d();return Bd(r,o,t)?r:o??r}function Xn(e,t={}){return ai(e,t)}function Zn(e,t=ri()){let n=X(t).split(fe).join("/").replace(/\/$/,"");return n.length<=1?e:e===n?"~":e.startsWith(`${n}/`)?`~${e.slice(n.length)}`:e}function ti(e,t,n){let r=ii(n.launchCwd)??ai(t,n);e.cwd=Zn(r,n.home);let o=n.inGitRepo===!0&&n.gitRoot!==void 0?bt(r,n.gitRoot):null;o!==null&&(e.cwd_relative=o)}function ni(e,t){let n=JSON.stringify(e),r=Buffer.byteLength(n,"utf8");if(r<=t)return e;let o=Object.entries(e).filter(([i,a])=>!i.startsWith("_")&&(typeof a=="string"||typeof a=="number"||typeof a=="boolean")).sort((i,a)=>Buffer.byteLength(JSON.stringify(i[1]),"utf8")-Buffer.byteLength(JSON.stringify(a[1]),"utf8")),s={_truncated:!0,_original_bytes:r};for(let[i,a]of o){let c={...s,[i]:a};if(Buffer.byteLength(JSON.stringify(c),"utf8")>t)break;s[i]=a}return s}function wt(e,t,n={}){if(Fd(t)){let o={...e};return delete o.cwd,delete o.transcript_path,ti(o,e,n),ni(o,Nr)}let r=jd(e);return ti(r,e,n),ni(r,Mr)}function Gd(e){return typeof e=="string"&&e.length>0}function qn(e){let t=Tt(e.home),n=Tt(e.launchCwd),r=e.gitRoot?Tt(e.gitRoot):null,o=new Set,s=[],i=null;e.inGitRepo&&Gd(e.remote)&&r!==null&&r!==t&&(i=r,o.add(r)),n!==t&&!o.has(n)&&(s.push({scope:"cwd",dir:n}),o.add(n)),i!==null&&s.push({scope:"repo",dir:i});let a=null,c=r!==null&&bt(n,r)!==null;if(e.inGitRepo&&r!==null&&r!==t&&c){let l=ci(r);for(;;){let u=Tt(l);if(u===t)break;let p=ci(u);if(p===u)break;if(e.hasProjectSpec(u)){s.push({scope:"parent",dir:u}),a=si(u,n);break}l=p}}return{anchors:s,parentRel:a}}import{existsSync as li,readdirSync as zd,realpathSync as Jd}from"node:fs";import{basename as Wd,dirname as Vd,relative as Yd,resolve as Xd,sep as Zd}from"node:path";var Qn=400,Mt=class{constructor(t,n={}){this.home=t;this.pathMode=n.pathMode??"home-relative",this.maxEntries=n.maxEntries??se}components=[];truncated=!1;pathMode;maxEntries;pluginExpandRemaining;seenRealpaths=new Set;componentPath(t){if(this.pathMode==="tilde"){let r=Xd(t).split(Zd).join("/");return Zn(r,this.home)}let n=Yd(this.home,t).replace(/\\/g,"/");return!n||n.startsWith("..")?`external/${M(Vd(t))}/${Wd(t)}`:n}claimFile(t){try{let n=Jd(t);return this.seenRealpaths.has(n)?!1:(this.seenRealpaths.add(n),!0)}catch{return this.seenRealpaths.has(t)?!1:(this.seenRealpaths.add(t),!0)}}get atGlobalCap(){return this.truncated||this.components.length>=this.maxEntries}get pluginBudgetSpent(){return this.pluginExpandRemaining!==void 0&&this.pluginExpandRemaining<=0}readEntries(t){if(!li(t))return[];try{return zd(t,{withFileTypes:!0})}catch{return[]}}readJson(t,n){if(li(t))return H(t,n)}push(t){return this.components.length>=this.maxEntries?(this.truncated=!0,!1):this.pluginExpandRemaining!==void 0&&this.pluginExpandRemaining<=0?!1:(this.pluginExpandRemaining!==void 0&&(this.pluginExpandRemaining-=1),this.components.push(t),!0)}withPluginExpandCap(t,n){let r=this.pluginExpandRemaining;this.pluginExpandRemaining=t;try{let o=n(),s=t-(this.pluginExpandRemaining??0);return{result:o,expanded:s}}finally{this.pluginExpandRemaining=r}}};import{existsSync as er,readFileSync as qd,statSync as Qd}from"node:fs";import{basename as di,join as qe,relative as pi}from"node:path";var tr=100*1024,ep=4;function tp(e){return e.length<=tr?e:`${e.slice(0,tr-1)}\u2026`}function np(e){try{let t=qd(e),n=t.toString("utf8");return{hash:M(t),length:t.length,text:tp(n)}}catch{return null}}var ui={HOOK:"EVENT",COMMAND:"EXPLICIT_INVOCATION",MEMORY:void 0,MCP_SERVER:void 0,PLUGIN:void 0,SKILL:"UNSPECIFIED",RULE:"UNSPECIFIED",SUBAGENT:"UNSPECIFIED"};function rp(e){return e in ui?ui[e]:"UNSPECIFIED"}function Nt(e,t){if(!e.claimFile(t.absolutePath))return!1;let n=np(t.absolutePath);if(!n)return!1;let r=t.name??di(t.absolutePath).replace(/\.(md|mdc|toml)$/i,""),o={kind:t.kind,name:r,path:e.componentPath(t.absolutePath),text:n.text,content_hash:n.hash,content_length:n.length,origin:t.origin,enabled:t.enabled},s=rp(t.kind);return s&&(o.trigger=s),e.push(o)}function op(e,t,n){let r=pi(e,t).replace(/\\/g,"/");return!r||r.startsWith("..")?di(t).replace(/\.(md|mdc|toml)$/i,""):n?r.replace(/\.(md|mdc|toml)$/i,""):r}function Ce(e,t){let{dir:n,kind:r,origin:o,enabled:s,nested:i,extensions:a}=t;nr(e,{walkRoot:n,currentDir:n,depth:0,kind:r,origin:o,enabled:s,nested:i,extensions:a})}function nr(e,t){let{walkRoot:n,currentDir:r,depth:o,kind:s,origin:i,enabled:a,nested:c,extensions:l}=t;if(!(o>ep))for(let u of e.readEntries(r)){if(e.atGlobalCap){e.truncated=!0;return}if(e.pluginBudgetSpent)return;if(c){if(!u.isDirectory())continue;let f=qe(r,u.name,c);if(er(f)){let h=pi(n,qe(r,u.name)).replace(/\\/g,"/");Nt(e,{absolutePath:f,kind:s,origin:i,enabled:a,name:h||u.name});continue}nr(e,{walkRoot:n,currentDir:qe(r,u.name),depth:o+1,kind:s,origin:i,enabled:a,nested:c,extensions:l});continue}if(u.isDirectory()){nr(e,{walkRoot:n,currentDir:qe(r,u.name),depth:o+1,kind:s,origin:i,enabled:a,nested:c,extensions:l});continue}if(!u.isFile()||!l)continue;let p=u.name.toLowerCase();if(!l.some(f=>p.endsWith(f)))continue;let m=qe(r,u.name);Nt(e,{absolutePath:m,kind:s,origin:i,enabled:a,name:op(n,m,!0)})}}function fi(e){for(let t of e)if(er(t))try{if(Qd(t).size>0)return t}catch{continue}return e.find(t=>er(t))}var sp="<omitted>",ip=["package_name","package_spec","package_version","package_version_source"],mi=100,gi=120,Lt=[{raw:"tools",attr:"tools"},{raw:"autoApprove",attr:"auto_approve"},{raw:"auto_approve",attr:"auto_approve"},{raw:"alwaysAllow",attr:"always_allow"},{raw:"always_allow",attr:"always_allow"},{raw:"enabledTools",attr:"enabled_tools"},{raw:"enabled_tools",attr:"enabled_tools"},{raw:"disabledTools",attr:"disabled_tools"},{raw:"disabled_tools",attr:"disabled_tools"}],hi=new Set(Lt.map(e=>e.attr)),ap=["enabled","disabled"],cp=["serverUrl","auth","bearer_token_env_var","default_tools_approval_mode","defaultToolsApprovalMode","env_vars","env_http_headers","http_headers"],lp=new Set(["type","command","url","args","env","envVars","headers",...ap,...cp,...Lt.map(e=>e.raw)]),up=new Set(["transport","command_or_url","args","env_var_names","headers_present","auth","bearer_token_env_var","default_tools_approval_mode","env_http_header_names",...ip,...hi,...[...hi].map(e=>`${e}_truncated`)]);function _i(e,t){for(let n of t)lp.has(n)||up.has(n)||(e[n]=sp)}var dp=/^(authorization|auth|api[-_]?key|access[-_]?token|refresh[-_]?token|secret|password|passwd|token|bearer|client[-_]?secret|client[-_]?id|private[-_]?key|signing[-_]?key)$/i,pp=/(?:^|[-_])(secret|password|passwd|token|api[-_]?key|private[-_]?key|signing[-_]?key|client[-_]?secret|client[-_]?id)(?:[-_]|$)/i,fp=/^(sk-|ghp_|gho_|github_pat_|xox[baprs]-|AKIA|ASIA|AIza|ya29\.)/,mp=/^bearer(?:\s+|$)/i;function Ut(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function Si(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.length>0):[]}function rr(e){if(Array.isArray(e)){let n=[];for(let r of e){if(typeof r!="string"||r.length===0)continue;let o=r.split("=",1)[0]?.trim();o&&n.push(o)}return n}let t=Ut(e);return t?Object.keys(t).filter(n=>n.length>0):[]}function ke(e){try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return e}}function gp(e){return fp.test(e)||mp.test(e)?"<redacted>":e.includes("://")?ke(e):e}function yi(e){if(/^https?:\/\//i.test(e))return ke(e);let t=e.indexOf("=");return t>0?`${e.slice(0,t+1)}${yi(e.slice(t+1))}`:gp(e)}function hp(e){let t=e.replace(/^-+/,"").split("=",1)[0]??"";return dp.test(t)||pp.test(t)}function Dt(e){let t=[],n=!1;for(let r of e){if(n){t.push("<redacted>"),n=!1;continue}if(hp(r)){t.push("<redacted>"),n=!r.includes("=");continue}t.push(yi(r))}return t}function _p(e){let t=Si(e);if(t.length===0)return;let n=[...new Set(t.map(r=>r.length>gi?r.slice(0,gi):r))].sort();if(n.length!==0)return n.length>mi?{names:n.slice(0,mi),truncated:!0}:{names:n,truncated:!1}}function Sp(e){let t=Ut(e);if(!t)return{headers:[],envVars:[]};let n=[],r=[];for(let[o,s]of Object.entries(t))o.length>0&&n.push(o),typeof s=="string"&&s.length>0&&r.push(s);return{headers:n,envVars:r}}function Ei(e,t){let n=new Set;for(let{raw:r,attr:o}of Lt){if(n.has(o)||!(r in t))continue;let s=t[r];if(o==="auto_approve"&&typeof s=="boolean"){e.auto_approve=s,n.add(o);continue}let i=_p(s);i&&(e[o]=i.names,i.truncated&&(e[`${o}_truncated`]=!0),n.add(o))}}function Ri(e,t){let n=Ut(e),r={transport:t};if(!n)return r;_i(r,Object.keys(n));let o=typeof n.command=="string"?n.command:void 0,s=typeof n.url=="string"?n.url:void 0,i=typeof n.serverUrl=="string"?n.serverUrl:void 0,a=o??s??i;a&&(r.command_or_url=ke(a));let c=Dt(Si(n.args));c.length>0&&(r.args=c);let l=Sp(n.env_http_headers),u=[...new Set([...rr(n.env),...rr(n.envVars),...rr(n.env_vars),...l.envVars,...typeof n.bearer_token_env_var=="string"&&n.bearer_token_env_var.length>0?[n.bearer_token_env_var]:[]])].sort();u.length>0&&(r.env_var_names=u),l.headers.length>0&&(r.env_http_header_names=[...new Set(l.headers)].sort());for(let h of["headers","http_headers","env_http_headers"])if(n[h]!==void 0&&n[h]!==null){r.headers_present=!0;break}let p=typeof n.auth=="string"?n.auth:void 0;p&&(r.auth=p);let m=typeof n.bearer_token_env_var=="string"?n.bearer_token_env_var:void 0;m&&(r.bearer_token_env_var=m);let f=typeof n.default_tools_approval_mode=="string"?n.default_tools_approval_mode:typeof n.defaultToolsApprovalMode=="string"?n.defaultToolsApprovalMode:void 0;return f&&(r.default_tools_approval_mode=f),Ei(r,n),r}function Ci(e){let t=Ut(e);return t?t.enabled===!1?!1:t.disabled!==!0:!0}function ir(e,t,n=!0){let r=Object.keys(t).sort().map(o=>[o,t[o]??null]);return M(JSON.stringify({name:e,attributes:r,enabled:n}))}function we(e){let t=e.trim();return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function Qe(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*\\[([^\\]]*)\\]`,"m").exec(e);return n?.[1]?[...n[1].matchAll(/"([^"]*)"|'([^']*)'/g)].map(r=>r[1]??r[2]??"").filter(r=>r.length>0):[]}function yp(e,t){return Dt(Qe(e,t))}function sr(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(true|false)\\s*$`,"m").exec(e);if(n?.[1])return n[1]==="true"}function or(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(.+)$`,"m").exec(e);if(!n?.[1])return;let r=we(n[1]);return r.length>0?r:void 0}function Ep(e,t){let n=[],r=i=>{for(let a of i.split(/[,\n]/)){let c=/^\s*"?([A-Za-z_][A-Za-z0-9_-]*)"?\s*=\s*(.+?)\s*$/.exec(a);c?.[1]&&n.push([c[1],we(c[2]??"")])}},o=new RegExp(`^\\s*${t}\\s*=\\s*\\{([^}]*)\\}`,"m").exec(e);o?.[1]&&r(o[1]);let s=new RegExp(`(?:^|\\n)\\[[^\\]]*\\.${t}\\]\\s*\\n([\\s\\S]*?)(?=\\n\\[|$)`).exec(`
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
`);return wp("sha512").update(t).digest("hex").slice(0,16)}function Kp(e){let t=process.platform==="win32"?et(R("LOCALAPPDATA")??e,"npm-cache"):et(e,".npm"),n=R("npm_config_cache")??R("NPM_CONFIG_CACHE");return n===void 0||n===t?[t]:[n,t]}function Pi(e){return typeof e=="string"&&e.length>0&&e.length<=Ft?e:null}function Bp(e,t,n){let r=$p(e);for(let o of Kp(n)){let s=et(o,"_npx",r),i=H(et(s,"node_modules",...t.split("/"),"package.json"),{}),a=Pi(i.version);if(a!==null)return a;let c=H(et(s,"package-lock.json"),{}),l=Pi(c.packages?.[`node_modules/${t}`]?.version);if(l!==null)return l}return null}function Gp(e){return e.length<=Ft?e:`${e.slice(0,Ft-1)}\u2026`}function cr(e,t,n){if(typeof e!="string"||e.length===0)return null;let r=jp(e,t??[]),o=r[0];if(o===void 0)return null;let s=ar(o);if(s===null)return null;let i=Bp(r,s,n);return{package_name:s,package_spec:Gp(o),...i===null?{}:{package_version:i,package_version_source:"npx_cache"}}}function bi(e,t){if(typeof e!="string"||e.length===0)return null;let[n,...r]=Ht(e.trim());return n===void 0?null:cr(n,r,t)}function jt(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 wi(e,t){let n=/^\s*command\s*=\s*(.+)$/m.exec(e);return n===null?null:cr(we(n[1]??""),Qe(e,"args"),t)}function Wp(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 Ti(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=Wp(a),l=Ri(a,c);Object.assign(l,jt(a,e.home)??{});let u=Ci(a);e.push({kind:"MCP_SERVER",name:i,path:s,content_hash:ir(i,l,u),origin:n,enabled:u,attributes:l})}}function Mi(e,t,n){if(!zp(t)||!e.claimFile(t))return;let r;try{r=Jp(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),l=c.search(/^\[mcp_servers(?:\.(?:\w+|"[^"]+"|'[^']+'))\]\s*$/m),u=l===-1?c:c.slice(0,l),p="unknown";/^\s*url\s*=/m.test(u)?p="http":/^\s*command\s*=/m.test(u)&&(p="stdio");let m=Ii(u,p);Object.assign(m,wi(u,e.home)??{});let f=ki(u);e.push({kind:"MCP_SERVER",name:a,path:o,content_hash:ir(a,m,f),origin:n,enabled:f,attributes:m})}}import{existsSync as Vp,readdirSync as Yp}from"node:fs";import{join as $}from"node:path";var Ni=50;function lr(e,t,n,r){if(!Vp(t))return{componentCount:0,expandTruncated:!1};let o=e.components.length,{expanded:s}=e.withPluginExpandCap(Ni,()=>{Ce(e,{dir:$(t,"skills"),kind:"SKILL",origin:n,enabled:r,nested:"SKILL.md"}),Ce(e,{dir:$(t,"commands"),kind:"COMMAND",origin:n,enabled:r,extensions:[".md"]}),Ce(e,{dir:$(t,"agents"),kind:"SUBAGENT",origin:n,enabled:r,extensions:[".md"]})});Te(e,$(t,"hooks","hooks.json"),n),Te(e,$(t,"hooks.json"),n);let i=e.components.length-o,a=s>=Ni;return{componentCount:i,expandTruncated:a}}function ur(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 Li(e){let t=$(e.home,".claude/plugins/installed_plugins.json"),n=e.readJson(t,{});if(!n)return;let r=n.plugins??{},s=e.readJson($(e.home,".claude/settings.json"),{})?.enabledPlugins??{},i=e.componentPath(t);for(let[a,c]of Object.entries(r)){if(e.truncated)return;let l=Array.isArray(c)?c:[c],u=l[0]??{},p=s[a]===!0,m=a.includes("@")?a.split("@").slice(1).join("@"):"",f=typeof u.version=="string"?u.version:"",h=typeof u.scope=="string"?u.scope:"user",S=`plugin:${a}`,_=0,E=!1;for(let w of l)if(typeof w.installPath=="string"&&w.installPath.length>0){let N=lr(e,w.installPath,S,p);_+=N.componentCount,E=E||N.expandTruncated}ur(e,{pluginKey:a,rowPath:i,enabled:p,scope:h,version:f||void 0,marketplace:m||void 0,componentCount:_,expandTruncated:E,contentHash:M(`${a}|${f}|${h}|${p}|${_}`)})}}function Xp(e){let t=e,n="";try{let r=Yp(e,{withFileTypes:!0}).filter(o=>o.isDirectory()).map(o=>o.name);if(r.length===1&&r[0])t=$(e,r[0]),n=r[0];else if(r.length>1){let o=[...r].sort(),s=o[o.length-1];s&&(t=$(e,s),n=s)}}catch{}return{installPath:t,version:n}}var Zp=/^\d+$/;function qp(e){let t=e.filter(n=>!Zp.test(n.pluginId));return t.length>0?t:e}function Ui(e){let t=[{base:$(e.home,".cursor/plugins/local"),scope:"local"},{base:$(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=$(n,o.name),l=`plugin:${a}`,{componentCount:u,expandTruncated:p}=lr(e,c,l,!0);ur(e,{pluginKey:a,rowPath:e.componentPath(c),enabled:!0,scope:"local",componentCount:u,expandTruncated:p,contentHash:M(`${a}|local|${u}`)});continue}let s=o.name,i=[];for(let a of e.readEntries($(n,s))){if(!a.isDirectory())continue;let c=$(n,s,a.name),{installPath:l,version:u}=Xp(c);i.push({pluginId:a.name,installPath:l,version:u})}for(let a of qp(i)){if(e.truncated)break;let c=`${a.pluginId}@${s}`,l=`plugin:${c}`,{componentCount:u,expandTruncated:p}=lr(e,a.installPath,l,!0);ur(e,{pluginKey:c,rowPath:e.componentPath(a.installPath),enabled:!0,scope:"cache",version:a.version||void 0,marketplace:s,componentCount:u,expandTruncated:p,contentHash:M(`${c}|${a.version}|${u}`)})}}}function ef(e,t){let{layout:n,levelDir:r,origin:o,includeMachineWide:s}=t;for(let i of n.skillRoots)Ce(e,{dir:Me(r,i),kind:"SKILL",origin:o,enabled:!0,nested:"SKILL.md"});for(let i of n.dirs)Ce(e,{dir:Me(r,i.dir),kind:i.kind,origin:o,enabled:!0,extensions:i.extensions});for(let i of n.memory){let a=fi(i.map(c=>Me(r,c)));a&&Nt(e,{absolutePath:a,kind:"MEMORY",origin:o,enabled:!0,name:Qp(a)})}for(let i of Yo(n))Te(e,Me(r,i),o);for(let i of n.mcpJson??[])Ti(e,Me(r,i),o);for(let i of n.mcpToml??[])Mi(e,Me(r,i),o);if(s){if(n.managed)for(let i of pt(n.managed,process.platform,e.home))i.toLowerCase().endsWith(".json")&&Te(e,i,o);n.plugins==="claude"?Li(e):n.plugins==="cursor"&&Ui(e)}}function Di(e,t){try{let n=new Mt(e,{pathMode:t.pathMode,maxEntries:t.maxEntries});for(let r of t.layouts)ef(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 dr(e,t,n={}){let r={},o=n.shouldWalk;if(o===void 0||o("user","")){let c=Di(t,{layouts:Object.values(Oe),levelDir:t,origin:"user",includeMachineWide:!0,pathMode:"home-relative",maxEntries:se,scopeRef:""});c&&(r.user=c)}let s=n.inGitRepo===!0,i=null,a=n.launchCwd;if(a!==void 0){let c=Object.values(le),l=qn({launchCwd:a,gitRoot:n.gitRoot,inGitRepo:s,remote:n.remote,home:t,hasProjectSpec:u=>Zo(c,u)});i=l.parentRel;for(let u of l.anchors){let p=zn(u.dir);if(o!==void 0&&!o(u.scope,p))continue;let m=Di(t,{layouts:c,levelDir:u.dir,origin:u.scope,includeMachineWide:!1,pathMode:"tilde",maxEntries:Qn,scopeRef:p});m&&(r[u.scope]=m)}r.parent||(i=null)}return{scopes:r,parentRel:i,cwdInGitRepo:s}}function pr(e,t,n={}){let r=n.truncated===!0,o=Ze(e),s=new Set(e.map(u=>J(u.path,u.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 u of e){let p=J(u.path,u.name);c[p]!==u.content_hash&&a.push(u)}let l=[];if(!r){for(let u of Object.keys(c))if(!s.has(u)){let p=Zs(u);p&&l.push(p)}}return{hash:o,count:e.length,truncated:r,full:!1,upserts:a,removed:l,unchanged:a.length===0&&l.length===0}}var Fi=2*1024*1024,tf=new Set(["HOOK","MCP_SERVER","PLUGIN"]);function fr(e,t,n){let r=new Set(t.map(s=>J(s.path,s.name))),o=[];for(let s of e)s.text!==void 0&&(n.has(s.content_hash)||r.has(J(s.path,s.name))||o.push(s));return o}function mr(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 Hi(e){return Buffer.byteLength(JSON.stringify(e),"utf8")}function ji(e){if(e.text===void 0)return e;let{text:t,...n}=e;return n}function gr(e,t=Fi){let n=[],r=[];for(let u of e)tf.has(u.kind)?n.push(u):r.push(u);r.sort((u,p)=>(u.text?.length??0)-(p.text?.length??0));let o=[...n,...r],s=[],i=2,a=0,c=0,l=[];for(let u of o){let p=s.length>0?1:0,m=Hi(u)+p;if(i+m<=t){s.push(u),i+=m,u.text!==void 0&&l.push(u.content_hash);continue}if(u.text!==void 0){let f=ji(u),h=Hi(f)+p;if(i+h<=t){s.push(f),i+=h,a+=1;continue}}c+=1}return{components:s,textDeferredCount:a,droppedCount:c,textHashesSent:l}}function hr(e,t){return t.size===0?e:e.map(n=>n.text===void 0||!t.has(n.content_hash)?n:ji(n))}var nf=["user","cwd","repo","parent"];function _r(e){let{collected:t,cacheFor:n,nowMs:r,maxBytes:o}=e,s=[];for(let x of nf){let O=t.scopes[x];if(!O)continue;let L=n(x,O.scopeRef),U=L.components,K=pr(O.components,U,{forceFull:U===void 0,truncated:O.truncated}),me=new Set(L.textHashes),D=fr(O.components,K.upserts,me),T=hr([...K.upserts,...D],me);s.push({scope:x,walk:O,delta:K,outgoing:T,outgoingKeys:new Set(T.map(y=>J(y.path,y.name))),deliveredTextHashes:me,cachedComponents:U})}let i=s.flatMap(x=>x.outgoing),a=gr(i,o),c=new Set(a.components.map(x=>J(x.path,x.name))),l=[],u=[],p=[],m=[],f=[],h=[],S=[];for(let x of s){let{scope:O,walk:L,delta:U}=x;h.push(...L.components),l.push(O);let K=a.components.filter(y=>x.outgoingKeys.has(J(y.path,y.name))),me=[...x.outgoingKeys].some(y=>!c.has(y)),D=U.truncated||me;D?p.push(O):U.full&&u.push(O),m.push(...K),!U.full&&!D&&f.push(...U.removed);let T=U.full?{}:{...x.cachedComponents??{}};if(!D)for(let y of U.removed)delete T[J(y.path,y.name)];for(let y of K)T[J(y.path,y.name)]=y.content_hash;S.push({scope:O,scopeRef:L.scopeRef,components:T,textHashes:mr(x.deliveredTextHashes,K.filter(y=>y.text!==void 0).map(y=>y.content_hash),L.components),collectedAtMs:r,included:K.length>0||U.removed.length>0&&!D||U.full})}let _={user_spec_hash:Ze(h),user_spec_count:h.length,user_spec_truncated:p.length>0};l.length>0&&(_.user_spec_scopes=l,_.user_spec_full_scopes=u,_.user_spec_truncated_scopes=p,_.user_spec_cwd_in_git_repo=t.cwdInGitRepo),u.length>0&&u.length===l.length&&(_.user_spec_full=!0),m.length>0&&(_.user_spec=m),f.length>0&&(_.user_spec_removed=f),a.textDeferredCount>0&&(_.user_spec_text_deferred=a.textDeferredCount);let E=t.scopes.cwd;E&&(_.user_spec_cwd_scope_ref=E.scopeRef);let w=t.scopes.repo;w&&(_.user_spec_repo_scope_ref=w.scopeRef);let N=t.scopes.parent;return N&&(_.user_spec_parent_scope_ref=N.scopeRef,t.parentRel&&(_.user_spec_parent_rel=t.parentRel)),{fields:_,scopes:S}}var nt={cwd:"cwd_spec",repo:"repo_spec",parent:"parent_spec"};function $t(e){return e==="cwd"||e==="repo"||e==="parent"}function tt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Sr(e){return!tt(e)||!tt(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 $i(e){return rf(e)}function Ki(e){return of(e)}function Bi(e){return sf(e)}function rf(e){if(!tt(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r=="string"&&(t[n]=r);return t}function of(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function yr(e,t){if(!tt(e))return;let n=e[t];return Sr(n)?n:void 0}function sf(e){if(!tt(e))return{};let t={};for(let[n,r]of Object.entries(e))Sr(r)&&(t[n]=r);return t}function Er(e,t=20){let n=[];for(let[r,o]of Object.entries(e))Sr(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 uf=200,Gi=200,df=["allow","deny","ask"],pf=/(?<=^|[\s(,=:])(?:~|[A-Za-z]:)?[\\/][^\s,)]+/g,Cr="<path>",ff=new RegExp(`${Cr}(?:\\s+[A-Za-z.][^\\s,)]*[\\\\/][^\\s,)]*)+`,"g");function mf(e){let t=e.replace(pf,Cr).replace(ff,Cr);return t.length>Gi?`${t.slice(0,Gi)}...`:t}function Bt(e){let t=H(e,{}),n=[];for(let r of df)for(let o of t.permissions?.[r]??[])typeof o=="string"&&o.length>0&&n.push({key:mf(o),mode:r});return{model:t.model??"",permissionKeys:n}}function gf(e){let{serverManaged:t,fileBased:n}=sn(process.platform,e),r=Bt(t);if(r.model||r.permissionKeys.length>0)return r;let o="",s=[];for(let i of n){let a=Bt(i);a.model&&(o=a.model),s.push(...a.permissionKeys)}return{model:o,permissionKeys:s}}function hf(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 _f=10,Sf=840*60*1e3,yf="self-config-cache.json",Ji=2;function kr(){return R("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off"}function Ef(){return R("EV_AI_HOOK_CWD_SPEC")?.toLowerCase()==="off"}function Rf(e,t=Date.now()){return e===void 0||!Number.isFinite(e)?!0:t-e>=Sf}var Cf={claude:["claude"],cursor:["agent","cursor-agent"],codex:["codex"]};async function kf(e,t=b){let n=Cf[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(`
|
|
28
|
-
`)[0]??"").trim();return
|
|
29
|
-
`);return
|
|
30
|
-
`)}catch(n){let r=n instanceof Error?n.message:String(n);d(`WARN: self-config cache write failed open: ${r}`)}}function vf(e,t,n){if(t==="user")return e.user_spec_collected_at_ms;if($t(t))return yr(e[nt[t]],n)?.collected_at_ms}function Pf(e,t,n){if(t==="user")return{components:$i(e.user_spec_components),textHashes:Ki(e.user_spec_text_hashes)};if(!$t(t))return{components:void 0,textHashes:[]};let r=yr(e[nt[t]],n);return r?{components:r.components,textHashes:r.text_hashes}:{components:void 0,textHashes:[]}}function bf(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=Ji,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(!$t(s.scope))continue;let i=nt[s.scope],a=Bi(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]=Er(a)}}return o}async function Wi(e,t=process.cwd(),n=zi(),r={}){let o=e==="claude",s=r.gitRoot??t,i=await kf(e),a="",c=[];if(o){let D=gf(n),T=Bt(Ne(n,".claude/settings.json")),y=Bt(Ne(t,".claude/settings.local.json"));a=D.model||y.model||T.model,c=hf([...D.permissionKeys,...T.permissionKeys,...y.permissionKeys]).slice(0,uf)}let l={present:!1,size:0},u=D=>{let T=[],y=!1;for(let Z of D){let it=Yr(Ne(n,Z));if(T=T.concat(it.entries),y=y||it.truncated,T.length>=se){T=T.slice(0,se),y=!0;break}}return{entries:T,truncated:y}},p=If(n),m=xf(p),f=m[e]??{},h=(f.send_count??0)+1,S=h>0&&h%_f===0,_=D=>S?void 0:f[D],E=u(de.skills),w=u(de.subagents),N=u(de.commands),x=u(de.rules),O={skills:Kt(E.entries,_("skills"),E.truncated),subagents:Kt(w.entries,_("subagents"),w.truncated),commands:Kt(N.entries,_("commands"),N.truncated),rules:Kt(x.entries,_("rules"),x.truncated)},L={runner_platform:e,config_scope:"user",cli_version:i,claude_version:o?i:null,model:o&&a||null,permission_keys:c,user_scope:{skills:O.skills,subagents:O.subagents,commands:O.commands,rules:O.rules,memory:Rr(n,de.memory),settings:Rr(n,de.settings,qo(n)),mcp:Rr(n,de.mcp)},local_settings:o?dn(Ne(t,".claude/settings.local.json")):l},U=null,K=r.nowMs??Date.now();if(!kr()){let D=f.user_spec_layout_version!==Ji,T=dr(e,n,{launchCwd:Ef()?void 0:r.launchCwd,gitRoot:s,inGitRepo:r.inGitRepo,remote:r.remote,shouldWalk:(y,Z)=>D||Rf(vf(f,y,Z),K)});if(Object.keys(T.scopes).length>0){let y=_r({collected:T,cacheFor:(Z,it)=>D?{components:void 0,textHashes:[]}:Pf(f,Z,it),nowMs:K});Object.assign(L,y.fields),U={hash:y.fields.user_spec_hash,home:y.scopes.find(Z=>Z.scope==="user")??null,project:y.scopes.filter(Z=>Z.scope!=="user")}}}let me=bf(f,O,h,U);return{config:L,commit:()=>{m[e]=me,Of(p,m)}}}function Le(e,t,n){let r={installation_id:n.installationId};return n.platformAgentId&&(r.platform_agent_id=n.platformAgentId),n.sessionId&&(r.session_id=n.sessionId),n.turnId&&(r.turn_id=n.turnId),{schema_version:2,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:q,host_arch:process.arch,node_version:process.version,correlation:r,payload:t}}import{existsSync as Yi}from"node:fs";import{spawn as Xi}from"node:child_process";import{basename as Tf}from"node:path";import{fileURLToPath as Mf}from"node:url";import{gzipSync as wf}from"node:zlib";function Ir(e){return R("EV_AI_HOOK_COMPRESS")==="off"?{body:e}:Buffer.byteLength(e,"utf8")<Lr?{body:e}:{body:wf(Buffer.from(e,"utf8")),contentEncoding:"gzip"}}function Gt(e){let t={"Content-Type":"application/json"};return e!==void 0&&(t["Content-Encoding"]=e),t}function Vi(e){return typeof e=="string"?Buffer.byteLength(e,"utf8"):e.length}var rt="__post",zt="__work";async function Nf(e,t,n={}){if(R("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off")return e;let r=await Wn(n.gitRoot??process.cwd(),b,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 Lf(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 Zi(e){switch(e){case"session_start":return br;case"session_end":return wr;case"tool_invoked":case"skill_invoked":return tn;default:return tn}}function Uf(e,t,n){return`${JSON.stringify({url:e,timeoutMs:t})}
|
|
31
|
-
${
|
|
32
|
-
`)
|
|
33
|
-
`,u=R("EV_AI_HOOK_DEBUG");u==="full"?d(`DEBUG envelope=${JSON.stringify(c)}`):u==="1"&&d(`DEBUG summary=${Lf(c,Buffer.byteLength(l,"utf8"))}`);let p=process.argv.includes(zt),m=R("EV_AI_HOOK_SYNC")==="1";return vt(n.runnerEvent,n.runnerPlatform)||p||m?Ff(e,l,o):(await jf(e,l,o),!1)}import{createReadStream as $f}from"node:fs";import{stat as Kf}from"node:fs/promises";import{basename as Bf,resolve as Gf}from"node:path";import{createInterface as zf}from"node:readline";var Jf=1024*1024;function Wf(e){let t=e.replace(/\\/g,"/");return t.includes("/.claude/projects/")&&Bf(t).endsWith(".jsonl")}async function ta(e){if(!e||!Wf(e))return null;try{let t=Gf(e),n=await Kf(t);if(!n.isFile())return null;let r=Math.max(0,n.size-Jf),o=[],s=zf({input:$f(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 l=c.message;if(!l||typeof l!="object")continue;let u=l.model;if(typeof u=="string"&&u.length>0)return u}catch{continue}}return null}catch{return null}}function Vt(e){return{sessionId:e.sessionId,turnId:e.turnId,installationId:e.manifest.installationId,runnerPlatform:e.runnerPlatform,platformAgentId:e.platformAgentId,runnerEvent:e.runnerEvent}}function st(e,t){return{gitRoot:e.manifest.gitRoot,...t?{home:t}:{}}}function Ar(e){return{gitRoot:e.manifest.gitRoot,inGitRepo:e.manifest.inGitRepo}}async function oa(e){let t=Date.now();await rm(e);let{gitRoot:n}=e.manifest;await Yt(e,n);let r=Ar(e);return{buildStartedAtMs:t,gitRoot:n,hookInput:wt(e.hookInput,e.manifest.manifest,r),envelopeFields:Vt(e),launchCwd:Xn(e.hookInput,r),home:Yf()}}function na(e){try{return z(Vf(e))}catch{return null}}function sa(e){return e.startsWith("/")||/^[A-Za-z]:\//.test(e)}function ra(e,t){let n=e.replaceAll("\\","/");if(!sa(n))return null;let r=z(e),o=z(t),s=na(e)??r,i=na(t)??o;return s.startsWith(`${i}/`)?s.slice(i.length+1):r.startsWith(`${o}/`)?r.slice(o.length+1):null}function Xf(e,t,n){if(!e)return{repositorySourcePath:null,userSourcePath:null};let r=e.replaceAll("\\","/"),s=ra(e,t)??(sa(r)?null:r),i=ra(e,n);return{repositorySourcePath:s,userSourcePath:i}}function Wt(e,t,n,r,o,s){let{repositorySourcePath:i,userSourcePath:a}=Xf(e,t,n),c=i??a,l=c===null?null:o(c),u=l!==null&&c!==null?Zf({installableKind:r,sourcePath:c,nativeKey:l,inRepository:i!==null,platformAgentId:s.platformAgentId,installationId:s.manifest.installationId}):void 0;return{sourcePath:c,nativeKey:l,componentReference:u}}function Zf(e){try{let t=e.inRepository?qf(e.platformAgentId,e.sourcePath):(0,I.installationRootExternalKey)(e.installationId,(0,I.userConfigRootFromPath)(e.sourcePath));return t?(0,I.buildComponentReference)({installationRootExternalKey:t,installableKind:e.installableKind,sourcePath:e.sourcePath,nativeKey:e.nativeKey}):void 0}catch{return}}function ia(e,t,n){return Ue("tool_invoked",{...n,success:null,duration_ms:null,hook_input:t.hookInput},t.envelopeFields,Le,e.manifest.collectorUrl,t.buildStartedAtMs,st(e,t.home))}var aa=new Set([...Object.values(Re),".github"]);function qf(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=>aa.has(i));return s<0?null:`${r}:${o.slice(0,s+1).join("/")}`}function Qf(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(h=>h.name.toLowerCase()===t.toLowerCase()),l=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")&&l)try{let h=(0,I.userConfigRootFromPath)(l);return(0,I.buildComponentReference)({installationRootExternalKey:(0,I.installationRootExternalKey)(r,h),installableKind:I.ComponentKind.INTERFACE,sourcePath:l,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),f=m.replaceAll("\\","/").split("/").at(-1);if(!(f===void 0||!aa.has(f)))try{return(0,I.buildComponentReference)({installationRootExternalKey:n,installableKind:I.ComponentKind.INTERFACE,sourcePath:m,nativeKey:t})}catch{return}}function em(...e){for(let t of e)if(t)return t;return null}function V(e,t,n){if(e.status==="fulfilled")return e.value;let r=e.reason instanceof Error?e.reason.message:String(e.reason);return d(`WARN: ${n} failed open: ${r}`),t}function tm(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 nm(e,t){return{runner_platform:e,config_scope:"user",...t?{operator:t}:{}}}var Ie=new Set,ot=null;async function rm(e){if(kr())return;let t=e.manifest.installationId,n=e.manifest.installationStorePath;if(Ie.has(t))return;if(!Vn(n)){Ie.add(t);return}let r=je({sessionId:e.sessionId,hostname:$e()});if(ei(r)){if(ot){await ot;return}ot=(async()=>{if(Ie.has(t)||!Vn(n)){Ie.add(t);return}if(!go(n)){Ie.add(t);return}let o=!1;try{let s=Date.now(),{gitRoot:i}=e.manifest,a=String(e.runnerPlatform),[c,l,u,p,m]=await Promise.allSettled([Je(i),mn(),Bn(r),gn(),Qs({gitRoot:i,installationStorePath:n,forceResend:!1,runnerPlatform:a})]),f=V(c,null,"gitSnapshot"),h=V(l,"","detectVirt"),S=V(u,null,"probeCloud"),_=V(p,{},"hostEnv"),E=V(m,{commit:()=>{}},"resolveOperatorForSend");await Yt(e,i,f);let w={identity:{host:$e(),context:r,virt:h||null,cloud:S,git:f},host_env:_,env_vars:Gn(),self_config:nm(a,E.operator),run_meta:{trigger:"cloud_identity_bootstrap"}};o=!!await Ue("session_start",w,Vt(e),Le,e.manifest.collectorUrl,s,st(e)),o&&(E.commit(),Ie.add(t))}finally{ho(n)}})().finally(()=>{ot=null}),await ot}}async function Yt(e,t,n){try{let r=n===void 0?await Je(t):n;e.platformAgentId=await ps(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);d(`WARN: derivePlatformAgentId failed open: ${o}`)}}async function om(e){let t=Date.now(),{gitRoot:n}=e.manifest,r=je({sessionId:e.sessionId,hostname:$e()}),o=String(e.runnerPlatform),s=Ar(e),i=Xn(e.hookInput,s),a=Je(n),[c,l,u,p,m,f]=await Promise.allSettled([a,mn(),Bn(r),gn(),Hn(e.manifest.manifest,n,o),a.catch(()=>null).then(K=>Wi(o,n,void 0,{installationStorePath:e.manifest.installationStorePath,gitRoot:n,launchCwd:i,inGitRepo:e.manifest.inGitRepo,remote:K?.remote??null}))]),h=V(c,null,"gitSnapshot"),S=V(l,"","detectVirt"),_=V(u,null,"probeCloud"),E=V(p,{},"hostEnv"),w=V(m,[],"mcpDeclared"),N=V(f,tm(o),"selfConfig"),x=N.config;await Yt(e,n,h);let O=g(e.hookInput,"model");O&&(x.model=O);let L={identity:{host:$e(),context:r,virt:S||null,cloud:_,git:h},host_env:E,env_vars:Gn(),mcp:{declared:w},self_config:x,run_meta:{trigger:e.hookSource||"startup"},hook_input:wt(e.hookInput,e.manifest.manifest,{...s,launchCwd:i})};await Ue("session_start",L,Vt(e),Le,e.manifest.collectorUrl,t,st(e))&&(N.commit(),Ie.add(e.manifest.installationId))}async function sm(e){let t=Date.now(),{gitRoot:n}=e.manifest;await Yt(e,n);let r=em(g(e.hookInput,"status"),g(e.hookInput,"stop_reason"),g(e.hookInput,"reason"),Ye(g(e.hookInput,"error"))),o=e.runnerPlatform==="claude"?await ta(g(e.hookInput,"transcript_path")):null,s=wt(e.hookInput,e.manifest.manifest,Ar(e));o&&(s.model=o),await Ue("session_end",{status:r,...o?{model:o}:{},hook_input:s},Vt(e),Le,e.manifest.collectorUrl,t,st(e))}function ca(e,t,n,r){let o=r??os({skillId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home}),s=Wt(o,t.gitRoot,t.home,I.ComponentKind.SKILL,I.nativeKeyForSkillPath,e);if(s.sourcePath!==null&&bn(s.sourcePath)?.toLowerCase()===n.toLowerCase())return s.componentReference===void 0?{}:{componentReference:s.componentReference};let i=r??_s({commandId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),a=Wt(i,t.gitRoot,t.home,I.ComponentKind.COMMAND,I.nativeKeyForCommandPath,e);return a.nativeKey?.toLowerCase()!==n.toLowerCase()?{}:{commandName:a.nativeKey,...a.componentReference===void 0?{}:{componentReference:a.componentReference}}}function im(e,t,n){let r=Rt(e.hookInput.tool_input);return Promise.all(n.map(o=>{let s=ca(e,t,o,r);return ia(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 am(e,t,n){return Promise.all(n.map(r=>{let o=fs({relativePath:r,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),s=Wt(o,t.gitRoot,t.home,I.ComponentKind.RULE,I.nativeKeyForRulePath,e),i=s.nativeKey??gs(r);return ia(e,t,{tool_name:"Rule",rule_name:i,...s.componentReference===void 0?{}:{component_reference:s.componentReference}})}))}var cm=[{kind:I.ComponentKind.SKILL,nativeKeyFn:I.nativeKeyForSkillPath},{kind:I.ComponentKind.RULE,nativeKeyFn:I.nativeKeyForRulePath},{kind:I.ComponentKind.COMMAND,nativeKeyFn:I.nativeKeyForCommandPath}];function lm(e,t,n){if(n.skillName===null&&n.ruleName===null&&n.commandName===null)return{};let r=Tn(e.hookInput);if(r===null)return n.skillName===null?{}:ca(e,t,n.skillName,null);for(let o of cm){let s=Wt(r,t.gitRoot,t.home,o.kind,o.nativeKeyFn,e);if(s.nativeKey!==null)return{...s.componentReference===void 0?{}:{componentReference:s.componentReference},...o.kind===I.ComponentKind.RULE?{ruleName:s.nativeKey}:{},...o.kind===I.ComponentKind.COMMAND?{commandName:s.nativeKey}:{}}}return{}}var um=/mcp/i;function dm(e,t,n,r){let o=um.test(e.runnerEvent);if(!r.hasMcpIdentity&&!o)return{};let s=o?bi(t,n):jt(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 pm(e){let t=await oa(e),n=Ps(e.hookInput,e.runnerEvent),{toolName:r,skillName:o}=n,s=wn(e.hookInput),i=vi(s,t.home),a=ws(e.hookInput),c=As(e.runnerEvent),l=c===!1?Ts(e.hookInput,e.runnerEvent):null,u=await Hn(e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home).catch(()=>[]),p=Ye(g(e.hookInput,"mcp_server_name")),{mcpServer:m,mcpTool:f}=Ms(r,u.map(L=>L.name),p??""),h=Qf(r,m,e.platformAgentId,e.manifest.installationId,String(e.runnerPlatform),u,p),S=h===void 0?lm(e,t,n):{},_=m===null?null:ks(m,e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home),E=dm(e,s,t.home,{hasMcpIdentity:!!m||!!f,declaredConfig:_}),w=h??S.componentReference,N=S.ruleName??n.ruleName,x=S.commandName??n.commandName,O=bs(e.hookInput);await Ue("tool_invoked",{tool_name:r,skill_name:o,...N?{rule_name:N}:{},...x?{command_name:x}:{},success:c,duration_ms:a,...i?{executable:i}:{},...l?{failure_reason:l}:{},...m?{mcp_server:m}:{},...f?{mcp_tool:f}:{},...E,...w?{component_reference:w}:{},...O?{subagent_type:O}:{},hook_input:t.hookInput},t.envelopeFields,Le,e.manifest.collectorUrl,t.buildStartedAtMs,st(e,t.home))}async function la(e){switch(e.internalEvent){case"session_start":await om(e);return;case"session_end":await sm(e);return;case"skill_invoked":{let t=ss(e.hookInput),n=hs(e.hookInput);if(t.length===0&&n.length===0)return;let r=await oa(e);await Promise.all([t.length===0?void 0:im(e,r,t),n.length===0?void 0:am(e,r,n)]);return}case"tool_invoked":await pm(e);return;default:return}}function ua(e){return e!=="session_start"&&e!=="session_end"&&e!=="tool_invoked"&&e!=="skill_invoked"&&e!==""}async function da(e,t,n,r){let o=t??await ln(nn),s=F(o,{}),i=g(s,"session_id")||g(s,"conversation_id"),a=await Ro(process.cwd(),{sessionId:i});if(!a)return;r&&(a.collectorUrl=r);let c=xs(s,a.manifest.platform,n),l=Os(e,c.runnerEvent);if(!l){d(`WARN: unknown hook event '${c.runnerEvent}'; skipping telemetry`);return}let u={hookInput:s,sessionId:c.sessionId,turnId:c.turnId,runnerEvent:c.runnerEvent,runnerPlatform:c.runnerPlatform,hookSource:c.hookSource,internalEvent:l,manifest:a,platformAgentId:a.platformAgentId};if(ua(l)){d(`WARN: unsupported internal event '${l}'`);return}await la(u)}function fm(e,t){if(R("EV_AI_HOOK_SYNC")==="1")return!0;let n=Ot(e),r=F(t,{}),o=n.event??(g(r,"hook_event_name")||g(r,"event")),s=Ve(r,o,void 0,n.runner);return vt(o,s)}async function pa(e=process.argv.slice(2)){if(e[0]===rt){try{await Jt(Fe)}catch{}return 0}if(e[0]===zt){try{let t=Ot(e.slice(1)),n=await Fe(),r=F(n,{}),o=t.event??(g(r,"hook_event_name")||g(r,"event"));if(pn()||$n(t.runner,r,o))return 0;await da(t.event,n,t.runner,jn(t))}catch(t){let n=t instanceof Error?t.message:String(t);d(`WARN: detached work failed open: ${n}`)}return 0}try{let t=await ln(nn),n=Ot(e),r=jn(n),o=F(t,{}),s=n.event??(g(o,"hook_event_name")||g(o,"event"));if(pn()||$n(n.runner,o,s)||!js(o,s,n.runner))return 0;fm(e,t)?await da(n.event,t,n.runner,r):await ea(t,e)}catch(t){let n=t instanceof Error?t.message:String(t);d(`WARN: hook failed open: ${n}`)}finally{Vr()}return 0}function Xt(){d("Usage: ev-ai-agent-hook <configure|install|migrate-to-plugin|update|uninstall|--version>"),d(" configure [--url <\u2026/{orgToken}/hook>]"),d(" (manifest only \u2014 pair with marketplace plugins)"),d(" install --url <\u2026/{orgToken}/hook>"),d(" [--delivery npx|binary|local] [--force]"),d(" [--no-claude] [--no-cursor] [--no-codex]"),d(" (fallback: merge hooks into .claude / .cursor / .codex configs)"),d(" (writes collector_url to shared manifest; hook commands use --runner only)"),d(" migrate-to-plugin"),d(" (strip ev-ai file hooks; keep collector manifest)"),d(" update (refresh binary pins from a local build; leaves hook configs alone)"),d(" uninstall"),d("Hook mode: --runner <platform> [--url <\u2026/hook>|--token <orgToken>] [event]"),d(" (--url/--token optional overrides; else collector_url from manifest)")}function fa(e){return e.includes("--help")||e.includes("-h")}async function Sm(e=process.argv.slice(2)){let[t,...n]=e;if(t===rt){try{await Jt(Fe)}catch{}return 0}return t==="--version"||t==="-V"?(process.stdout.write(`${q}
|
|
34
|
-
|
|
15
|
+
npx ${Et} install`)}function ns(e){return typeof e!="string"?!1:e.includes("@ev-ai/agent-hook")||e.includes("agent-hook/dist/hook")||e.includes(".ev-ai/agent-hook")||e.includes(q)||/(?:^|[\s/"'])ev-ai-agent-hook(?:$|[\s"'])/.test(e)}function Hn(e,t){return`${e.replace(/\s+--runner(?:=|\s+)\S+/g,"").trimEnd()} --runner ${t}`}function de(e,t){Un(Dn(e),{recursive:!0}),ml(e,`${JSON.stringify(t,null,2)}
|
|
16
|
+
`,"utf8")}function se(e){if(ue(e))try{return JSON.parse(pl(e,"utf8"))}catch(t){throw t instanceof SyntaxError?new Error(`Invalid JSON in ${e} \u2014 fix or remove the file`,{cause:t}):t}}function Ml(e,t){let n=$o(t.collectorUrl),r={...e,schema_version:e?.schema_version??n.schema_version};return t.collectorUrl!==void 0?r.collector_url=t.collectorUrl:r.collector_url=e?.collector_url??n.collector_url,delete r.repo_ingest_token,delete r.installation_id,r.mcp_servers??=n.mcp_servers,r}function Nl(e){return(e.schema_version??2)===2&&e.collector_url===void 0&&(e.mcp_servers?.length??0)===0&&e.platform_agent_id===void 0&&e.capture_hook_input===void 0&&e.repo_ingest_token===void 0}function rs(e,t){let n=P(e,St),r=se(n),o=Ml(r,t);return t.collectorUrl!==void 0||ue(n)||!Nl(o)?(de(n,o),{manifestPath:n,wrote:!0}):{manifestPath:void 0,wrote:!1}}function Ln(e){if(e===null||typeof e!="object")return!1;let t=e,n=String(t.CLAUDE_CODE_ENABLE_TELEMETRY??"").toLowerCase();return n==="1"||n==="true"?!0:Object.keys(t).some(r=>r.startsWith("OTEL_"))}function Ll(e){if(Ln(process.env))return!0;let t=oe();return[...hn(),P(t,".claude","settings.json"),P(t,".claude","remote-settings.json"),P(e,".claude","settings.json"),P(e,".claude","settings.local.json")].some(r=>{try{let o=se(r);return o?Ln(o.env):!1}catch{return!1}})}function Ul(e){try{let t=se(P(e,".claude","settings.json"));return t?Ln(t.env):!1}catch{return!1}}function os(e){return Array.isArray(e)?e:[]}function vt(e){let t=[],n=r=>!!r&&typeof r=="object"&&ns(r.command);for(let r of os(e)){if(!r||typeof r!="object"){t.push(r);continue}let o=Array.isArray(r.hooks)?r.hooks:[],s=o.filter(i=>!n(i));if(!(s.length===0&&o.some(n))){if(s.length!==o.length){t.push({...r,hooks:s});continue}t.push(r)}}return t}function ss(e,t){return[...vt(e),...t]}function Fn(e){return Array.isArray(e)?e.filter(t=>!t||typeof t!="object"?!0:!ns(t.command)):[]}function Dl(e,t){return[...Fn(e),{command:t}]}function Hl(e){return typeof e=="string"?[e]:e}function Fl(e){let t=()=>({hooks:Hl(e).map(n=>({type:"command",command:n}))});return{SessionStart:[t()],UserPromptExpansion:[t()],PreToolUse:[t()],PostToolUse:[t()],PostToolUseFailure:[t()],PermissionDenied:[t()],Stop:[t()],StopFailure:[t()],SessionEnd:[t()],SubagentStart:[t()],SubagentStop:[t()]}}function jl(e){let t=typeof e=="string"?{command:e}:e,n={type:"command",command:t.command,...t.commandWindows===void 0?{}:{commandWindows:t.commandWindows},statusMessage:eo},r=()=>({hooks:[n]});return{SessionStart:[r()],UserPromptSubmit:[r()],PreToolUse:[r()],PostToolUse:[r()],Stop:[r()]}}var $l=["sessionStart","beforeSubmitPrompt","preToolUse","postToolUse","postToolUseFailure","beforeShellExecution","beforeReadFile","beforeMCPExecution","subagentStart","subagentStop","stop"],Kl=["afterShellExecution","afterFileEdit"];function Bl(e,t=Kl){let n={...e};for(let r of t){if(!(r in n))continue;let o=Fn(n[r]);o.length===0?delete n[r]:n[r]=o}return n}function Gl(e,t,n={}){let r=P(e,".claude/settings.json"),o=Hn(t,"claude"),s=se(r)??{};if(Ll(e)&&!n.force){if(s.hooks&&typeof s.hooks=="object"){let l={...s.hooks};for(let p of Object.keys(l))l[p]=vt(l[p]),os(l[p]).length===0&&delete l[p];Object.keys(l).length===0?delete s.hooks:s.hooks=l,de(r,s)}return!1}let a=s.hooks&&typeof s.hooks=="object"?s.hooks:{},c=Fl(o),u={...a};for(let[l,p]of Object.entries(c))u[l]=ss(a[l],p);return s.hooks=u,de(r,s),!0}function zl(e,t){let n=P(e,".cursor/hooks.json"),r=Hn(t,"cursor"),o=se(n)??{},s=o.hooks&&typeof o.hooks=="object"?o.hooks:{},i=Bl({...s});for(let a of $l)i[a]=Dl(i[a],r);de(n,{...o,version:typeof o.version=="number"?o.version:1,hooks:i})}function Wl(e,t){let n=P(e,".codex/hooks.json"),r=Hn(t,"codex"),o=se(n)??{},s=o.hooks&&typeof o.hooks=="object"?o.hooks:{},i=jl(r),a={...s};for(let[c,u]of Object.entries(i))a[c]=ss(s[c],u);de(n,{...o,hooks:a})}function Jl(e){let t=P(e,".claude/settings.json"),n=se(t);if(!n?.hooks||typeof n.hooks!="object")return;let r={...n.hooks},o=!1;for(let s of Object.keys(r)){let i=r[s],a=vt(i);JSON.stringify(i)!==JSON.stringify(a)&&(o=!0),a.length===0?delete r[s]:r[s]=a}o&&(Object.keys(r).length===0?delete n.hooks:n.hooks=r,de(t,n),d(`Removed ev-ai hooks from ${t}`))}function Vl(e){let t=P(e,".cursor/hooks.json"),n=se(t);if(!n?.hooks||typeof n.hooks!="object")return;let r={...n.hooks},o=!1,s=0;for(let i of Object.keys(r)){let a=r[i],c=Fn(a);JSON.stringify(a)!==JSON.stringify(c)&&(o=!0),c.length===0?delete r[i]:(r[i]=c,s+=c.length)}if(o){if(s===0&&Object.keys(r).length===0&&Object.keys(n).filter(a=>a!=="hooks"&&a!=="version").length===0){Ot(t,{force:!0}),d(`Removed ${t}`);return}de(t,{...n,hooks:r}),d(`Removed ev-ai hooks from ${t}`)}}function Yl(e){let t=P(e,".codex/hooks.json"),n=se(t);if(!n?.hooks||typeof n.hooks!="object")return;let r={...n.hooks},o=!1,s=0;for(let i of Object.keys(r)){let a=r[i],c=vt(a);JSON.stringify(a)!==JSON.stringify(c)&&(o=!0),c.length===0?delete r[i]:(r[i]=c,s+=c.length)}if(o){if(s===0&&Object.keys(r).length===0&&Object.keys(n).filter(a=>a!=="hooks").length===0){Ot(t,{force:!0}),d(`Removed ${t}`);return}de(t,{...n,hooks:r}),d(`Removed ev-ai hooks from ${t}`)}}function jn(e=process.platform,t=process.arch,n={}){if(e==="win32")throw new Error("Windows install is not supported yet. Use macOS/Linux, or wait for phase-2 native commands.");(n.requireBinaryArch??!0)&&Ko(e,t)}async function is(e={}){let t=El(e);e.collectorUrl=t;let n=e.skipClaude===!0,r=e.skipCursor===!0,o=e.skipCodex===!0;if(n&&r&&o)throw new Error("at least one runner must be wired; refuse --no-claude --no-cursor --no-codex together");let s=e.delivery??qo();jn(process.platform,process.arch,{requireBinaryArch:s==="binary"});let i=e.cwd??process.cwd(),a=await re(i),{command:c,hookPath:u,strategy:l}=Tl(a,oe(),s),{installationId:p,storePath:m}=await xt(a,{overrideId:e.installationId}),{manifestPath:f,wrote:_}=rs(a,e),S=[];return n?d("Skipped Claude hook \u2014 --no-claude"):Gl(a,c,{force:e.force})?(S.push("Claude"),e.force&&Ul(a)&&d("Forced Claude hook despite project native OTEL \u2014 expect duplicate session/tool events")):d("Skipped Claude hook \u2014 native OTEL telemetry already enabled (avoids duplicate events); pass --force to wire anyway"),r?d("Skipped Cursor hook \u2014 --no-cursor"):(zl(a,c),S.push("Cursor")),o?d("Skipped Codex hook \u2014 --no-codex"):(Wl(a,c),S.push("Codex")),d(`Installed hook (${l}) at ${u}`),d(`Installation identity ${p} at ${m}`),_&&f?d(`Shared manifest written to ${f}`):d("Using package default collector config (no shared manifest file needed)"),d(S.length>0?`Wired ${S.join(", ")} hooks in ${a} (commands include --runner)`:`No runner hooks wired in ${a} (Claude skipped by OTEL; Cursor/Codex excluded via flags)`),l==="npx"?d("Hook commands use npx and may be committed; teammates need Node on PATH only (no install step, no env vars when collector_url is in the shared manifest)."):l==="project_binary"?d("Hook commands are git-root-relative and may be committed; each collaborator runs install once to populate .ev-ai/agent-hook/ (gitignored)."):l==="dev_mjs"&&d("Hook commands use node + monorepo packages/agent-hook/dist/hook.mjs (local delivery; rebuild with yarn workspace @ev-ai/agent-hook build)."),_&&f&&e.collectorUrl&&d("Shared manifest includes collector_url \u2014 commit it with hook configs so teammates post without env vars."),{gitRoot:a,hookPath:u,manifestPath:f,installationStorePath:m,strategy:l}}async function as(e=process.cwd()){jn(process.platform,process.arch,{requireBinaryArch:!0});let t=await re(e),{projectPath:n,globalPath:r}=bl(t);d(`Refreshed ${r}`),d(`Refreshed ${n}`),d("Hook configs and shared manifest left unchanged")}async function cs(e={}){let t=yl(e);e.collectorUrl=t,jn(process.platform,process.arch,{requireBinaryArch:!1});let n=e.cwd??process.cwd(),r=await re(n),{manifestPath:o,wrote:s}=rs(r,e);if(t!==void 0&&(!o||!s))throw new Error("configure failed to write shared collector manifest");return s&&o?d(`Wrote ${o}`):t===void 0&&d("No --url given and no shared manifest yet \u2014 pass --url <\u2026/{orgToken}/hook> to write collector destination."),d("Manifest only \u2014 enable ev-ai marketplace plugins. Do not also run file-wiring install for the same events."),{gitRoot:r,manifestPath:o}}function ls(e){for(let t of[()=>Jl(e),()=>Vl(e),()=>Yl(e)])try{t()}catch(n){let r=n instanceof Error?n.message:String(n);d(`WARN: strip skipped a hook file: ${r}`)}}async function us(e=process.cwd()){let t=await re(e);return ls(t),d("Stripped ev-ai file-wired hooks; shared collector manifest left in place."),d("Next: enable ev-ai marketplace plugins, then restart runners."),{gitRoot:t}}async function ds(e=process.cwd()){let t=await re(e);ls(t);for(let n of Tn){let r=P(t,n);if(ue(r))try{Ot(r,{force:!0}),d(`Removed ${r}`)}catch(o){let s=o instanceof Error?o.message:String(o);d(`WARN: uninstall could not remove ${r}: ${s}`)}}}import{createHash as Wd}from"node:crypto";import{existsSync as Jd,mkdirSync as Vd,readdirSync as Yd,readFileSync as ii,unlinkSync as ai,writeFileSync as qd}from"node:fs";import{homedir as ci}from"node:os";import{join as ir}from"node:path";import{existsSync as iu}from"node:fs";import{existsSync as ql}from"node:fs";import{homedir as fs}from"node:os";import{join as Xl}from"node:path";function ms(e){return e.settings.filter(t=>t.toLowerCase().endsWith(".json"))}var Zl={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 ps(e,t){if(!(!e&&!t))return[...e??[],...t??[]]}function Ql(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:ps(n.mcpJson,t.mcpJson),mcpToml:ps(n.mcpToml,t.mcpToml),plugins:t.plugins??n.plugins,managed:t.managed??n.managed}}function gs(e){return Object.fromEntries(Object.entries(Zl).map(([t,n])=>[t,Ql(n,n[e])]))}var Te=gs("homeOnly"),fe=gs("projectOnly");function eu(e){return[...e.skillRoots,...e.dirs.map(t=>t.dir),...e.memory.flat(),...e.settings,...e.mcpJson??[],...e.mcpToml??[]]}function tu(e,t){return eu(e).some(n=>ql(Xl(t,n)))}function hs(e,t){for(let n of e)if(tu(n,t))return!0;return!1}function pe(e){return[...new Set(e)]}function me(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:pe(t),subagents:pe(n),commands:pe(r),rules:pe(o),memory:pe(s),settings:pe(i),mcp:pe(a)}}function nu(e,t=fs(),n=process.platform){let r=[];for(let o of e)o.managed&&r.push(...It(o.managed,n,t));return pe(r)}var ge=me(Object.values(Te));function _s(e=fs(),t=process.platform){return nu(Object.values(Te),e,t)}import{existsSync as ru}from"node:fs";import{resolve as $n}from"node:path";function z(e){return $n(e).replaceAll("\\","/").replace(/\/$/,"")}function ke(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 bt(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 ou=/^(?!\.)[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*$/;function qe(e){let t=e.replaceAll("\\","/").replace(/^\.\//,"");return!t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")||!ou.test(t)?null:t}function Me(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 su(e,t){let n=`${e}/`;return t===e||t.startsWith(n)}function Z(e,t,n,r=ru){for(let o of e)for(let s of t){let i=z($n(o,s)),a=$n(o,s,n).replaceAll("\\","/");if(su(i,a)&&r(a))return a}return null}var ys=/(?:^|\/|[\s"'=(])(?:\.cursor\/|\.claude\/|\.agents\/)skills(?:-cursor)?\/([^/]+)\/SKILL\.md/i,Es=/(?:^|\/|[\s"'=(])\.codex\/commands\/([^/]+)\.md\b/i,au=/(?:^|\s)\/([a-z][a-z0-9-]{1,63}(?:\/[a-z][a-z0-9-]{1,63}){0,5})\b/gi,Ss=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"]),cu=/^[a-z][a-z0-9-]{1,63}$/,lu=[".cursor/skills",".claude/skills",".agents/skills"],uu=[".cursor/skills",".cursor/skills-cursor",".claude/skills",".agents/skills"],du=ke(lu,me(Object.values(fe)).skills),pu=ke(uu,me(Object.values(Te)).skills),fu=new Set(["read","read_file","view"]),mu=new Set(["bash","shell","zsh"]);function Kn(e){let t=e.replace(/\\/g,"/");return ys.exec(t)?.[1]??null}function gu(e){let t=e.replace(/\\/g,"/"),r=Es.exec(t)?.[1];return r?r.toLowerCase():null}function hu(e){return Kn(e)??gu(e)}function _u(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 wt(e){return typeof e=="string"?wt(j(e,null)):!e||typeof e!="object"?null:_u(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 Bn(e){let t=Rs(e.tool_input);if(t)return t;let n=ye(e.command);return n.length>0?n:null}function Su(e){let t=e.replace(/\\/g,"/"),n=ys.exec(t);if(n?.[1])return n[1];let o=Es.exec(t)?.[1];return o?o.toLowerCase():null}function yu(e){return typeof e.tool_name=="string"?e.tool_name:typeof e.tool=="string"?e.tool:""}function Gn(e){let t=wt(e.tool_input)??ye(e.file_path);return t.length>0?t:null}function Xe(e,t,n){let r=yu(e).toLowerCase();if(fu.has(r)){let o=Gn(e);return o?t(o):null}if(mu.has(r)){let o=Bn(e);return o?n(o):null}return null}function Cs(e){return Xe(e,hu,Su)}function Eu(e){let t=new Set,n=[];for(let r of e.matchAll(au)){let o=r[1]?.toLowerCase();!o||t.has(o)||Ru(o)||(t.add(o),n.push(o))}return n}function Ru(e){let t=e.split("/")[0];return Ss.has(e)||t!==void 0&&Ss.has(t)}function Is(e){let t=e.skillId.toLowerCase();if(!cu.test(t))return null;let n=e.exists??iu,r=`${t}/SKILL.md`,o=Z(Me(e.launchCwd,e.gitRoot),du,r,n);return o!==null?o:e.home?Z([z(e.home)],pu,r,n):null}function Cu(e){return ye(e.prompt)}function ks(e){let t=g(e,"command_name");if(t){let r=g(e,"expansion_type");if(r&&r!=="slash_command")return[];let o=t.replace(/^\//,"").toLowerCase();return o?[o]:[]}let n=Cu(e);return n?Eu(n):[]}var Xn=Be(Le(),1);import{existsSync as _d}from"node:fs";var xe={claude:".claude",cursor:".cursor",codex:".codex",opencode:".opencode"};function Qe(e){let n=e.replace(/^\/+|\/+$/g,"").toLowerCase().split("/").filter(Boolean);return n.length<2?"":n.join("/")}function hd(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 Qe(n[1]);let r=t.match(/^ssh:\/\/[^/]+\/(.+)$/i);if(r?.[1])return Qe(r[1]);t=t.replace(/^https:\/\//i,""),t=t.replace(/^http:\/\//i,""),t=t.replace(/^ssh:\/\//i,"");let o=t.match(/^[^/]+\/(.+)$/);return o?.[1]?Qe(o[1]):Qe(t)}async function et(e=process.cwd()){let t=await V("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([V("git",["remote","get-url","origin"],2e3,{cwd:e}),V("git",["branch","--show-current"],2e3,{cwd:e}),V("git",["rev-parse","HEAD"],2e3,{cwd:e}),V("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 Hs(e,t,n,r=process.cwd(),o,s,i){if(t)return t;let a=xe[n];if(!a)return"";let c=Oo(n,e.scope_path,i);if(s){let _=Lo(s,c);if(_)return _}let u=o??await et(r),l=u?.remote?hd(u.remote):"";if(l||(l=Qe(process.env.GITHUB_REPOSITORY??"")),!l)return"";let p=e.scope_path??"",m=p?`${p}/`:"",f=`${l}:${m}${a}`;return s&&Uo(s,c,f),f}var Sd=[".cursor/rules",".claude/rules",".codex/rules"],yd=me(Object.values(fe)).rules;function Ed(e){return ke(bt(e?xe[e]:void 0,Sd),yd)}var Rd=/(?:^|\/|[\s"'=(])((?:\.cursor|\.claude|\.codex)\/rules\/[^'"\s]+?\.(?:mdc|md|rules))\b/i;function Fs(e){let t=qe(e.relativePath);if(!t)return null;let n=e.exists??_d,r=Me(e.launchCwd,e.gitRoot),o=Ed(e.runnerPlatform),s=Z(r,o,t,n);if(s!==null)return s;if(!t.includes("/")){let i=Z(r,["."],t,n);if(i!==null)return i}return e.home?Z([z(e.home)],o,t,n):null}function Cd(e){let t=e.replace(/\\/g,"/"),r=Rd.exec(t)?.[1];return r?(0,Xn.nativeKeyForRulePath)(r):null}function js(e){return Xe(e,Xn.nativeKeyForRulePath,Cd)}function $s(e){return e.replace(/\.(mdc|md|rules)$/i,"")}function Ks(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=qe(i);!a||n.has(a)||(n.add(a),r.push(a))}return r}var Zn=Be(Le(),1);import{existsSync as Id}from"node:fs";var kd=[".cursor/commands",".claude/commands",".codex/prompts"],Ad=me(Object.values(fe)).commands;function xd(e){return ke(bt(e?xe[e]:void 0,kd),Ad)}var Od=/(?:^|\/|[\s"'=(])((?:\.cursor|\.claude|\.codex)\/(?:commands|prompts)\/[^'"\s]+?\.(?:md|mdc))\b/i;function Bs(e){let t=qe(e.commandId);if(!t)return null;let n=e.exists??Id,r=`${t}.md`,o=xd(e.runnerPlatform),s=Z(Me(e.launchCwd,e.gitRoot),o,r,n);return s!==null?s:e.home?Z([z(e.home)],o,r,n):null}function Pd(e){let t=e.replace(/\\/g,"/"),r=Od.exec(t)?.[1];return r?(0,Zn.nativeKeyForCommandPath)(r):null}function Gs(e){return Xe(e,Zn.nativeKeyForCommandPath,Pd)}import{existsSync as Ws}from"node:fs";import{homedir as Js}from"node:os";import{join as tt,resolve as Qn,sep as zs}from"node:path";function er(e){return[...new Set([e,e.replaceAll(/[^A-Za-z0-9_-]/g,"_"),e.replaceAll(/[^A-Za-z0-9_-]+/g,"_")])]}function tr(e,t){let n=t.toLowerCase();return er(e).some(r=>r.toLowerCase()===n)}function Nt(e,t,n){if(!Ws(e))return;let r=U(e,{});for(let[o,s]of Object.entries(r.mcpServers??{}))n.set(o,{declared:{name:o,...t},config:s})}function vd(e,t,n){if(!Ws(e))return;let r=U(e,{}),o=Qn(t),s=null;for(let a of Object.keys(r.projects??{})){let c=Qn(a);(o===c||o.startsWith(c.endsWith(zs)?c:c+zs))&&(s===null||c.length>Qn(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 Vs(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"?(Nt(tt(r,".claude.json"),{source:"claude_json_user"},o),vd(tt(r,".claude.json"),t,o)):n==="cursor"&&Nt(tt(r,".cursor/mcp.json"),{source:"cursor_mcp_user"},o),Nt(tt(t,".mcp.json"),{source:"mcp_json"},o),Nt(tt(t,".cursor/mcp.json"),{source:"cursor_mcp"},o),o}async function nr(e,t=process.cwd(),n="claude",r=Js()){return[...Vs(e,t,n,r).values()].map(o=>o.declared)}function Ys(e,t,n=process.cwd(),r="claude",o=Js()){let s=Vs(t,n,r,o),i=s.get(e);if(i!==void 0)return i.config??null;for(let[a,c]of s)if(tr(a,e))return c.config??null;return null}function rr(e){return e!==void 0&&to.includes(e)}function Lt(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function Ut(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=Lt(e,i);t=c.value,i=c.next;continue}if(a.startsWith("--runner=")){t=a.slice(9);continue}if(a==="--url"){let c=Lt(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=Lt(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=Lt(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:rr(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function or(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=ze(n);if(r){d(`WARN: ignoring --url/--token collector override: ${r}`);return}return We(n)}function qs(e,t){if(g(e,"conversation_id"))return!0;if(t==="")return!1;let n=t[0];return n?.toLowerCase()===n}function bd(){return!!(C("CURSOR_VERSION")??C("CURSOR_PROJECT_DIR"))}function sr(e,t,n){return e!=="claude"&&e!=="codex"?!1:qs(t,n)?!0:bd()}function nt(e,t,n,r){if(qs(e,t))return"cursor";if(rr(r))return r;let o=g(e,"conversation_id"),s=g(e,"turn_id"),i=g(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")&&(c="claude"),rr(n)&&(c=n),c}function Dt(e,t){let n=e.toLowerCase();return n==="sessionend"||n==="stopfailure"||n==="subagentstop"?!0:n==="stop"&&t==="codex"}function wd(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 Xs(e){let t=e.toLowerCase();return t==="posttooluse"?!0:t==="posttoolusefailure"||t==="permissiondenied"?!1:null}function Zs(e,t,n){let r=g(e,"session_id")||g(e,"conversation_id"),o=g(e,"prompt.id")||g(e,"prompt_id")||g(e,"generation_id")||g(e,"turn_id"),s=g(e,"hook_event_name")||g(e,"event"),i=g(e,"source"),a=nt(e,s,t,n);return{sessionId:r,turnId:o,runnerEvent:s,hookSource:i,runnerPlatform:a}}var Td=["session_start","session_end","tool_invoked","skill_invoked"];function Md(e){return Td.includes(e)}function Qs(e,t){return e&&Md(e)?e:wd(t.toLowerCase())}var Nd={beforeshellexecution:"Shell",aftershellexecution:"Shell",beforereadfile:"Read",afterfileedit:"Write"};function ei(e){return/^mcp__/i.test(e)||/^MCP:/i.test(e)}function ti(e,t=""){let n=g(e,"tool_name")||g(e,"tool")||null,r=t.toLowerCase();n?r==="beforemcpexecution"&&!ei(n)&&(n=`MCP:${n}`):n=Nd[r]??null;let o=e.tool_input,i=(o&&typeof o=="object"?ye(o.skill)||ye(o.skill_name):"")||g(e,"skill_name")||null,a=n&&e.tool_name!==n&&e.tool!==n?{...e,tool_name:n}:e;i??=Cs(a);let c=js(a),u=Gs(a);return{toolName:n,skillName:i,ruleName:c,commandName:u}}var Ld=/^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/;function ni(e){for(let t of["subagent_type","agent_type"]){let n=g(e,t);if(n&&Ld.test(n))return n}return null}function ri(e){let t=Ee(e,"duration_ms");if(typeof t=="number")return t;let n=Ee(e,"duration");return typeof n=="number"?n:null}var Ud="error",Dd="interrupted",Hd="permission_denied",Fd=/^[A-Za-z][A-Za-z0-9_.-]{0,63}$/;function rt(e){return Fd.test(e)?e:null}function jd(e){for(let t of["failure_type","error_type"]){let n=rt(g(e,t));if(n)return n}return null}function oi(e,t){return Ee(e,"is_interrupt")===!0?Dd:t.toLowerCase()==="permissiondenied"?Hd:jd(e)??Ud}function $d(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 Kd(e,t){let n=null;for(let r of t)!r||!tr(r,e)||(n===null||r.length>n.length)&&(n=r);return n}function Bd(e,t){let n=null,r=0;for(let s of t)if(s)for(let i of er(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:Kd(o[1],t)??o[1],mcpTool:o[2]}}function Gd(e,t){if(/^mcp__/i.test(e))return Bd(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:$d(n,t),mcpTool:n}}return{mcpServer:null,mcpTool:null}}function zd(e,t){let n=`${t}__`;return e.length>n.length&&e.toLowerCase().startsWith(n.toLowerCase())?e.slice(n.length):e}function si(e,t=[],n=""){let r=e?Gd(e,t):{mcpServer:null,mcpTool:null},o=rt(n.trim());if(!o)return r;let s=r.mcpTool;return!s&&e&&!ei(e)&&(s=e),s&&(s=zd(s,o)),{mcpServer:o,mcpTool:s}}var li=3e4,Xd="claims",Zd=!0,Qd=100,ep=new Set(["sessionstart","sessionend","stopfailure"]),tp=["tool_name","tool","command","file_path","url"];function np(e=ci()){return ir(Re(e),Xd)}function ui(e){let t=e.split(`
|
|
17
|
+
`,1)[0]??"";return Number(t.trim())}function di(e){return Wd("sha256").update(e).digest("hex").slice(0,32)}function rp(e){let t=[];for(let n of tp){let r=g(e,n).trim();r&&t.push(`${n}=${r}`)}return t.length===0?"":di(t.join("\0"))}function op(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=ep.has(n);if(!a&&!c)return;let u=e.runnerPlatform.trim()||"unknown";return di(`${u}|${t}|${n}|${r}|${o}|${i}|${s}`)}function sp(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function ip(e,t){return ir(e,t)}function ap(e,t=Date.now()){let n;try{n=Yd(e)}catch{return}let r=0;for(let o of n){if(r>=Qd)break;r+=1;let s=ir(e,o),i=Number.NaN;try{i=ui(ii(s,"utf8"))}catch{continue}let a=t-i;if(!(!Number.isFinite(a)||a<0||a<li))try{ai(s)}catch{}}}function cp(e,t,n=Date.now()){let r=ip(t,e);try{if(Jd(r)){let o=Number.NaN;try{o=ui(ii(r,"utf8"))}catch{}let s=n-o;if(Number.isFinite(s)&&s>=0&&s<li)return!1;try{ai(r)}catch{}}}catch{}try{Vd(t,{recursive:!0}),qd(r,`${n}
|
|
18
|
+
`,{encoding:"utf8",flag:"wx"})}catch(o){if(sp(o))return!1;let s=o instanceof Error?o.message:String(o);return d(`WARN: event claim failed open: ${s}`),!0}return ap(t,n),!0}function lp(e,t,n){let r=g(e,"session_id")||g(e,"conversation_id"),o=g(e,"prompt.id")||g(e,"prompt_id")||g(e,"generation_id")||g(e,"turn_id"),s=g(e,"tool_use_id"),i=g(e,"subagent_id")||g(e,"agent_id"),a=nt(e,t,void 0,n),c=rp(e);return{runnerPlatform:a,sessionId:r,runnerEvent:t,turnId:o,toolUseId:s,subagentId:i,callFingerprint:c}}function pi(e,t,n,r=ci(),o=Date.now()){if(!Zd)return!0;let s=op(lp(e,t,n));if(!s)return!0;let i=cp(s,np(r),o);return!i&&C("EV_AI_HOOK_DEBUG")&&d(`DEBUG: duplicate hook event suppressed (claim ${s.slice(0,8)}\u2026)`),i}import{realpathSync as ug}from"node:fs";import{homedir as dg}from"node:os";var A=Be(Le(),1);import{existsSync as up,readFileSync as dp}from"node:fs";import{homedir as fi}from"node:os";import{join as pp}from"node:path";var fp="cloud-cache.json",mp=1440*60*1e3,gp=900*1e3;function hp(e=fi()){return pp(Re(e),fp)}function _p(e){if(!up(e))return;let t=j(dp(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 Sp(e,t){try{X(e,`${JSON.stringify(t)}
|
|
19
|
+
`)}catch(n){let r=n instanceof Error?n.message:String(n);d(`WARN: cloud cache write failed open: ${r}`)}}function yp(e,t,n){if(!e||e.context!==t)return!1;let r=e.result===null?gp:mp;return n-e.probed_at<r}async function Ep(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 Rp(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 Cp(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 Ip(e){let t=await Promise.allSettled([Ep(e),Rp(e),Cp(e)]);for(let n of t)if(n.status==="fulfilled"&&n.value)return n.value;return null}async function ar(e,t){if(e==="interactive")return null;let n=t?.home??fi(),r=t?.timeoutMs??1e3,o=t?.nowMs??Date.now(),s=hp(n),i=_p(s);if(yp(i,e,o))return i.result;let a=await Ip(r);return Sp(s,{context:e,probed_at:o,result:a}),a}var kp=["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"],Ap=["CURSOR_PROJECT_DIR"],xp=new Set(["key","api-key","api_key","apikey","token","sig","signature","access_token","password","pwd","secret","client_secret"]);function Op(e){try{let t=new URL(e);(t.username||t.password)&&(t.username="",t.password="");for(let[n]of t.searchParams)xp.has(n.toLowerCase())&&t.searchParams.set(n,"[redacted]");return t.toString()}catch{return e}}function cr(e=process.env){let t=kp.map(r=>Object.prototype.hasOwnProperty.call(e,r)?{name:r,present:!0,value:Op(e[r]??"")}:{name:r,present:!1}),n=Ap.map(r=>({name:r,present:Object.prototype.hasOwnProperty.call(e,r)&&!!e[r]}));return[...t,...n]}import{homedir as rf}from"node:os";import{homedir as mi}from"node:os";import{join as Pp}from"node:path";function vp(e=mi()){return Pp(e,".claude.json")}function Ht(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function gi(e=mi()){let n=U(vp(e),{}).oauthAccount;if(!n||typeof n!="object")return null;let r=Ht(n.emailAddress),o=Ht(n.fullName)??Ht(n.displayName),s=Ht(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 Si}from"node:os";import{join as hi}from"node:path";var bp="https://api.openai.com/auth";function Ue(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function yi(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function wp(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 yi(r)}catch{return null}}function _i(e,t,n){return Ue(e[n])??Ue(t?.[n])}function Tp(e=process.env,t=Si()){let n=Ue(e.CODEX_HOME)??hi(t,".codex");return hi(n,"auth.json")}function Ei(e=process.env,t=Si()){let n=U(Tp(e,t),{}),r=Ue(n.auth_mode);if(r!==null&&r!=="chatgpt"||r===null&&Ue(n.OPENAI_API_KEY))return null;let o=Ue(n.tokens?.id_token);if(!o)return null;let s=wp(o);if(!s)return null;let i=yi(s[bp]),a=_i(s,i,"name"),c=_i(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 $t}from"node:os";import{join as ae}from"node:path";import{join as Mp}from"node:path";var Np="cursor-ide-identity.json",Lp=Ge;function Ci(e){return Mp(Re(e),Np)}function Ri(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function Ii(e){let t=U(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:Ri(t.email),auth_id:Ri(t.auth_id)}}function ki(e,t,n){if(e?.db_path!==t)return!1;let r=n-e.read_at_ms;return r>=0&&r<Lp}function Ai(e,t){try{X(e,`${JSON.stringify(t)}
|
|
20
|
+
`)}catch(n){let r=n instanceof Error?n.message:String(n);d(`WARN: cursor IDE identity cache write failed open: ${r}`)}}import{execFileSync as Up}from"node:child_process";import{existsSync as Dp}from"node:fs";import{createRequire as Hp}from"node:module";import{pathToFileURL as Fp}from"node:url";var Oi=Hp(import.meta.url),Ft=`
|
|
21
|
+
SELECT key, value
|
|
22
|
+
FROM ItemTable
|
|
23
|
+
WHERE key LIKE 'cursorAuth/%'
|
|
24
|
+
AND key NOT LIKE '%Token%'
|
|
25
|
+
AND key NOT LIKE '%token%'
|
|
26
|
+
ORDER BY key
|
|
27
|
+
`.trim(),lr=new Map;function xi(e){if(typeof e=="string"){let t=e.trim();return t.length>0?t:null}if(e instanceof Uint8Array){let t=Buffer.from(e).toString("utf8").trim();return t.length>0?t:null}return null}function Pi(e){return e.toLowerCase().includes("token")}function vi(e){let t=new Map;if(!Array.isArray(e))return t;for(let n of e){if(n===null||typeof n!="object")continue;let r=n,o=xi(r.key),s=xi(r.value);o&&s&&!Pi(o)&&t.set(o,s)}return t}function jp(e){let t=Fp(e);return t.search="mode=ro&immutable=1",t.href}function $p(e){try{let t=Oi("bun:sqlite");if(typeof t.Database!="function")return null;let n=new t.Database(e,{readonly:!0,create:!1});try{let r=n.query?.(Ft)??n.prepare(Ft);return vi(r.all?.())}finally{n.close?.()}}catch{return null}}function Kp(e){let t=process.emitWarning.bind(process);process.emitWarning=((n,...r)=>{(typeof n=="string"?n:n instanceof Error?n.message:"").includes("SQLite is an experimental feature")||t(n,...r)});try{return e()}finally{process.emitWarning=t}}function Bp(e){try{return Kp(()=>{let t=Oi("node:sqlite");if(typeof t.DatabaseSync!="function")return null;let n=new t.DatabaseSync(e,{readOnly:!0});try{return vi(n.prepare(Ft).all?.())}finally{n.close?.()}})}catch{return null}}function Gp(e){let t=new Map;for(let n of e.split(`
|
|
28
|
+
`)){let r=n.trimEnd();if(!r)continue;let o=r.indexOf(" ");if(o<=0)continue;let s=r.slice(0,o).trim(),i=r.slice(o+1).trim();s&&i&&!Pi(s)&&t.set(s,i)}return t}function zp(e){try{let t=Up("sqlite3",["-noheader","-batch","-separator"," ",e,Ft],{encoding:"utf8",timeout:2e3,maxBuffer:65536,windowsHide:!0,stdio:["ignore","pipe","ignore"]});return Gp(t)}catch{return null}}function bi(e){let t=lr.get(e);if(t)return t;if(!Dp(e)){let o=new Map;return lr.set(e,o),o}let n=jp(e),r=$p(n)??zp(n)??Bp(n)??new Map;return lr.set(e,r),r}var Wp="cursorAuth/cachedEmail",Jp="cursorAuth/stripeMembershipAuthId";function jt(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function Vp(e=$t(),t=process.platform,n=process.env){let r=jt(n.VSCODE_PORTABLE);if(r)return ae(r,"user-data");let o=jt(n.VSCODE_APPDATA);if(o)return ae(o,"Cursor");switch(t){case"darwin":return ae(e,"Library","Application Support","Cursor");case"win32":return ae(jt(n.APPDATA)??ae(e,"AppData","Roaming"),"Cursor");default:return ae(jt(n.XDG_CONFIG_HOME)??ae(e,".config"),"Cursor")}}function Yp(e=$t()){return ae(e,".cursor","cli-config.json")}function qp(e=$t(),t=process.platform,n=process.env){return ae(Vp(e,t,n),"User","globalStorage","state.vscdb")}function ot(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function Xp(e){return typeof e.userId=="number"&&Number.isFinite(e.userId)?String(e.userId):ot(e.userId)}function Zp(e){return ot(e.email)??ot(e.authId)??Xp(e)}function ur(e){let t=ot(e.email),n=ot(e.displayName),r=Zp(e);return!r||G(n,t)?null:{git_user_name:null,git_user_email:null,platform_login:r,identity_source:"cursor_oauth"}}function Qp(e){let n=U(Yp(e),{}).authInfo;return!n||typeof n!="object"?null:ur(n)}function ef(e,t,n){let r=qp(e,process.platform,t),o=Ci(e),s=Ii(o);if(ki(s,r,n))return ur({email:s?.email,authId:s?.auth_id});let i=bi(r),a=i.get(Wp)??null,c=i.get(Jp)??null;return Ai(o,{read_at_ms:n,db_path:r,email:a,auth_id:c}),ur({email:a,authId:c})}function wi(e=$t(),t=process.env,n=Date.now()){return Qp(e)??ef(e,t,n)}import{createHash as tf}from"node:crypto";import{resolve as nf}from"node:path";function L(e){return tf("sha256").update(e).digest("hex").slice(0,16)}function dr(e){return L(nf(e))}function W(e,t){return`${e}\0${t}`}function Ti(e){let t=e.indexOf("\0");return t<=0?null:{path:e.slice(0,t),name:e.slice(t+1)}}function st(e){let n=[...e].sort((r,o)=>{let s=r.path.localeCompare(o.path);return s!==0?s:r.name.localeCompare(o.name)}).map(r=>`${r.path}|${r.name}|${r.content_hash}`).join(`
|
|
29
|
+
`);return L(n)}function of(e,t,n="git_config",r=null){return L(`${e??""}|${t??""}|${r??""}|${n}`)}function sf(e){let t=null,n=null;for(let r of e.split(`
|
|
30
|
+
`)){let o=r.trim();if(!o)continue;let s=o.indexOf(" ");if(s<=0)continue;let i=o.slice(0,s).toLowerCase(),a=o.slice(s+1).trim();a&&(i==="user.name"?t=a:i==="user.email"&&(n=a))}return{git_user_name:t,git_user_email:n,platform_login:null}}async function af(e,t=M){let n=await t("git",["config","--get-regexp","^user\\.(name|email)$"],2e3,{cwd:e});return sf(n)}function cf(e=process.env){let t=k(e.GIT_AUTHOR_NAME),n=k(e.GIT_AUTHOR_EMAIL);if(t||n)return{git_user_name:t,git_user_email:n,platform_login:null,identity_source:"git_env"};let r=k(e.GIT_COMMITTER_NAME),o=k(e.GIT_COMMITTER_EMAIL);if(r||o)return{git_user_name:r,git_user_email:o,platform_login:null,identity_source:"git_env"};let s=k(e.EMAIL);return s?{git_user_name:null,git_user_email:s,platform_login:null,identity_source:"git_env"}:null}function ce(e,t,n,r=null){return!e&&!t&&!r?null:{git_user_name:e,git_user_email:t,platform_login:r,identity_source:n}}function lf(e=process.env){let t=k(e.EV_AI_HOOK_OPERATOR_EMAIL),n=k(e.EV_AI_HOOK_OPERATOR_LOGIN),r=ce(k(e.EV_AI_HOOK_OPERATOR_NAME),t,"configured",t??n);if(r)return r;let o=k(e.GITHUB_ACTOR)??k(e.GITHUB_TRIGGERING_ACTOR)??k(e.GITHUB_USER),s=ce(o,null,"github",o);if(s)return s;let i=k(e.GITLAB_USER_LOGIN),a=k(e.GITLAB_USER_EMAIL),c=ce(k(e.GITLAB_USER_NAME)??i,a,"gitlab",a??i);if(c)return c;let u=k(e.BUILD_REQUESTEDFOREMAIL),l=ce(k(e.BUILD_REQUESTEDFOR),u,"azure_devops",u??k(e.BUILD_REQUESTEDFORID));if(l)return l;let p=k(e.BUILDKITE_BUILD_CREATOR_EMAIL),m=ce(k(e.BUILDKITE_BUILD_CREATOR),p,"buildkite",p);if(m)return m;let f=k(e.BUILD_USER_EMAIL)??k(e.CHANGE_AUTHOR_EMAIL),_=ce(k(e.BUILD_USER)??k(e.CHANGE_AUTHOR),f,"jenkins",f??k(e.BUILD_USER_ID));if(_)return _;let S=k(e.CIRCLE_USERNAME),y=ce(S,null,"circleci",S);if(y)return y;let E=k(e.CODEBUILD_INITIATOR),x=ce(E,null,"codebuild",E);if(x)return x;let F=k(e.DRONE_COMMIT_AUTHOR_EMAIL),v=k(e.DRONE_COMMIT_AUTHOR),O=ce(v??k(e.DRONE_COMMIT_AUTHOR_NAME),F,"drone",F??v);if(O)return O;if(Mi(e.CLAUDE_CODE_REMOTE)||Mi(e.CURSOR_AGENT)){let D=k(e.CURSOR_USER_EMAIL);return{git_user_name:null,git_user_email:null,platform_login:D&&!G(null,D)?D:null,identity_source:"cloud"}}return null}function pr(e){return!!((e.git_user_name??e.git_user_email)&&!G(e.git_user_name,e.git_user_email))}function k(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function Mi(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function uf(e,t,n){return e==="claude"?gi(t):e==="cursor"?wi(t,n):e==="codex"?Ei(n,t):null}async function fr(e,t=M,n=process.env,r={}){let o=await af(e,t),s=cf(n),i=pr(o)?o:s&&pr(s)?s:null,a=uf(r.runnerPlatform,r.home??rf(),n);if(a)return{git_user_name:i?.git_user_name??null,git_user_email:i?.git_user_email??null,platform_login:a.platform_login,identity_source:a.identity_source};let c=lf(n);return c?.platform_login?{git_user_name:i?.git_user_name??null,git_user_email:i?.git_user_email??null,platform_login:c.platform_login,identity_source:c.identity_source}:i?{...i,platform_login:null,identity_source:pr(o)?"git_config":"git_env"}:c||(o.git_user_name||o.git_user_email?{...o,identity_source:"git_config"}:s||{git_user_name:null,git_user_email:null,platform_login:null,identity_source:"git_config"})}async function mr(e){let{gitRoot:t,installationStorePath:n,forceResend:r}=e,o=e.exec??M,s=e.env??process.env,i=await fr(t,o,s,{runnerPlatform:e.runnerPlatform,home:e.home}),a=of(i.git_user_name,i.git_user_email,i.identity_source,i.platform_login),u=(n?bn(n):void 0)?.operator_identity_hash;if(!(r||u!==void 0&&u!==a||!u))return{commit:()=>{}};let f=n;return{operator:i,commit:()=>{f&&To(f,a,kt())}}}function gr(e){return e?!bn(e)?.operator_identity_hash:!0}function Ni(e){return!0}import{existsSync as Am,readFileSync as xm}from"node:fs";import{homedir as xa}from"node:os";import{join as je,resolve as Om}from"node:path";import{basename as Sm,join as Fe}from"node:path";import{dirname as Ki,resolve as Gt}from"node:path";import{existsSync as df}from"node:fs";import{homedir as Di}from"node:os";import{relative as Hi,resolve as Q,sep as _e}from"node:path";var pf=["session_id","conversation_id","turn_id","generation_id","prompt.id","prompt_id","hook_event_name","event","source","status","stop_reason","reason","tool_name","tool","tool_use_id","skill_name","command_name","expansion_type","command_source","permission_mode","model","model_id","agent_id","agent_type","subagent_id","subagent_type","subagent_model","is_parallel_worker","effort","effort.level","duration_ms","duration","sandbox","failure_type","is_interrupt"];function ff(e){return e.capture_hook_input==="full"?!0:e.capture_hook_input==="allowlist"?!1:C("EV_AI_HOOK_CAPTURE_FULL_INPUT")==="1"}function mf(e){let t={};for(let n of pf){let r=Ee(e,n);r!==void 0&&(t[n]=r)}return t}function Kt(e,t){if(typeof e!="string"||e.length===0||!t)return null;let n=Q(e),r=Q(t),o=Hi(r,n);return!o||o==="."?".":o.startsWith(`..${_e}`)||o===".."||Q(r,o)!==n?null:o.split(_e).join("/")}function Fi(e,t){let n=Hi(Q(t),Q(e)).split(_e).join("/");return!n||n==="."?null:n===".."||n.startsWith("../")&&n.split("/").every(r=>r==="..")?n:null}function ji(e){return typeof e!="string"||e.length===0?null:Q(e).split(_e).join("/")}function gf(){let e=C("CURSOR_PROJECT_DIR");if(!e)return null;let t=Q(e);return df(t)?t.split(_e).join("/"):null}function hr(e,t){return Kt(e,t)!==null}function hf(e,t){let n=Q(t??Di(),".cursor").split(_e).join("/");return hr(e,n)}function _f(e,t,n){return t!==null&&hr(e,t)?!0:t!==null&&hf(e,n.home)?!1:n.inGitRepo===!0&&n.gitRoot!==void 0&&hr(e,n.gitRoot)?!0:t===null}function $i(e,t){let n=ji(e.cwd);if(n!==null)return n;let r=Q(process.cwd()).split(_e).join("/"),o=gf();return _f(r,o,t)?r:o??r}function _r(e,t={}){return $i(e,t)}function Sr(e,t=Di()){let n=Q(t).split(_e).join("/").replace(/\/$/,"");return n.length<=1?e:e===n?"~":e.startsWith(`${n}/`)?`~${e.slice(n.length)}`:e}function Li(e,t,n){let r=ji(n.launchCwd)??$i(t,n);e.cwd=Sr(r,n.home);let o=n.inGitRepo===!0&&n.gitRoot!==void 0?Kt(r,n.gitRoot):null;o!==null&&(e.cwd_relative=o)}function Ui(e,t){let n=JSON.stringify(e),r=Buffer.byteLength(n,"utf8");if(r<=t)return e;let o=Object.entries(e).filter(([i,a])=>!i.startsWith("_")&&(typeof a=="string"||typeof a=="number"||typeof a=="boolean")).sort((i,a)=>Buffer.byteLength(JSON.stringify(i[1]),"utf8")-Buffer.byteLength(JSON.stringify(a[1]),"utf8")),s={_truncated:!0,_original_bytes:r};for(let[i,a]of o){let c={...s,[i]:a};if(Buffer.byteLength(JSON.stringify(c),"utf8")>t)break;s[i]=a}return s}function Bt(e,t,n={}){if(ff(t)){let o={...e};return delete o.cwd,delete o.transcript_path,Li(o,e,n),Ui(o,Zr)}let r=mf(e);return Li(r,e,n),Ui(r,Xr)}function Sf(e){return typeof e=="string"&&e.length>0}function yr(e){let t=Gt(e.home),n=Gt(e.launchCwd),r=e.gitRoot?Gt(e.gitRoot):null,o=new Set,s=[],i=null;e.inGitRepo&&Sf(e.remote)&&r!==null&&r!==t&&(i=r,o.add(r)),n!==t&&!o.has(n)&&(s.push({scope:"cwd",dir:n}),o.add(n)),i!==null&&s.push({scope:"repo",dir:i});let a=null,c=r!==null&&Kt(n,r)!==null;if(e.inGitRepo&&r!==null&&r!==t&&c){let u=Ki(r);for(;;){let l=Gt(u);if(l===t)break;let p=Ki(l);if(p===l)break;if(e.hasProjectSpec(l)){s.push({scope:"parent",dir:l}),a=Fi(l,n);break}u=p}}return{anchors:s,parentRel:a}}import{existsSync as Bi,readdirSync as yf,realpathSync as Ef}from"node:fs";import{basename as Rf,dirname as Cf,relative as If,resolve as kf,sep as Af}from"node:path";var Er=400,zt=class{constructor(t,n={}){this.home=t;this.pathMode=n.pathMode??"home-relative",this.maxEntries=n.maxEntries??le}components=[];truncated=!1;pathMode;maxEntries;pluginExpandRemaining;seenRealpaths=new Set;componentPath(t){if(this.pathMode==="tilde"){let r=kf(t).split(Af).join("/");return Sr(r,this.home)}let n=If(this.home,t).replace(/\\/g,"/");return!n||n.startsWith("..")?`external/${L(Cf(t))}/${Rf(t)}`:n}claimFile(t){try{let n=Ef(t);return this.seenRealpaths.has(n)?!1:(this.seenRealpaths.add(n),!0)}catch{return this.seenRealpaths.has(t)?!1:(this.seenRealpaths.add(t),!0)}}get atGlobalCap(){return this.truncated||this.components.length>=this.maxEntries}get pluginBudgetSpent(){return this.pluginExpandRemaining!==void 0&&this.pluginExpandRemaining<=0}readEntries(t){if(!Bi(t))return[];try{return yf(t,{withFileTypes:!0})}catch{return[]}}readJson(t,n){if(Bi(t))return U(t,n)}push(t){return this.components.length>=this.maxEntries?(this.truncated=!0,!1):this.pluginExpandRemaining!==void 0&&this.pluginExpandRemaining<=0?!1:(this.pluginExpandRemaining!==void 0&&(this.pluginExpandRemaining-=1),this.components.push(t),!0)}withPluginExpandCap(t,n){let r=this.pluginExpandRemaining;this.pluginExpandRemaining=t;try{let o=n(),s=t-(this.pluginExpandRemaining??0);return{result:o,expanded:s}}finally{this.pluginExpandRemaining=r}}};import{existsSync as Rr,readFileSync as xf,statSync as Of}from"node:fs";import{basename as zi,join as it,relative as Wi}from"node:path";var Cr=100*1024,Pf=4;function vf(e){return e.length<=Cr?e:`${e.slice(0,Cr-1)}\u2026`}function bf(e){try{let t=xf(e),n=t.toString("utf8");return{hash:L(t),length:t.length,text:vf(n)}}catch{return null}}var Gi={HOOK:"EVENT",COMMAND:"EXPLICIT_INVOCATION",MEMORY:void 0,MCP_SERVER:void 0,PLUGIN:void 0,SKILL:"UNSPECIFIED",RULE:"UNSPECIFIED",SUBAGENT:"UNSPECIFIED"};function wf(e){return e in Gi?Gi[e]:"UNSPECIFIED"}function Wt(e,t){if(!e.claimFile(t.absolutePath))return!1;let n=bf(t.absolutePath);if(!n)return!1;let r=t.name??zi(t.absolutePath).replace(/\.(md|mdc|toml)$/i,""),o={kind:t.kind,name:r,path:e.componentPath(t.absolutePath),text:n.text,content_hash:n.hash,content_length:n.length,origin:t.origin,enabled:t.enabled},s=wf(t.kind);return s&&(o.trigger=s),e.push(o)}function Tf(e,t,n){let r=Wi(e,t).replace(/\\/g,"/");return!r||r.startsWith("..")?zi(t).replace(/\.(md|mdc|toml)$/i,""):n?r.replace(/\.(md|mdc|toml)$/i,""):r}function Oe(e,t){let{dir:n,kind:r,origin:o,enabled:s,nested:i,extensions:a}=t;Ir(e,{walkRoot:n,currentDir:n,depth:0,kind:r,origin:o,enabled:s,nested:i,extensions:a})}function Ir(e,t){let{walkRoot:n,currentDir:r,depth:o,kind:s,origin:i,enabled:a,nested:c,extensions:u}=t;if(!(o>Pf))for(let l of e.readEntries(r)){if(e.atGlobalCap){e.truncated=!0;return}if(e.pluginBudgetSpent)return;if(c){if(!l.isDirectory())continue;let f=it(r,l.name,c);if(Rr(f)){let _=Wi(n,it(r,l.name)).replace(/\\/g,"/");Wt(e,{absolutePath:f,kind:s,origin:i,enabled:a,name:_||l.name});continue}Ir(e,{walkRoot:n,currentDir:it(r,l.name),depth:o+1,kind:s,origin:i,enabled:a,nested:c,extensions:u});continue}if(l.isDirectory()){Ir(e,{walkRoot:n,currentDir:it(r,l.name),depth:o+1,kind:s,origin:i,enabled:a,nested:c,extensions:u});continue}if(!l.isFile()||!u)continue;let p=l.name.toLowerCase();if(!u.some(f=>p.endsWith(f)))continue;let m=it(r,l.name);Wt(e,{absolutePath:m,kind:s,origin:i,enabled:a,name:Tf(n,m,!0)})}}function Ji(e){for(let t of e)if(Rr(t))try{if(Of(t).size>0)return t}catch{continue}return e.find(t=>Rr(t))}var Jt=Be(Le(),1);var Mf="<omitted>",Nf=["package_name","package_spec","package_version","package_version_source"],Vi=100,Yi=120,Vt=[{raw:"tools",attr:"tools"},{raw:"autoApprove",attr:"auto_approve"},{raw:"auto_approve",attr:"auto_approve"},{raw:"alwaysAllow",attr:"always_allow"},{raw:"always_allow",attr:"always_allow"},{raw:"enabledTools",attr:"enabled_tools"},{raw:"enabled_tools",attr:"enabled_tools"},{raw:"disabledTools",attr:"disabled_tools"},{raw:"disabled_tools",attr:"disabled_tools"}],qi=new Set(Vt.map(e=>e.attr)),Lf=["enabled","disabled"],Uf=["serverUrl","auth","bearer_token_env_var","default_tools_approval_mode","defaultToolsApprovalMode","env_vars","env_http_headers","http_headers"],Df=new Set(["type","command","url","args","env","envVars","headers",...Lf,...Uf,...Vt.map(e=>e.raw)]),Hf=new Set(["transport","command_or_url","args","env_var_names","headers_present","auth","bearer_token_env_var","default_tools_approval_mode","env_http_header_names",...Nf,...qi,...[...qi].map(e=>`${e}_truncated`)]);function Xi(e,t){for(let n of t)Df.has(n)||Hf.has(n)||(e[n]=Mf)}var Ff=/^(authorization|auth|api[-_]?key|access[-_]?token|refresh[-_]?token|secret|password|passwd|token|bearer|client[-_]?secret|client[-_]?id|private[-_]?key|signing[-_]?key)$/i,jf=/(?:^|[-_])(secret|password|passwd|token|api[-_]?key|private[-_]?key|signing[-_]?key|client[-_]?secret|client[-_]?id)(?:[-_]|$)/i,$f=/^(sk-|ghp_|gho_|github_pat_|xox[baprs]-|AKIA|ASIA|AIza|ya29\.)/,Kf=/^bearer(?:\s+|$)/i;function Yt(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function Zi(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.length>0):[]}function kr(e){if(Array.isArray(e)){let n=[];for(let r of e){if(typeof r!="string"||r.length===0)continue;let o=r.split("=",1)[0]?.trim();o&&n.push(o)}return n}let t=Yt(e);return t?Object.keys(t).filter(n=>n.length>0):[]}function Pe(e){try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return e}}function Bf(e,t){if(e!==void 0&&/^https?:\/\//i.test(e)&&(0,Jt.launchContainsCredentials)({kind:"url",url:e})||(0,Jt.launchContainsCredentials)({kind:"command",command:e??"",arguments:t}))return!0;let n=ct([...t]);return t.some((r,o)=>n[o]===r?!1:/^https?:\/\//i.test(r)?(0,Jt.launchContainsCredentials)({kind:"url",url:r}):!0)}function Qi(e,t,n){Bf(t,n)&&(e.launch_had_credentials=!0)}function Gf(e){return $f.test(e)||Kf.test(e)?"<redacted>":e.includes("://")?Pe(e):e}function ea(e){if(/^https?:\/\//i.test(e))return Pe(e);let t=e.indexOf("=");return t>0?`${e.slice(0,t+1)}${ea(e.slice(t+1))}`:Gf(e)}function zf(e){let t=e.replace(/^-+/,"").split("=",1)[0]??"";return Ff.test(t)||jf.test(t)}function ct(e){let t=[],n=!1;for(let r of e){if(n){t.push("<redacted>"),n=!1;continue}if(zf(r)){t.push("<redacted>"),n=!r.includes("=");continue}t.push(ea(r))}return t}function Wf(e){let t=Zi(e);if(t.length===0)return;let n=[...new Set(t.map(r=>r.length>Yi?r.slice(0,Yi):r))].sort();if(n.length!==0)return n.length>Vi?{names:n.slice(0,Vi),truncated:!0}:{names:n,truncated:!1}}function Jf(e){let t=Yt(e);if(!t)return{headers:[],envVars:[]};let n=[],r=[];for(let[o,s]of Object.entries(t))o.length>0&&n.push(o),typeof s=="string"&&s.length>0&&r.push(s);return{headers:n,envVars:r}}function ta(e,t){let n=new Set;for(let{raw:r,attr:o}of Vt){if(n.has(o)||!(r in t))continue;let s=t[r];if(o==="auto_approve"&&typeof s=="boolean"){e.auto_approve=s,n.add(o);continue}let i=Wf(s);i&&(e[o]=i.names,i.truncated&&(e[`${o}_truncated`]=!0),n.add(o))}}function na(e,t){let n=Yt(e),r={transport:t};if(!n)return r;Xi(r,Object.keys(n));let o=typeof n.command=="string"?n.command:void 0,s=typeof n.url=="string"?n.url:void 0,i=typeof n.serverUrl=="string"?n.serverUrl:void 0,a=o??s??i,c=Zi(n.args);a&&(r.command_or_url=Pe(a));let u=ct(c);u.length>0&&(r.args=u),Qi(r,a,c);let l=Jf(n.env_http_headers),p=[...new Set([...kr(n.env),...kr(n.envVars),...kr(n.env_vars),...l.envVars,...typeof n.bearer_token_env_var=="string"&&n.bearer_token_env_var.length>0?[n.bearer_token_env_var]:[]])].sort();p.length>0&&(r.env_var_names=p),l.headers.length>0&&(r.env_http_header_names=[...new Set(l.headers)].sort());for(let S of["headers","http_headers","env_http_headers"])if(n[S]!==void 0&&n[S]!==null){r.headers_present=!0;break}let m=typeof n.auth=="string"?n.auth:void 0;m&&(r.auth=m);let f=typeof n.bearer_token_env_var=="string"?n.bearer_token_env_var:void 0;f&&(r.bearer_token_env_var=f);let _=typeof n.default_tools_approval_mode=="string"?n.default_tools_approval_mode:typeof n.defaultToolsApprovalMode=="string"?n.defaultToolsApprovalMode:void 0;return _&&(r.default_tools_approval_mode=_),ta(r,n),r}function ra(e){let t=Yt(e);return t?t.enabled===!1?!1:t.disabled!==!0:!0}function Or(e,t,n=!0){let r=Object.keys(t).sort().map(o=>[o,t[o]??null]);return L(JSON.stringify({name:e,attributes:r,enabled:n}))}function De(e){let t=e.trim();return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function at(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*\\[([^\\]]*)\\]`,"m").exec(e);return n?.[1]?[...n[1].matchAll(/"([^"]*)"|'([^']*)'/g)].map(r=>r[1]??r[2]??"").filter(r=>r.length>0):[]}function xr(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(true|false)\\s*$`,"m").exec(e);if(n?.[1])return n[1]==="true"}function Ar(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(.+)$`,"m").exec(e);if(!n?.[1])return;let r=De(n[1]);return r.length>0?r:void 0}function Vf(e,t){let n=[],r=i=>{for(let a of i.split(/[,\n]/)){let c=/^\s*"?([A-Za-z_][A-Za-z0-9_-]*)"?\s*=\s*(.+?)\s*$/.exec(a);c?.[1]&&n.push([c[1],De(c[2]??"")])}},o=new RegExp(`^\\s*${t}\\s*=\\s*\\{([^}]*)\\}`,"m").exec(e);o?.[1]&&r(o[1]);let s=new RegExp(`(?:^|\\n)\\[[^\\]]*\\.${t}\\]\\s*\\n([\\s\\S]*?)(?=\\n\\[|$)`).exec(`
|
|
31
|
+
${e}`);return s?.[1]&&r(s[1]),n}function oa(e){return xr(e,"enabled")===!1?!1:xr(e,"disabled")!==!0}function Yf(e,t){let n={};for(let{raw:r,attr:o}of Vt){if(o==="auto_approve"){let i=xr(t,r);if(i!==void 0){n[r]=i;continue}}let s=at(t,r);s.length>0&&(n[r]=s)}ta(e,n)}var qf=/^\s*([A-Za-z_][A-Za-z0-9_-]*)\s*[.=]/,Xf=/^\[[^\]]*\.([A-Za-z_][A-Za-z0-9_-]*)\]\s*$/gm;function Zf(e){let t=new Set,n=e.search(/^\[/m),r=n===-1?e:e.slice(0,n);for(let o of r.split(`
|
|
32
|
+
`)){let s=qf.exec(o);s?.[1]&&t.add(s[1])}for(let o of e.matchAll(Xf))o[1]&&t.add(o[1]);return[...t]}function sa(e,t){let n={transport:t};Xi(n,Zf(e));let r=/^\s*command\s*=\s*(.+)$/m.exec(e),o=/^\s*url\s*=\s*(.+)$/m.exec(e),s=r?De(r[1]??""):void 0,i=o?De(o[1]??""):void 0,a=s!==void 0&&s.length>0?s:i,c=at(e,"args");a&&(n.command_or_url=Pe(a));let u=ct(c);u.length>0&&(n.args=u),Qi(n,a,c);let l=new Set;for(let E of e.split(`
|
|
33
|
+
`)){let x=/^\s*env\.([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(E);x?.[1]&&l.add(x[1])}let p=/^\s*env\s*=\s*\{([^}]*)\}/m.exec(e);if(p?.[1])for(let E of p[1].split(",")){let x=/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(E);x?.[1]&&l.add(x[1])}let m=/(?:^|\n)\[[^\]]*env\]\s*\n([\s\S]*?)(?=\n\[|$)/.exec(`
|
|
34
|
+
${e}`);if(m?.[1])for(let E of m[1].split(`
|
|
35
|
+
`)){let x=/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(E);x?.[1]&&l.add(x[1])}for(let E of at(e,"env_vars"))l.add(E);let f=Vf(e,"env_http_headers");for(let[,E]of f)E.length>0&&l.add(E);let _=Ar(e,"bearer_token_env_var");_&&(l.add(_),n.bearer_token_env_var=_),l.size>0&&(n.env_var_names=[...l].sort()),f.length>0&&(n.env_http_header_names=[...new Set(f.map(([E])=>E))].sort()),(/^\s*(?:http_|env_http_)?headers\s*=/m.test(e)||/(?:^|\n)\[[^\]]*headers\]\s*(?:\n|$)/.test(e))&&(n.headers_present=!0);let S=Ar(e,"auth");S&&(n.auth=S);let y=Ar(e,"default_tools_approval_mode");return y&&(n.default_tools_approval_mode=y),Yf(n,e),n}var Qf=300,em=256;function ia(e,t){if(!t)return e;let n=[...new Set([t,t.replace(/\\/g,"/")])].filter(o=>o.length>1),r=e;for(let o of n)r=r.split(o).join("~");return r}function qt(e){let t=[],n="",r=null;for(let o of e){if(r){o===r?r=null:n+=o;continue}if(o==='"'||o==="'"){r=o;continue}if(/\s/.test(o)){n.length>0&&(t.push(n),n="");continue}n+=o}return n.length>0&&t.push(n),t}function aa(e,t){return e.length<=t?e:`${e.slice(0,t-1)}\u2026`}function tm(e){return aa(e,Qf)}function ca(e,t){let n=ia(e.trim(),t),r=qt(n);if(r.length===0)return"";let[o,...s]=r,i=Pe(o),a=ct(s);return tm([i,...a].join(" "))}function la(e,t){if(typeof e!="string")return null;let n=ia(e.trim(),t),r=qt(n)[0];if(!r)return null;let o=Pe(r);return o.length===0?null:aa(o,em)}function nm(e){if(e.prompt||e.type==="prompt")return"prompt";let t=e.command??e.bash??e.powershell??"";return/\bnpx\b/i.test(t)?"npx":/\.(sh|bash|zsh|js|mjs|cjs|ts|py)(\s|$|"|')/i.test(t)||/^(\.\/|~\/|\/|[A-Za-z]:[\\/])/.test(t.trim())?"script":"inline"}function rm(e){return Array.isArray(e.hooks)&&e.hooks.length>0?e.hooks:[{type:e.type,command:e.command,bash:e.bash,powershell:e.powershell,prompt:e.prompt}]}function om(e,t,n,r){let o=e.componentPath(t);for(let[s,i]of Object.entries(n))if(!(!Array.isArray(i)||e.truncated))for(let a of i){if(!a||typeof a!="object"||e.truncated)continue;let c=a;for(let u of rm(c)){if(e.truncated)return;let l=u.command??u.bash??u.prompt??u.powershell??c.powershell??"",p=nm({type:u.type??c.type,command:u.command??c.command,bash:u.bash??c.bash,powershell:u.powershell??c.powershell,prompt:u.prompt??c.prompt}),m=typeof c.matcher=="string"?c.matcher:"",f=L(l),_=m?`${s}:${m}:${p}:${f}`:`${s}:${p}:${f}`,S=`${s}|${m}|${p}|${l}|attrs2`;e.push({kind:"HOOK",name:_,path:o,content_hash:L(S),origin:r,enabled:!0,trigger:"EVENT",attributes:{event:s,...m?{matcher:m}:{},action_kind:p,action_hash:f,...p!=="prompt"&&l.trim()?{command:ca(l,e.home)}:{}}})}}}function He(e,t,n){if(!e.claimFile(t))return;let r=e.readJson(t,{});!r?.hooks||typeof r.hooks!="object"||om(e,t,r.hooks,n)}import{existsSync as um,readFileSync as dm}from"node:fs";var Se=Be(Le(),1);import{createHash as sm}from"node:crypto";import{join as lt}from"node:path";function im(e){let t=[...e].sort((n,r)=>n.localeCompare(r,"en")).join(`
|
|
36
|
+
`);return sm("sha512").update(t).digest("hex").slice(0,16)}function am(e){let t=process.platform==="win32"?lt(C("LOCALAPPDATA")??e,"npm-cache"):lt(e,".npm"),n=C("npm_config_cache")??C("NPM_CONFIG_CACHE");return n===void 0||n===t?[t]:[n,t]}function ua(e){return typeof e=="string"&&e.length>0&&e.length<=Se.PACKAGE_FIELD_MAX?e:null}function cm(e,t,n){let r=im(e);for(let o of am(n)){let s=lt(o,"_npx",r),i=U(lt(s,"node_modules",...t.split("/"),"package.json"),{}),a=ua(i.version);if(a!==null)return a;let c=U(lt(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<=Se.PACKAGE_FIELD_MAX?e:`${e.slice(0,Se.PACKAGE_FIELD_MAX-1)}\u2026`}function Pr(e,t,n){if(typeof e!="string"||e.length===0)return null;let r=(0,Se.npxPackageSpecs)(e,t??[]),o=r[0];if(o===void 0)return null;let s=(0,Se.packageNameFromSpec)(o);if(s===null)return null;let i=cm(r,s,n);return{package_name:s,package_spec:lm(o),...i===null?{}:{package_version:i,package_version_source:"npx_cache"}}}function da(e,t){if(typeof e!="string"||e.length===0)return null;let[n,...r]=qt(e.trim());return n===void 0?null:Pr(n,r,t)}function Xt(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 Pr(typeof n.command=="string"?n.command:null,r,t)}function pa(e,t){let n=/^\s*command\s*=\s*(.+)$/m.exec(e);return n===null?null:Pr(De(n[1]??""),at(e,"args"),t)}function pm(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 fa(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=pm(a),u=na(a,c);Object.assign(u,Xt(a,e.home)??{});let l=ra(a);e.push({kind:"MCP_SERVER",name:i,path:s,content_hash:Or(i,u,l),origin:n,enabled:l,attributes:u})}}function ma(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=sa(l,p);Object.assign(m,pa(l,e.home)??{});let f=oa(l);e.push({kind:"MCP_SERVER",name:a,path:o,content_hash:Or(a,m,f),origin:n,enabled:f,attributes:m})}}import{existsSync as fm,readdirSync as mm}from"node:fs";import{join as B}from"node:path";var ga=50;function vr(e,t,n,r){if(!fm(t))return{componentCount:0,expandTruncated:!1};let o=e.components.length,{expanded:s}=e.withPluginExpandCap(ga,()=>{Oe(e,{dir:B(t,"skills"),kind:"SKILL",origin:n,enabled:r,nested:"SKILL.md"}),Oe(e,{dir:B(t,"commands"),kind:"COMMAND",origin:n,enabled:r,extensions:[".md"]}),Oe(e,{dir:B(t,"agents"),kind:"SUBAGENT",origin:n,enabled:r,extensions:[".md"]})});He(e,B(t,"hooks","hooks.json"),n),He(e,B(t,"hooks.json"),n);let i=e.components.length-o,a=s>=ga;return{componentCount:i,expandTruncated:a}}function br(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 ha(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("@"):"",f=typeof l.version=="string"?l.version:"",_=typeof l.scope=="string"?l.scope:"user",S=`plugin:${a}`,y=0,E=!1;for(let x of u)if(typeof x.installPath=="string"&&x.installPath.length>0){let F=vr(e,x.installPath,S,p);y+=F.componentCount,E=E||F.expandTruncated}br(e,{pluginKey:a,rowPath:i,enabled:p,scope:_,version:f||void 0,marketplace:m||void 0,componentCount:y,expandTruncated:E,contentHash:L(`${a}|${f}|${_}|${p}|${y}`)})}}function gm(e){let t=e,n="";try{let r=mm(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 hm=/^\d+$/;function _m(e){let t=e.filter(n=>!hm.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}=vr(e,c,u,!0);br(e,{pluginKey:a,rowPath:e.componentPath(c),enabled:!0,scope:"local",componentCount:l,expandTruncated:p,contentHash:L(`${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}=gm(c);i.push({pluginId:a.name,installPath:u,version:l})}for(let a of _m(i)){if(e.truncated)break;let c=`${a.pluginId}@${s}`,u=`plugin:${c}`,{componentCount:l,expandTruncated:p}=vr(e,a.installPath,u,!0);br(e,{pluginKey:c,rowPath:e.componentPath(a.installPath),enabled:!0,scope:"cache",version:a.version||void 0,marketplace:s,componentCount:l,expandTruncated:p,contentHash:L(`${c}|${a.version}|${l}`)})}}}function ym(e,t){let{layout:n,levelDir:r,origin:o,includeMachineWide:s}=t;for(let i of n.skillRoots)Oe(e,{dir:Fe(r,i),kind:"SKILL",origin:o,enabled:!0,nested:"SKILL.md"});for(let i of n.dirs)Oe(e,{dir:Fe(r,i.dir),kind:i.kind,origin:o,enabled:!0,extensions:i.extensions});for(let i of n.memory){let a=Ji(i.map(c=>Fe(r,c)));a&&Wt(e,{absolutePath:a,kind:"MEMORY",origin:o,enabled:!0,name:Sm(a)})}for(let i of ms(n))He(e,Fe(r,i),o);for(let i of n.mcpJson??[])fa(e,Fe(r,i),o);for(let i of n.mcpToml??[])ma(e,Fe(r,i),o);if(s){if(n.managed)for(let i of It(n.managed,process.platform,e.home))i.toLowerCase().endsWith(".json")&&He(e,i,o);n.plugins==="claude"?ha(e):n.plugins==="cursor"&&_a(e)}}function Sa(e,t){try{let n=new zt(e,{pathMode:t.pathMode,maxEntries:t.maxEntries});for(let r of t.layouts)ym(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 wr(e,t,n={}){let r={},o=n.shouldWalk;if(o===void 0||o("user","")){let c=Sa(t,{layouts:Object.values(Te),levelDir:t,origin:"user",includeMachineWide:!0,pathMode:"home-relative",maxEntries:le,scopeRef:""});c&&(r.user=c)}let s=n.inGitRepo===!0,i=null,a=n.launchCwd;if(a!==void 0){let c=Object.values(fe),u=yr({launchCwd:a,gitRoot:n.gitRoot,inGitRepo:s,remote:n.remote,home:t,hasProjectSpec:l=>hs(c,l)});i=u.parentRel;for(let l of u.anchors){let p=dr(l.dir);if(o!==void 0&&!o(l.scope,p))continue;let m=Sa(t,{layouts:c,levelDir:l.dir,origin:l.scope,includeMachineWide:!1,pathMode:"tilde",maxEntries:Er,scopeRef:p});m&&(r[l.scope]=m)}r.parent||(i=null)}return{scopes:r,parentRel:i,cwdInGitRepo:s}}function Tr(e,t,n={}){let r=n.truncated===!0,o=st(e),s=new Set(e.map(l=>W(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=W(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=Ti(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 Ea=2*1024*1024,Em=new Set(["HOOK","MCP_SERVER","PLUGIN"]);function Mr(e,t,n){let r=new Set(t.map(s=>W(s.path,s.name))),o=[];for(let s of e)s.text!==void 0&&(n.has(s.content_hash)||r.has(W(s.path,s.name))||o.push(s));return o}function Nr(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 ya(e){return Buffer.byteLength(JSON.stringify(e),"utf8")}function Ra(e){if(e.text===void 0)return e;let{text:t,...n}=e;return n}function Lr(e,t=Ea){let n=[],r=[];for(let l of e)Em.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=ya(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 f=Ra(l),_=ya(f)+p;if(i+_<=t){s.push(f),i+=_,a+=1;continue}}c+=1}return{components:s,textDeferredCount:a,droppedCount:c,textHashesSent:u}}function Ur(e,t){return t.size===0?e:e.map(n=>n.text===void 0||!t.has(n.content_hash)?n:Ra(n))}var Rm=["user","cwd","repo","parent"];function Dr(e){let{collected:t,cacheFor:n,nowMs:r,maxBytes:o}=e,s=[];for(let v of Rm){let O=t.scopes[v];if(!O)continue;let D=n(v,O.scopeRef),N=D.components,$=Tr(O.components,N,{forceFull:N===void 0,truncated:O.truncated}),ee=new Set(D.textHashes),H=Mr(O.components,$.upserts,ee),w=Ur([...$.upserts,...H],ee);s.push({scope:v,walk:O,delta:$,outgoing:w,outgoingKeys:new Set(w.map(R=>W(R.path,R.name))),deliveredTextHashes:ee,cachedComponents:N})}let i=s.flatMap(v=>v.outgoing),a=Lr(i,o),c=new Set(a.components.map(v=>W(v.path,v.name))),u=[],l=[],p=[],m=[],f=[],_=[],S=[];for(let v of s){let{scope:O,walk:D,delta:N}=v;_.push(...D.components),u.push(O);let $=a.components.filter(R=>v.outgoingKeys.has(W(R.path,R.name))),ee=[...v.outgoingKeys].some(R=>!c.has(R)),H=N.truncated||ee;H?p.push(O):N.full&&l.push(O),m.push(...$),!N.full&&!H&&f.push(...N.removed);let w=N.full?{}:{...v.cachedComponents??{}};if(!H)for(let R of N.removed)delete w[W(R.path,R.name)];for(let R of $)w[W(R.path,R.name)]=R.content_hash;S.push({scope:O,scopeRef:D.scopeRef,components:w,textHashes:Nr(v.deliveredTextHashes,$.filter(R=>R.text!==void 0).map(R=>R.content_hash),D.components),collectedAtMs:r,included:$.length>0||N.removed.length>0&&!H||N.full})}let y={user_spec_hash:st(_),user_spec_count:_.length,user_spec_truncated:p.length>0};u.length>0&&(y.user_spec_scopes=u,y.user_spec_full_scopes=l,y.user_spec_truncated_scopes=p,y.user_spec_cwd_in_git_repo=t.cwdInGitRepo),l.length>0&&l.length===u.length&&(y.user_spec_full=!0),m.length>0&&(y.user_spec=m),f.length>0&&(y.user_spec_removed=f),a.textDeferredCount>0&&(y.user_spec_text_deferred=a.textDeferredCount);let E=t.scopes.cwd;E&&(y.user_spec_cwd_scope_ref=E.scopeRef);let x=t.scopes.repo;x&&(y.user_spec_repo_scope_ref=x.scopeRef);let F=t.scopes.parent;return F&&(y.user_spec_parent_scope_ref=F.scopeRef,t.parentRel&&(y.user_spec_parent_rel=t.parentRel)),{fields:y,scopes:S}}var dt={cwd:"cwd_spec",repo:"repo_spec",parent:"parent_spec"};function Zt(e){return e==="cwd"||e==="repo"||e==="parent"}function ut(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Hr(e){return!ut(e)||!ut(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 Ca(e){return Cm(e)}function Ia(e){return Im(e)}function ka(e){return km(e)}function Cm(e){if(!ut(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r=="string"&&(t[n]=r);return t}function Im(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function Fr(e,t){if(!ut(e))return;let n=e[t];return Hr(n)?n:void 0}function km(e){if(!ut(e))return{};let t={};for(let[n,r]of Object.entries(e))Hr(r)&&(t[n]=r);return t}function jr(e,t=20){let n=[];for(let[r,o]of Object.entries(e))Hr(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 Pm=200,Aa=200,vm=["allow","deny","ask"],bm=/(?<=^|[\s(,=:])(?:~|[A-Za-z]:)?[\\/][^\s,)]+/g,Kr="<path>",wm=new RegExp(`${Kr}(?:\\s+[A-Za-z.][^\\s,)]*[\\\\/][^\\s,)]*)+`,"g");function Tm(e){let t=e.replace(bm,Kr).replace(wm,Kr);return t.length>Aa?`${t.slice(0,Aa)}...`:t}function en(e){let t=U(e,{}),n=[];for(let r of vm)for(let o of t.permissions?.[r]??[])typeof o=="string"&&o.length>0&&n.push({key:Tm(o),mode:r});return{model:t.model??"",permissionKeys:n}}function Mm(e){let{serverManaged:t,fileBased:n}=_n(process.platform,e),r=en(t);if(r.model||r.permissionKeys.length>0)return r;let o="",s=[];for(let i of n){let a=en(i);a.model&&(o=a.model),s.push(...a.permissionKeys)}return{model:o,permissionKeys:s}}function Nm(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 Lm=10,Um="self-config-cache.json",Oa=2;function tn(){return C("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off"}function Dm(){return C("EV_AI_HOOK_CWD_SPEC")?.toLowerCase()==="off"}function Hm(e,t=Date.now()){return e===void 0||!Number.isFinite(e)?!0:t-e>=Ge}var Fm={claude:["claude"],cursor:["agent","cursor-agent"],codex:["codex"]};async function jm(e,t=M){let n=Fm[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(`
|
|
37
|
+
`)[0]??"").trim();return a||r(o+1)};return r(0)}function $m(e=xa()){return je(e,".ev-ai","agent-hook",Um)}function Km(e){let n=[...e].sort((r,o)=>r.name.localeCompare(o.name)).map(r=>`${r.name}:${r.size}`).join(`
|
|
38
|
+
`);return L(n)}function Qt(e,t,n=!1){let r=Km(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 $r(e,t,n=[]){let r=0,o=!1,s=new Set;for(let i of[...t.map(a=>je(e,a)),...n]){let a=Om(i);if(s.has(a))continue;s.add(a);let c=Cn(i);c.present&&(o=!0,r+=c.size)}return o?{present:!0,size:r}:{present:!1,size:0}}function Bm(e){return Am(e)?j(xm(e,"utf8"),{}):{}}function Gm(e,t){try{X(e,`${JSON.stringify(t)}
|
|
39
|
+
`)}catch(n){let r=n instanceof Error?n.message:String(n);d(`WARN: self-config cache write failed open: ${r}`)}}function zm(e,t,n){if(t==="user")return e.user_spec_collected_at_ms;if(Zt(t))return Fr(e[dt[t]],n)?.collected_at_ms}function Wm(e,t,n){if(t==="user")return{components:Ca(e.user_spec_components),textHashes:Ia(e.user_spec_text_hashes)};if(!Zt(t))return{components:void 0,textHashes:[]};let r=Fr(e[dt[t]],n);return r?{components:r.components,textHashes:r.text_hashes}:{components:void 0,textHashes:[]}}function Jm(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=Oa,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(!Zt(s.scope))continue;let i=dt[s.scope],a=ka(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]=jr(a)}}return o}async function Pa(e,t=process.cwd(),n=xa(),r={}){let o=e==="claude",s=r.gitRoot??t,i=await jm(e),a="",c=[];if(o){let H=Mm(n),w=en(je(n,".claude/settings.json")),R=en(je(t,".claude/settings.local.json"));a=H.model||R.model||w.model,c=Nm([...H.permissionKeys,...w.permissionKeys,...R.permissionKeys]).slice(0,Pm)}let u={present:!1,size:0},l=H=>{let w=[],R=!1;for(let te of H){let gt=mo(je(n,te));if(w=w.concat(gt.entries),R=R||gt.truncated,w.length>=le){w=w.slice(0,le),R=!0;break}}return{entries:w,truncated:R}},p=$m(n),m=Bm(p),f=m[e]??{},_=(f.send_count??0)+1,S=_>0&&_%Lm===0,y=H=>S?void 0:f[H],E=l(ge.skills),x=l(ge.subagents),F=l(ge.commands),v=l(ge.rules),O={skills:Qt(E.entries,y("skills"),E.truncated),subagents:Qt(x.entries,y("subagents"),x.truncated),commands:Qt(F.entries,y("commands"),F.truncated),rules:Qt(v.entries,y("rules"),v.truncated)},D={runner_platform:e,config_scope:"user",cli_version:i,claude_version:o?i:null,model:o&&a||null,permission_keys:c,user_scope:{skills:O.skills,subagents:O.subagents,commands:O.commands,rules:O.rules,memory:$r(n,ge.memory),settings:$r(n,ge.settings,_s(n)),mcp:$r(n,ge.mcp)},local_settings:o?Cn(je(t,".claude/settings.local.json")):u},N=null,$=r.nowMs??Date.now();if(!tn()){let H=f.user_spec_layout_version!==Oa,w=wr(e,n,{launchCwd:Dm()?void 0:r.launchCwd,gitRoot:s,inGitRepo:r.inGitRepo,remote:r.remote,shouldWalk:(R,te)=>H||Hm(zm(f,R,te),$)});if(Object.keys(w.scopes).length>0){let R=Dr({collected:w,cacheFor:(te,gt)=>H?{components:void 0,textHashes:[]}:Wm(f,te,gt),nowMs:$});Object.assign(D,R.fields),N={hash:R.fields.user_spec_hash,home:R.scopes.find(te=>te.scope==="user")??null,project:R.scopes.filter(te=>te.scope!=="user")}}}let ee=Jm(f,O,_,N);return{config:D,commit:()=>{m[e]=ee,Gm(p,m)}}}function $e(e,t,n){let r={installation_id:n.installationId};return n.platformAgentId&&(r.platform_agent_id=n.platformAgentId),n.sessionId&&(r.session_id=n.sessionId),n.turnId&&(r.turn_id=n.turnId),{schema_version:2,event:e,timestamp:kt(),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:ne,host_arch:process.arch,node_version:process.version,correlation:r,payload:t}}import{existsSync as ba}from"node:fs";import{spawn as wa}from"node:child_process";import{fileURLToPath as Ym}from"node:url";import{gzipSync as Vm}from"node:zlib";function Br(e){return C("EV_AI_HOOK_COMPRESS")==="off"?{body:e}:Buffer.byteLength(e,"utf8")<Qr?{body:e}:{body:Vm(Buffer.from(e,"utf8")),contentEncoding:"gzip"}}function nn(e){let t={"Content-Type":"application/json"};return e!==void 0&&(t["Content-Encoding"]=e),t}function va(e){return typeof e=="string"?Buffer.byteLength(e,"utf8"):e.length}var pt="__post",rn="__work";async function qm(e,t,n={}){if(C("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off")return e;let r=await fr(n.gitRoot??process.cwd(),M,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 Xm(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 Ta(e){switch(e){case"session_start":return Vr;case"session_end":return Yr;case"tool_invoked":case"skill_invoked":return fn;default:return fn}}function Zm(e,t,n){return`${JSON.stringify({url:e,timeoutMs:t})}
|
|
40
|
+
${n}`}function Ma(e,t=[],n=process.execPath,r=import.meta.url,o=ba){if(yt(n))return{command:n,args:[e,...t]};let s=Ym(r);return o(s)?{command:n,args:[s,e,...t]}:{command:n,args:[e,...t]}}function Qm(e=process.execPath,t=import.meta.url,n=ba){return Ma(pt,[],e,t,n)}function eg(e){let t=e.indexOf(`
|
|
41
|
+
`);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 on(e,t=fetch){let n=await e(),r=eg(n);if(!r)return;let{meta:o,body:s}=r,i=Br(s),a=nn(i.contentEncoding);try{await t(o.url,{method:"POST",headers:a,body:i.body,signal:AbortSignal.timeout(Number(o.timeoutMs))})}catch{}}async function tg(e,t,n,r=fetch){let o=Ta(e),s=Br(t),i=nn(s.contentEncoding),a=va(s.body);d(`POST event=${e} url=${gn(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{}d(`POST gzip rejected http=${u.status} \u2014 retrying uncompressed`),u=await r(n,{method:"POST",headers:nn(),body:t,signal:AbortSignal.timeout(o)})}let l=Date.now()-c;if(u.ok)return d(`POST outcome=ok elapsed_ms=${l} http=${u.status}`),!0;let p=(await u.text()).slice(0,200).replace(/[\n\r]/g,"");return d(`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 d(`POST outcome=fail elapsed_ms=${l} http=000 body=${p}`),!1}}async function Na(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){d(`WARN: ${o} stdin handoff timed out \u2014 continuing fail-open`);try{s.stdin.destroy()}catch{}}a()},qr),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 d(`WARN: ${o} spawn failed open: ${i}`),null}}async function ng(e,t,n,r=wa,o=Qm){let s=Ta(e),i=Zm(n,s,t),{command:a,args:c}=o();return Na(a,c,i,r,"detached post")}async function La(e,t,n=wa,r=Ma){let{command:o,args:s}=r(rn,t);return Na(o,s,e,n,"detached work")}async function Ke(e,t,n,r,o,s,i){if(!o)return d("WARN: collector URL missing \u2014 pass --url on the hook command or set collector_url in manifest"),!1;if(!Rt(o))return d(`WARN: collector URL blocked (https required): ${gn(o)}`),!1;let a=await qm(t,n.runnerPlatform,i),c=r(e,a,n);s!==void 0&&(c.build_ms=Math.max(0,Date.now()-s));let u=`${JSON.stringify(c)}
|
|
42
|
+
`,l=C("EV_AI_HOOK_DEBUG");l==="full"?d(`DEBUG envelope=${JSON.stringify(c)}`):l==="1"&&d(`DEBUG summary=${Xm(c,Buffer.byteLength(u,"utf8"))}`);let p=process.argv.includes(rn),m=C("EV_AI_HOOK_SYNC")==="1";return Dt(n.runnerEvent,n.runnerPlatform)||p||m?tg(e,u,o):(await ng(e,u,o),!1)}import{createReadStream as rg}from"node:fs";import{stat as og}from"node:fs/promises";import{basename as sg,resolve as ig}from"node:path";import{createInterface as ag}from"node:readline";var cg=1024*1024;function lg(e){let t=e.replace(/\\/g,"/");return t.includes("/.claude/projects/")&&sg(t).endsWith(".jsonl")}async function Ua(e){if(!e||!lg(e))return null;try{let t=ig(e),n=await og(t);if(!n.isFile())return null;let r=Math.max(0,n.size-cg),o=[],s=ag({input:rg(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 an(e){return{sessionId:e.sessionId,turnId:e.turnId,installationId:e.manifest.installationId,runnerPlatform:e.runnerPlatform,platformAgentId:e.platformAgentId,runnerEvent:e.runnerEvent}}function mt(e,t){return{gitRoot:e.manifest.gitRoot,...t?{home:t}:{}}}function Gr(e){return{gitRoot:e.manifest.gitRoot,inGitRepo:e.manifest.inGitRepo}}async function Fa(e){let t=Date.now();await yg(e);let{gitRoot:n}=e.manifest;await cn(e,n);let r=Gr(e);return{buildStartedAtMs:t,gitRoot:n,hookInput:Bt(e.hookInput,e.manifest.manifest,r),envelopeFields:an(e),launchCwd:_r(e.hookInput,r),home:dg()}}function Da(e){try{return z(ug(e))}catch{return null}}function ja(e){return e.startsWith("/")||/^[A-Za-z]:\//.test(e)}function Ha(e,t){let n=e.replaceAll("\\","/");if(!ja(n))return null;let r=z(e),o=z(t),s=Da(e)??r,i=Da(t)??o;return s.startsWith(`${i}/`)?s.slice(i.length+1):r.startsWith(`${o}/`)?r.slice(o.length+1):null}function pg(e,t,n){if(!e)return{repositorySourcePath:null,userSourcePath:null};let r=e.replaceAll("\\","/"),s=Ha(e,t)??(ja(r)?null:r),i=Ha(e,n);return{repositorySourcePath:s,userSourcePath:i}}function sn(e,t,n,r,o,s){let{repositorySourcePath:i,userSourcePath:a}=pg(e,t,n),c=i??a,u=c===null?null:o(c),l=u!==null&&c!==null?fg({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 fg(e){try{let t=e.inRepository?mg(e.platformAgentId,e.sourcePath):(0,A.installationRootExternalKey)(e.installationId,(0,A.userConfigRootFromPath)(e.sourcePath));return t?(0,A.buildComponentReference)({installationRootExternalKey:t,installableKind:e.installableKind,sourcePath:e.sourcePath,nativeKey:e.nativeKey}):void 0}catch{return}}function $a(e,t,n){return Ke("tool_invoked",{...n,success:null,duration_ms:null,hook_input:t.hookInput},t.envelopeFields,$e,e.manifest.collectorUrl,t.buildStartedAtMs,mt(e,t.home))}var Ka=new Set([...Object.values(xe),".github"]);function mg(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=>Ka.has(i));return s<0?null:`${r}:${o.slice(0,s+1).join("/")}`}function gg(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(_=>_.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 _=(0,A.userConfigRootFromPath)(u);return(0,A.buildComponentReference)({installationRootExternalKey:(0,A.installationRootExternalKey)(r,_),installableKind:A.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),f=m.replaceAll("\\","/").split("/").at(-1);if(!(f===void 0||!Ka.has(f)))try{return(0,A.buildComponentReference)({installationRootExternalKey:n,installableKind:A.ComponentKind.INTERFACE,sourcePath:m,nativeKey:t})}catch{return}}function hg(...e){for(let t of e)if(t)return t;return null}function J(e,t,n){if(e.status==="fulfilled")return e.value;let r=e.reason instanceof Error?e.reason.message:String(e.reason);return d(`WARN: ${n} failed open: ${r}`),t}function _g(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 Sg(e,t){return{runner_platform:e,config_scope:"user",...t?{operator:t}:{}}}var ve=new Set,ft=null;async function yg(e){if(tn())return;let t=e.manifest.installationId,n=e.manifest.installationStorePath;if(ve.has(t))return;if(!gr(n)){ve.add(t);return}let r=Ve({sessionId:e.sessionId,hostname:Ye()});if(Ni(r)){if(ft){await ft;return}ft=(async()=>{if(ve.has(t)||!gr(n)){ve.add(t);return}if(!Mo(n)){ve.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([et(i),An(),ar(r),xn(),mr({gitRoot:i,installationStorePath:n,forceResend:!1,runnerPlatform:a})]),f=J(c,null,"gitSnapshot"),_=J(u,"","detectVirt"),S=J(l,null,"probeCloud"),y=J(p,{},"hostEnv"),E=J(m,{commit:()=>{}},"resolveOperatorForSend");await cn(e,i,f);let x={identity:{host:Ye(),context:r,virt:_||null,cloud:S,git:f},host_env:y,env_vars:cr(),self_config:Sg(a,E.operator),run_meta:{trigger:"cloud_identity_bootstrap"}};o=!!await Ke("session_start",x,an(e),$e,e.manifest.collectorUrl,s,mt(e)),o&&(E.commit(),ve.add(t))}finally{No(n)}})().finally(()=>{ft=null}),await ft}}async function cn(e,t,n){try{let r=n===void 0?await et(t):n;e.platformAgentId=await Hs(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);d(`WARN: derivePlatformAgentId failed open: ${o}`)}}async function Eg(e){let t=Date.now(),{gitRoot:n}=e.manifest,r=Ve({sessionId:e.sessionId,hostname:Ye()}),o=String(e.runnerPlatform),s=Gr(e),i=_r(e.hookInput,s),a=et(n),c=tn()?Promise.resolve({commit:()=>{}}):mr({gitRoot:n,installationStorePath:e.manifest.installationStorePath,forceResend:!1,runnerPlatform:o}),[u,l,p,m,f,_,S]=await Promise.allSettled([a,An(),ar(r),xn(),nr(e.manifest.manifest,n,o),a.catch(()=>null).then(w=>Pa(o,n,void 0,{installationStorePath:e.manifest.installationStorePath,gitRoot:n,launchCwd:i,inGitRepo:e.manifest.inGitRepo,remote:w?.remote??null})),c]),y=J(u,null,"gitSnapshot"),E=J(l,"","detectVirt"),x=J(p,null,"probeCloud"),F=J(m,{},"hostEnv"),v=J(f,[],"mcpDeclared"),O=J(_,_g(o),"selfConfig"),D=J(S,{commit:()=>{}},"resolveOperatorForSend"),N=O.config;await cn(e,n,y);let $=g(e.hookInput,"model");$&&(N.model=$);let ee={identity:{host:Ye(),context:r,virt:E||null,cloud:x,git:y},host_env:F,env_vars:cr(),mcp:{declared:v},self_config:N,run_meta:{trigger:e.hookSource||"startup"},hook_input:Bt(e.hookInput,e.manifest.manifest,{...s,launchCwd:i})};await Ke("session_start",ee,an(e),$e,e.manifest.collectorUrl,t,mt(e))&&(O.commit(),D.commit(),ve.add(e.manifest.installationId))}async function Rg(e){let t=Date.now(),{gitRoot:n}=e.manifest;await cn(e,n);let r=hg(g(e.hookInput,"status"),g(e.hookInput,"stop_reason"),g(e.hookInput,"reason"),rt(g(e.hookInput,"error"))),o=e.runnerPlatform==="claude"?await Ua(g(e.hookInput,"transcript_path")):null,s=Bt(e.hookInput,e.manifest.manifest,Gr(e));o&&(s.model=o),await Ke("session_end",{status:r,...o?{model:o}:{},hook_input:s},an(e),$e,e.manifest.collectorUrl,t,mt(e))}function Ba(e,t,n,r){let o=r??Is({skillId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home}),s=sn(o,t.gitRoot,t.home,A.ComponentKind.SKILL,A.nativeKeyForSkillPath,e);if(s.sourcePath!==null&&Kn(s.sourcePath)?.toLowerCase()===n.toLowerCase())return s.componentReference===void 0?{}:{componentReference:s.componentReference};let i=r??Bs({commandId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),a=sn(i,t.gitRoot,t.home,A.ComponentKind.COMMAND,A.nativeKeyForCommandPath,e);return a.nativeKey?.toLowerCase()!==n.toLowerCase()?{}:{commandName:a.nativeKey,...a.componentReference===void 0?{}:{componentReference:a.componentReference}}}function Cg(e,t,n){let r=wt(e.hookInput.tool_input);return Promise.all(n.map(o=>{let s=Ba(e,t,o,r);return $a(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 Ig(e,t,n){return Promise.all(n.map(r=>{let o=Fs({relativePath:r,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),s=sn(o,t.gitRoot,t.home,A.ComponentKind.RULE,A.nativeKeyForRulePath,e),i=s.nativeKey??$s(r);return $a(e,t,{tool_name:"Rule",rule_name:i,...s.componentReference===void 0?{}:{component_reference:s.componentReference}})}))}var kg=[{kind:A.ComponentKind.SKILL,nativeKeyFn:A.nativeKeyForSkillPath},{kind:A.ComponentKind.RULE,nativeKeyFn:A.nativeKeyForRulePath},{kind:A.ComponentKind.COMMAND,nativeKeyFn:A.nativeKeyForCommandPath}];function Ag(e,t,n){if(n.skillName===null&&n.ruleName===null&&n.commandName===null)return{};let r=Gn(e.hookInput);if(r===null)return n.skillName===null?{}:Ba(e,t,n.skillName,null);for(let o of kg){let s=sn(r,t.gitRoot,t.home,o.kind,o.nativeKeyFn,e);if(s.nativeKey!==null)return{...s.componentReference===void 0?{}:{componentReference:s.componentReference},...o.kind===A.ComponentKind.RULE?{ruleName:s.nativeKey}:{},...o.kind===A.ComponentKind.COMMAND?{commandName:s.nativeKey}:{}}}return{}}var xg=/mcp/i;function Og(e,t,n,r){let o=xg.test(e.runnerEvent);if(!r.hasMcpIdentity&&!o)return{};let s=o?da(t,n):Xt(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 Pg(e){let t=await Fa(e),n=ti(e.hookInput,e.runnerEvent),{toolName:r,skillName:o}=n,s=Bn(e.hookInput),i=la(s,t.home),a=ri(e.hookInput),c=Xs(e.runnerEvent),u=c===!1?oi(e.hookInput,e.runnerEvent):null,l=await nr(e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home).catch(()=>[]),p=rt(g(e.hookInput,"mcp_server_name")),{mcpServer:m,mcpTool:f}=si(r,l.map(D=>D.name),p??""),_=gg(r,m,e.platformAgentId,e.manifest.installationId,String(e.runnerPlatform),l,p),S=_===void 0?Ag(e,t,n):{},y=m===null?null:Ys(m,e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home),E=Og(e,s,t.home,{hasMcpIdentity:!!m||!!f,declaredConfig:y}),x=_??S.componentReference,F=S.ruleName??n.ruleName,v=S.commandName??n.commandName,O=ni(e.hookInput);await Ke("tool_invoked",{tool_name:r,skill_name:o,...F?{rule_name:F}:{},...v?{command_name:v}:{},success:c,duration_ms:a,...i?{executable:i}:{},...u?{failure_reason:u}:{},...m?{mcp_server:m}:{},...f?{mcp_tool:f}:{},...E,...x?{component_reference:x}:{},...O?{subagent_type:O}:{},hook_input:t.hookInput},t.envelopeFields,$e,e.manifest.collectorUrl,t.buildStartedAtMs,mt(e,t.home))}async function Ga(e){switch(e.internalEvent){case"session_start":await Eg(e);return;case"session_end":await Rg(e);return;case"skill_invoked":{let t=ks(e.hookInput),n=Ks(e.hookInput);if(t.length===0&&n.length===0)return;let r=await Fa(e);await Promise.all([t.length===0?void 0:Cg(e,r,t),n.length===0?void 0:Ig(e,r,n)]);return}case"tool_invoked":await Pg(e);return;default:return}}function za(e){return e!=="session_start"&&e!=="session_end"&&e!=="tool_invoked"&&e!=="skill_invoked"&&e!==""}async function Wa(e,t,n,r){let o=t??await En(mn),s=j(o,{}),i=g(s,"session_id")||g(s,"conversation_id"),a=await jo(process.cwd(),{sessionId:i});if(!a)return;r&&(a.collectorUrl=r);let c=Zs(s,a.manifest.platform,n),u=Qs(e,c.runnerEvent);if(!u){d(`WARN: unknown hook event '${c.runnerEvent}'; skipping telemetry`);return}let l={hookInput:s,sessionId:c.sessionId,turnId:c.turnId,runnerEvent:c.runnerEvent,runnerPlatform:c.runnerPlatform,hookSource:c.hookSource,internalEvent:u,manifest:a,platformAgentId:a.platformAgentId};if(za(u)){d(`WARN: unsupported internal event '${u}'`);return}await Ga(l)}function vg(e,t){if(C("EV_AI_HOOK_SYNC")==="1")return!0;let n=Ut(e),r=j(t,{}),o=n.event??(g(r,"hook_event_name")||g(r,"event")),s=nt(r,o,void 0,n.runner);return Dt(o,s)}async function Ja(e=process.argv.slice(2)){if(e[0]===pt){try{await on(Je)}catch{}return 0}if(e[0]===rn){try{let t=Ut(e.slice(1)),n=await Je(),r=j(n,{}),o=t.event??(g(r,"hook_event_name")||g(r,"event"));if(In()||sr(t.runner,r,o))return 0;await Wa(t.event,n,t.runner,or(t))}catch(t){let n=t instanceof Error?t.message:String(t);d(`WARN: detached work failed open: ${n}`)}return 0}try{let t=await En(mn),n=Ut(e),r=or(n),o=j(t,{}),s=n.event??(g(o,"hook_event_name")||g(o,"event"));if(In()||sr(n.runner,o,s)||!pi(o,s,n.runner))return 0;vg(e,t)?await Wa(n.event,t,n.runner,r):await La(t,e)}catch(t){let n=t instanceof Error?t.message:String(t);d(`WARN: hook failed open: ${n}`)}finally{fo()}return 0}function ln(){d("Usage: ev-ai-agent-hook <configure|install|migrate-to-plugin|update|uninstall|--version>"),d(" configure [--url <\u2026/{orgToken}/hook>]"),d(" (manifest only \u2014 pair with marketplace plugins)"),d(" install --url <\u2026/{orgToken}/hook>"),d(" [--delivery npx|binary|local] [--force]"),d(" [--no-claude] [--no-cursor] [--no-codex]"),d(" (fallback: merge hooks into .claude / .cursor / .codex configs)"),d(" (writes collector_url to shared manifest; hook commands use --runner only)"),d(" migrate-to-plugin"),d(" (strip ev-ai file hooks; keep collector manifest)"),d(" update (refresh binary pins from a local build; leaves hook configs alone)"),d(" uninstall"),d("Hook mode: --runner <platform> [--url <\u2026/hook>|--token <orgToken>] [event]"),d(" (--url/--token optional overrides; else collector_url from manifest)")}function Va(e){return e.includes("--help")||e.includes("-h")}async function Ng(e=process.argv.slice(2)){let[t,...n]=e;if(t===pt){try{await on(Je)}catch{}return 0}return t==="--version"||t==="-V"?(process.stdout.write(`${ne}
|
|
43
|
+
`),0):t==="configure"?Va(n)?(ln(),0):(await cs(Vo(n)),0):t==="install"?Va(n)?(ln(),0):(await is(Yo(n)),0):t==="migrate-to-plugin"?(await us(),0):t==="update"?(await as(),0):t==="uninstall"?(await ds(),0):t==="help"||t==="--help"||t==="-h"?(ln(),0):t===void 0?(ln(),1):Ja(e)}function Lg(e,t,n=bg){if(!t)return!1;try{return e===Mg(wg(t)).href?!0:n(Tg(e))===n(t)}catch{return!1}}Lg(import.meta.url,process.argv[1])&&process.env.VITEST===void 0&&Ng().then(e=>{process.exit(e)}).catch(e=>{let t=e instanceof Error?e.message:String(e);d(t),process.exit(1)});export{Lg as isCliEntrypoint,Ng as main};
|