@ev-ai/agent-hook 1.0.10 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/hook.mjs CHANGED
@@ -1,27 +1,28 @@
1
1
  import { createRequire as __createRequire } from 'node:module';
2
2
  const require = __createRequire(import.meta.url);
3
3
 
4
- var os=Object.create;var hn=Object.defineProperty;var ss=Object.getOwnPropertyDescriptor;var is=Object.getOwnPropertyNames;var as=Object.getPrototypeOf,cs=Object.prototype.hasOwnProperty;var Sn=(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 ls=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var us=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of is(t))!cs.call(e,o)&&o!==n&&hn(e,o,{get:()=>t[o],enumerable:!(r=ss(t,o))||r.enumerable});return e};var ds=(e,t,n)=>(n=e!=null?os(as(e)):{},us(t||!e||!e.__esModule?hn(n,"default",{value:e,enumerable:!0}):n,e));var Ur=ls(j=>{"use strict";Object.defineProperty(j,"__esModule",{value:!0});j.ComponentKind=void 0;j.userConfigRootFromPath=ta;j.installationRootExternalKey=na;j.normalizeRepositoryRelativePath=br;j.nativeKeyForSkillPath=ra;j.serializeComponentIdentity=Pr;j.buildComponentReference=sa;j.validateComponentReference=ia;var Ji=Sn("node:crypto"),Yi=Sn("node:path"),Xi="cmp1_",Zi=/^cmp1_[A-Za-z0-9_-]{43}$/,qi=["/skills/","/skills-cursor/"],Qi=[".cursor",".claude",".codex"],ea={".claude.json":".claude",".agents":".codex"};j.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE"};function ta(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>Qi.includes(o));return n||(t.map(o=>ea[o]).find(o=>o!==void 0)??"unknown")}function na(e,t){return`runtime-install:${e}/${t}`}function Fe(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function br(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=Yi.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return Fe(n,"sourcePath")}function ra(e){let t=e.replaceAll("\\","/");for(let n of qi){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function oa(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function Pr(e){let t=[Fe(e.installationRootExternalKey,"installationRootExternalKey"),Fe(e.installableKind,"installableKind"),br(e.sourcePath),Fe(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(oa).join("|")}`,"utf8")}function sa(e){let t=(0,Ji.createHash)("sha256").update(Pr(e)).digest("base64url");return`${Xi}${t}`}function ia(e){return Zi.test(e)}});import{existsSync as Es,readFileSync as Rs}from"node:fs";import{hostname as Tn,userInfo as ys}from"node:os";import{randomBytes as ps}from"node:crypto";import{existsSync as at,mkdirSync as fs,readdirSync as ms,readFileSync as gs,renameSync as En,statSync as Cn,unlinkSync as Rn,writeFileSync as _s}from"node:fs";import{basename as hs,dirname as yn,join as In,relative as Ss}from"node:path";function h(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
5
- `)}function X(e,t){fs(yn(e),{recursive:!0});let n=In(yn(e),`.${hs(e)}.${process.pid}.${ps(4).toString("hex")}.tmp`);try{_s(n,t,"utf8");try{En(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){Rn(e),En(n,e);return}throw r}}catch(r){try{Rn(n)}catch{}throw r}}function we(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function An(){process.stdout.write('{"continue":true}')}function I(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function ct(){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 lt(e){return new Promise(t=>{let n="",r=!1,o=a=>{r||(r=!0,clearTimeout(s),t(a||"{}"))},s=setTimeout(()=>{o(n)},e);if(process.stdin.isTTY){o("{}");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",a=>{n+=a}),process.stdin.on("end",()=>{o(n)}),process.stdin.on("error",()=>{o(n)}),process.stdin.resume()})}async function K(e,t,n=3e3,r={}){let{execFile:o}=await import("node:child_process"),{promisify:s}=await import("node:util"),a=s(o);try{let{stdout:i}=await a(e,t,{timeout:n,windowsHide:!0,maxBuffer:1048576,cwd:r.cwd});return{ok:!0,stdout:i.trim()}}catch(i){let c=i,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 k(e,t,n=3e3,r={}){let o=await K(e,t,n,r);return o.ok?o.stdout:""}async function ut(e=process.cwd()){let t=await K("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(I("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;h(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=I("CURSOR_PROJECT_DIR")??I("CLAUDE_PROJECT_DIR");if(n&&at(n)){let r=await K("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 dt(e=process.cwd()){return(await ut(e)).root}function H(e,t){try{return JSON.parse(e)}catch{return t}}var it=new Map;function ce(e,t){let n=it.get(e);if(n!==void 0)return n;try{let r=H(gs(e,"utf8"),t);return it.set(e,r),r}catch{return it.set(e,t),t}}function te(e){return typeof e=="string"?e:""}function ne(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 m(e,t){let n=ne(e,t);return typeof n=="string"?n:""}var Z=500;function On(e,t=2){if(!at(e))return{entries:[],truncated:!1};let n=[],r=!1,o=(s,a)=>{if(a>t||r)return;let i;try{i=ms(s,{withFileTypes:!0})}catch{return}for(let c of i){if(r)return;let l=In(s,c.name);if(c.isDirectory()){o(l,a+1);continue}if(c.isFile()){try{n.push({name:Ss(e,l),size:Cn(l).size})}catch{continue}if(n.length>=Z){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function pt(e){return at(e)?{present:!0,size:Cn(e).size}:{present:!1,size:0}}function le(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function ft(e=process.env){return le(A("CURSOR_SANDBOX",e))}var Cs=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Is(e){return Cs.some(t=>!!A(t,e))}function As(e){if(A("KUBERNETES_SERVICE_HOST",e)||le(A("REMOTE_CONTAINERS",e))||le(A("DEVCONTAINER",e)))return!0;try{if(Es("/.dockerenv")||Rs("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function xn(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!A(t,e))}function Os(e,t=process.platform){return xn(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!A(n,e)):!1}function Ts(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function xs(e){return e==="linux"}function A(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return I(e)}function ks(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!vs(A("CURSOR_VERSION",n))}function vs(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function mt(e){if(Ts(e.sessionId))return!0;let t=e.hostname??Tn(),n=e.osUser??kn(e.env);return ks(t,n,e.env)}function ws(e){return le(A("CURSOR_AGENT",e.env))?!0:mt(e)}function bs(e){return!!(process.stdin.isTTY||process.stdout.isTTY||(A("TERM",e)??A("TERM_PROGRAM",e))||(A("SSH_TTY",e)??A("SSH_CONNECTION",e))||(A("__CFBundleIdentifier",e)??A("XPC_SERVICE_NAME",e))||xn(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!A(t,e))||A("SESSIONNAME",e))}function _e(e={}){let t=e.env;if(A("GITHUB_ACTIONS",t))return"github_actions";if(le(A("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!Os(t,n)&&ws(e)&&(le(A("CURSOR_AGENT",t))||xs(n)))return"cursor_cloud";if(A("CODESPACES",t)||A("CODESPACE_NAME",t))return"codespaces";if(A("GITLAB_CI",t))return"gitlab_ci";if(Is(t))return"managed";let r=A("CI",t);return r&&r!=="false"&&r!=="0"?"managed":As(t)?"container":bs(t)?"interactive":"unknown"}async function gt(){return await k("systemd-detect-virt",[],1e3)}function kn(e=process.env,t=ys){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 _t(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await k("sw_vers",["-productVersion"],1e3);else if(process.platform==="linux"){try{let{readFileSync:s}=await import("node:fs"),a=s("/etc/os-release","utf8"),i=a.match(/^PRETTY_NAME="?([^"\n]+)"?/m)?.[1],c=a.match(/^VERSION_ID="?([^"\n]+)"?/m)?.[1];t=i??c??""}catch{t=await k("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await k("uname",["-r"],1e3))}else t=await k("ver",[],1e3);let n=kn(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await k("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 he(){return Tn()}var Ps="https://hooks.ev-ai.ai";function be(e,t=Ps){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}var vn=".claude/ev-ai-runtime-report.json";var Pe="ev-ai-agent-hook";var gu=`current/${Pe}`,_u=`.ev-ai/agent-hook/${Pe}`,wn=5e3,bn=5e3,ht=3e3;var St=3e3,Pn=1500,Un=4*1024,Nn=32*1024,Us=4*1024,Mn=32*1024,Et="1.0.10",hu=`@ev-ai/agent-hook@${Et}`;var Ln=["claude","cursor","codex"];import{createHash as vi}from"node:crypto";import{existsSync as wi,mkdirSync as bi,readdirSync as Pi,readFileSync as Ir,unlinkSync as Ar,writeFileSync as Ui}from"node:fs";import{homedir as Or}from"node:os";import{join as bt}from"node:path";import{createHash as $n,randomBytes as Ls}from"node:crypto";import{existsSync as Kn,mkdirSync as Rt,readFileSync as jn,unlinkSync as Gn,writeFileSync as zn}from"node:fs";import{homedir as yt}from"node:os";import{dirname as Ue,join as Ct,resolve as Ds}from"node:path";var Ns=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),Ms=new Set(["github-actions","github actions","dependabot","renovate","cursoragent","cursor agent"]);function re(e,t){let n=(e??"").trim().toLowerCase(),r=(t??"").trim().toLowerCase();if(!n&&!r)return!1;if(n.includes("[bot]")||Ms.has(n)||r.includes("[bot]")||Ns.has(r))return!0;if(r.endsWith("@users.noreply.github.com")){let o=r.slice(0,r.indexOf("@")),s=o.includes("+")?o.slice(o.indexOf("+")+1):o;if(s.endsWith("bot")||s.includes("[bot]"))return!0}return!1}var Hs="installation.json",Fs="cloud-bootstrap.lock",Bs=6e4;function Wn(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function Se(e=yt()){return Ct(e,".ev-ai","agent-hook")}function $s(e=yt()){return Ct(Se(e),Hs)}function Vn(e){return Ct(Ue(e),Fs)}function Jn(){return Ls(8).toString("hex")}function ue(e){return $n("sha256").update(e).digest("hex").slice(0,16)}function y(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function Yn(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function Ks(e=process.env){let t=y(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!Yn(t)){h(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function Xn(e,t){return e&&Yn(e)?e:(e&&h(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),Ks(t))}function js(e){return/^[0-9a-f]{16}$/.test(e)}function Gs(e=process.env){if(y(e.GITHUB_ACTIONS)){let t=y(e.GITHUB_REPOSITORY_ID)??y(e.GITHUB_REPOSITORY),n=y(e.GITHUB_ACTOR)??y(e.GITHUB_TRIGGERING_ACTOR)??y(e.GITHUB_USER);if(t&&n)return ue(`github_actions|${t}|${n}`)}if(y(e.CODESPACES)||y(e.CODESPACE_NAME)){let t=y(e.CODESPACE_NAME);if(t)return ue(`codespaces|${t}`);let n=y(e.GITHUB_REPOSITORY_ID)??y(e.GITHUB_REPOSITORY),r=y(e.GITHUB_USER)??y(e.GITHUB_ACTOR);if(n&&r)return ue(`codespaces|${n}|${r}`)}if(y(e.GITLAB_CI)){let t=y(e.CI_PROJECT_ID)??y(e.CI_PROJECT_PATH),n=y(e.GITLAB_USER_LOGIN)??y(e.GITLAB_USER_EMAIL)??y(e.GITLAB_USER_NAME);if(t&&n)return ue(`gitlab|${t}|${n}`)}return null}var zs="cursoragent@cursor.com";function Ws(e){let t=y(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===zs?null:t}function Vs(e,t){return y(e.CURSOR_PROJECT_DIR)??y(e.CLAUDE_PROJECT_DIR)??t}function Js(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function Ys(e){let t=await k("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?Js(t):e}async function Xs(e){let t=y(await k("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!re(null,t))return t;let n=y(await k("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!re(null,n)?n:null}function Zs(e,t){let n=Vs(e,t);return n?ue(`cursor_cloud|${n}|${Ws(e)??""}`):null}async function qs(e,t){let n=y(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await Ys(n),o=await Xs(n);return ue(`claude_remote|${r}|${o??""}`)}function Dn(e,t){let n=Xn(e,t);if(n)return n;let r=Gs(t);return r||Jn()}async function Qs(e){let n=await k("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Ds(e);return $n("sha256").update(n).digest("hex").slice(0,16)}function ei(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 ti(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=ei(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 oe(e){if(Kn(e))try{return ti(jn(e,"utf8"))}catch{}}function It(e){return oe(e)}function Zn(e,t,n){let r=oe(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)}
6
- `)}catch(s){let a=s instanceof Error?s.message:String(s);h(`WARN: operator identity cache write failed open: ${a}`)}}function qn(e,t=Date.now()){if(!e)return!0;if(oe(e)?.operator_identity_hash)return!1;let n=Vn(e);try{if(Kn(n)){let r=Number.NaN;try{r=Number(jn(n,"utf8").trim())}catch{}let o=t-r;if(Number.isFinite(o)&&o>=0&&o<Bs)return!1;try{Gn(n)}catch{}}}catch{}try{return Rt(Ue(n),{recursive:!0}),zn(n,`${t}
7
- `,{encoding:"utf8",flag:"wx"}),!0}catch(r){if(nr(r))return!1;let o=r instanceof Error?r.message:String(r);return h(`WARN: cloud bootstrap claim failed open: ${o}`),!0}}function Qn(e){if(e)try{Gn(Vn(e))}catch{}}function er(e,t){let r=oe(e)?.platform_agent_ids?.[t];return typeof r=="string"&&r.length>0?r:void 0}function tr(e,t,n){if(!n)return;let r=oe(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)}
8
- `)}catch(s){let a=s instanceof Error?s.message:String(s);h(`WARN: platform_agent_id cache write failed open: ${a}`)}}function nr(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function ni(e,t){Rt(Ue(e),{recursive:!0}),zn(e,`${JSON.stringify(t,null,2)}
9
- `,{encoding:"utf8",flag:"wx"})}function Hn(e,t){try{return ni(e,t),t}catch(n){if(!nr(n))throw n;return oe(e)}}function Fn(e,t){Rt(Ue(e),{recursive:!0}),X(e,`${JSON.stringify(t,null,2)}
10
- `)}function Bn(e,t){return{installation_id:e,...t&&t===e?{pinned:!0}:{}}}async function rr(e,t={}){let n=t.home??yt(),r=t.env??process.env,o=await Qs(e),s=$s(n),a={sessionId:t.sessionId,hostname:y(r.HOSTNAME)??void 0,osUser:y(r.USER)??y(r.LOGNAME)??y(r.USERNAME)??void 0,env:r},i=_e(a),c=Xn(t.overrideId,r),l=i==="cursor_cloud"&&mt(a)?Zs(r,e):i==="claude_remote"?await qs(r,e):null,u=oe(s);if(u){let E=u;if(c&&c===u.installation_id&&u.pinned!==!0&&(E={...u,pinned:!0},Fn(s,E)),!!l&&l!==E.installation_id&&!c&&E.pinned!==!0&&js(E.installation_id)&&l){let C={installation_id:l,...E.platform_agent_ids?{platform_agent_ids:E.platform_agent_ids}:{}};return Fn(s,C),{installationId:l,storePath:s,repoKey:o}}return{installationId:E.installation_id,storePath:s,repoKey:o}}let d=c??l??Dn(void 0,r),f=Hn(s,Bn(d,c));if(f)return{installationId:f.installation_id,storePath:s,repoKey:o};let p=c??l??Dn(void 0,r),g=Hn(s,Bn(p===d?Jn():p,c));if(g)return{installationId:g.installation_id,storePath:s,repoKey:o};throw new Error(`Failed to create installation record at ${s}`)}var ri=new Set(["localhost","127.0.0.1","[::1]","::1"]),or=/^[A-Za-z0-9._~-]+$/;function sr(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 Ne(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?ri.has(t.hostname):!1}catch{return!1}}function ir(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!Ne(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=oi(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!or.test(n))return`org token must match ${or.source} (got: ${n})`;if(sr(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(sr(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function ar(e){return new URL(e).toString()}function oi(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 At(e){try{let t=new URL(e),n=t.pathname.split("/").filter(r=>r.length>0);return n.length>=2&&n[n.length-1]==="hook"&&(n[n.length-2]="***",t.pathname=`/${n.join("/")}`),t.toString()}catch{return"<invalid-url>"}}function cr(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token?.trim();return t?be(t):""}var lr=/(?:^|\/|[\s"'=(])(?:\.cursor\/|\.claude\/|\.agents\/)skills(?:-cursor)?\/([^/]+)\/SKILL\.md/i,ur=/(?:^|\/|[\s"'=(])\.codex\/commands\/([^/]+)\.md\b/i,si=/(?:^|\s)\/([a-z][a-z0-9-]{1,63})\b/gi,ii=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"]),ai=new Set(["read","read_file","view"]),ci=new Set(["bash","shell","zsh"]);function li(e){let t=e.replace(/\\/g,"/");return lr.exec(t)?.[1]??null}function ui(e){let t=e.replace(/\\/g,"/"),r=ur.exec(t)?.[1];return r?r.toLowerCase():null}function Ot(e){return li(e)??ui(e)}function di(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 Me(e){if(typeof e=="string")try{let t=JSON.parse(e);return Me(t)}catch{return null}return!e||typeof e!="object"?null:di(e)}function dr(e){if(typeof e=="string")try{let n=JSON.parse(e);return dr(n)}catch{return null}if(!e||typeof e!="object")return null;let t=e.command;return typeof t=="string"&&t.length>0?t:null}function Tt(e){let t=dr(e.tool_input);if(t)return t;let n=te(e.command);return n.length>0?n:null}function pi(e){let t=e.replace(/\\/g,"/"),n=lr.exec(t);if(n?.[1])return n[1];let o=ur.exec(t)?.[1];return o?o.toLowerCase():null}function fi(e){return typeof e.tool_name=="string"?e.tool_name:typeof e.tool=="string"?e.tool:""}function pr(e){let t=fi(e).toLowerCase();if(ai.has(t)){let n=Me(e.tool_input)??te(e.file_path),r=n?Ot(n):null;if(r)return r}if(ci.has(t)){let n=Tt(e);return n?pi(n):null}return null}function mi(e){let t=new Set,n=[];for(let r of e.matchAll(si)){let o=r[1]?.toLowerCase();!o||t.has(o)||ii.has(o)||(t.add(o),n.push(o))}return n}function gi(e){return te(e.prompt)}function fr(e){let t=m(e,"command_name");if(t){let r=m(e,"expansion_type");if(r&&r!=="slash_command")return[];let o=t.replace(/^\//,"").toLowerCase();return o?[o]:[]}let n=gi(e);return n?mi(n):[]}function xt(e){return e!==void 0&&Ln.includes(e)}function Le(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function De(e){let t,n,r,o,s;for(let a=0;a<e.length;a++){let i=e[a];if(i!==void 0){if(i==="--runner"){let c=Le(e,a);t=c.value,a=c.next;continue}if(i.startsWith("--runner=")){t=i.slice(9);continue}if(i==="--url"){let c=Le(e,a);c.value&&(r=c.value),a=c.next;continue}if(i.startsWith("--url=")){r=i.slice(6);continue}if(i==="--token"){let c=Le(e,a);c.value&&(o=c.value),a=c.next;continue}if(i.startsWith("--token=")){o=i.slice(8);continue}if(i==="--base-url"){let c=Le(e,a);c.value&&(s=c.value),a=c.next;continue}if(i.startsWith("--base-url=")){s=i.slice(11);continue}!i.startsWith("-")&&n===void 0&&(n=i)}}return{runner:xt(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function kt(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=be(o,e.baseUrl?.trim()??void 0))}if(!n)return;let r=ir(n);if(r){h(`WARN: ignoring --url/--token collector override: ${r}`);return}return ar(n)}function mr(e,t){if(m(e,"conversation_id"))return!0;if(t==="")return!1;let n=t[0];return n?.toLowerCase()===n}function _i(){return!!(I("CURSOR_VERSION")??I("CURSOR_PROJECT_DIR"))}function vt(e,t,n){return e!=="claude"&&e!=="codex"?!1:mr(t,n)?!0:_i()}function Ee(e,t,n,r){if(mr(e,t))return"cursor";if(xt(r))return r;let o=m(e,"conversation_id"),s=m(e,"turn_id"),a=m(e,"session_id"),i=t.toLowerCase(),c="unknown";return o||t===i&&t!==""?c="cursor":s?c="codex":(a||i==="sessionstart"||i==="sessionend"||i==="stop"||i==="stopfailure"||i==="pretooluse"||i==="posttooluse"||i==="posttoolusefailure"||i==="permissiondenied"||i==="subagentstart"||i==="subagentstop"||i==="userpromptexpansion")&&(c="claude"),xt(n)&&(c=n),c}function He(e,t){let n=e.toLowerCase();return n==="sessionend"||n==="stopfailure"||n==="subagentstop"?!0:n==="stop"&&t==="codex"}function hi(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 gr(e){let t=e.toLowerCase();return t==="posttooluse"?!0:t==="posttoolusefailure"||t==="permissiondenied"?!1:null}function _r(e,t,n){let r=m(e,"session_id")||m(e,"conversation_id"),o=m(e,"prompt.id")||m(e,"prompt_id")||m(e,"generation_id")||m(e,"turn_id"),s=m(e,"hook_event_name")||m(e,"event"),a=m(e,"source"),i=Ee(e,s,t,n);return{sessionId:r,turnId:o,runnerEvent:s,hookSource:a,runnerPlatform:i}}var Si=["session_start","session_end","tool_invoked","skill_invoked"];function Ei(e){return Si.includes(e)}function hr(e,t){return e&&Ei(e)?e:hi(t.toLowerCase())}var Ri={beforeshellexecution:"Shell",aftershellexecution:"Shell",beforereadfile:"Read",afterfileedit:"Write"};function yi(e){return/^mcp__/i.test(e)||/^MCP:/i.test(e)}function Sr(e,t=""){let n=m(e,"tool_name")||m(e,"tool")||null,r=t.toLowerCase();n?r==="beforemcpexecution"&&!yi(n)&&(n=`MCP:${n}`):n=Ri[r]??null;let o=e.tool_input,a=(o&&typeof o=="object"?te(o.skill)||te(o.skill_name):"")||m(e,"skill_name")||null,i=n&&e.tool_name!==n&&e.tool!==n?{...e,tool_name:n}:e;return a??=pr(i),{toolName:n,skillName:a}}var Ci=/^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/;function Er(e){for(let t of["subagent_type","agent_type"]){let n=m(e,t);if(n&&Ci.test(n))return n}return null}function Rr(e){let t=ne(e,"duration_ms");if(typeof t=="number")return t;let n=ne(e,"duration");return typeof n=="number"?n:null}var Ii="error",Ai="interrupted",Oi="permission_denied",Ti=/^[A-Za-z][A-Za-z0-9_.-]{0,63}$/;function wt(e){return Ti.test(e)?e:null}function xi(e){for(let t of["failure_type","error_type"]){let n=wt(m(e,t));if(n)return n}return null}function yr(e,t){return ne(e,"is_interrupt")===!0?Ai:t.toLowerCase()==="permissiondenied"?Oi:xi(e)??Ii}function ki(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 Cr(e,t=[]){if(!e)return{mcpServer:null,mcpTool:null};let n=/^mcp__(.+?)__(.+)$/i.exec(e);if(n?.[1]&&n[2])return{mcpServer:n[1],mcpTool:n[2]};if(/^MCP:/i.test(e)){let r=e.slice(4);if(!r)return{mcpServer:null,mcpTool:null};let o=r.indexOf(":");if(o>0)return{mcpServer:r.slice(0,o),mcpTool:r.slice(o+1)||null};let s=r.indexOf("__");return s>0?{mcpServer:r.slice(0,s),mcpTool:r.slice(s+2)||null}:{mcpServer:ki(r,t),mcpTool:r}}return{mcpServer:null,mcpTool:null}}var Tr=3e4,Ni="claims",Mi=!0,Li=100,Di=new Set(["sessionstart","sessionend","stopfailure"]),Hi=["tool_name","tool","command","file_path","url"];function Fi(e=Or()){return bt(Se(e),Ni)}function xr(e){let t=e.split(`
11
- `,1)[0]??"";return Number(t.trim())}function kr(e){return vi("sha256").update(e).digest("hex").slice(0,32)}function Bi(e){let t=[];for(let n of Hi){let r=m(e,n).trim();r&&t.push(`${n}=${r}`)}return t.length===0?"":kr(t.join("\0"))}function $i(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()??"",a=e.callFingerprint?.trim()??"",i=!!(o||r||s),c=Di.has(n);if(!i&&!c)return;let l=e.runnerPlatform.trim()||"unknown";return kr(`${l}|${t}|${n}|${r}|${o}|${a}|${s}`)}function Ki(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function ji(e,t){return bt(e,t)}function Gi(e,t=Date.now()){let n;try{n=Pi(e)}catch{return}let r=0;for(let o of n){if(r>=Li)break;r+=1;let s=bt(e,o),a=Number.NaN;try{a=xr(Ir(s,"utf8"))}catch{continue}let i=t-a;if(!(!Number.isFinite(i)||i<0||i<Tr))try{Ar(s)}catch{}}}function zi(e,t,n=Date.now()){let r=ji(t,e);try{if(wi(r)){let o=Number.NaN;try{o=xr(Ir(r,"utf8"))}catch{}let s=n-o;if(Number.isFinite(s)&&s>=0&&s<Tr)return!1;try{Ar(r)}catch{}}}catch{}try{bi(t,{recursive:!0}),Ui(r,`${n}
12
- `,{encoding:"utf8",flag:"wx"})}catch(o){if(Ki(o))return!1;let s=o instanceof Error?o.message:String(o);return h(`WARN: event claim failed open: ${s}`),!0}return Gi(t,n),!0}function Wi(e,t,n){let r=m(e,"session_id")||m(e,"conversation_id"),o=m(e,"prompt.id")||m(e,"prompt_id")||m(e,"generation_id")||m(e,"turn_id"),s=m(e,"tool_use_id"),a=m(e,"subagent_id")||m(e,"agent_id"),i=Ee(e,t,void 0,n),c=Bi(e);return{runnerPlatform:i,sessionId:r,runnerEvent:t,turnId:o,toolUseId:s,subagentId:a,callFingerprint:c}}function vr(e,t,n,r=Or(),o=Date.now()){if(!Mi)return!0;let s=$i(Wi(e,t,n));if(!s)return!0;let a=zi(s,Fi(r),o);return!a&&I("EV_AI_HOOK_DEBUG")&&h(`DEBUG: duplicate hook event suppressed (claim ${s.slice(0,8)}\u2026)`),a}import{homedir as Yo}from"node:os";var Pt={claude:".claude",cursor:".cursor",codex:".codex",opencode:".opencode"};function Re(e){let n=e.replace(/^\/+|\/+$/g,"").toLowerCase().split("/").filter(Boolean);return n.length<2?"":n.join("/")}function Vi(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 Re(n[1]);let r=t.match(/^ssh:\/\/[^/]+\/(.+)$/i);if(r?.[1])return Re(r[1]);t=t.replace(/^https:\/\//i,""),t=t.replace(/^http:\/\//i,""),t=t.replace(/^ssh:\/\//i,"");let o=t.match(/^[^/]+\/(.+)$/);return o?.[1]?Re(o[1]):Re(t)}async function ye(e=process.cwd()){let t=await K("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([K("git",["remote","get-url","origin"],2e3,{cwd:e}),K("git",["branch","--show-current"],2e3,{cwd:e}),K("git",["rev-parse","HEAD"],2e3,{cwd:e}),K("git",["status","--porcelain"],2e3,{cwd:e})]),a=n.ok?n.stdout:null;return{remote:a===null?null:a.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 wr(e,t,n,r=process.cwd(),o,s,a){if(t)return t;let i=Pt[n];if(!i)return"";let c=Wn(n,e.scope_path,a);if(s){let g=er(s,c);if(g)return g}let l=o??await ye(r),u=l?.remote?Vi(l.remote):"";if(u||(u=Re(process.env.GITHUB_REPOSITORY??"")),!u)return"";let d=e.scope_path??"",f=d?`${d}/`:"",p=`${u}:${f}${i}`;return s&&tr(s,c,p),p}var b=ds(Ur(),1);import{existsSync as aa,readFileSync as ca}from"node:fs";import{homedir as Nr}from"node:os";import{join as la}from"node:path";var ua="cloud-cache.json",da=1440*60*1e3,pa=900*1e3;function fa(e=Nr()){return la(Se(e),ua)}function ma(e){if(!aa(e))return;let t=H(ca(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 ga(e,t){try{X(e,`${JSON.stringify(t)}
13
- `)}catch(n){let r=n instanceof Error?n.message:String(n);h(`WARN: cloud cache write failed open: ${r}`)}}function _a(e,t,n){if(!e||e.context!==t)return!1;let r=e.result===null?pa:da;return n-e.probed_at<r}async function ha(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 a=o?.ok?(await o.text()).trim():"",i=s?.ok?(await s.text()).trim():"";if(!(!a&&!i))return{provider:"aws",region:a,instance_id:i}}async function Sa(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 Ea(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 Ra(e){let t=await Promise.allSettled([ha(e),Sa(e),Ea(e)]);for(let n of t)if(n.status==="fulfilled"&&n.value)return n.value;return null}async function Ut(e,t){if(e==="interactive")return null;let n=t?.home??Nr(),r=t?.timeoutMs??1e3,o=t?.nowMs??Date.now(),s=fa(n),a=ma(s);if(_a(a,e,o))return a.result;let i=await Ra(r);return ga(s,{context:e,probed_at:o,result:i}),i}import{existsSync as ya}from"node:fs";import{homedir as Ca}from"node:os";import{join as Be}from"node:path";function $e(e,t,n){if(!ya(e))return;let r=ce(e,{});for(let o of Object.keys(r.mcpServers??{}))n.set(o,{name:o,...t})}async function Nt(e,t=process.cwd(),n="claude",r=Ca()){let o=new Map;for(let s of e.mcp_servers??[])s.name&&o.set(s.name,{name:s.name,source:"manifest"});return n==="claude"?$e(Be(r,".claude.json"),{source:"claude_json_user"},o):n==="cursor"&&$e(Be(r,".cursor/mcp.json"),{source:"cursor_mcp_user"},o),$e(Be(t,".mcp.json"),{source:"mcp_json"},o),$e(Be(t,".cursor/mcp.json"),{source:"cursor_mcp"},o),[...o.values()]}var Ia=["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"],Aa=["CURSOR_PROJECT_DIR"],Oa=new Set(["key","api-key","api_key","apikey","token","sig","signature","access_token","password","pwd","secret","client_secret"]);function Ta(e){try{let t=new URL(e);(t.username||t.password)&&(t.username="",t.password="");for(let[n]of t.searchParams)Oa.has(n.toLowerCase())&&t.searchParams.set(n,"[redacted]");return t.toString()}catch{return e}}function Mt(e=process.env){let t=Ia.map(r=>Object.prototype.hasOwnProperty.call(e,r)?{name:r,present:!0,value:Ta(e[r]??"")}:{name:r,present:!1}),n=Aa.map(r=>({name:r,present:Object.prototype.hasOwnProperty.call(e,r)&&!!e[r]}));return[...t,...n]}import{createHash as xa}from"node:crypto";import{resolve as ka}from"node:path";function x(e){return xa("sha256").update(e).digest("hex").slice(0,16)}function Lt(e){return x(ka(e))}function F(e,t){return`${e}\0${t}`}function Mr(e){let t=e.indexOf("\0");return t<=0?null:{path:e.slice(0,t),name:e.slice(t+1)}}function Ce(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(`
14
- `);return x(n)}function va(e,t,n="git_config",r=null){return x(`${e??""}|${t??""}|${r??""}|${n}`)}function wa(e){let t=null,n=null;for(let r of e.split(`
15
- `)){let o=r.trim();if(!o)continue;let s=o.indexOf(" ");if(s<=0)continue;let a=o.slice(0,s).toLowerCase(),i=o.slice(s+1).trim();i&&(a==="user.name"?t=i:a==="user.email"&&(n=i))}return{git_user_name:t,git_user_email:n,platform_login:null}}async function ba(e,t=k){let n=await t("git",["config","--get-regexp","^user\\.(name|email)$"],2e3,{cwd:e});return wa(n)}function Pa(e=process.env){let t=R(e.GIT_AUTHOR_NAME),n=R(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=R(e.GIT_COMMITTER_NAME),o=R(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=R(e.EMAIL);return s?{git_user_name:null,git_user_email:s,platform_login:null,identity_source:"git_env"}:null}function W(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 Ua(e=process.env){let t=W(R(e.EV_AI_HOOK_OPERATOR_NAME),R(e.EV_AI_HOOK_OPERATOR_EMAIL),"configured",R(e.EV_AI_HOOK_OPERATOR_LOGIN));if(t)return t;let n=R(e.GITHUB_ACTOR)??R(e.GITHUB_TRIGGERING_ACTOR)??R(e.GITHUB_USER),r=W(n,null,"github",n);if(r)return r;let o=R(e.GITLAB_USER_LOGIN),s=W(R(e.GITLAB_USER_NAME)??o,R(e.GITLAB_USER_EMAIL),"gitlab",o);if(s)return s;let a=W(R(e.BUILD_REQUESTEDFOR),R(e.BUILD_REQUESTEDFOREMAIL),"azure_devops",R(e.BUILD_REQUESTEDFORID));if(a)return a;let i=R(e.BUILDKITE_BUILD_CREATOR_EMAIL),c=W(R(e.BUILDKITE_BUILD_CREATOR),i,"buildkite",i);if(c)return c;let l=W(R(e.BUILD_USER)??R(e.CHANGE_AUTHOR),R(e.BUILD_USER_EMAIL)??R(e.CHANGE_AUTHOR_EMAIL),"jenkins",R(e.BUILD_USER_ID));if(l)return l;let u=R(e.CIRCLE_USERNAME),d=W(u,null,"circleci",u);if(d)return d;let f=R(e.CODEBUILD_INITIATOR),p=W(f,null,"codebuild",f);if(p)return p;let g=W(R(e.DRONE_COMMIT_AUTHOR)??R(e.DRONE_COMMIT_AUTHOR_NAME),R(e.DRONE_COMMIT_AUTHOR_EMAIL),"drone",R(e.DRONE_COMMIT_AUTHOR));if(g)return g;if(Dr(e.CLAUDE_CODE_REMOTE)||Dr(e.CURSOR_AGENT)){let E=R(e.CURSOR_USER_EMAIL);return{git_user_name:null,git_user_email:E&&!re(null,E)?E:null,platform_login:null,identity_source:"cloud"}}return null}function Lr(e){return!!((e.git_user_name??e.git_user_email)&&!re(e.git_user_name,e.git_user_email))}function R(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function Dr(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}async function Na(e,t=k,n=process.env){let r=await ba(e,t);if(Lr(r))return{...r,identity_source:"git_config"};let o=Pa(n);if(o&&Lr(o))return o;let s=Ua(n);return s||(r.git_user_name||r.git_user_email?{...r,identity_source:"git_config"}:o||{git_user_name:null,git_user_email:null,platform_login:null,identity_source:"git_config"})}async function Ke(e){let{gitRoot:t,installationStorePath:n,forceResend:r}=e,o=e.exec??k,s=e.env??process.env,a=await Na(t,o,s),i=va(a.git_user_name,a.git_user_email,a.identity_source,a.platform_login),l=(n?It(n):void 0)?.operator_identity_hash;if(!(r||l!==void 0&&l!==i||!l))return{commit:()=>{}};let p=n;return{operator:a,commit:()=>{p&&Zn(p,i,we())}}}function Dt(e){return e?!It(e)?.operator_identity_hash:!0}function Hr(e){return!0}import{existsSync as rl,readFileSync as ol}from"node:fs";import{homedir as Do}from"node:os";import{join as fe,resolve as sl}from"node:path";import{basename as Xc,join as pe}from"node:path";import{dirname as Vr,resolve as Ge}from"node:path";import{existsSync as Ma}from"node:fs";import{homedir as $r}from"node:os";import{relative as Kr,resolve as z,sep as q}from"node:path";var La=["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 Da(e){return e.capture_hook_input==="full"?!0:e.capture_hook_input==="allowlist"?!1:I("EV_AI_HOOK_CAPTURE_FULL_INPUT")==="1"}function Ha(e){let t={};for(let n of La){let r=ne(e,n);r!==void 0&&(t[n]=r)}return t}function je(e,t){if(typeof e!="string"||e.length===0||!t)return null;let n=z(e),r=z(t),o=Kr(r,n);return!o||o==="."?".":o.startsWith(`..${q}`)||o===".."||z(r,o)!==n?null:o.split(q).join("/")}function jr(e,t){let n=Kr(z(t),z(e)).split(q).join("/");return!n||n==="."?null:n===".."||n.startsWith("../")&&n.split("/").every(r=>r==="..")?n:null}function Gr(e){return typeof e!="string"||e.length===0?null:z(e).split(q).join("/")}function Fa(){let e=I("CURSOR_PROJECT_DIR");if(!e)return null;let t=z(e);return Ma(t)?t.split(q).join("/"):null}function Ht(e,t){return je(e,t)!==null}function Ba(e,t){let n=z(t??$r(),".cursor").split(q).join("/");return Ht(e,n)}function $a(e,t,n){return t!==null&&Ht(e,t)?!0:t!==null&&Ba(e,n.home)?!1:n.inGitRepo===!0&&n.gitRoot!==void 0&&Ht(e,n.gitRoot)?!0:t===null}function zr(e,t){let n=Gr(e.cwd);if(n!==null)return n;let r=z(process.cwd()).split(q).join("/"),o=Fa();return $a(r,o,t)?r:o??r}function Wr(e,t={}){return zr(e,t)}function Ft(e,t=$r()){let n=z(t).split(q).join("/").replace(/\/$/,"");return n.length<=1?e:e===n?"~":e.startsWith(`${n}/`)?`~${e.slice(n.length)}`:e}function Fr(e,t,n){let r=Gr(n.launchCwd)??zr(t,n);e.cwd=Ft(r,n.home);let o=n.inGitRepo===!0&&n.gitRoot!==void 0?je(r,n.gitRoot):null;o!==null&&(e.cwd_relative=o)}function Br(e,t){let n=JSON.stringify(e),r=Buffer.byteLength(n,"utf8");if(r<=t)return e;let o=Object.entries(e).filter(([a,i])=>!a.startsWith("_")&&(typeof i=="string"||typeof i=="number"||typeof i=="boolean")).sort((a,i)=>Buffer.byteLength(JSON.stringify(a[1]),"utf8")-Buffer.byteLength(JSON.stringify(i[1]),"utf8")),s={_truncated:!0,_original_bytes:r};for(let[a,i]of o){let c={...s,[a]:i};if(Buffer.byteLength(JSON.stringify(c),"utf8")>t)break;s[a]=i}return s}function Ie(e,t,n={}){if(Da(t)){let o={...e};return delete o.cwd,delete o.transcript_path,Fr(o,e,n),Br(o,Nn)}let r=Ha(e);return Fr(r,e,n),Br(r,Un)}function Ka(e){return typeof e=="string"&&e.length>0}function Bt(e){let t=Ge(e.home),n=Ge(e.launchCwd),r=e.gitRoot?Ge(e.gitRoot):null,o=new Set,s=[],a=null;e.inGitRepo&&Ka(e.remote)&&r!==null&&r!==t&&(a=r,o.add(r)),n!==t&&!o.has(n)&&(s.push({scope:"cwd",dir:n}),o.add(n)),a!==null&&s.push({scope:"repo",dir:a});let i=null,c=r!==null&&je(n,r)!==null;if(e.inGitRepo&&r!==null&&r!==t&&c){let l=Vr(r);for(;;){let u=Ge(l);if(u===t)break;let d=Vr(u);if(d===u)break;if(e.hasProjectSpec(u)){s.push({scope:"parent",dir:u}),i=jr(u,n);break}l=d}}return{anchors:s,parentRel:i}}import{existsSync as Jr,readdirSync as ja,realpathSync as Ga}from"node:fs";import{basename as za,dirname as Wa,relative as Va,resolve as Ja,sep as Ya}from"node:path";var $t=400,ze=class{constructor(t,n={}){this.home=t;this.pathMode=n.pathMode??"home-relative",this.maxEntries=n.maxEntries??Z}components=[];truncated=!1;pathMode;maxEntries;pluginExpandRemaining;seenRealpaths=new Set;componentPath(t){if(this.pathMode==="tilde"){let r=Ja(t).split(Ya).join("/");return Ft(r,this.home)}let n=Va(this.home,t).replace(/\\/g,"/");return!n||n.startsWith("..")?`external/${x(Wa(t))}/${za(t)}`:n}claimFile(t){try{let n=Ga(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(!Jr(t))return[];try{return ja(t,{withFileTypes:!0})}catch{return[]}}readJson(t,n){if(Jr(t))return ce(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 Kt,readFileSync as Xa,statSync as Za}from"node:fs";import{basename as Xr,join as Ae,relative as Zr}from"node:path";var jt=20*1024,qa=4;function Qa(e){return e.length<=jt?e:`${e.slice(0,jt-1)}\u2026`}function ec(e){try{let t=Xa(e),n=t.toString("utf8");return{hash:x(t),length:t.length,text:Qa(n)}}catch{return null}}var Yr={HOOK:"EVENT",COMMAND:"EXPLICIT_INVOCATION",MEMORY:void 0,MCP_SERVER:void 0,PLUGIN:void 0,SKILL:"UNSPECIFIED",RULE:"UNSPECIFIED",SUBAGENT:"UNSPECIFIED"};function tc(e){return e in Yr?Yr[e]:"UNSPECIFIED"}function We(e,t){if(!e.claimFile(t.absolutePath))return!1;let n=ec(t.absolutePath);if(!n)return!1;let r=t.name??Xr(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=tc(t.kind);return s&&(o.trigger=s),e.push(o)}function nc(e,t,n){let r=Zr(e,t).replace(/\\/g,"/");return!r||r.startsWith("..")?Xr(t).replace(/\.(md|mdc|toml)$/i,""):n?r.replace(/\.(md|mdc|toml)$/i,""):r}function se(e,t){let{dir:n,kind:r,origin:o,enabled:s,nested:a,extensions:i}=t;Gt(e,{walkRoot:n,currentDir:n,depth:0,kind:r,origin:o,enabled:s,nested:a,extensions:i})}function Gt(e,t){let{walkRoot:n,currentDir:r,depth:o,kind:s,origin:a,enabled:i,nested:c,extensions:l}=t;if(!(o>qa))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 p=Ae(r,u.name,c);if(Kt(p)){let g=Zr(n,Ae(r,u.name)).replace(/\\/g,"/");We(e,{absolutePath:p,kind:s,origin:a,enabled:i,name:g||u.name});continue}Gt(e,{walkRoot:n,currentDir:Ae(r,u.name),depth:o+1,kind:s,origin:a,enabled:i,nested:c,extensions:l});continue}if(u.isDirectory()){Gt(e,{walkRoot:n,currentDir:Ae(r,u.name),depth:o+1,kind:s,origin:a,enabled:i,nested:c,extensions:l});continue}if(!u.isFile()||!l)continue;let d=u.name.toLowerCase();if(!l.some(p=>d.endsWith(p)))continue;let f=Ae(r,u.name);We(e,{absolutePath:f,kind:s,origin:a,enabled:i,name:nc(n,f,!0)})}}function qr(e){for(let t of e)if(Kt(t))try{if(Za(t).size>0)return t}catch{continue}return e.find(t=>Kt(t))}var rc="<omitted>",Qr=100,eo=120,Je=[{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"}],to=new Set(Je.map(e=>e.attr)),oc=["enabled","disabled"],sc=["serverUrl","auth","bearer_token_env_var","default_tools_approval_mode","defaultToolsApprovalMode","env_vars","env_http_headers","http_headers"],ic=new Set(["type","command","url","args","env","envVars","headers",...oc,...sc,...Je.map(e=>e.raw)]),ac=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",...to,...[...to].map(e=>`${e}_truncated`)]);function no(e,t){for(let n of t)ic.has(n)||ac.has(n)||(e[n]=rc)}var cc=/^(authorization|auth|api[-_]?key|access[-_]?token|refresh[-_]?token|secret|password|passwd|token|bearer|client[-_]?secret|client[-_]?id|private[-_]?key|signing[-_]?key)$/i,lc=/(?:^|[-_])(secret|password|passwd|token|api[-_]?key|private[-_]?key|signing[-_]?key|client[-_]?secret|client[-_]?id)(?:[-_]|$)/i,uc=/^(sk-|ghp_|gho_|github_pat_|xox[baprs]-|AKIA|ASIA|AIza|ya29\.)/,dc=/^bearer(?:\s+|$)/i;function Ye(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function ro(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.length>0):[]}function zt(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=Ye(e);return t?Object.keys(t).filter(n=>n.length>0):[]}function ie(e){try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return e}}function pc(e){return uc.test(e)||dc.test(e)?"<redacted>":e.includes("://")?ie(e):e}function oo(e){if(/^https?:\/\//i.test(e))return ie(e);let t=e.indexOf("=");return t>0?`${e.slice(0,t+1)}${oo(e.slice(t+1))}`:pc(e)}function fc(e){let t=e.replace(/^-+/,"").split("=",1)[0]??"";return cc.test(t)||lc.test(t)}function Xe(e){let t=[],n=!1;for(let r of e){if(n){t.push("<redacted>"),n=!1;continue}if(fc(r)){t.push("<redacted>"),n=!r.includes("=");continue}t.push(oo(r))}return t}function mc(e){let t=ro(e);if(t.length===0)return;let n=[...new Set(t.map(r=>r.length>eo?r.slice(0,eo):r))].sort();if(n.length!==0)return n.length>Qr?{names:n.slice(0,Qr),truncated:!0}:{names:n,truncated:!1}}function gc(e){let t=Ye(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 so(e,t){let n=new Set;for(let{raw:r,attr:o}of Je){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 a=mc(s);a&&(e[o]=a.names,a.truncated&&(e[`${o}_truncated`]=!0),n.add(o))}}function io(e,t){let n=Ye(e),r={transport:t};if(!n)return r;no(r,Object.keys(n));let o=typeof n.command=="string"?n.command:void 0,s=typeof n.url=="string"?n.url:void 0,a=typeof n.serverUrl=="string"?n.serverUrl:void 0,i=o??s??a;i&&(r.command_or_url=ie(i));let c=Xe(ro(n.args));c.length>0&&(r.args=c);let l=gc(n.env_http_headers),u=[...new Set([...zt(n.env),...zt(n.envVars),...zt(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 g of["headers","http_headers","env_http_headers"])if(n[g]!==void 0&&n[g]!==null){r.headers_present=!0;break}let d=typeof n.auth=="string"?n.auth:void 0;d&&(r.auth=d);let f=typeof n.bearer_token_env_var=="string"?n.bearer_token_env_var:void 0;f&&(r.bearer_token_env_var=f);let p=typeof n.default_tools_approval_mode=="string"?n.default_tools_approval_mode:typeof n.defaultToolsApprovalMode=="string"?n.defaultToolsApprovalMode:void 0;return p&&(r.default_tools_approval_mode=p),so(r,n),r}function ao(e){let t=Ye(e);return t?t.enabled===!1?!1:t.disabled!==!0:!0}function Jt(e,t,n=!0){let r=Object.keys(t).sort().map(o=>[o,t[o]??null]);return x(JSON.stringify({name:e,attributes:r,enabled:n}))}function Ve(e){let t=e.trim();return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function Yt(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 _c(e,t){return Xe(Yt(e,t))}function Vt(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(true|false)\\s*$`,"m").exec(e);if(n?.[1])return n[1]==="true"}function Wt(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(.+)$`,"m").exec(e);if(!n?.[1])return;let r=Ve(n[1]);return r.length>0?r:void 0}function hc(e,t){let n=[],r=a=>{for(let i of a.split(/[,\n]/)){let c=/^\s*"?([A-Za-z_][A-Za-z0-9_-]*)"?\s*=\s*(.+?)\s*$/.exec(i);c?.[1]&&n.push([c[1],Ve(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(`
16
- ${e}`);return s?.[1]&&r(s[1]),n}function co(e){return Vt(e,"enabled")===!1?!1:Vt(e,"disabled")!==!0}function Sc(e,t){let n={};for(let{raw:r,attr:o}of Je){if(o==="auto_approve"){let a=Vt(t,r);if(a!==void 0){n[r]=a;continue}}let s=Yt(t,r);s.length>0&&(n[r]=s)}so(e,n)}var Ec=/^\s*([A-Za-z_][A-Za-z0-9_-]*)\s*[.=]/,Rc=/^\[[^\]]*\.([A-Za-z_][A-Za-z0-9_-]*)\]\s*$/gm;function yc(e){let t=new Set,n=e.search(/^\[/m),r=n===-1?e:e.slice(0,n);for(let o of r.split(`
17
- `)){let s=Ec.exec(o);s?.[1]&&t.add(s[1])}for(let o of e.matchAll(Rc))o[1]&&t.add(o[1]);return[...t]}function lo(e,t){let n={transport:t};no(n,yc(e));let r=/^\s*command\s*=\s*(.+)$/m.exec(e),o=/^\s*url\s*=\s*(.+)$/m.exec(e),s=r?Ve(r[1]??""):void 0,a=o?Ve(o[1]??""):void 0,i=s!==void 0&&s.length>0?s:a;i&&(n.command_or_url=ie(i));let c=_c(e,"args");c.length>0&&(n.args=c);let l=new Set;for(let _ of e.split(`
18
- `)){let C=/^\s*env\.([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(_);C?.[1]&&l.add(C[1])}let u=/^\s*env\s*=\s*\{([^}]*)\}/m.exec(e);if(u?.[1])for(let _ of u[1].split(",")){let C=/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(_);C?.[1]&&l.add(C[1])}let d=/(?:^|\n)\[[^\]]*env\]\s*\n([\s\S]*?)(?=\n\[|$)/.exec(`
4
+ var _i=Object.create;var er=Object.defineProperty;var hi=Object.getOwnPropertyDescriptor;var Si=Object.getOwnPropertyNames;var Ei=Object.getPrototypeOf,yi=Object.prototype.hasOwnProperty;var Mt=(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 tr=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Ri=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Si(t))!yi.call(e,o)&&o!==n&&er(e,o,{get:()=>t[o],enumerable:!(r=hi(t,o))||r.enumerable});return e};var Nt=(e,t,n)=>(n=e!=null?_i(Ei(e)):{},Ri(t||!e||!e.__esModule?er(n,"default",{value:e,enumerable:!0}):n,e));var ao=tr(B=>{"use strict";Object.defineProperty(B,"__esModule",{value:!0});B.MCP_LAUNCH_IDENTITY_ALGORITHM=void 0;B.launchContainsCredentials=Xc;B.serializeMcpLaunchIdentity=co;B.hashMcpLaunchIdentity=nt;B.projectMcpLaunchIdentity=qc;B.maskMcpLaunchForDisplay=ea;B.normalizeMcpToolNames=ta;var Vc=Mt("node:crypto");B.MCP_LAUNCH_IDENTITY_ALGORITHM="mcp-launch-v1";var io=new Set(["access_token","api_key","apikey","auth","authorization","key","password","secret","token"]),Yc=/^(?:--?(?:token|api[-_]?key|password|secret|authorization)(?:=|\s+)|(?:sk-|ghp_|xox[baprs]-|Bearer\s+))/i;function ce(e){return e.toLocaleLowerCase("en-US")}function Ie(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function Xc(e){return e.kind==="url"?Zc(e.url):e.kind==="command"?e.arguments.some(t=>Yc.test(t)):!1}function Zc(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(io.has(ce(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 c=ce(i.split("=",1)[0]??"");return io.has(c)})}}function co(e){if(e.kind==="url")return[B.MCP_LAUNCH_IDENTITY_ALGORITHM,"url",Ie(ce(e.url))].join("|");if(e.kind==="command"){let t=[...e.arguments].map(n=>ce(n)).sort((n,r)=>n<r?-1:n>r?1:0);return[B.MCP_LAUNCH_IDENTITY_ALGORITHM,"command",Ie(ce(e.command)),String(t.length),...t.map(Ie)].join("|")}return[B.MCP_LAUNCH_IDENTITY_ALGORITHM,"unknown",Ie(e.installationRootExternalKey),Ie(e.sourcePath),Ie(e.nativeKey)].join("|")}function nt(e){return(0,Vc.createHash)("sha256").update(e).digest("hex")}function qc(e){let t=co(e);return e.kind==="url"?{kind:"url",url:ce(e.url),arguments:[],serialized:t,contentHash:nt(t)}:e.kind==="command"?{kind:"command",command:ce(e.command),arguments:[...e.arguments].map(n=>ce(n)).sort((n,r)=>n<r?-1:n>r?1:0),serialized:t,contentHash:nt(t)}:{kind:"unknown",arguments:[],serialized:t,contentHash:nt(t)}}var Qc=/^(https?:\/\/)([^/?#]*@)/i;function ea(e){return e.replace(Qc,"$1***@").replace(/([?&](?:access_token|api_key|apikey|auth|authorization|key|password|secret|token)=)([^&]*)/gi,"$1***")}function ta(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 ot=tr(k=>{"use strict";Object.defineProperty(k,"__esModule",{value:!0});k.serializeMcpLaunchIdentity=k.projectMcpLaunchIdentity=k.normalizeMcpToolNames=k.MCP_LAUNCH_IDENTITY_ALGORITHM=k.maskMcpLaunchForDisplay=k.launchContainsCredentials=k.hashMcpLaunchIdentity=k.ComponentKind=void 0;k.userConfigRootFromPath=da;k.installationRootExternalKey=pa;k.normalizeRepositoryRelativePath=lo;k.nativeKeyForSkillPath=fa;k.nativeKeyForRulePath=ma;k.nativeKeyForCommandPath=ga;k.serializeComponentIdentity=po;k.buildComponentReference=ha;k.validateComponentReference=Sa;var na=Mt("node:crypto"),ra=Mt("node:path"),oa="cmp1_",sa=/^cmp1_[A-Za-z0-9_-]{43}$/,ia=["/skills/","/skills-cursor/"],ca=/(?:^|\/)\.(?:cursor|claude|codex)\/rules\/(.+)$/i,aa=/(?:^|\/)\.(?:cursor|claude|codex)\/(?:commands|prompts)\/(.+)$/i,la=[".cursor",".claude",".codex"],ua={".claude.json":".claude",".agents":".codex"};k.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE",RULE:"RULE",COMMAND:"COMMAND"};function da(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>la.includes(o));return n||(t.map(o=>ua[o]).find(o=>o!==void 0)??"unknown")}function pa(e,t){return`runtime-install:${e}/${t}`}function rt(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function lo(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=ra.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return rt(n,"sourcePath")}function fa(e){let t=e.replaceAll("\\","/");for(let n of ia){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function uo(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 ma(e){return uo(e,ca,/\.(mdc|md|rules)$/i)}function ga(e){return uo(e,aa,/\.(md|mdc|toml)$/i)}function _a(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function po(e){let t=[rt(e.installationRootExternalKey,"installationRootExternalKey"),rt(e.installableKind,"installableKind"),lo(e.sourcePath),rt(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(_a).join("|")}`,"utf8")}function ha(e){let t=(0,na.createHash)("sha256").update(po(e)).digest("base64url");return`${oa}${t}`}function Sa(e){return sa.test(e)}var fe=ao();Object.defineProperty(k,"hashMcpLaunchIdentity",{enumerable:!0,get:function(){return fe.hashMcpLaunchIdentity}});Object.defineProperty(k,"launchContainsCredentials",{enumerable:!0,get:function(){return fe.launchContainsCredentials}});Object.defineProperty(k,"maskMcpLaunchForDisplay",{enumerable:!0,get:function(){return fe.maskMcpLaunchForDisplay}});Object.defineProperty(k,"MCP_LAUNCH_IDENTITY_ALGORITHM",{enumerable:!0,get:function(){return fe.MCP_LAUNCH_IDENTITY_ALGORITHM}});Object.defineProperty(k,"normalizeMcpToolNames",{enumerable:!0,get:function(){return fe.normalizeMcpToolNames}});Object.defineProperty(k,"projectMcpLaunchIdentity",{enumerable:!0,get:function(){return fe.projectMcpLaunchIdentity}});Object.defineProperty(k,"serializeMcpLaunchIdentity",{enumerable:!0,get:function(){return fe.serializeMcpLaunchIdentity}})});import{existsSync as Pi,readFileSync as vi}from"node:fs";import{hostname as lr,userInfo as wi}from"node:os";import{randomBytes as Ci}from"node:crypto";import{existsSync as Ut,mkdirSync as Ii,readdirSync as Ai,readFileSync as ki,renameSync as nr,statSync as sr,unlinkSync as rr,writeFileSync as Oi}from"node:fs";import{basename as xi,dirname as or,join as ir,relative as Ti}from"node:path";function h(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
5
+ `)}function te(e,t){Ii(or(e),{recursive:!0});let n=ir(or(e),`.${xi(e)}.${process.pid}.${Ci(4).toString("hex")}.tmp`);try{Oi(n,t,"utf8");try{nr(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){rr(e),nr(n,e);return}throw r}}catch(r){try{rr(n)}catch{}throw r}}function Je(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function cr(){process.stdout.write('{"continue":true}')}function I(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function Dt(){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 Ht(e){return new Promise(t=>{let n="",r=!1,o=i=>{r||(r=!0,clearTimeout(s),t(i||"{}"))},s=setTimeout(()=>{o(n)},e);if(process.stdin.isTTY){o("{}");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>{o(n)}),process.stdin.on("error",()=>{o(n)}),process.stdin.resume()})}async function J(e,t,n=3e3,r={}){let{execFile:o}=await import("node:child_process"),{promisify:s}=await import("node:util"),i=s(o);try{let{stdout:c}=await i(e,t,{timeout:n,windowsHide:!0,maxBuffer:1048576,cwd:r.cwd});return{ok:!0,stdout:c.trim()}}catch(c){let a=c,l=typeof a.code=="number"?a.code:typeof a.status=="number"?a.status:void 0;return{ok:!1,code:l,spawnFailed:l===void 0}}}async function v(e,t,n=3e3,r={}){let o=await J(e,t,n,r);return o.ok?o.stdout:""}async function Ft(e=process.cwd()){let t=await J("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(I("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;h(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=I("CURSOR_PROJECT_DIR")??I("CLAUDE_PROJECT_DIR");if(n&&Ut(n)){let r=await J("git",["rev-parse","--show-toplevel"],2e3,{cwd:n});return r.ok&&r.stdout?{root:r.stdout,inGitRepo:!0}:{root:n,inGitRepo:!1}}return{root:e,inGitRepo:!1}}async function jt(e=process.cwd()){return(await Ft(e)).root}function L(e,t){try{return JSON.parse(e)}catch{return t}}var Lt=new Map;function N(e,t){let n=Lt.get(e);if(n!==void 0)return n;try{let r=L(ki(e,"utf8"),t);return Lt.set(e,r),r}catch{return Lt.set(e,t),t}}function le(e){return typeof e=="string"?e:""}function ue(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 m(e,t){let n=ue(e,t);return typeof n=="string"?n:""}var ne=500;function ar(e,t=2){if(!Ut(e))return{entries:[],truncated:!1};let n=[],r=!1,o=(s,i)=>{if(i>t||r)return;let c;try{c=Ai(s,{withFileTypes:!0})}catch{return}for(let a of c){if(r)return;let l=ir(s,a.name);if(a.isDirectory()){o(l,i+1);continue}if(a.isFile()){try{n.push({name:Ti(e,l),size:sr(l).size})}catch{continue}if(n.length>=ne){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function Kt(e){return Ut(e)?{present:!0,size:sr(e).size}:{present:!1,size:0}}function Ee(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function $t(e=process.env){return Ee(O("CURSOR_SANDBOX",e))}var bi=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Mi(e){return bi.some(t=>!!O(t,e))}function Ni(e){if(O("KUBERNETES_SERVICE_HOST",e)||Ee(O("REMOTE_CONTAINERS",e))||Ee(O("DEVCONTAINER",e)))return!0;try{if(Pi("/.dockerenv")||vi("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function ur(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!O(t,e))}function Li(e,t=process.platform){return ur(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!O(n,e)):!1}function Ui(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function Di(e){return e==="linux"}function O(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return I(e)}function Hi(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!Fi(O("CURSOR_VERSION",n))}function Fi(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function Bt(e){if(Ui(e.sessionId))return!0;let t=e.hostname??lr(),n=e.osUser??dr(e.env);return Hi(t,n,e.env)}function ji(e){return Ee(O("CURSOR_AGENT",e.env))?!0:Bt(e)}function Ki(e){return!!(process.stdin.isTTY||process.stdout.isTTY||(O("TERM",e)??O("TERM_PROGRAM",e))||(O("SSH_TTY",e)??O("SSH_CONNECTION",e))||(O("__CFBundleIdentifier",e)??O("XPC_SERVICE_NAME",e))||ur(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!O(t,e))||O("SESSIONNAME",e))}function ve(e={}){let t=e.env;if(O("GITHUB_ACTIONS",t))return"github_actions";if(Ee(O("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!Li(t,n)&&ji(e)&&(Ee(O("CURSOR_AGENT",t))||Di(n)))return"cursor_cloud";if(O("CODESPACES",t)||O("CODESPACE_NAME",t))return"codespaces";if(O("GITLAB_CI",t))return"gitlab_ci";if(Mi(t))return"managed";let r=O("CI",t);return r&&r!=="false"&&r!=="0"?"managed":Ni(t)?"container":Ki(t)?"interactive":"unknown"}async function Gt(){return await v("systemd-detect-virt",[],1e3)}function dr(e=process.env,t=wi){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 zt(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await v("sw_vers",["-productVersion"],1e3);else if(process.platform==="linux"){try{let{readFileSync:s}=await import("node:fs"),i=s("/etc/os-release","utf8"),c=i.match(/^PRETTY_NAME="?([^"\n]+)"?/m)?.[1],a=i.match(/^VERSION_ID="?([^"\n]+)"?/m)?.[1];t=c??a??""}catch{t=await v("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await v("uname",["-r"],1e3))}else t=await v("ver",[],1e3);let n=dr(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await v("tty",[],500),o.includes("not a tty")&&(o="")}catch{o=""}return{os:e,os_version:t||null,user:n||null,shell:r||null,tty:o||null}}function we(){return lr()}var $i="https://hooks.ev-ai.ai";function Ve(e,t=$i){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}var pr=".claude/ev-ai-runtime-report.json";var Ye="ev-ai-agent-hook";var Kp=`current/${Ye}`,$p=`.ev-ai/agent-hook/${Ye}`,fr=5e3,mr=5e3,Wt=3e3;var Jt=3e3,gr=1500,_r=4*1024,hr=32*1024,Bi=4*1024,Sr=32*1024,Vt="1.1.1",Bp=`@ev-ai/agent-hook@${Vt}`;var Er=["claude","cursor","codex"];import{createHash as Ya}from"node:crypto";import{existsSync as Xa,mkdirSync as Za,readdirSync as qa,readFileSync as Lo,unlinkSync as Uo,writeFileSync as Qa}from"node:fs";import{homedir as Do}from"node:os";import{join as gn}from"node:path";import{createHash as Ar,randomBytes as Wi}from"node:crypto";import{existsSync as kr,mkdirSync as Yt,readFileSync as Or,unlinkSync as xr,writeFileSync as Tr}from"node:fs";import{homedir as Xt}from"node:os";import{dirname as Xe,join as Zt,resolve as Ji}from"node:path";var Gi=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),zi=new Set(["github-actions","github actions","dependabot","renovate","cursoragent","cursor agent"]);function $(e,t){let n=(e??"").trim().toLowerCase(),r=(t??"").trim().toLowerCase();if(!n&&!r)return!1;if(n.includes("[bot]")||zi.has(n)||r.includes("[bot]")||Gi.has(r))return!0;if(r.endsWith("@users.noreply.github.com")){let o=r.slice(0,r.indexOf("@")),s=o.includes("+")?o.slice(o.indexOf("+")+1):o;if(s.endsWith("bot")||s.includes("[bot]"))return!0}return!1}var Vi="installation.json",Yi="cloud-bootstrap.lock",Xi=6e4;function Pr(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function be(e=Xt()){return Zt(e,".ev-ai","agent-hook")}function Zi(e=Xt()){return Zt(be(e),Vi)}function vr(e){return Zt(Xe(e),Yi)}function wr(){return Wi(8).toString("hex")}function ye(e){return Ar("sha256").update(e).digest("hex").slice(0,16)}function R(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function br(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function qi(e=process.env){let t=R(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!br(t)){h(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function Mr(e,t){return e&&br(e)?e:(e&&h(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),qi(t))}function Qi(e){return/^[0-9a-f]{16}$/.test(e)}function ec(e=process.env){if(R(e.GITHUB_ACTIONS)){let t=R(e.GITHUB_REPOSITORY_ID)??R(e.GITHUB_REPOSITORY),n=R(e.GITHUB_ACTOR)??R(e.GITHUB_TRIGGERING_ACTOR)??R(e.GITHUB_USER);if(t&&n)return ye(`github_actions|${t}|${n}`)}if(R(e.CODESPACES)||R(e.CODESPACE_NAME)){let t=R(e.CODESPACE_NAME);if(t)return ye(`codespaces|${t}`);let n=R(e.GITHUB_REPOSITORY_ID)??R(e.GITHUB_REPOSITORY),r=R(e.GITHUB_USER)??R(e.GITHUB_ACTOR);if(n&&r)return ye(`codespaces|${n}|${r}`)}if(R(e.GITLAB_CI)){let t=R(e.CI_PROJECT_ID)??R(e.CI_PROJECT_PATH),n=R(e.GITLAB_USER_LOGIN)??R(e.GITLAB_USER_EMAIL)??R(e.GITLAB_USER_NAME);if(t&&n)return ye(`gitlab|${t}|${n}`)}return null}var tc="cursoragent@cursor.com";function nc(e){let t=R(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===tc?null:t}function rc(e,t){return R(e.CURSOR_PROJECT_DIR)??R(e.CLAUDE_PROJECT_DIR)??t}function oc(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function sc(e){let t=await v("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?oc(t):e}async function ic(e){let t=R(await v("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!$(null,t))return t;let n=R(await v("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!$(null,n)?n:null}function cc(e,t){let n=rc(e,t);return n?ye(`cursor_cloud|${n}|${nc(e)??""}`):null}async function ac(e,t){let n=R(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await sc(n),o=await ic(n);return ye(`claude_remote|${r}|${o??""}`)}function yr(e,t){let n=Mr(e,t);if(n)return n;let r=ec(t);return r||wr()}async function lc(e){let n=await v("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Ji(e);return Ar("sha256").update(n).digest("hex").slice(0,16)}function uc(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 dc(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=uc(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 de(e){if(kr(e))try{return dc(Or(e,"utf8"))}catch{}}function qt(e){return de(e)}function Nr(e,t,n){let r=de(e);if(!r||r.operator_identity_hash===t&&r.operator_identity_sent_at===n)return;let o={...r,operator_identity_hash:t,operator_identity_sent_at:n};try{te(e,`${JSON.stringify(o,null,2)}
6
+ `)}catch(s){let i=s instanceof Error?s.message:String(s);h(`WARN: operator identity cache write failed open: ${i}`)}}function Lr(e,t=Date.now()){if(!e)return!0;if(de(e)?.operator_identity_hash)return!1;let n=vr(e);try{if(kr(n)){let r=Number.NaN;try{r=Number(Or(n,"utf8").trim())}catch{}let o=t-r;if(Number.isFinite(o)&&o>=0&&o<Xi)return!1;try{xr(n)}catch{}}}catch{}try{return Yt(Xe(n),{recursive:!0}),Tr(n,`${t}
7
+ `,{encoding:"utf8",flag:"wx"}),!0}catch(r){if(Fr(r))return!1;let o=r instanceof Error?r.message:String(r);return h(`WARN: cloud bootstrap claim failed open: ${o}`),!0}}function Ur(e){if(e)try{xr(vr(e))}catch{}}function Dr(e,t){let r=de(e)?.platform_agent_ids?.[t];return typeof r=="string"&&r.length>0?r:void 0}function Hr(e,t,n){if(!n)return;let r=de(e);if(!r||r.platform_agent_ids?.[t]===n)return;let o={installation_id:r.installation_id,platform_agent_ids:{...r.platform_agent_ids,[t]:n},...r.operator_identity_hash?{operator_identity_hash:r.operator_identity_hash}:{},...r.operator_identity_sent_at?{operator_identity_sent_at:r.operator_identity_sent_at}:{}};try{te(e,`${JSON.stringify(o,null,2)}
8
+ `)}catch(s){let i=s instanceof Error?s.message:String(s);h(`WARN: platform_agent_id cache write failed open: ${i}`)}}function Fr(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function pc(e,t){Yt(Xe(e),{recursive:!0}),Tr(e,`${JSON.stringify(t,null,2)}
9
+ `,{encoding:"utf8",flag:"wx"})}function Rr(e,t){try{return pc(e,t),t}catch(n){if(!Fr(n))throw n;return de(e)}}function Cr(e,t){Yt(Xe(e),{recursive:!0}),te(e,`${JSON.stringify(t,null,2)}
10
+ `)}function Ir(e,t){return{installation_id:e,...t&&t===e?{pinned:!0}:{}}}async function jr(e,t={}){let n=t.home??Xt(),r=t.env??process.env,o=await lc(e),s=Zi(n),i={sessionId:t.sessionId,hostname:R(r.HOSTNAME)??void 0,osUser:R(r.USER)??R(r.LOGNAME)??R(r.USERNAME)??void 0,env:r},c=ve(i),a=Mr(t.overrideId,r),l=c==="cursor_cloud"&&Bt(i)?cc(r,e):c==="claude_remote"?await ac(r,e):null,u=de(s);if(u){let S=u;if(a&&a===u.installation_id&&u.pinned!==!0&&(S={...u,pinned:!0},Cr(s,S)),!!l&&l!==S.installation_id&&!a&&S.pinned!==!0&&Qi(S.installation_id)&&l){let A={installation_id:l,...S.platform_agent_ids?{platform_agent_ids:S.platform_agent_ids}:{}};return Cr(s,A),{installationId:l,storePath:s,repoKey:o}}return{installationId:S.installation_id,storePath:s,repoKey:o}}let d=a??l??yr(void 0,r),f=Rr(s,Ir(d,a));if(f)return{installationId:f.installation_id,storePath:s,repoKey:o};let p=a??l??yr(void 0,r),g=Rr(s,Ir(p===d?wr():p,a));if(g)return{installationId:g.installation_id,storePath:s,repoKey:o};throw new Error(`Failed to create installation record at ${s}`)}var fc=new Set(["localhost","127.0.0.1","[::1]","::1"]),Kr=/^[A-Za-z0-9._~-]+$/;function $r(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 Ze(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?fc.has(t.hostname):!1}catch{return!1}}function Br(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!Ze(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=mc(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!Kr.test(n))return`org token must match ${Kr.source} (got: ${n})`;if($r(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if($r(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function Gr(e){return new URL(e).toString()}function mc(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 Qt(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 zr(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token?.trim();return t?Ve(t):""}import{existsSync as wc}from"node:fs";import{existsSync as Rc}from"node:fs";import{homedir as Vr}from"node:os";import{join as Cc}from"node:path";import{existsSync as gc,readdirSync as Wr}from"node:fs";import{homedir as qe}from"node:os";import{join as F}from"node:path";function _c(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/ClaudeCode";case"win32":return F(process.env.ProgramFiles??"C:\\Program Files","ClaudeCode");default:return"/etc/claude-code"}}function hc(e=process.platform){let t=_c(e),n=[F(t,"managed-settings.json")],r=F(t,"managed-settings.d");try{if(!gc(r))return n;let o=Wr(r).filter(s=>s.endsWith(".json")&&!s.startsWith(".")).sort().map(s=>F(r,s));n.push(...o)}catch{}return n}function en(e=process.platform,t=qe()){return{serverManaged:F(t,".claude","remote-settings.json"),fileBased:hc(e)}}function Sc(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/Cursor";case"win32":return F(process.env.ProgramData??"C:\\ProgramData","Cursor");default:return"/etc/cursor"}}function Ec(e=process.platform,t=qe()){let n=[F(Sc(e),"hooks.json")],r=F(t,".cursor","managed");try{for(let o of Wr(r,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||n.push(F(r,o.name,"hooks.json"))}catch{}return n}function yc(e=process.platform,t=qe()){let n=e==="win32"?F(process.env.ProgramData??"C:\\ProgramData","OpenAI","Codex"):"/etc/codex",r=[F(n,"requirements.toml")];return e!=="win32"&&r.push(F(n,"managed_config.toml")),r.push(F(t,".codex","managed_config.toml"),F(n,"config.toml")),r}function Qe(e,t=process.platform,n=qe()){switch(e){case"claude":{let{serverManaged:r,fileBased:o}=en(t,n);return[r,...o]}case"cursor":return Ec(t,n);default:return yc(t,n)}}function Yr(e){return e.settings.filter(t=>t.toLowerCase().endsWith(".json"))}var Ic={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 Jr(e,t){if(!(!e&&!t))return[...e??[],...t??[]]}function Ac(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:Jr(n.mcpJson,t.mcpJson),mcpToml:Jr(n.mcpToml,t.mcpToml),plugins:t.plugins??n.plugins,managed:t.managed??n.managed}}function Xr(e){return Object.fromEntries(Object.entries(Ic).map(([t,n])=>[t,Ac(n,n[e])]))}var Re=Xr("homeOnly"),oe=Xr("projectOnly");function kc(e){return[...e.skillRoots,...e.dirs.map(t=>t.dir),...e.memory.flat(),...e.settings,...e.mcpJson??[],...e.mcpToml??[]]}function Oc(e,t){return kc(e).some(n=>Rc(Cc(t,n)))}function Zr(e,t){for(let n of e)if(Oc(n,t))return!0;return!1}function re(e){return[...new Set(e)]}function se(e){let t=[],n=[],r=[],o=[],s=[],i=[],c=[];for(let a of e){t.push(...a.skillRoots);for(let l of a.dirs)l.kind==="SUBAGENT"?n.push(l.dir):l.kind==="COMMAND"?r.push(l.dir):o.push(l.dir);s.push(...a.memory.flat()),i.push(...a.settings),c.push(...a.mcpJson??[],...a.mcpToml??[])}return{skills:re(t),subagents:re(n),commands:re(r),rules:re(o),memory:re(s),settings:re(i),mcp:re(c)}}function xc(e,t=Vr(),n=process.platform){let r=[];for(let o of e)o.managed&&r.push(...Qe(o.managed,n,t));return re(r)}var ie=se(Object.values(Re));function qr(e=Vr(),t=process.platform){return xc(Object.values(Re),e,t)}import{existsSync as Tc}from"node:fs";import{resolve as tn}from"node:path";function G(e){return tn(e).replaceAll("\\","/").replace(/\/$/,"")}function pe(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 Pc=/^(?!\.)[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)*$/;function Me(e){let t=e.replaceAll("\\","/").replace(/^\.\//,"");return!t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")||!Pc.test(t)?null:t}function Ce(e,t){let n=new Set,r=[];for(let o of[e,t]){if(!o)continue;let s=G(o);n.has(s)||(n.add(s),r.push(s))}return r}function vc(e,t){let n=`${e}/`;return t===e||t.startsWith(n)}function Y(e,t,n,r=Tc){for(let o of e)for(let s of t){let i=G(tn(o,s)),c=tn(o,s,n).replaceAll("\\","/");if(vc(i,c)&&r(c))return c}return null}var eo=/(?:^|\/|[\s"'=(])(?:\.cursor\/|\.claude\/|\.agents\/)skills(?:-cursor)?\/([^/]+)\/SKILL\.md/i,to=/(?:^|\/|[\s"'=(])\.codex\/commands\/([^/]+)\.md\b/i,bc=/(?:^|\s)\/([a-z][a-z0-9-]{1,63}(?:\/[a-z][a-z0-9-]{1,63}){0,5})\b/gi,Qr=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"]),Mc=/^[a-z][a-z0-9-]{1,63}$/,Nc=[".cursor/skills",".claude/skills",".agents/skills"],Lc=[".cursor/skills",".cursor/skills-cursor",".claude/skills",".agents/skills"],Uc=pe(Nc,se(Object.values(oe)).skills),Dc=pe(Lc,se(Object.values(Re)).skills),Hc=new Set(["read","read_file","view"]),Fc=new Set(["bash","shell","zsh"]);function nn(e){let t=e.replace(/\\/g,"/");return eo.exec(t)?.[1]??null}function jc(e){let t=e.replace(/\\/g,"/"),r=to.exec(t)?.[1];return r?r.toLowerCase():null}function Kc(e){return nn(e)??jc(e)}function $c(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 tt(e){return typeof e=="string"?tt(L(e,null)):!e||typeof e!="object"?null:$c(e)}function no(e){if(typeof e=="string")return no(L(e,null));if(!e||typeof e!="object")return null;let t=e.command;return typeof t=="string"&&t.length>0?t:null}function rn(e){let t=no(e.tool_input);if(t)return t;let n=le(e.command);return n.length>0?n:null}function Bc(e){let t=e.replace(/\\/g,"/"),n=eo.exec(t);if(n?.[1])return n[1];let o=to.exec(t)?.[1];return o?o.toLowerCase():null}function Gc(e){return typeof e.tool_name=="string"?e.tool_name:typeof e.tool=="string"?e.tool:""}function on(e){let t=tt(e.tool_input)??le(e.file_path);return t.length>0?t:null}function Ne(e,t,n){let r=Gc(e).toLowerCase();if(Hc.has(r)){let o=on(e);return o?t(o):null}if(Fc.has(r)){let o=rn(e);return o?n(o):null}return null}function ro(e){return Ne(e,Kc,Bc)}function zc(e){let t=new Set,n=[];for(let r of e.matchAll(bc)){let o=r[1]?.toLowerCase();!o||t.has(o)||Wc(o)||(t.add(o),n.push(o))}return n}function Wc(e){let t=e.split("/")[0];return Qr.has(e)||t!==void 0&&Qr.has(t)}function oo(e){let t=e.skillId.toLowerCase();if(!Mc.test(t))return null;let n=e.exists??wc,r=`${t}/SKILL.md`,o=Y(Ce(e.launchCwd,e.gitRoot),Uc,r,n);return o!==null?o:e.home?Y([G(e.home)],Dc,r,n):null}function Jc(e){return le(e.prompt)}function so(e){let t=m(e,"command_name");if(t){let r=m(e,"expansion_type");if(r&&r!=="slash_command")return[];let o=t.replace(/^\//,"").toLowerCase();return o?[o]:[]}let n=Jc(e);return n?zc(n):[]}var sn=Nt(ot(),1);import{existsSync as ya}from"node:fs";var me={claude:".claude",cursor:".cursor",codex:".codex",opencode:".opencode"};function Le(e){let n=e.replace(/^\/+|\/+$/g,"").toLowerCase().split("/").filter(Boolean);return n.length<2?"":n.join("/")}function Ea(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 Le(n[1]);let r=t.match(/^ssh:\/\/[^/]+\/(.+)$/i);if(r?.[1])return Le(r[1]);t=t.replace(/^https:\/\//i,""),t=t.replace(/^http:\/\//i,""),t=t.replace(/^ssh:\/\//i,"");let o=t.match(/^[^/]+\/(.+)$/);return o?.[1]?Le(o[1]):Le(t)}async function Ue(e=process.cwd()){let t=await J("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([J("git",["remote","get-url","origin"],2e3,{cwd:e}),J("git",["branch","--show-current"],2e3,{cwd:e}),J("git",["rev-parse","HEAD"],2e3,{cwd:e}),J("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 fo(e,t,n,r=process.cwd(),o,s,i){if(t)return t;let c=me[n];if(!c)return"";let a=Pr(n,e.scope_path,i);if(s){let g=Dr(s,a);if(g)return g}let l=o??await Ue(r),u=l?.remote?Ea(l.remote):"";if(u||(u=Le(process.env.GITHUB_REPOSITORY??"")),!u)return"";let d=e.scope_path??"",f=d?`${d}/`:"",p=`${u}:${f}${c}`;return s&&Hr(s,a,p),p}var Ra=[".cursor/rules",".claude/rules",".codex/rules"],Ca=se(Object.values(oe)).rules;function Ia(e){return pe(et(e?me[e]:void 0,Ra),Ca)}var Aa=/(?:^|\/|[\s"'=(])((?:\.cursor|\.claude|\.codex)\/rules\/[^'"\s]+?\.(?:mdc|md|rules))\b/i;function mo(e){let t=Me(e.relativePath);if(!t)return null;let n=e.exists??ya,r=Ce(e.launchCwd,e.gitRoot),o=Ia(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([G(e.home)],o,t,n):null}function ka(e){let t=e.replace(/\\/g,"/"),r=Aa.exec(t)?.[1];return r?(0,sn.nativeKeyForRulePath)(r):null}function go(e){return Ne(e,sn.nativeKeyForRulePath,ka)}function _o(e){return e.replace(/\.(mdc|md|rules)$/i,"")}function ho(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:"",c=Me(i);!c||n.has(c)||(n.add(c),r.push(c))}return r}var cn=Nt(ot(),1);import{existsSync as Oa}from"node:fs";var xa=[".cursor/commands",".claude/commands",".codex/prompts"],Ta=se(Object.values(oe)).commands;function Pa(e){return pe(et(e?me[e]:void 0,xa),Ta)}var va=/(?:^|\/|[\s"'=(])((?:\.cursor|\.claude|\.codex)\/(?:commands|prompts)\/[^'"\s]+?\.(?:md|mdc))\b/i;function So(e){let t=Me(e.commandId);if(!t)return null;let n=e.exists??Oa,r=`${t}.md`,o=Pa(e.runnerPlatform),s=Y(Ce(e.launchCwd,e.gitRoot),o,r,n);return s!==null?s:e.home?Y([G(e.home)],o,r,n):null}function wa(e){let t=e.replace(/\\/g,"/"),r=va.exec(t)?.[1];return r?(0,cn.nativeKeyForCommandPath)(r):null}function Eo(e){return Ne(e,cn.nativeKeyForCommandPath,wa)}import{existsSync as Ro}from"node:fs";import{homedir as Co}from"node:os";import{join as De,resolve as an,sep as yo}from"node:path";function ln(e){return[...new Set([e,e.replaceAll(/[^A-Za-z0-9_-]/g,"_"),e.replaceAll(/[^A-Za-z0-9_-]+/g,"_")])]}function un(e,t){let n=t.toLowerCase();return ln(e).some(r=>r.toLowerCase()===n)}function st(e,t,n){if(!Ro(e))return;let r=N(e,{});for(let[o,s]of Object.entries(r.mcpServers??{}))n.set(o,{declared:{name:o,...t},config:s})}function ba(e,t,n){if(!Ro(e))return;let r=N(e,{}),o=an(t),s=null;for(let c of Object.keys(r.projects??{})){let a=an(c);(o===a||o.startsWith(a.endsWith(yo)?a:a+yo))&&(s===null||a.length>an(s).length)&&(s=c)}if(s===null)return;let i=r.projects?.[s]?.mcpServers??{};for(let[c,a]of Object.entries(i))n.set(c,{declared:{name:c,source:"claude_json_project",sourcePath:".claude.json",scope:"user"},config:a})}function Io(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"?(st(De(r,".claude.json"),{source:"claude_json_user"},o),ba(De(r,".claude.json"),t,o)):n==="cursor"&&st(De(r,".cursor/mcp.json"),{source:"cursor_mcp_user"},o),st(De(t,".mcp.json"),{source:"mcp_json"},o),st(De(t,".cursor/mcp.json"),{source:"cursor_mcp"},o),o}async function dn(e,t=process.cwd(),n="claude",r=Co()){return[...Io(e,t,n,r).values()].map(o=>o.declared)}function Ao(e,t,n=process.cwd(),r="claude",o=Co()){let s=Io(t,n,r,o),i=s.get(e);if(i!==void 0)return i.config??null;for(let[c,a]of s)if(un(c,e))return a.config??null;return null}function pn(e){return e!==void 0&&Er.includes(e)}function it(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function ct(e){let t,n,r,o,s;for(let i=0;i<e.length;i++){let c=e[i];if(c!==void 0){if(c==="--runner"){let a=it(e,i);t=a.value,i=a.next;continue}if(c.startsWith("--runner=")){t=c.slice(9);continue}if(c==="--url"){let a=it(e,i);a.value&&(r=a.value),i=a.next;continue}if(c.startsWith("--url=")){r=c.slice(6);continue}if(c==="--token"){let a=it(e,i);a.value&&(o=a.value),i=a.next;continue}if(c.startsWith("--token=")){o=c.slice(8);continue}if(c==="--base-url"){let a=it(e,i);a.value&&(s=a.value),i=a.next;continue}if(c.startsWith("--base-url=")){s=c.slice(11);continue}!c.startsWith("-")&&n===void 0&&(n=c)}}return{runner:pn(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function fn(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=Ve(o,e.baseUrl?.trim()??void 0))}if(!n)return;let r=Br(n);if(r){h(`WARN: ignoring --url/--token collector override: ${r}`);return}return Gr(n)}function ko(e,t){if(m(e,"conversation_id"))return!0;if(t==="")return!1;let n=t[0];return n?.toLowerCase()===n}function Ma(){return!!(I("CURSOR_VERSION")??I("CURSOR_PROJECT_DIR"))}function mn(e,t,n){return e!=="claude"&&e!=="codex"?!1:ko(t,n)?!0:Ma()}function He(e,t,n,r){if(ko(e,t))return"cursor";if(pn(r))return r;let o=m(e,"conversation_id"),s=m(e,"turn_id"),i=m(e,"session_id"),c=t.toLowerCase(),a="unknown";return o||t===c&&t!==""?a="cursor":s?a="codex":(i||c==="sessionstart"||c==="sessionend"||c==="stop"||c==="stopfailure"||c==="pretooluse"||c==="posttooluse"||c==="posttoolusefailure"||c==="permissiondenied"||c==="subagentstart"||c==="subagentstop"||c==="userpromptexpansion")&&(a="claude"),pn(n)&&(a=n),a}function at(e,t){let n=e.toLowerCase();return n==="sessionend"||n==="stopfailure"||n==="subagentstop"?!0:n==="stop"&&t==="codex"}function Na(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 Oo(e){let t=e.toLowerCase();return t==="posttooluse"?!0:t==="posttoolusefailure"||t==="permissiondenied"?!1:null}function xo(e,t,n){let r=m(e,"session_id")||m(e,"conversation_id"),o=m(e,"prompt.id")||m(e,"prompt_id")||m(e,"generation_id")||m(e,"turn_id"),s=m(e,"hook_event_name")||m(e,"event"),i=m(e,"source"),c=He(e,s,t,n);return{sessionId:r,turnId:o,runnerEvent:s,hookSource:i,runnerPlatform:c}}var La=["session_start","session_end","tool_invoked","skill_invoked"];function Ua(e){return La.includes(e)}function To(e,t){return e&&Ua(e)?e:Na(t.toLowerCase())}var Da={beforeshellexecution:"Shell",aftershellexecution:"Shell",beforereadfile:"Read",afterfileedit:"Write"};function Po(e){return/^mcp__/i.test(e)||/^MCP:/i.test(e)}function vo(e,t=""){let n=m(e,"tool_name")||m(e,"tool")||null,r=t.toLowerCase();n?r==="beforemcpexecution"&&!Po(n)&&(n=`MCP:${n}`):n=Da[r]??null;let o=e.tool_input,i=(o&&typeof o=="object"?le(o.skill)||le(o.skill_name):"")||m(e,"skill_name")||null,c=n&&e.tool_name!==n&&e.tool!==n?{...e,tool_name:n}:e;i??=ro(c);let a=go(c),l=Eo(c);return{toolName:n,skillName:i,ruleName:a,commandName:l}}var Ha=/^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/;function wo(e){for(let t of["subagent_type","agent_type"]){let n=m(e,t);if(n&&Ha.test(n))return n}return null}function bo(e){let t=ue(e,"duration_ms");if(typeof t=="number")return t;let n=ue(e,"duration");return typeof n=="number"?n:null}var Fa="error",ja="interrupted",Ka="permission_denied",$a=/^[A-Za-z][A-Za-z0-9_.-]{0,63}$/;function Fe(e){return $a.test(e)?e:null}function Ba(e){for(let t of["failure_type","error_type"]){let n=Fe(m(e,t));if(n)return n}return null}function Mo(e,t){return ue(e,"is_interrupt")===!0?ja:t.toLowerCase()==="permissiondenied"?Ka:Ba(e)??Fa}function Ga(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 za(e,t){let n=null;for(let r of t)!r||!un(r,e)||(n===null||r.length>n.length)&&(n=r);return n}function Wa(e,t){let n=null,r=0;for(let s of t)if(s)for(let i of ln(s)){let c=`${i}__`;e.length>c.length&&e.slice(0,c.length).toLowerCase()===c.toLowerCase()&&i.length>r&&(n={mcpServer:s,mcpTool:e.slice(c.length)},r=i.length)}if(n!==null)return n;let o=/^(.+?)__(.+)$/.exec(e);return!o?.[1]||!o[2]?{mcpServer:null,mcpTool:null}:{mcpServer:za(o[1],t)??o[1],mcpTool:o[2]}}function Ja(e,t){if(/^mcp__/i.test(e))return Wa(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:Ga(n,t),mcpTool:n}}return{mcpServer:null,mcpTool:null}}function Va(e,t){let n=`${t}__`;return e.length>n.length&&e.toLowerCase().startsWith(n.toLowerCase())?e.slice(n.length):e}function No(e,t=[],n=""){let r=e?Ja(e,t):{mcpServer:null,mcpTool:null},o=Fe(n.trim());if(!o)return r;let s=r.mcpTool;return!s&&e&&!Po(e)&&(s=e),s&&(s=Va(s,o)),{mcpServer:o,mcpTool:s}}var Ho=3e4,el="claims",tl=!0,nl=100,rl=new Set(["sessionstart","sessionend","stopfailure"]),ol=["tool_name","tool","command","file_path","url"];function sl(e=Do()){return gn(be(e),el)}function Fo(e){let t=e.split(`
11
+ `,1)[0]??"";return Number(t.trim())}function jo(e){return Ya("sha256").update(e).digest("hex").slice(0,32)}function il(e){let t=[];for(let n of ol){let r=m(e,n).trim();r&&t.push(`${n}=${r}`)}return t.length===0?"":jo(t.join("\0"))}function cl(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()??"",c=!!(o||r||s),a=rl.has(n);if(!c&&!a)return;let l=e.runnerPlatform.trim()||"unknown";return jo(`${l}|${t}|${n}|${r}|${o}|${i}|${s}`)}function al(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function ll(e,t){return gn(e,t)}function ul(e,t=Date.now()){let n;try{n=qa(e)}catch{return}let r=0;for(let o of n){if(r>=nl)break;r+=1;let s=gn(e,o),i=Number.NaN;try{i=Fo(Lo(s,"utf8"))}catch{continue}let c=t-i;if(!(!Number.isFinite(c)||c<0||c<Ho))try{Uo(s)}catch{}}}function dl(e,t,n=Date.now()){let r=ll(t,e);try{if(Xa(r)){let o=Number.NaN;try{o=Fo(Lo(r,"utf8"))}catch{}let s=n-o;if(Number.isFinite(s)&&s>=0&&s<Ho)return!1;try{Uo(r)}catch{}}}catch{}try{Za(t,{recursive:!0}),Qa(r,`${n}
12
+ `,{encoding:"utf8",flag:"wx"})}catch(o){if(al(o))return!1;let s=o instanceof Error?o.message:String(o);return h(`WARN: event claim failed open: ${s}`),!0}return ul(t,n),!0}function pl(e,t,n){let r=m(e,"session_id")||m(e,"conversation_id"),o=m(e,"prompt.id")||m(e,"prompt_id")||m(e,"generation_id")||m(e,"turn_id"),s=m(e,"tool_use_id"),i=m(e,"subagent_id")||m(e,"agent_id"),c=He(e,t,void 0,n),a=il(e);return{runnerPlatform:c,sessionId:r,runnerEvent:t,turnId:o,toolUseId:s,subagentId:i,callFingerprint:a}}function Ko(e,t,n,r=Do(),o=Date.now()){if(!tl)return!0;let s=cl(pl(e,t,n));if(!s)return!0;let i=dl(s,sl(r),o);return!i&&I("EV_AI_HOOK_DEBUG")&&h(`DEBUG: duplicate hook event suppressed (claim ${s.slice(0,8)}\u2026)`),i}import{realpathSync as sp}from"node:fs";import{homedir as ip}from"node:os";var C=Nt(ot(),1);import{existsSync as fl,readFileSync as ml}from"node:fs";import{homedir as $o}from"node:os";import{join as gl}from"node:path";var _l="cloud-cache.json",hl=1440*60*1e3,Sl=900*1e3;function El(e=$o()){return gl(be(e),_l)}function yl(e){if(!fl(e))return;let t=L(ml(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 Rl(e,t){try{te(e,`${JSON.stringify(t)}
13
+ `)}catch(n){let r=n instanceof Error?n.message:String(n);h(`WARN: cloud cache write failed open: ${r}`)}}function Cl(e,t,n){if(!e||e.context!==t)return!1;let r=e.result===null?Sl:hl;return n-e.probed_at<r}async function Il(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():"",c=s?.ok?(await s.text()).trim():"";if(!(!i&&!c))return{provider:"aws",region:i,instance_id:c}}async function Al(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 kl(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 Ol(e){let t=await Promise.allSettled([Il(e),Al(e),kl(e)]);for(let n of t)if(n.status==="fulfilled"&&n.value)return n.value;return null}async function _n(e,t){if(e==="interactive")return null;let n=t?.home??$o(),r=t?.timeoutMs??1e3,o=t?.nowMs??Date.now(),s=El(n),i=yl(s);if(Cl(i,e,o))return i.result;let c=await Ol(r);return Rl(s,{context:e,probed_at:o,result:c}),c}var xl=["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"],Tl=["CURSOR_PROJECT_DIR"],Pl=new Set(["key","api-key","api_key","apikey","token","sig","signature","access_token","password","pwd","secret","client_secret"]);function vl(e){try{let t=new URL(e);(t.username||t.password)&&(t.username="",t.password="");for(let[n]of t.searchParams)Pl.has(n.toLowerCase())&&t.searchParams.set(n,"[redacted]");return t.toString()}catch{return e}}function hn(e=process.env){let t=xl.map(r=>Object.prototype.hasOwnProperty.call(e,r)?{name:r,present:!0,value:vl(e[r]??"")}:{name:r,present:!1}),n=Tl.map(r=>({name:r,present:Object.prototype.hasOwnProperty.call(e,r)&&!!e[r]}));return[...t,...n]}import{homedir as Kl}from"node:os";import{homedir as Bo}from"node:os";import{join as wl}from"node:path";function bl(e=Bo()){return wl(e,".claude.json")}function lt(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function Go(e=Bo()){let n=N(bl(e),{}).oauthAccount;if(!n||typeof n!="object")return null;let r=lt(n.emailAddress),o=lt(n.fullName)??lt(n.displayName),s=lt(n.accountUuid);return!r&&!o&&!s||$(o,r)?null:{git_user_name:o,git_user_email:r,platform_login:s,identity_source:"claude_oauth"}}import{homedir as Wo}from"node:os";import{join as zo}from"node:path";var Ml="https://api.openai.com/auth";function ge(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function Jo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:null}function Nl(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 Jo(r)}catch{return null}}function ut(e,t,n){return ge(e[n])??ge(t?.[n])}function Ll(e=process.env,t=Wo()){let n=ge(e.CODEX_HOME)??zo(t,".codex");return zo(n,"auth.json")}function dt(e=process.env,t=Wo()){let n=N(Ll(e,t),{}),r=ge(n.auth_mode);if(r!==null&&r!=="chatgpt"||r===null&&ge(n.OPENAI_API_KEY))return null;let o=ge(n.tokens?.id_token);if(!o)return null;let s=Nl(o);if(!s)return null;let i=Jo(s[Ml]),c=ut(s,i,"name"),a=ut(s,i,"email"),l=ut(s,i,"chatgpt_user_id")??ut(s,i,"user_id")??ge(s.sub);return!c||!a||!l||$(c,a)?null:{git_user_name:c,git_user_email:a,platform_login:l,identity_source:"codex_oauth"}}import{homedir as Vo}from"node:os";import{join as Ul}from"node:path";function Dl(e=Vo()){return Ul(e,".cursor","cli-config.json")}function pt(e){if(typeof e!="string")return null;let t=e.trim();return t.length>0?t:null}function Hl(e){let t=pt(e.authId);return t||(typeof e.userId=="number"&&Number.isFinite(e.userId)?String(e.userId):pt(e.userId))}function Yo(e=Vo()){let n=N(Dl(e),{}).authInfo;if(!n||typeof n!="object")return null;let r=pt(n.email),o=pt(n.displayName),s=Hl(n);return!r&&!o&&!s||$(o,r)?null:{git_user_name:o,git_user_email:r,platform_login:s,identity_source:"cursor_oauth"}}import{createHash as Fl}from"node:crypto";import{resolve as jl}from"node:path";function P(e){return Fl("sha256").update(e).digest("hex").slice(0,16)}function Sn(e){return P(jl(e))}function z(e,t){return`${e}\0${t}`}function Xo(e){let t=e.indexOf("\0");return t<=0?null:{path:e.slice(0,t),name:e.slice(t+1)}}function je(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(`
14
+ `);return P(n)}function $l(e,t,n="git_config",r=null){return P(`${e??""}|${t??""}|${r??""}|${n}`)}function Bl(e){let t=null,n=null;for(let r of e.split(`
15
+ `)){let o=r.trim();if(!o)continue;let s=o.indexOf(" ");if(s<=0)continue;let i=o.slice(0,s).toLowerCase(),c=o.slice(s+1).trim();c&&(i==="user.name"?t=c:i==="user.email"&&(n=c))}return{git_user_name:t,git_user_email:n,platform_login:null}}async function Gl(e,t=v){let n=await t("git",["config","--get-regexp","^user\\.(name|email)$"],2e3,{cwd:e});return Bl(n)}function zl(e=process.env){let t=y(e.GIT_AUTHOR_NAME),n=y(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=y(e.GIT_COMMITTER_NAME),o=y(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=y(e.EMAIL);return s?{git_user_name:null,git_user_email:s,platform_login:null,identity_source:"git_env"}:null}function Z(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 Wl(e=process.env){let t=Z(y(e.EV_AI_HOOK_OPERATOR_NAME),y(e.EV_AI_HOOK_OPERATOR_EMAIL),"configured",y(e.EV_AI_HOOK_OPERATOR_LOGIN));if(t)return t;let n=y(e.GITHUB_ACTOR)??y(e.GITHUB_TRIGGERING_ACTOR)??y(e.GITHUB_USER),r=Z(n,null,"github",n);if(r)return r;let o=y(e.GITLAB_USER_LOGIN),s=Z(y(e.GITLAB_USER_NAME)??o,y(e.GITLAB_USER_EMAIL),"gitlab",o);if(s)return s;let i=Z(y(e.BUILD_REQUESTEDFOR),y(e.BUILD_REQUESTEDFOREMAIL),"azure_devops",y(e.BUILD_REQUESTEDFORID));if(i)return i;let c=y(e.BUILDKITE_BUILD_CREATOR_EMAIL),a=Z(y(e.BUILDKITE_BUILD_CREATOR),c,"buildkite",c);if(a)return a;let l=Z(y(e.BUILD_USER)??y(e.CHANGE_AUTHOR),y(e.BUILD_USER_EMAIL)??y(e.CHANGE_AUTHOR_EMAIL),"jenkins",y(e.BUILD_USER_ID));if(l)return l;let u=y(e.CIRCLE_USERNAME),d=Z(u,null,"circleci",u);if(d)return d;let f=y(e.CODEBUILD_INITIATOR),p=Z(f,null,"codebuild",f);if(p)return p;let g=Z(y(e.DRONE_COMMIT_AUTHOR)??y(e.DRONE_COMMIT_AUTHOR_NAME),y(e.DRONE_COMMIT_AUTHOR_EMAIL),"drone",y(e.DRONE_COMMIT_AUTHOR));if(g)return g;if(qo(e.CLAUDE_CODE_REMOTE)||qo(e.CURSOR_AGENT)){let S=y(e.CURSOR_USER_EMAIL);return{git_user_name:null,git_user_email:S&&!$(null,S)?S:null,platform_login:null,identity_source:"cloud"}}return null}function Zo(e){return!!((e.git_user_name??e.git_user_email)&&!$(e.git_user_name,e.git_user_email))}function y(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function qo(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function Jl(e,t,n){return e==="claude"?Go(t):e==="cursor"?Yo(t):e==="codex"?dt(n,t):null}async function Vl(e,t=v,n=process.env,r={}){let o=Jl(r.runnerPlatform,r.home??Kl(),n);if(o)return o;let s=await Gl(e,t);if(Zo(s))return{...s,identity_source:"git_config"};let i=zl(n);if(i&&Zo(i))return i;let c=Wl(n);return c||(s.git_user_name||s.git_user_email?{...s,identity_source:"git_config"}:i||{git_user_name:null,git_user_email:null,platform_login:null,identity_source:"git_config"})}async function ft(e){let{gitRoot:t,installationStorePath:n,forceResend:r}=e,o=e.exec??v,s=e.env??process.env,i=await Vl(t,o,s,{runnerPlatform:e.runnerPlatform,home:e.home}),c=$l(i.git_user_name,i.git_user_email,i.identity_source,i.platform_login),l=(n?qt(n):void 0)?.operator_identity_hash;if(!(r||l!==void 0&&l!==c||!l))return{commit:()=>{}};let p=n;return{operator:i,commit:()=>{p&&Nr(p,c,Je())}}}function En(e){return e?!qt(e)?.operator_identity_hash:!0}function Qo(e){return!0}import{existsSync as Sd,readFileSync as Ed}from"node:fs";import{homedir as Gs}from"node:os";import{join as xe,resolve as yd}from"node:path";import{basename as dd,join as Oe}from"node:path";import{dirname as cs,resolve as _t}from"node:path";import{existsSync as Yl}from"node:fs";import{homedir as ns}from"node:os";import{relative as rs,resolve as X,sep as ae}from"node:path";var Xl=["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 Zl(e){return e.capture_hook_input==="full"?!0:e.capture_hook_input==="allowlist"?!1:I("EV_AI_HOOK_CAPTURE_FULL_INPUT")==="1"}function ql(e){let t={};for(let n of Xl){let r=ue(e,n);r!==void 0&&(t[n]=r)}return t}function mt(e,t){if(typeof e!="string"||e.length===0||!t)return null;let n=X(e),r=X(t),o=rs(r,n);return!o||o==="."?".":o.startsWith(`..${ae}`)||o===".."||X(r,o)!==n?null:o.split(ae).join("/")}function os(e,t){let n=rs(X(t),X(e)).split(ae).join("/");return!n||n==="."?null:n===".."||n.startsWith("../")&&n.split("/").every(r=>r==="..")?n:null}function ss(e){return typeof e!="string"||e.length===0?null:X(e).split(ae).join("/")}function Ql(){let e=I("CURSOR_PROJECT_DIR");if(!e)return null;let t=X(e);return Yl(t)?t.split(ae).join("/"):null}function yn(e,t){return mt(e,t)!==null}function eu(e,t){let n=X(t??ns(),".cursor").split(ae).join("/");return yn(e,n)}function tu(e,t,n){return t!==null&&yn(e,t)?!0:t!==null&&eu(e,n.home)?!1:n.inGitRepo===!0&&n.gitRoot!==void 0&&yn(e,n.gitRoot)?!0:t===null}function is(e,t){let n=ss(e.cwd);if(n!==null)return n;let r=X(process.cwd()).split(ae).join("/"),o=Ql();return tu(r,o,t)?r:o??r}function Rn(e,t={}){return is(e,t)}function Cn(e,t=ns()){let n=X(t).split(ae).join("/").replace(/\/$/,"");return n.length<=1?e:e===n?"~":e.startsWith(`${n}/`)?`~${e.slice(n.length)}`:e}function es(e,t,n){let r=ss(n.launchCwd)??is(t,n);e.cwd=Cn(r,n.home);let o=n.inGitRepo===!0&&n.gitRoot!==void 0?mt(r,n.gitRoot):null;o!==null&&(e.cwd_relative=o)}function ts(e,t){let n=JSON.stringify(e),r=Buffer.byteLength(n,"utf8");if(r<=t)return e;let o=Object.entries(e).filter(([i,c])=>!i.startsWith("_")&&(typeof c=="string"||typeof c=="number"||typeof c=="boolean")).sort((i,c)=>Buffer.byteLength(JSON.stringify(i[1]),"utf8")-Buffer.byteLength(JSON.stringify(c[1]),"utf8")),s={_truncated:!0,_original_bytes:r};for(let[i,c]of o){let a={...s,[i]:c};if(Buffer.byteLength(JSON.stringify(a),"utf8")>t)break;s[i]=c}return s}function gt(e,t,n={}){if(Zl(t)){let o={...e};return delete o.cwd,delete o.transcript_path,es(o,e,n),ts(o,hr)}let r=ql(e);return es(r,e,n),ts(r,_r)}function nu(e){return typeof e=="string"&&e.length>0}function In(e){let t=_t(e.home),n=_t(e.launchCwd),r=e.gitRoot?_t(e.gitRoot):null,o=new Set,s=[],i=null;e.inGitRepo&&nu(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 c=null,a=r!==null&&mt(n,r)!==null;if(e.inGitRepo&&r!==null&&r!==t&&a){let l=cs(r);for(;;){let u=_t(l);if(u===t)break;let d=cs(u);if(d===u)break;if(e.hasProjectSpec(u)){s.push({scope:"parent",dir:u}),c=os(u,n);break}l=d}}return{anchors:s,parentRel:c}}import{existsSync as as,readdirSync as ru,realpathSync as ou}from"node:fs";import{basename as su,dirname as iu,relative as cu,resolve as au,sep as lu}from"node:path";var An=400,ht=class{constructor(t,n={}){this.home=t;this.pathMode=n.pathMode??"home-relative",this.maxEntries=n.maxEntries??ne}components=[];truncated=!1;pathMode;maxEntries;pluginExpandRemaining;seenRealpaths=new Set;componentPath(t){if(this.pathMode==="tilde"){let r=au(t).split(lu).join("/");return Cn(r,this.home)}let n=cu(this.home,t).replace(/\\/g,"/");return!n||n.startsWith("..")?`external/${P(iu(t))}/${su(t)}`:n}claimFile(t){try{let n=ou(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(!as(t))return[];try{return ru(t,{withFileTypes:!0})}catch{return[]}}readJson(t,n){if(as(t))return N(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 kn,readFileSync as uu,statSync as du}from"node:fs";import{basename as us,join as Ke,relative as ds}from"node:path";var On=100*1024,pu=4;function fu(e){return e.length<=On?e:`${e.slice(0,On-1)}\u2026`}function mu(e){try{let t=uu(e),n=t.toString("utf8");return{hash:P(t),length:t.length,text:fu(n)}}catch{return null}}var ls={HOOK:"EVENT",COMMAND:"EXPLICIT_INVOCATION",MEMORY:void 0,MCP_SERVER:void 0,PLUGIN:void 0,SKILL:"UNSPECIFIED",RULE:"UNSPECIFIED",SUBAGENT:"UNSPECIFIED"};function gu(e){return e in ls?ls[e]:"UNSPECIFIED"}function St(e,t){if(!e.claimFile(t.absolutePath))return!1;let n=mu(t.absolutePath);if(!n)return!1;let r=t.name??us(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=gu(t.kind);return s&&(o.trigger=s),e.push(o)}function _u(e,t,n){let r=ds(e,t).replace(/\\/g,"/");return!r||r.startsWith("..")?us(t).replace(/\.(md|mdc|toml)$/i,""):n?r.replace(/\.(md|mdc|toml)$/i,""):r}function _e(e,t){let{dir:n,kind:r,origin:o,enabled:s,nested:i,extensions:c}=t;xn(e,{walkRoot:n,currentDir:n,depth:0,kind:r,origin:o,enabled:s,nested:i,extensions:c})}function xn(e,t){let{walkRoot:n,currentDir:r,depth:o,kind:s,origin:i,enabled:c,nested:a,extensions:l}=t;if(!(o>pu))for(let u of e.readEntries(r)){if(e.atGlobalCap){e.truncated=!0;return}if(e.pluginBudgetSpent)return;if(a){if(!u.isDirectory())continue;let p=Ke(r,u.name,a);if(kn(p)){let g=ds(n,Ke(r,u.name)).replace(/\\/g,"/");St(e,{absolutePath:p,kind:s,origin:i,enabled:c,name:g||u.name});continue}xn(e,{walkRoot:n,currentDir:Ke(r,u.name),depth:o+1,kind:s,origin:i,enabled:c,nested:a,extensions:l});continue}if(u.isDirectory()){xn(e,{walkRoot:n,currentDir:Ke(r,u.name),depth:o+1,kind:s,origin:i,enabled:c,nested:a,extensions:l});continue}if(!u.isFile()||!l)continue;let d=u.name.toLowerCase();if(!l.some(p=>d.endsWith(p)))continue;let f=Ke(r,u.name);St(e,{absolutePath:f,kind:s,origin:i,enabled:c,name:_u(n,f,!0)})}}function ps(e){for(let t of e)if(kn(t))try{if(du(t).size>0)return t}catch{continue}return e.find(t=>kn(t))}var hu="<omitted>",Su=["package_name","package_spec","package_version","package_version_source"],fs=100,ms=120,Et=[{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"}],gs=new Set(Et.map(e=>e.attr)),Eu=["enabled","disabled"],yu=["serverUrl","auth","bearer_token_env_var","default_tools_approval_mode","defaultToolsApprovalMode","env_vars","env_http_headers","http_headers"],Ru=new Set(["type","command","url","args","env","envVars","headers",...Eu,...yu,...Et.map(e=>e.raw)]),Cu=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",...Su,...gs,...[...gs].map(e=>`${e}_truncated`)]);function _s(e,t){for(let n of t)Ru.has(n)||Cu.has(n)||(e[n]=hu)}var Iu=/^(authorization|auth|api[-_]?key|access[-_]?token|refresh[-_]?token|secret|password|passwd|token|bearer|client[-_]?secret|client[-_]?id|private[-_]?key|signing[-_]?key)$/i,Au=/(?:^|[-_])(secret|password|passwd|token|api[-_]?key|private[-_]?key|signing[-_]?key|client[-_]?secret|client[-_]?id)(?:[-_]|$)/i,ku=/^(sk-|ghp_|gho_|github_pat_|xox[baprs]-|AKIA|ASIA|AIza|ya29\.)/,Ou=/^bearer(?:\s+|$)/i;function yt(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function hs(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.length>0):[]}function Tn(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 he(e){try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return e}}function xu(e){return ku.test(e)||Ou.test(e)?"<redacted>":e.includes("://")?he(e):e}function Ss(e){if(/^https?:\/\//i.test(e))return he(e);let t=e.indexOf("=");return t>0?`${e.slice(0,t+1)}${Ss(e.slice(t+1))}`:xu(e)}function Tu(e){let t=e.replace(/^-+/,"").split("=",1)[0]??"";return Iu.test(t)||Au.test(t)}function Rt(e){let t=[],n=!1;for(let r of e){if(n){t.push("<redacted>"),n=!1;continue}if(Tu(r)){t.push("<redacted>"),n=!r.includes("=");continue}t.push(Ss(r))}return t}function Pu(e){let t=hs(e);if(t.length===0)return;let n=[...new Set(t.map(r=>r.length>ms?r.slice(0,ms):r))].sort();if(n.length!==0)return n.length>fs?{names:n.slice(0,fs),truncated:!0}:{names:n,truncated:!1}}function vu(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 Es(e,t){let n=new Set;for(let{raw:r,attr:o}of Et){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=Pu(s);i&&(e[o]=i.names,i.truncated&&(e[`${o}_truncated`]=!0),n.add(o))}}function ys(e,t){let n=yt(e),r={transport:t};if(!n)return r;_s(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,c=o??s??i;c&&(r.command_or_url=he(c));let a=Rt(hs(n.args));a.length>0&&(r.args=a);let l=vu(n.env_http_headers),u=[...new Set([...Tn(n.env),...Tn(n.envVars),...Tn(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 g of["headers","http_headers","env_http_headers"])if(n[g]!==void 0&&n[g]!==null){r.headers_present=!0;break}let d=typeof n.auth=="string"?n.auth:void 0;d&&(r.auth=d);let f=typeof n.bearer_token_env_var=="string"?n.bearer_token_env_var:void 0;f&&(r.bearer_token_env_var=f);let p=typeof n.default_tools_approval_mode=="string"?n.default_tools_approval_mode:typeof n.defaultToolsApprovalMode=="string"?n.defaultToolsApprovalMode:void 0;return p&&(r.default_tools_approval_mode=p),Es(r,n),r}function Rs(e){let t=yt(e);return t?t.enabled===!1?!1:t.disabled!==!0:!0}function wn(e,t,n=!0){let r=Object.keys(t).sort().map(o=>[o,t[o]??null]);return P(JSON.stringify({name:e,attributes:r,enabled:n}))}function Ae(e){let t=e.trim();return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function $e(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 wu(e,t){return Rt($e(e,t))}function vn(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(true|false)\\s*$`,"m").exec(e);if(n?.[1])return n[1]==="true"}function Pn(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(.+)$`,"m").exec(e);if(!n?.[1])return;let r=Ae(n[1]);return r.length>0?r:void 0}function bu(e,t){let n=[],r=i=>{for(let c of i.split(/[,\n]/)){let a=/^\s*"?([A-Za-z_][A-Za-z0-9_-]*)"?\s*=\s*(.+?)\s*$/.exec(c);a?.[1]&&n.push([a[1],Ae(a[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(`
16
+ ${e}`);return s?.[1]&&r(s[1]),n}function Cs(e){return vn(e,"enabled")===!1?!1:vn(e,"disabled")!==!0}function Mu(e,t){let n={};for(let{raw:r,attr:o}of Et){if(o==="auto_approve"){let i=vn(t,r);if(i!==void 0){n[r]=i;continue}}let s=$e(t,r);s.length>0&&(n[r]=s)}Es(e,n)}var Nu=/^\s*([A-Za-z_][A-Za-z0-9_-]*)\s*[.=]/,Lu=/^\[[^\]]*\.([A-Za-z_][A-Za-z0-9_-]*)\]\s*$/gm;function Uu(e){let t=new Set,n=e.search(/^\[/m),r=n===-1?e:e.slice(0,n);for(let o of r.split(`
17
+ `)){let s=Nu.exec(o);s?.[1]&&t.add(s[1])}for(let o of e.matchAll(Lu))o[1]&&t.add(o[1]);return[...t]}function Is(e,t){let n={transport:t};_s(n,Uu(e));let r=/^\s*command\s*=\s*(.+)$/m.exec(e),o=/^\s*url\s*=\s*(.+)$/m.exec(e),s=r?Ae(r[1]??""):void 0,i=o?Ae(o[1]??""):void 0,c=s!==void 0&&s.length>0?s:i;c&&(n.command_or_url=he(c));let a=wu(e,"args");a.length>0&&(n.args=a);let l=new Set;for(let _ of e.split(`
18
+ `)){let A=/^\s*env\.([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(_);A?.[1]&&l.add(A[1])}let u=/^\s*env\s*=\s*\{([^}]*)\}/m.exec(e);if(u?.[1])for(let _ of u[1].split(",")){let A=/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(_);A?.[1]&&l.add(A[1])}let d=/(?:^|\n)\[[^\]]*env\]\s*\n([\s\S]*?)(?=\n\[|$)/.exec(`
19
19
  ${e}`);if(d?.[1])for(let _ of d[1].split(`
20
- `)){let C=/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(_);C?.[1]&&l.add(C[1])}for(let _ of Yt(e,"env_vars"))l.add(_);let f=hc(e,"env_http_headers");for(let[,_]of f)_.length>0&&l.add(_);let p=Wt(e,"bearer_token_env_var");p&&(l.add(p),n.bearer_token_env_var=p),l.size>0&&(n.env_var_names=[...l].sort()),f.length>0&&(n.env_http_header_names=[...new Set(f.map(([_])=>_))].sort()),(/^\s*(?:http_|env_http_)?headers\s*=/m.test(e)||/(?:^|\n)\[[^\]]*headers\]\s*(?:\n|$)/.test(e))&&(n.headers_present=!0);let g=Wt(e,"auth");g&&(n.auth=g);let E=Wt(e,"default_tools_approval_mode");return E&&(n.default_tools_approval_mode=E),Sc(n,e),n}var Cc=300,Ic=256;function uo(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 po(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 fo(e,t){return e.length<=t?e:`${e.slice(0,t-1)}\u2026`}function Ac(e){return fo(e,Cc)}function mo(e,t){let n=uo(e.trim(),t),r=po(n);if(r.length===0)return"";let[o,...s]=r,a=ie(o),i=Xe(s);return Ac([a,...i].join(" "))}function go(e,t){if(typeof e!="string")return null;let n=uo(e.trim(),t),r=po(n)[0];if(!r)return null;let o=ie(r);return o.length===0?null:fo(o,Ic)}function Oc(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 Tc(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 xc(e,t,n,r){let o=e.componentPath(t);for(let[s,a]of Object.entries(n))if(!(!Array.isArray(a)||e.truncated))for(let i of a){if(!i||typeof i!="object"||e.truncated)continue;let c=i;for(let l of Tc(c)){if(e.truncated)return;let u=l.command??l.bash??l.prompt??l.powershell??c.powershell??"",d=Oc({type:l.type??c.type,command:l.command??c.command,bash:l.bash??c.bash,powershell:l.powershell??c.powershell,prompt:l.prompt??c.prompt}),f=typeof c.matcher=="string"?c.matcher:"",p=x(u),g=f?`${s}:${f}:${d}:${p}`:`${s}:${d}:${p}`,E=`${s}|${f}|${d}|${u}|attrs2`;e.push({kind:"HOOK",name:g,path:o,content_hash:x(E),origin:r,enabled:!0,trigger:"EVENT",attributes:{event:s,...f?{matcher:f}:{},action_kind:d,action_hash:p,...d!=="prompt"&&u.trim()?{command:mo(u,e.home)}:{}}})}}}function de(e,t,n){if(!e.claimFile(t))return;let r=e.readJson(t,{});!r?.hooks||typeof r.hooks!="object"||xc(e,t,r.hooks,n)}import{existsSync as Nc}from"node:fs";import{homedir as So}from"node:os";import{join as Mc}from"node:path";import{existsSync as kc,readdirSync as _o}from"node:fs";import{homedir as Ze}from"node:os";import{join as U}from"node:path";function vc(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/ClaudeCode";case"win32":return U(process.env.ProgramFiles??"C:\\Program Files","ClaudeCode");default:return"/etc/claude-code"}}function wc(e=process.platform){let t=vc(e),n=[U(t,"managed-settings.json")],r=U(t,"managed-settings.d");try{if(!kc(r))return n;let o=_o(r).filter(s=>s.endsWith(".json")&&!s.startsWith(".")).sort().map(s=>U(r,s));n.push(...o)}catch{}return n}function Xt(e=process.platform,t=Ze()){return{serverManaged:U(t,".claude","remote-settings.json"),fileBased:wc(e)}}function bc(e=process.platform){switch(e){case"darwin":return"/Library/Application Support/Cursor";case"win32":return U(process.env.ProgramData??"C:\\ProgramData","Cursor");default:return"/etc/cursor"}}function Pc(e=process.platform,t=Ze()){let n=[U(bc(e),"hooks.json")],r=U(t,".cursor","managed");try{for(let o of _o(r,{withFileTypes:!0}))!o.isDirectory()||o.name.startsWith(".")||n.push(U(r,o.name,"hooks.json"))}catch{}return n}function Uc(e=process.platform,t=Ze()){let n=e==="win32"?U(process.env.ProgramData??"C:\\ProgramData","OpenAI","Codex"):"/etc/codex",r=[U(n,"requirements.toml")];return e!=="win32"&&r.push(U(n,"managed_config.toml")),r.push(U(t,".codex","managed_config.toml"),U(n,"config.toml")),r}function qe(e,t=process.platform,n=Ze()){switch(e){case"claude":{let{serverManaged:r,fileBased:o}=Xt(t,n);return[r,...o]}case"cursor":return Pc(t,n);default:return Uc(t,n)}}function Eo(e){return e.settings.filter(t=>t.toLowerCase().endsWith(".json"))}var Lc={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 ho(e,t){if(!(!e&&!t))return[...e??[],...t??[]]}function Dc(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:ho(n.mcpJson,t.mcpJson),mcpToml:ho(n.mcpToml,t.mcpToml),plugins:t.plugins??n.plugins,managed:t.managed??n.managed}}function Ro(e){return Object.fromEntries(Object.entries(Lc).map(([t,n])=>[t,Dc(n,n[e])]))}var Qe=Ro("homeOnly"),yo=Ro("projectOnly");function Hc(e){return[...e.skillRoots,...e.dirs.map(t=>t.dir),...e.memory.flat(),...e.settings,...e.mcpJson??[],...e.mcpToml??[]]}function Fc(e,t){return Hc(e).some(n=>Nc(Mc(t,n)))}function Co(e,t){for(let n of e)if(Fc(n,t))return!0;return!1}function Q(e){return[...new Set(e)]}function Bc(e){let t=[],n=[],r=[],o=[],s=[],a=[],i=[];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()),a.push(...c.settings),i.push(...c.mcpJson??[],...c.mcpToml??[])}return{skills:Q(t),subagents:Q(n),commands:Q(r),rules:Q(o),memory:Q(s),settings:Q(a),mcp:Q(i)}}function $c(e,t=So(),n=process.platform){let r=[];for(let o of e)o.managed&&r.push(...qe(o.managed,n,t));return Q(r)}var ee=Bc(Object.values(Qe));function Io(e=So(),t=process.platform){return $c(Object.values(Qe),e,t)}import{existsSync as Kc,readFileSync as jc}from"node:fs";function Gc(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 Ao(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[a,i]of Object.entries(o)){if(e.truncated)return;let c=Gc(i),l=io(i,c),u=ao(i);e.push({kind:"MCP_SERVER",name:a,path:s,content_hash:Jt(a,l,u),origin:n,enabled:u,attributes:l})}}function Oo(e,t,n){if(!Kc(t)||!e.claimFile(t))return;let r;try{r=jc(t,"utf8")}catch{return}let o=e.componentPath(t),s=/^\[mcp_servers(?:\.(\w+)|\."([^"]+)"|\.'([^']+)')\]\s*$/gm,a;for(;(a=s.exec(r))!==null;){if(e.truncated)return;let i=a[1]??a[2]??a[3];if(!i)continue;let c=r.slice(a.index+a[0].length),l=c.search(/^\[mcp_servers(?:\.(?:\w+|"[^"]+"|'[^']+'))\]\s*$/m),u=l===-1?c:c.slice(0,l),d="unknown";/^\s*url\s*=/m.test(u)?d="http":/^\s*command\s*=/m.test(u)&&(d="stdio");let f=lo(u,d),p=co(u);e.push({kind:"MCP_SERVER",name:i,path:o,content_hash:Jt(i,f,p),origin:n,enabled:p,attributes:f})}}import{existsSync as zc,readdirSync as Wc}from"node:fs";import{join as N}from"node:path";var To=50;function Zt(e,t,n,r){if(!zc(t))return{componentCount:0,expandTruncated:!1};let o=e.components.length,{expanded:s}=e.withPluginExpandCap(To,()=>{se(e,{dir:N(t,"skills"),kind:"SKILL",origin:n,enabled:r,nested:"SKILL.md"}),se(e,{dir:N(t,"commands"),kind:"COMMAND",origin:n,enabled:r,extensions:[".md"]}),se(e,{dir:N(t,"agents"),kind:"SUBAGENT",origin:n,enabled:r,extensions:[".md"]})});de(e,N(t,"hooks","hooks.json"),n),de(e,N(t,"hooks.json"),n);let a=e.components.length-o,i=s>=To;return{componentCount:a,expandTruncated:i}}function qt(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 xo(e){let t=N(e.home,".claude/plugins/installed_plugins.json"),n=e.readJson(t,{});if(!n)return;let r=n.plugins??{},s=e.readJson(N(e.home,".claude/settings.json"),{})?.enabledPlugins??{},a=e.componentPath(t);for(let[i,c]of Object.entries(r)){if(e.truncated)return;let l=Array.isArray(c)?c:[c],u=l[0]??{},d=s[i]===!0,f=i.includes("@")?i.split("@").slice(1).join("@"):"",p=typeof u.version=="string"?u.version:"",g=typeof u.scope=="string"?u.scope:"user",E=`plugin:${i}`,_=0,C=!1;for(let M of l)if(typeof M.installPath=="string"&&M.installPath.length>0){let B=Zt(e,M.installPath,E,d);_+=B.componentCount,C=C||B.expandTruncated}qt(e,{pluginKey:i,rowPath:a,enabled:d,scope:g,version:p||void 0,marketplace:f||void 0,componentCount:_,expandTruncated:C,contentHash:x(`${i}|${p}|${g}|${d}|${_}`)})}}function Vc(e){let t=e,n="";try{let r=Wc(e,{withFileTypes:!0}).filter(o=>o.isDirectory()).map(o=>o.name);if(r.length===1&&r[0])t=N(e,r[0]),n=r[0];else if(r.length>1){let o=[...r].sort(),s=o[o.length-1];s&&(t=N(e,s),n=s)}}catch{}return{installPath:t,version:n}}var Jc=/^\d+$/;function Yc(e){let t=e.filter(n=>!Jc.test(n.pluginId));return t.length>0?t:e}function ko(e){let t=[{base:N(e.home,".cursor/plugins/local"),scope:"local"},{base:N(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 i=o.name,c=N(n,o.name),l=`plugin:${i}`,{componentCount:u,expandTruncated:d}=Zt(e,c,l,!0);qt(e,{pluginKey:i,rowPath:e.componentPath(c),enabled:!0,scope:"local",componentCount:u,expandTruncated:d,contentHash:x(`${i}|local|${u}`)});continue}let s=o.name,a=[];for(let i of e.readEntries(N(n,s))){if(!i.isDirectory())continue;let c=N(n,s,i.name),{installPath:l,version:u}=Vc(c);a.push({pluginId:i.name,installPath:l,version:u})}for(let i of Yc(a)){if(e.truncated)break;let c=`${i.pluginId}@${s}`,l=`plugin:${c}`,{componentCount:u,expandTruncated:d}=Zt(e,i.installPath,l,!0);qt(e,{pluginKey:c,rowPath:e.componentPath(i.installPath),enabled:!0,scope:"cache",version:i.version||void 0,marketplace:s,componentCount:u,expandTruncated:d,contentHash:x(`${c}|${i.version}|${u}`)})}}}function Zc(e,t){let{layout:n,levelDir:r,origin:o,includeMachineWide:s}=t;for(let a of n.skillRoots)se(e,{dir:pe(r,a),kind:"SKILL",origin:o,enabled:!0,nested:"SKILL.md"});for(let a of n.dirs)se(e,{dir:pe(r,a.dir),kind:a.kind,origin:o,enabled:!0,extensions:a.extensions});for(let a of n.memory){let i=qr(a.map(c=>pe(r,c)));i&&We(e,{absolutePath:i,kind:"MEMORY",origin:o,enabled:!0,name:Xc(i)})}for(let a of Eo(n))de(e,pe(r,a),o);for(let a of n.mcpJson??[])Ao(e,pe(r,a),o);for(let a of n.mcpToml??[])Oo(e,pe(r,a),o);if(s){if(n.managed)for(let a of qe(n.managed,process.platform,e.home))a.toLowerCase().endsWith(".json")&&de(e,a,o);n.plugins==="claude"?xo(e):n.plugins==="cursor"&&ko(e)}}function vo(e,t){try{let n=new ze(e,{pathMode:t.pathMode,maxEntries:t.maxEntries});for(let r of t.layouts)Zc(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 Qt(e,t,n={}){let r={},o=n.shouldWalk;if(o===void 0||o("user","")){let c=vo(t,{layouts:Object.values(Qe),levelDir:t,origin:"user",includeMachineWide:!0,pathMode:"home-relative",maxEntries:Z,scopeRef:""});c&&(r.user=c)}let s=n.inGitRepo===!0,a=null,i=n.launchCwd;if(i!==void 0){let c=Object.values(yo),l=Bt({launchCwd:i,gitRoot:n.gitRoot,inGitRepo:s,remote:n.remote,home:t,hasProjectSpec:u=>Co(c,u)});a=l.parentRel;for(let u of l.anchors){let d=Lt(u.dir);if(o!==void 0&&!o(u.scope,d))continue;let f=vo(t,{layouts:c,levelDir:u.dir,origin:u.scope,includeMachineWide:!1,pathMode:"tilde",maxEntries:$t,scopeRef:d});f&&(r[u.scope]=f)}r.parent||(a=null)}return{scopes:r,parentRel:a,cwdInGitRepo:s}}function en(e,t,n={}){let r=n.truncated===!0,o=Ce(e),s=new Set(e.map(u=>F(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 i=[],c=t;for(let u of e){let d=F(u.path,u.name);c[d]!==u.content_hash&&i.push(u)}let l=[];if(!r){for(let u of Object.keys(c))if(!s.has(u)){let d=Mr(u);d&&l.push(d)}}return{hash:o,count:e.length,truncated:r,full:!1,upserts:i,removed:l,unchanged:i.length===0&&l.length===0}}var bo=2*1024*1024,qc=new Set(["HOOK","MCP_SERVER","PLUGIN"]);function tn(e,t,n){let r=new Set(t.map(s=>F(s.path,s.name))),o=[];for(let s of e)s.text!==void 0&&(n.has(s.content_hash)||r.has(F(s.path,s.name))||o.push(s));return o}function nn(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 wo(e){return Buffer.byteLength(JSON.stringify(e),"utf8")}function Po(e){if(e.text===void 0)return e;let{text:t,...n}=e;return n}function rn(e,t=bo){let n=[],r=[];for(let u of e)qc.has(u.kind)?n.push(u):r.push(u);r.sort((u,d)=>(u.text?.length??0)-(d.text?.length??0));let o=[...n,...r],s=[],a=2,i=0,c=0,l=[];for(let u of o){let d=s.length>0?1:0,f=wo(u)+d;if(a+f<=t){s.push(u),a+=f,u.text!==void 0&&l.push(u.content_hash);continue}if(u.text!==void 0){let p=Po(u),g=wo(p)+d;if(a+g<=t){s.push(p),a+=g,i+=1;continue}}c+=1}return{components:s,textDeferredCount:i,droppedCount:c,textHashesSent:l}}function on(e,t){return t.size===0?e:e.map(n=>n.text===void 0||!t.has(n.content_hash)?n:Po(n))}var Qc=["user","cwd","repo","parent"];function sn(e){let{collected:t,cacheFor:n,nowMs:r,maxBytes:o}=e,s=[];for(let O of Qc){let T=t.scopes[O];if(!T)continue;let D=n(O,T.scopeRef),v=D.components,L=en(T.components,v,{forceFull:v===void 0,truncated:T.truncated}),V=new Set(D.textHashes),J=tn(T.components,L.upserts,V),w=on([...L.upserts,...J],V);s.push({scope:O,walk:T,delta:L,outgoing:w,outgoingKeys:new Set(w.map(S=>F(S.path,S.name))),deliveredTextHashes:V,cachedComponents:v})}let a=s.flatMap(O=>O.outgoing),i=rn(a,o),c=new Set(i.components.map(O=>F(O.path,O.name))),l=[],u=[],d=[],f=[],p=[],g=[],E=[];for(let O of s){let{scope:T,walk:D,delta:v}=O;g.push(...D.components),l.push(T);let L=i.components.filter(S=>O.outgoingKeys.has(F(S.path,S.name))),V=[...O.outgoingKeys].some(S=>!c.has(S)),J=v.truncated||V;J?d.push(T):v.full&&u.push(T),f.push(...L),!v.full&&!J&&p.push(...v.removed);let w=v.full?{}:{...O.cachedComponents??{}};if(!J)for(let S of v.removed)delete w[F(S.path,S.name)];for(let S of L)w[F(S.path,S.name)]=S.content_hash;E.push({scope:T,scopeRef:D.scopeRef,components:w,textHashes:nn(O.deliveredTextHashes,L.filter(S=>S.text!==void 0).map(S=>S.content_hash),D.components),collectedAtMs:r,included:L.length>0||v.removed.length>0&&!J||v.full})}let _={user_spec_hash:Ce(g),user_spec_count:g.length,user_spec_truncated:d.length>0};l.length>0&&(_.user_spec_scopes=l,_.user_spec_full_scopes=u,_.user_spec_truncated_scopes=d,_.user_spec_cwd_in_git_repo=t.cwdInGitRepo),u.length>0&&u.length===l.length&&(_.user_spec_full=!0),f.length>0&&(_.user_spec=f),p.length>0&&(_.user_spec_removed=p),i.textDeferredCount>0&&(_.user_spec_text_deferred=i.textDeferredCount);let C=t.scopes.cwd;C&&(_.user_spec_cwd_scope_ref=C.scopeRef);let M=t.scopes.repo;M&&(_.user_spec_repo_scope_ref=M.scopeRef);let B=t.scopes.parent;return B&&(_.user_spec_parent_scope_ref=B.scopeRef,t.parentRel&&(_.user_spec_parent_rel=t.parentRel)),{fields:_,scopes:E}}var Te={cwd:"cwd_spec",repo:"repo_spec",parent:"parent_spec"};function et(e){return e==="cwd"||e==="repo"||e==="parent"}function Oe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function an(e){return!Oe(e)||!Oe(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 Uo(e){return el(e)}function No(e){return tl(e)}function Mo(e){return nl(e)}function el(e){if(!Oe(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r=="string"&&(t[n]=r);return t}function tl(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function cn(e,t){if(!Oe(e))return;let n=e[t];return an(n)?n:void 0}function nl(e){if(!Oe(e))return{};let t={};for(let[n,r]of Object.entries(e))an(r)&&(t[n]=r);return t}function ln(e,t=20){let n=[];for(let[r,o]of Object.entries(e))an(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 il=200,Lo=200,al=["allow","deny","ask"],cl=/(?<=^|[\s(,=:])(?:~|[A-Za-z]:)?[\\/][^\s,)]+/g,dn="<path>",ll=new RegExp(`${dn}(?:\\s+[A-Za-z.][^\\s,)]*[\\\\/][^\\s,)]*)+`,"g");function ul(e){let t=e.replace(cl,dn).replace(ll,dn);return t.length>Lo?`${t.slice(0,Lo)}...`:t}function nt(e){let t=ce(e,{}),n=[];for(let r of al)for(let o of t.permissions?.[r]??[])typeof o=="string"&&o.length>0&&n.push({key:ul(o),mode:r});return{model:t.model??"",permissionKeys:n}}function dl(e){let{serverManaged:t,fileBased:n}=Xt(process.platform,e),r=nt(t);if(r.model||r.permissionKeys.length>0)return r;let o="",s=[];for(let a of n){let i=nt(a);i.model&&(o=i.model),s.push(...i.permissionKeys)}return{model:o,permissionKeys:s}}function pl(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 fl=10,ml=840*60*1e3,gl="self-config-cache.json",Ho=2;function pn(){return I("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off"}function _l(){return I("EV_AI_HOOK_CWD_SPEC")?.toLowerCase()==="off"}function hl(e,t=Date.now()){return e===void 0||!Number.isFinite(e)?!0:t-e>=ml}var Sl={claude:["claude"],cursor:["agent","cursor-agent"],codex:["codex"]};async function El(e,t=k){let n=Sl[e];if(!n||n.length===0)return null;let r=async o=>{let s=n[o];if(s===void 0)return null;let i=((await t(s,["--version"],2e3)).split(`
21
- `)[0]??"").trim();return i||r(o+1)};return r(0)}function Rl(e=Do()){return fe(e,".ev-ai","agent-hook",gl)}function yl(e){let n=[...e].sort((r,o)=>r.name.localeCompare(o.name)).map(r=>`${r.name}:${r.size}`).join(`
22
- `);return x(n)}function tt(e,t,n=!1){let r=yl(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 un(e,t,n=[]){let r=0,o=!1,s=new Set;for(let a of[...t.map(i=>fe(e,i)),...n]){let i=sl(a);if(s.has(i))continue;s.add(i);let c=pt(a);c.present&&(o=!0,r+=c.size)}return o?{present:!0,size:r}:{present:!1,size:0}}function Cl(e){return rl(e)?H(ol(e,"utf8"),{}):{}}function Il(e,t){try{X(e,`${JSON.stringify(t)}
23
- `)}catch(n){let r=n instanceof Error?n.message:String(n);h(`WARN: self-config cache write failed open: ${r}`)}}function Al(e,t,n){if(t==="user")return e.user_spec_collected_at_ms;if(et(t))return cn(e[Te[t]],n)?.collected_at_ms}function Ol(e,t,n){if(t==="user")return{components:Uo(e.user_spec_components),textHashes:No(e.user_spec_text_hashes)};if(!et(t))return{components:void 0,textHashes:[]};let r=cn(e[Te[t]],n);return r?{components:r.components,textHashes:r.text_hashes}:{components:void 0,textHashes:[]}}function Tl(e,t,n,r){let o={...e,send_count:n};for(let s of Object.keys(t)){let a=t[s];a.entries!==void 0&&(o[s]=a.hash)}if(r){o.user_spec_layout_version=Ho,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(!et(s.scope))continue;let a=Te[s.scope],i=Mo(o[a]),c=i[s.scopeRef];i[s.scopeRef]={components:s.included?s.components:c?.components??{},text_hashes:s.textHashes,collected_at_ms:s.collectedAtMs},o[a]=ln(i)}}return o}async function Fo(e,t=process.cwd(),n=Do(),r={}){let o=e==="claude",s=r.gitRoot??t,a=await El(e),i="",c=[];if(o){let w=dl(n),S=nt(fe(n,".claude/settings.json")),P=nt(fe(t,".claude/settings.local.json"));i=w.model||P.model||S.model,c=pl([...w.permissionKeys,...S.permissionKeys,...P.permissionKeys]).slice(0,il)}let l={present:!1,size:0},u=w=>{let S=[],P=!1;for(let $ of w){let Y=On(fe(n,$));if(S=S.concat(Y.entries),P=P||Y.truncated,S.length>=Z){S=S.slice(0,Z),P=!0;break}}return{entries:S,truncated:P}},d=Rl(n),f=Cl(d),p=f[e]??{},g=(p.send_count??0)+1,E=g>0&&g%fl===0,_=w=>E?void 0:p[w],C=u(ee.skills),M=u(ee.subagents),B=u(ee.commands),O=u(ee.rules),T={skills:tt(C.entries,_("skills"),C.truncated),subagents:tt(M.entries,_("subagents"),M.truncated),commands:tt(B.entries,_("commands"),B.truncated),rules:tt(O.entries,_("rules"),O.truncated)},D={runner_platform:e,config_scope:"user",cli_version:a,claude_version:o?a:null,model:o&&i||null,permission_keys:c,user_scope:{skills:T.skills,subagents:T.subagents,commands:T.commands,rules:T.rules,memory:un(n,ee.memory),settings:un(n,ee.settings,Io(n)),mcp:un(n,ee.mcp)},local_settings:o?pt(fe(t,".claude/settings.local.json")):l},v=null,L=()=>{},V=r.nowMs??Date.now();if(!pn()){let w=p.user_spec_layout_version!==Ho,S=Qt(e,n,{launchCwd:_l()?void 0:r.launchCwd,gitRoot:s,inGitRepo:r.inGitRepo,remote:r.remote,shouldWalk:(P,$)=>w||hl(Al(p,P,$),V)});if(Object.keys(S.scopes).length>0){let P=sn({collected:S,cacheFor:($,Y)=>w?{components:void 0,textHashes:[]}:Ol(p,$,Y),nowMs:V});if(Object.assign(D,P.fields),v={hash:P.fields.user_spec_hash,home:P.scopes.find($=>$.scope==="user")??null,project:P.scopes.filter($=>$.scope!=="user")},S.scopes.user){let $=p.user_spec_collected_at_ms!==void 0,Y=await Ke({gitRoot:s,installationStorePath:r.installationStorePath,forceResend:$});Y.operator&&(D.operator=Y.operator),L=Y.commit}}}let J=Tl(p,T,g,v);return{config:D,commit:()=>{f[e]=J,Il(d,f),L()}}}function me(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:we(),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:Et,host_arch:process.arch,node_version:process.version,correlation:r,payload:t}}import{existsSync as $o}from"node:fs";import{spawn as Ko}from"node:child_process";import{basename as kl}from"node:path";import{fileURLToPath as vl}from"node:url";import{gzipSync as xl}from"node:zlib";function mn(e){return I("EV_AI_HOOK_COMPRESS")==="off"?{body:e}:Buffer.byteLength(e,"utf8")<Mn?{body:e}:{body:xl(Buffer.from(e,"utf8")),contentEncoding:"gzip"}}function rt(e){let t={"Content-Type":"application/json"};return e!==void 0&&(t["Content-Encoding"]=e),t}function Bo(e){return typeof e=="string"?Buffer.byteLength(e,"utf8"):e.length}var gn="__post",ot="__work";function wl(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 jo(e){switch(e){case"session_start":return wn;case"session_end":return bn;case"tool_invoked":case"skill_invoked":return ht;default:return ht}}function bl(e,t,n){return`${JSON.stringify({url:e,timeoutMs:t})}
24
- ${n}`}function Go(e,t=[],n=process.execPath,r=import.meta.url,o=$o){if(kl(n)===Pe)return{command:n,args:[e,...t]};let s=vl(r);return o(s)?{command:n,args:[s,e,...t]}:{command:n,args:[e,...t]}}function Pl(e=process.execPath,t=import.meta.url,n=$o){return Go(gn,[],e,t,n)}function Ul(e){let t=e.indexOf(`
25
- `);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 zo(e,t=fetch){let n=await e(),r=Ul(n);if(!r)return;let{meta:o,body:s}=r,a=mn(s),i=rt(a.contentEncoding);try{await t(o.url,{method:"POST",headers:i,body:a.body,signal:AbortSignal.timeout(Number(o.timeoutMs))})}catch{}}async function Nl(e,t,n,r=fetch){let o=jo(e),s=mn(t),a=rt(s.contentEncoding),i=Bo(s.body);h(`POST event=${e} url=${At(n)} size=${i} encoding=${s.contentEncoding??"identity"} platform=${process.platform}`);let c=Date.now();try{let l=await r(n,{method:"POST",headers:a,body:s.body,signal:AbortSignal.timeout(o)});if(!l.ok&&s.contentEncoding==="gzip"&&(l.status===400||l.status===415)){try{await l.text()}catch{}h(`POST gzip rejected http=${l.status} \u2014 retrying uncompressed`),l=await r(n,{method:"POST",headers:rt(),body:t,signal:AbortSignal.timeout(o)})}let u=Date.now()-c;if(l.ok)return h(`POST outcome=ok elapsed_ms=${u} http=${l.status}`),!0;let d=(await l.text()).slice(0,200).replace(/[\n\r]/g,"");return h(`POST outcome=fail elapsed_ms=${u} http=${l.status} body=${d}`),!1}catch(l){let u=Date.now()-c,d=l instanceof Error?l.message:String(l);return h(`POST outcome=fail elapsed_ms=${u} http=000 body=${d}`),!1}}async function Wo(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 a=!1;return await new Promise(i=>{let c=setTimeout(()=>{if(!a){h(`WARN: ${o} stdin handoff timed out \u2014 continuing fail-open`);try{s.stdin.destroy()}catch{}}i()},Pn),l=()=>{a=!0,clearTimeout(c),i()};s.stdin.end(n,()=>l()),s.stdin.once("error",()=>l())}),s.unref(),s}catch(s){let a=s instanceof Error?s.message:String(s);return h(`WARN: ${o} spawn failed open: ${a}`),null}}async function Ml(e,t,n,r=Ko,o=Pl){let s=jo(e),a=bl(n,s,t),{command:i,args:c}=o();return Wo(i,c,a,r,"detached post")}async function Vo(e,t,n=Ko,r=Go){let{command:o,args:s}=r(ot,t);return Wo(o,s,e,n,"detached work")}async function ge(e,t,n,r,o,s){if(!o)return h("WARN: collector URL missing \u2014 pass --url on the hook command or set collector_url in manifest"),!1;if(!Ne(o))return h(`WARN: collector URL blocked (https required): ${At(o)}`),!1;let a=r(e,t,n);s!==void 0&&(a.build_ms=Math.max(0,Date.now()-s));let i=`${JSON.stringify(a)}
26
- `,c=I("EV_AI_HOOK_DEBUG");c==="full"?h(`DEBUG envelope=${JSON.stringify(a)}`):c==="1"&&h(`DEBUG summary=${wl(a,Buffer.byteLength(i,"utf8"))}`);let l=process.argv.includes(ot),u=I("EV_AI_HOOK_SYNC")==="1";return He(n.runnerEvent,n.runnerPlatform)||l||u?Nl(e,i,o):(await Ml(e,i,o),!1)}import{createReadStream as Ll}from"node:fs";import{stat as Dl}from"node:fs/promises";import{basename as Hl,resolve as Fl}from"node:path";import{createInterface as Bl}from"node:readline";var $l=1024*1024;function Kl(e){let t=e.replace(/\\/g,"/");return t.includes("/.claude/projects/")&&Hl(t).endsWith(".jsonl")}async function Jo(e){if(!e||!Kl(e))return null;try{let t=Fl(e),n=await Dl(t);if(!n.isFile())return null;let r=Math.max(0,n.size-$l),o=[],s=Bl({input:Ll(t,{encoding:"utf8",start:r}),crlfDelay:1/0});for await(let a of s)a.length!==0&&o.push(a);r>0&&o.length>0&&o.shift();for(let a=o.length-1;a>=0;a--){let i=o[a];if(i)try{let c=JSON.parse(i);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 ke(e){return{sessionId:e.sessionId,turnId:e.turnId,installationId:e.manifest.installationId,runnerPlatform:e.runnerPlatform,platformAgentId:e.platformAgentId,runnerEvent:e.runnerEvent}}function st(e){return{gitRoot:e.manifest.gitRoot,inGitRepo:e.manifest.inGitRepo}}var jl=new Set([...Object.values(Pt),".github"]);function Gl(e,t,n,r,o,s){if(e===null||t===null||!(/^mcp__.+?__.+$/i.test(e)||/^MCP:[^:]+:.+$/i.test(e)||e.toLowerCase()===`mcp:${t.toLowerCase()}`))return;let i=s.find(p=>p.name.toLowerCase()===t.toLowerCase()),c=i?.sourcePath??(i?.source==="claude_json_user"?".claude.json":i?.source==="cursor_mcp_user"?".cursor/mcp.json":i?.source==="codex_toml_user"||i===void 0&&o==="codex"?".codex/config.toml":void 0);if((i?.scope==="user"||i?.source==="claude_json_user"||i?.source==="cursor_mcp_user"||i?.source==="codex_toml_user"||i===void 0&&o==="codex")&&c)try{let p=(0,b.userConfigRootFromPath)(c);return(0,b.buildComponentReference)({installationRootExternalKey:(0,b.installationRootExternalKey)(r,p),installableKind:b.ComponentKind.INTERFACE,sourcePath:c,nativeKey:i?.name??t})}catch{return}if(n===null)return;let u=n.indexOf(":");if(u<=0||u===n.length-1)return;let d=n.slice(u+1),f=d.replaceAll("\\","/").split("/").at(-1);if(!(f===void 0||!jl.has(f)))try{return(0,b.buildComponentReference)({installationRootExternalKey:n,installableKind:b.ComponentKind.INTERFACE,sourcePath:d,nativeKey:t})}catch{return}}function zl(...e){for(let t of e)if(t)return t;return null}function G(e,t,n){if(e.status==="fulfilled")return e.value;let r=e.reason instanceof Error?e.reason.message:String(e.reason);return h(`WARN: ${n} failed open: ${r}`),t}function Wl(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 Vl(e,t){return{runner_platform:e,config_scope:"user",...t?{operator:t}:{}}}var ae=new Set,xe=null;async function Xo(e){if(pn())return;let t=e.manifest.installationId,n=e.manifest.installationStorePath;if(ae.has(t))return;if(!Dt(n)){ae.add(t);return}let r=_e({sessionId:e.sessionId,hostname:he()});if(Hr(r)){if(xe){await xe;return}xe=(async()=>{if(ae.has(t)||!Dt(n)){ae.add(t);return}if(!qn(n)){ae.add(t);return}let o=!1;try{let s=Date.now(),{gitRoot:a}=e.manifest,i=String(e.runnerPlatform),[c,l,u,d,f]=await Promise.allSettled([ye(a),gt(),Ut(r),_t(),Ke({gitRoot:a,installationStorePath:n,forceResend:!1})]),p=G(c,null,"gitSnapshot"),g=G(l,"","detectVirt"),E=G(u,null,"probeCloud"),_=G(d,{},"hostEnv"),C=G(f,{commit:()=>{}},"resolveOperatorForSend");await ve(e,a,p);let M={identity:{host:he(),context:r,virt:g||null,cloud:E,git:p},host_env:_,env_vars:Mt(),self_config:Vl(i,C.operator),run_meta:{trigger:"cloud_identity_bootstrap"}};o=!!await ge("session_start",M,ke(e),me,e.manifest.collectorUrl,s),o&&(C.commit(),ae.add(t))}finally{Qn(n)}})().finally(()=>{xe=null}),await xe}}async function ve(e,t,n){try{let r=n===void 0?await ye(t):n;e.platformAgentId=await wr(e.manifest.manifest,e.platformAgentId,String(e.runnerPlatform),t,r,e.manifest.installationStorePath,e.manifest.repoKey)}catch(r){let o=r instanceof Error?r.message:String(r);h(`WARN: derivePlatformAgentId failed open: ${o}`)}}async function Jl(e){let t=Date.now(),{gitRoot:n}=e.manifest,r=_e({sessionId:e.sessionId,hostname:he()}),o=String(e.runnerPlatform),s=st(e),a=Wr(e.hookInput,s),i=ye(n),[c,l,u,d,f,p]=await Promise.allSettled([i,gt(),Ut(r),_t(),Nt(e.manifest.manifest,n,o),i.catch(()=>null).then(L=>Fo(o,n,void 0,{installationStorePath:e.manifest.installationStorePath,gitRoot:n,launchCwd:a,inGitRepo:e.manifest.inGitRepo,remote:L?.remote??null}))]),g=G(c,null,"gitSnapshot"),E=G(l,"","detectVirt"),_=G(u,null,"probeCloud"),C=G(d,{},"hostEnv"),M=G(f,[],"mcpDeclared"),B=G(p,Wl(o),"selfConfig"),O=B.config;await ve(e,n,g);let T=m(e.hookInput,"model");T&&(O.model=T);let D={identity:{host:he(),context:r,virt:E||null,cloud:_,git:g},host_env:C,env_vars:Mt(),mcp:{declared:M},self_config:O,run_meta:{trigger:e.hookSource||"startup"},hook_input:Ie(e.hookInput,e.manifest.manifest,{...s,launchCwd:a})};await ge("session_start",D,ke(e),me,e.manifest.collectorUrl,t)&&(B.commit(),ae.add(e.manifest.installationId))}async function Yl(e){let t=Date.now(),{gitRoot:n}=e.manifest;await ve(e,n);let r=zl(m(e.hookInput,"status"),m(e.hookInput,"stop_reason"),m(e.hookInput,"reason"),wt(m(e.hookInput,"error"))),o=e.runnerPlatform==="claude"?await Jo(m(e.hookInput,"transcript_path")):null,s=Ie(e.hookInput,e.manifest.manifest,st(e));o&&(s.model=o),await ge("session_end",{status:r,...o?{model:o}:{},hook_input:s},ke(e),me,e.manifest.collectorUrl,t)}async function Xl(e){let t=Date.now(),n=fr(e.hookInput);if(n.length===0)return;await Xo(e);let{gitRoot:r}=e.manifest;await ve(e,r);let o=Ie(e.hookInput,e.manifest.manifest,st(e)),s=ke(e),a=Me(e.hookInput.tool_input),i=r.replaceAll("\\","/").replace(/\/$/,""),c=a?.replaceAll("\\","/"),l=c===void 0?null:c.startsWith(`${i}/`)?c.slice(i.length+1):c.startsWith("/")?null:c,u=Yo().replaceAll("\\","/").replace(/\/$/,""),d=c?.startsWith(`${u}/`)===!0?c.slice(u.length+1):null;await Promise.all(n.map(f=>{let p;if((l!==null||d!==null)&&Ot(l??d??"")?.toLowerCase()===f.toLowerCase()){let g=l??d,E=g===null?null:(0,b.nativeKeyForSkillPath)(g);if(E!==null)try{let _=l!==null?e.platformAgentId:(0,b.installationRootExternalKey)(e.manifest.installationId,(0,b.userConfigRootFromPath)(g));_&&(p=(0,b.buildComponentReference)({installationRootExternalKey:_,installableKind:b.ComponentKind.SKILL,sourcePath:g,nativeKey:E}))}catch{p=void 0}}return ge("tool_invoked",{tool_name:"Skill",skill_name:f,...p===void 0?{}:{component_reference:p},success:null,duration_ms:null,hook_input:o},s,me,e.manifest.collectorUrl,t)}))}async function Zl(e){let t=Date.now();await Xo(e);let{gitRoot:n}=e.manifest;await ve(e,n);let{toolName:r,skillName:o}=Sr(e.hookInput,e.runnerEvent),s=go(Tt(e.hookInput),Yo()),a=Rr(e.hookInput),i=gr(e.runnerEvent),c=i===!1?yr(e.hookInput,e.runnerEvent):null,l=await Nt(e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform)).catch(()=>[]),{mcpServer:u,mcpTool:d}=Cr(r,l.map(g=>g.name)),f=Gl(r,u,e.platformAgentId,e.manifest.installationId,String(e.runnerPlatform),l),p=Er(e.hookInput);await ge("tool_invoked",{tool_name:r,skill_name:o,success:i,duration_ms:a,...s?{executable:s}:{},...c?{failure_reason:c}:{},...u?{mcp_server:u}:{},...d?{mcp_tool:d}:{},...f?{component_reference:f}:{},...p?{subagent_type:p}:{},hook_input:Ie(e.hookInput,e.manifest.manifest,st(e))},ke(e),me,e.manifest.collectorUrl,t)}async function Zo(e){switch(e.internalEvent){case"session_start":await Jl(e);return;case"session_end":await Yl(e);return;case"skill_invoked":await Xl(e);return;case"tool_invoked":await Zl(e);return;default:return}}function qo(e){return e!=="session_start"&&e!=="session_end"&&e!=="tool_invoked"&&e!=="skill_invoked"&&e!==""}import{existsSync as _n,readFileSync as ql}from"node:fs";import{dirname as Ql,join as Qo,relative as eu}from"node:path";var es=[vn,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"];async function tu(e=process.cwd(),t){let n=I("EV_AI_HOOK_MANIFEST");if(n&&_n(n))return n;let r=t??await dt(e);for(let o of es){let s=Qo(r,o);if(_n(s))return s}for(let o of es){let s=Qo(e,o);if(_n(s))return s}}async function nu(e,t){let n=t??await dt(Ql(e)),r=eu(n,e),o=await K("git",["ls-files","--error-unmatch",r],2e3,{cwd:n});return o.ok?!0:o.code===1?!1:(h(`WARN: git ls-files failed for manifest ${e} (code=${String(o.code)}); treating as tracked`),!0)}function ru(e){let t=ql(e,"utf8");return H(t,{})}function ou(){return{schema_version:2,mcp_servers:[]}}async function ts(e=process.cwd(),t={}){let{root:n,inGitRepo:r}=await ut(e),o=await tu(e,n),s=o?ru(o):ou();delete s.installation_id;let a=o?await nu(o,n):!1;s.capture_hook_input==="full"&&o&&a&&(h(`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:i,storePath:c,repoKey:l}=await rr(n,{sessionId:t.sessionId});return{manifestPath:o??c,manifest:s,installationId:i,installationStorePath:c,repoKey:l,collectorUrl:cr(s),platformAgentId:s.platform_agent_id??"",gitRoot:n,inGitRepo:r}}async function ns(e,t,n,r){let o=t??await lt(St),s=H(o,{}),a=m(s,"session_id")||m(s,"conversation_id"),i=await ts(process.cwd(),{sessionId:a});if(!i)return;r&&(i.collectorUrl=r);let c=_r(s,i.manifest.platform,n),l=hr(e,c.runnerEvent);if(!l){h(`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:i,platformAgentId:i.platformAgentId};if(qo(l)){h(`WARN: unsupported internal event '${l}'`);return}await Zo(u)}function su(e,t){if(I("EV_AI_HOOK_SYNC")==="1")return!0;let n=De(e),r=H(t,{}),o=n.event??(m(r,"hook_event_name")||m(r,"event")),s=Ee(r,o,void 0,n.runner);return He(o,s)}async function rs(e=process.argv.slice(2)){if(e[0]===gn){try{await zo(ct)}catch{}return 0}if(e[0]===ot){try{let t=De(e.slice(1)),n=await ct(),r=H(n,{}),o=t.event??(m(r,"hook_event_name")||m(r,"event"));if(ft()||vt(t.runner,r,o))return 0;await ns(t.event,n,t.runner,kt(t))}catch(t){let n=t instanceof Error?t.message:String(t);h(`WARN: detached work failed open: ${n}`)}return 0}try{let t=await lt(St),n=De(e),r=kt(n),o=H(t,{}),s=n.event??(m(o,"hook_event_name")||m(o,"event"));if(ft()||vt(n.runner,o,s)||!vr(o,s,n.runner))return 0;su(e,t)?await ns(n.event,t,n.runner,r):await Vo(t,e)}catch(t){let n=t instanceof Error?t.message:String(t);h(`WARN: hook failed open: ${n}`)}finally{An()}return 0}rs().then(e=>{process.exit(e)}).catch(e=>{let t=e instanceof Error?e.message:String(e);process.stderr.write(`[ev-ai-agent-hook] ${t}
20
+ `)){let A=/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(_);A?.[1]&&l.add(A[1])}for(let _ of $e(e,"env_vars"))l.add(_);let f=bu(e,"env_http_headers");for(let[,_]of f)_.length>0&&l.add(_);let p=Pn(e,"bearer_token_env_var");p&&(l.add(p),n.bearer_token_env_var=p),l.size>0&&(n.env_var_names=[...l].sort()),f.length>0&&(n.env_http_header_names=[...new Set(f.map(([_])=>_))].sort()),(/^\s*(?:http_|env_http_)?headers\s*=/m.test(e)||/(?:^|\n)\[[^\]]*headers\]\s*(?:\n|$)/.test(e))&&(n.headers_present=!0);let g=Pn(e,"auth");g&&(n.auth=g);let S=Pn(e,"default_tools_approval_mode");return S&&(n.default_tools_approval_mode=S),Mu(n,e),n}var Du=300,Hu=256;function As(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 Ct(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 ks(e,t){return e.length<=t?e:`${e.slice(0,t-1)}\u2026`}function Fu(e){return ks(e,Du)}function Os(e,t){let n=As(e.trim(),t),r=Ct(n);if(r.length===0)return"";let[o,...s]=r,i=he(o),c=Rt(s);return Fu([i,...c].join(" "))}function xs(e,t){if(typeof e!="string")return null;let n=As(e.trim(),t),r=Ct(n)[0];if(!r)return null;let o=he(r);return o.length===0?null:ks(o,Hu)}function ju(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 Ku(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 $u(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 c of i){if(!c||typeof c!="object"||e.truncated)continue;let a=c;for(let l of Ku(a)){if(e.truncated)return;let u=l.command??l.bash??l.prompt??l.powershell??a.powershell??"",d=ju({type:l.type??a.type,command:l.command??a.command,bash:l.bash??a.bash,powershell:l.powershell??a.powershell,prompt:l.prompt??a.prompt}),f=typeof a.matcher=="string"?a.matcher:"",p=P(u),g=f?`${s}:${f}:${d}:${p}`:`${s}:${d}:${p}`,S=`${s}|${f}|${d}|${u}|attrs2`;e.push({kind:"HOOK",name:g,path:o,content_hash:P(S),origin:r,enabled:!0,trigger:"EVENT",attributes:{event:s,...f?{matcher:f}:{},action_kind:d,action_hash:p,...d!=="prompt"&&u.trim()?{command:Os(u,e.home)}:{}}})}}}function ke(e,t,n){if(!e.claimFile(t))return;let r=e.readJson(t,{});!r?.hooks||typeof r.hooks!="object"||$u(e,t,r.hooks,n)}import{existsSync as rd,readFileSync as od}from"node:fs";import{createHash as Bu}from"node:crypto";import{join as Be}from"node:path";var It=128,Gu=/^(?:@[A-Za-z0-9~-][A-Za-z0-9._~-]*\/)?[A-Za-z0-9~-][A-Za-z0-9._~-]*$/,zu=new Set(["-p","--package"]),Wu=new Set(["-c","--call"]),Ju=new Set(["--registry","--userconfig","--globalconfig","--prefix","--cache","--node-options","--workspace","-w","--loglevel"]),Vu=new Set(["-y","--yes","-n","--no","-q","-s","--quiet","--silent","--offline","--prefer-offline","--prefer-online","--ignore-existing","--ignore-scripts","--legacy-peer-deps","--foreground-scripts"]),Yu=/^--no-/;function Xu(e){return Vu.has(e)||Yu.test(e)}function Zu(e){let n=(e.replace(/\\/g,"/").split("/").pop()??"").replace(/\.(cmd|exe|bat|ps1)$/i,"").toLowerCase();return n==="npx"?"npx":n==="npm"?"npm":null}function bn(e){if(e.length===0||e.length>It)return null;let t=e.lastIndexOf("@"),n=t>0?e.slice(0,t):e;return Gu.test(n)?n:null}function qu(e,t){let n=Zu(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 c=r[i]??"";if(c==="--"){s=r[i+1]??null;break}if(!c.startsWith("-")){s=c;break}let a=c.indexOf("="),l=a===-1?c:c.slice(0,a);if(Wu.has(l))return[];if(zu.has(l)){let u=a===-1?r[i+1]:c.slice(a+1);u!==void 0&&u.length>0&&o.push(u),a===-1&&(i+=1);continue}if(!(a!==-1||Xu(l))){if(Ju.has(l)){i+=1;continue}return[]}}return o.length>0?o.every(i=>bn(i)!==null)?o:[]:s===null||bn(s)===null?[]:[s]}function Qu(e){let t=[...e].sort((n,r)=>n.localeCompare(r,"en")).join(`
21
+ `);return Bu("sha512").update(t).digest("hex").slice(0,16)}function ed(e){let t=process.platform==="win32"?Be(I("LOCALAPPDATA")??e,"npm-cache"):Be(e,".npm"),n=I("npm_config_cache")??I("NPM_CONFIG_CACHE");return n===void 0||n===t?[t]:[n,t]}function Ts(e){return typeof e=="string"&&e.length>0&&e.length<=It?e:null}function td(e,t,n){let r=Qu(e);for(let o of ed(n)){let s=Be(o,"_npx",r),i=N(Be(s,"node_modules",...t.split("/"),"package.json"),{}),c=Ts(i.version);if(c!==null)return c;let a=N(Be(s,"package-lock.json"),{}),l=Ts(a.packages?.[`node_modules/${t}`]?.version);if(l!==null)return l}return null}function nd(e){return e.length<=It?e:`${e.slice(0,It-1)}\u2026`}function Mn(e,t,n){if(typeof e!="string"||e.length===0)return null;let r=qu(e,t??[]),o=r[0];if(o===void 0)return null;let s=bn(o);if(s===null)return null;let i=td(r,s,n);return{package_name:s,package_spec:nd(o),...i===null?{}:{package_version:i,package_version_source:"npx_cache"}}}function Ps(e,t){if(typeof e!="string"||e.length===0)return null;let[n,...r]=Ct(e.trim());return n===void 0?null:Mn(n,r,t)}function At(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 Mn(typeof n.command=="string"?n.command:null,r,t)}function vs(e,t){let n=/^\s*command\s*=\s*(.+)$/m.exec(e);return n===null?null:Mn(Ae(n[1]??""),$e(e,"args"),t)}function sd(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 ws(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,c]of Object.entries(o)){if(e.truncated)return;let a=sd(c),l=ys(c,a);Object.assign(l,At(c,e.home)??{});let u=Rs(c);e.push({kind:"MCP_SERVER",name:i,path:s,content_hash:wn(i,l,u),origin:n,enabled:u,attributes:l})}}function bs(e,t,n){if(!rd(t)||!e.claimFile(t))return;let r;try{r=od(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 c=i[1]??i[2]??i[3];if(!c)continue;let a=r.slice(i.index+i[0].length),l=a.search(/^\[mcp_servers(?:\.(?:\w+|"[^"]+"|'[^']+'))\]\s*$/m),u=l===-1?a:a.slice(0,l),d="unknown";/^\s*url\s*=/m.test(u)?d="http":/^\s*command\s*=/m.test(u)&&(d="stdio");let f=Is(u,d);Object.assign(f,vs(u,e.home)??{});let p=Cs(u);e.push({kind:"MCP_SERVER",name:c,path:o,content_hash:wn(c,f,p),origin:n,enabled:p,attributes:f})}}import{existsSync as id,readdirSync as cd}from"node:fs";import{join as j}from"node:path";var Ms=50;function Nn(e,t,n,r){if(!id(t))return{componentCount:0,expandTruncated:!1};let o=e.components.length,{expanded:s}=e.withPluginExpandCap(Ms,()=>{_e(e,{dir:j(t,"skills"),kind:"SKILL",origin:n,enabled:r,nested:"SKILL.md"}),_e(e,{dir:j(t,"commands"),kind:"COMMAND",origin:n,enabled:r,extensions:[".md"]}),_e(e,{dir:j(t,"agents"),kind:"SUBAGENT",origin:n,enabled:r,extensions:[".md"]})});ke(e,j(t,"hooks","hooks.json"),n),ke(e,j(t,"hooks.json"),n);let i=e.components.length-o,c=s>=Ms;return{componentCount:i,expandTruncated:c}}function Ln(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 Ns(e){let t=j(e.home,".claude/plugins/installed_plugins.json"),n=e.readJson(t,{});if(!n)return;let r=n.plugins??{},s=e.readJson(j(e.home,".claude/settings.json"),{})?.enabledPlugins??{},i=e.componentPath(t);for(let[c,a]of Object.entries(r)){if(e.truncated)return;let l=Array.isArray(a)?a:[a],u=l[0]??{},d=s[c]===!0,f=c.includes("@")?c.split("@").slice(1).join("@"):"",p=typeof u.version=="string"?u.version:"",g=typeof u.scope=="string"?u.scope:"user",S=`plugin:${c}`,_=0,A=!1;for(let w of l)if(typeof w.installPath=="string"&&w.installPath.length>0){let U=Nn(e,w.installPath,S,d);_+=U.componentCount,A=A||U.expandTruncated}Ln(e,{pluginKey:c,rowPath:i,enabled:d,scope:g,version:p||void 0,marketplace:f||void 0,componentCount:_,expandTruncated:A,contentHash:P(`${c}|${p}|${g}|${d}|${_}`)})}}function ad(e){let t=e,n="";try{let r=cd(e,{withFileTypes:!0}).filter(o=>o.isDirectory()).map(o=>o.name);if(r.length===1&&r[0])t=j(e,r[0]),n=r[0];else if(r.length>1){let o=[...r].sort(),s=o[o.length-1];s&&(t=j(e,s),n=s)}}catch{}return{installPath:t,version:n}}var ld=/^\d+$/;function ud(e){let t=e.filter(n=>!ld.test(n.pluginId));return t.length>0?t:e}function Ls(e){let t=[{base:j(e.home,".cursor/plugins/local"),scope:"local"},{base:j(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 c=o.name,a=j(n,o.name),l=`plugin:${c}`,{componentCount:u,expandTruncated:d}=Nn(e,a,l,!0);Ln(e,{pluginKey:c,rowPath:e.componentPath(a),enabled:!0,scope:"local",componentCount:u,expandTruncated:d,contentHash:P(`${c}|local|${u}`)});continue}let s=o.name,i=[];for(let c of e.readEntries(j(n,s))){if(!c.isDirectory())continue;let a=j(n,s,c.name),{installPath:l,version:u}=ad(a);i.push({pluginId:c.name,installPath:l,version:u})}for(let c of ud(i)){if(e.truncated)break;let a=`${c.pluginId}@${s}`,l=`plugin:${a}`,{componentCount:u,expandTruncated:d}=Nn(e,c.installPath,l,!0);Ln(e,{pluginKey:a,rowPath:e.componentPath(c.installPath),enabled:!0,scope:"cache",version:c.version||void 0,marketplace:s,componentCount:u,expandTruncated:d,contentHash:P(`${a}|${c.version}|${u}`)})}}}function pd(e,t){let{layout:n,levelDir:r,origin:o,includeMachineWide:s}=t;for(let i of n.skillRoots)_e(e,{dir:Oe(r,i),kind:"SKILL",origin:o,enabled:!0,nested:"SKILL.md"});for(let i of n.dirs)_e(e,{dir:Oe(r,i.dir),kind:i.kind,origin:o,enabled:!0,extensions:i.extensions});for(let i of n.memory){let c=ps(i.map(a=>Oe(r,a)));c&&St(e,{absolutePath:c,kind:"MEMORY",origin:o,enabled:!0,name:dd(c)})}for(let i of Yr(n))ke(e,Oe(r,i),o);for(let i of n.mcpJson??[])ws(e,Oe(r,i),o);for(let i of n.mcpToml??[])bs(e,Oe(r,i),o);if(s){if(n.managed)for(let i of Qe(n.managed,process.platform,e.home))i.toLowerCase().endsWith(".json")&&ke(e,i,o);n.plugins==="claude"?Ns(e):n.plugins==="cursor"&&Ls(e)}}function Us(e,t){try{let n=new ht(e,{pathMode:t.pathMode,maxEntries:t.maxEntries});for(let r of t.layouts)pd(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 Un(e,t,n={}){let r={},o=n.shouldWalk;if(o===void 0||o("user","")){let a=Us(t,{layouts:Object.values(Re),levelDir:t,origin:"user",includeMachineWide:!0,pathMode:"home-relative",maxEntries:ne,scopeRef:""});a&&(r.user=a)}let s=n.inGitRepo===!0,i=null,c=n.launchCwd;if(c!==void 0){let a=Object.values(oe),l=In({launchCwd:c,gitRoot:n.gitRoot,inGitRepo:s,remote:n.remote,home:t,hasProjectSpec:u=>Zr(a,u)});i=l.parentRel;for(let u of l.anchors){let d=Sn(u.dir);if(o!==void 0&&!o(u.scope,d))continue;let f=Us(t,{layouts:a,levelDir:u.dir,origin:u.scope,includeMachineWide:!1,pathMode:"tilde",maxEntries:An,scopeRef:d});f&&(r[u.scope]=f)}r.parent||(i=null)}return{scopes:r,parentRel:i,cwdInGitRepo:s}}function Dn(e,t,n={}){let r=n.truncated===!0,o=je(e),s=new Set(e.map(u=>z(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 c=[],a=t;for(let u of e){let d=z(u.path,u.name);a[d]!==u.content_hash&&c.push(u)}let l=[];if(!r){for(let u of Object.keys(a))if(!s.has(u)){let d=Xo(u);d&&l.push(d)}}return{hash:o,count:e.length,truncated:r,full:!1,upserts:c,removed:l,unchanged:c.length===0&&l.length===0}}var Hs=2*1024*1024,fd=new Set(["HOOK","MCP_SERVER","PLUGIN"]);function Hn(e,t,n){let r=new Set(t.map(s=>z(s.path,s.name))),o=[];for(let s of e)s.text!==void 0&&(n.has(s.content_hash)||r.has(z(s.path,s.name))||o.push(s));return o}function Fn(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 Ds(e){return Buffer.byteLength(JSON.stringify(e),"utf8")}function Fs(e){if(e.text===void 0)return e;let{text:t,...n}=e;return n}function jn(e,t=Hs){let n=[],r=[];for(let u of e)fd.has(u.kind)?n.push(u):r.push(u);r.sort((u,d)=>(u.text?.length??0)-(d.text?.length??0));let o=[...n,...r],s=[],i=2,c=0,a=0,l=[];for(let u of o){let d=s.length>0?1:0,f=Ds(u)+d;if(i+f<=t){s.push(u),i+=f,u.text!==void 0&&l.push(u.content_hash);continue}if(u.text!==void 0){let p=Fs(u),g=Ds(p)+d;if(i+g<=t){s.push(p),i+=g,c+=1;continue}}a+=1}return{components:s,textDeferredCount:c,droppedCount:a,textHashesSent:l}}function Kn(e,t){return t.size===0?e:e.map(n=>n.text===void 0||!t.has(n.content_hash)?n:Fs(n))}var md=["user","cwd","repo","parent"];function $n(e){let{collected:t,cacheFor:n,nowMs:r,maxBytes:o}=e,s=[];for(let x of md){let T=t.scopes[x];if(!T)continue;let D=n(x,T.scopeRef),b=D.components,K=Dn(T.components,b,{forceFull:b===void 0,truncated:T.truncated}),q=new Set(D.textHashes),Q=Hn(T.components,K.upserts,q),M=Kn([...K.upserts,...Q],q);s.push({scope:x,walk:T,delta:K,outgoing:M,outgoingKeys:new Set(M.map(E=>z(E.path,E.name))),deliveredTextHashes:q,cachedComponents:b})}let i=s.flatMap(x=>x.outgoing),c=jn(i,o),a=new Set(c.components.map(x=>z(x.path,x.name))),l=[],u=[],d=[],f=[],p=[],g=[],S=[];for(let x of s){let{scope:T,walk:D,delta:b}=x;g.push(...D.components),l.push(T);let K=c.components.filter(E=>x.outgoingKeys.has(z(E.path,E.name))),q=[...x.outgoingKeys].some(E=>!a.has(E)),Q=b.truncated||q;Q?d.push(T):b.full&&u.push(T),f.push(...K),!b.full&&!Q&&p.push(...b.removed);let M=b.full?{}:{...x.cachedComponents??{}};if(!Q)for(let E of b.removed)delete M[z(E.path,E.name)];for(let E of K)M[z(E.path,E.name)]=E.content_hash;S.push({scope:T,scopeRef:D.scopeRef,components:M,textHashes:Fn(x.deliveredTextHashes,K.filter(E=>E.text!==void 0).map(E=>E.content_hash),D.components),collectedAtMs:r,included:K.length>0||b.removed.length>0&&!Q||b.full})}let _={user_spec_hash:je(g),user_spec_count:g.length,user_spec_truncated:d.length>0};l.length>0&&(_.user_spec_scopes=l,_.user_spec_full_scopes=u,_.user_spec_truncated_scopes=d,_.user_spec_cwd_in_git_repo=t.cwdInGitRepo),u.length>0&&u.length===l.length&&(_.user_spec_full=!0),f.length>0&&(_.user_spec=f),p.length>0&&(_.user_spec_removed=p),c.textDeferredCount>0&&(_.user_spec_text_deferred=c.textDeferredCount);let A=t.scopes.cwd;A&&(_.user_spec_cwd_scope_ref=A.scopeRef);let w=t.scopes.repo;w&&(_.user_spec_repo_scope_ref=w.scopeRef);let U=t.scopes.parent;return U&&(_.user_spec_parent_scope_ref=U.scopeRef,t.parentRel&&(_.user_spec_parent_rel=t.parentRel)),{fields:_,scopes:S}}var ze={cwd:"cwd_spec",repo:"repo_spec",parent:"parent_spec"};function kt(e){return e==="cwd"||e==="repo"||e==="parent"}function Ge(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Bn(e){return!Ge(e)||!Ge(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 js(e){return gd(e)}function Ks(e){return _d(e)}function $s(e){return hd(e)}function gd(e){if(!Ge(e))return;let t={};for(let[n,r]of Object.entries(e))typeof r=="string"&&(t[n]=r);return t}function _d(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}function Gn(e,t){if(!Ge(e))return;let n=e[t];return Bn(n)?n:void 0}function hd(e){if(!Ge(e))return{};let t={};for(let[n,r]of Object.entries(e))Bn(r)&&(t[n]=r);return t}function zn(e,t=20){let n=[];for(let[r,o]of Object.entries(e))Bn(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 Rd=200,Bs=200,Cd=["allow","deny","ask"],Id=/(?<=^|[\s(,=:])(?:~|[A-Za-z]:)?[\\/][^\s,)]+/g,Jn="<path>",Ad=new RegExp(`${Jn}(?:\\s+[A-Za-z.][^\\s,)]*[\\\\/][^\\s,)]*)+`,"g");function kd(e){let t=e.replace(Id,Jn).replace(Ad,Jn);return t.length>Bs?`${t.slice(0,Bs)}...`:t}function xt(e){let t=N(e,{}),n=[];for(let r of Cd)for(let o of t.permissions?.[r]??[])typeof o=="string"&&o.length>0&&n.push({key:kd(o),mode:r});return{model:t.model??"",permissionKeys:n}}function Od(e){let{serverManaged:t,fileBased:n}=en(process.platform,e),r=xt(t);if(r.model||r.permissionKeys.length>0)return r;let o="",s=[];for(let i of n){let c=xt(i);c.model&&(o=c.model),s.push(...c.permissionKeys)}return{model:o,permissionKeys:s}}function xd(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 Td=10,Pd=840*60*1e3,vd="self-config-cache.json",zs=2;function Vn(){return I("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off"}function wd(){return I("EV_AI_HOOK_CWD_SPEC")?.toLowerCase()==="off"}function bd(e,t=Date.now()){return e===void 0||!Number.isFinite(e)?!0:t-e>=Pd}var Md={claude:["claude"],cursor:["agent","cursor-agent"],codex:["codex"]};async function Nd(e,t=v){let n=Md[e];if(!n||n.length===0)return null;let r=async o=>{let s=n[o];if(s===void 0)return null;let c=((await t(s,["--version"],2e3)).split(`
22
+ `)[0]??"").trim();return c||r(o+1)};return r(0)}function Ld(e=Gs()){return xe(e,".ev-ai","agent-hook",vd)}function Ud(e){let n=[...e].sort((r,o)=>r.name.localeCompare(o.name)).map(r=>`${r.name}:${r.size}`).join(`
23
+ `);return P(n)}function Ot(e,t,n=!1){let r=Ud(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 Wn(e,t,n=[]){let r=0,o=!1,s=new Set;for(let i of[...t.map(c=>xe(e,c)),...n]){let c=yd(i);if(s.has(c))continue;s.add(c);let a=Kt(i);a.present&&(o=!0,r+=a.size)}return o?{present:!0,size:r}:{present:!1,size:0}}function Dd(e){return Sd(e)?L(Ed(e,"utf8"),{}):{}}function Hd(e,t){try{te(e,`${JSON.stringify(t)}
24
+ `)}catch(n){let r=n instanceof Error?n.message:String(n);h(`WARN: self-config cache write failed open: ${r}`)}}function Fd(e,t,n){if(t==="user")return e.user_spec_collected_at_ms;if(kt(t))return Gn(e[ze[t]],n)?.collected_at_ms}function jd(e,t,n){if(t==="user")return{components:js(e.user_spec_components),textHashes:Ks(e.user_spec_text_hashes)};if(!kt(t))return{components:void 0,textHashes:[]};let r=Gn(e[ze[t]],n);return r?{components:r.components,textHashes:r.text_hashes}:{components:void 0,textHashes:[]}}function Kd(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=zs,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(!kt(s.scope))continue;let i=ze[s.scope],c=$s(o[i]),a=c[s.scopeRef];c[s.scopeRef]={components:s.included?s.components:a?.components??{},text_hashes:s.textHashes,collected_at_ms:s.collectedAtMs},o[i]=zn(c)}}return o}async function Ws(e,t=process.cwd(),n=Gs(),r={}){let o=e==="claude",s=r.gitRoot??t,i=await Nd(e),c="",a=[];if(o){let M=Od(n),E=xt(xe(n,".claude/settings.json")),H=xt(xe(t,".claude/settings.local.json"));c=M.model||H.model||E.model,a=xd([...M.permissionKeys,...E.permissionKeys,...H.permissionKeys]).slice(0,Rd)}let l={present:!1,size:0},u=M=>{let E=[],H=!1;for(let W of M){let ee=ar(xe(n,W));if(E=E.concat(ee.entries),H=H||ee.truncated,E.length>=ne){E=E.slice(0,ne),H=!0;break}}return{entries:E,truncated:H}},d=Ld(n),f=Dd(d),p=f[e]??{},g=(p.send_count??0)+1,S=g>0&&g%Td===0,_=M=>S?void 0:p[M],A=u(ie.skills),w=u(ie.subagents),U=u(ie.commands),x=u(ie.rules),T={skills:Ot(A.entries,_("skills"),A.truncated),subagents:Ot(w.entries,_("subagents"),w.truncated),commands:Ot(U.entries,_("commands"),U.truncated),rules:Ot(x.entries,_("rules"),x.truncated)},D={runner_platform:e,config_scope:"user",cli_version:i,claude_version:o?i:null,model:o&&c||null,permission_keys:a,user_scope:{skills:T.skills,subagents:T.subagents,commands:T.commands,rules:T.rules,memory:Wn(n,ie.memory),settings:Wn(n,ie.settings,qr(n)),mcp:Wn(n,ie.mcp)},local_settings:o?Kt(xe(t,".claude/settings.local.json")):l},b=null,K=()=>{},q=r.nowMs??Date.now();if(!Vn()){let M=p.user_spec_layout_version!==zs,E=Un(e,n,{launchCwd:wd()?void 0:r.launchCwd,gitRoot:s,inGitRepo:r.inGitRepo,remote:r.remote,shouldWalk:(H,W)=>M||bd(Fd(p,H,W),q)});if(Object.keys(E.scopes).length>0){let H=$n({collected:E,cacheFor:(W,ee)=>M?{components:void 0,textHashes:[]}:jd(p,W,ee),nowMs:q});if(Object.assign(D,H.fields),b={hash:H.fields.user_spec_hash,home:H.scopes.find(W=>W.scope==="user")??null,project:H.scopes.filter(W=>W.scope!=="user")},E.scopes.user){let W=p.user_spec_collected_at_ms!==void 0,ee=await ft({gitRoot:s,installationStorePath:r.installationStorePath,runnerPlatform:e,home:n,forceResend:W});ee.operator&&(D.operator=ee.operator),K=ee.commit}}}let Q=Kd(p,T,g,b);return{config:D,commit:()=>{f[e]=Q,Hd(d,f),K()}}}function Te(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:Je(),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:Vt,host_arch:process.arch,node_version:process.version,correlation:r,payload:t}}import{existsSync as Vs}from"node:fs";import{spawn as Ys}from"node:child_process";import{basename as Bd}from"node:path";import{fileURLToPath as Gd}from"node:url";import{gzipSync as $d}from"node:zlib";function Xn(e){return I("EV_AI_HOOK_COMPRESS")==="off"?{body:e}:Buffer.byteLength(e,"utf8")<Sr?{body:e}:{body:$d(Buffer.from(e,"utf8")),contentEncoding:"gzip"}}function Tt(e){let t={"Content-Type":"application/json"};return e!==void 0&&(t["Content-Encoding"]=e),t}function Js(e){return typeof e=="string"?Buffer.byteLength(e,"utf8"):e.length}var Zn="__post",Pt="__work";function zd(e,t){if(t!=="codex")return e;let n=dt();if(!n)return e;let r=e.self_config,o=r!==null&&typeof r=="object"&&!Array.isArray(r)?r:{};return{...e,self_config:{...o,runner_platform:"codex",operator:n}}}function Wd(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 Xs(e){switch(e){case"session_start":return fr;case"session_end":return mr;case"tool_invoked":case"skill_invoked":return Wt;default:return Wt}}function Jd(e,t,n){return`${JSON.stringify({url:e,timeoutMs:t})}
25
+ ${n}`}function Zs(e,t=[],n=process.execPath,r=import.meta.url,o=Vs){if(Bd(n)===Ye)return{command:n,args:[e,...t]};let s=Gd(r);return o(s)?{command:n,args:[s,e,...t]}:{command:n,args:[e,...t]}}function Vd(e=process.execPath,t=import.meta.url,n=Vs){return Zs(Zn,[],e,t,n)}function Yd(e){let t=e.indexOf(`
26
+ `);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 qs(e,t=fetch){let n=await e(),r=Yd(n);if(!r)return;let{meta:o,body:s}=r,i=Xn(s),c=Tt(i.contentEncoding);try{await t(o.url,{method:"POST",headers:c,body:i.body,signal:AbortSignal.timeout(Number(o.timeoutMs))})}catch{}}async function Xd(e,t,n,r=fetch){let o=Xs(e),s=Xn(t),i=Tt(s.contentEncoding),c=Js(s.body);h(`POST event=${e} url=${Qt(n)} size=${c} encoding=${s.contentEncoding??"identity"} platform=${process.platform}`);let a=Date.now();try{let l=await r(n,{method:"POST",headers:i,body:s.body,signal:AbortSignal.timeout(o)});if(!l.ok&&s.contentEncoding==="gzip"&&(l.status===400||l.status===415)){try{await l.text()}catch{}h(`POST gzip rejected http=${l.status} \u2014 retrying uncompressed`),l=await r(n,{method:"POST",headers:Tt(),body:t,signal:AbortSignal.timeout(o)})}let u=Date.now()-a;if(l.ok)return h(`POST outcome=ok elapsed_ms=${u} http=${l.status}`),!0;let d=(await l.text()).slice(0,200).replace(/[\n\r]/g,"");return h(`POST outcome=fail elapsed_ms=${u} http=${l.status} body=${d}`),!1}catch(l){let u=Date.now()-a,d=l instanceof Error?l.message:String(l);return h(`POST outcome=fail elapsed_ms=${u} http=000 body=${d}`),!1}}async function Qs(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(c=>{let a=setTimeout(()=>{if(!i){h(`WARN: ${o} stdin handoff timed out \u2014 continuing fail-open`);try{s.stdin.destroy()}catch{}}c()},gr),l=()=>{i=!0,clearTimeout(a),c()};s.stdin.end(n,()=>l()),s.stdin.once("error",()=>l())}),s.unref(),s}catch(s){let i=s instanceof Error?s.message:String(s);return h(`WARN: ${o} spawn failed open: ${i}`),null}}async function Zd(e,t,n,r=Ys,o=Vd){let s=Xs(e),i=Jd(n,s,t),{command:c,args:a}=o();return Qs(c,a,i,r,"detached post")}async function ei(e,t,n=Ys,r=Zs){let{command:o,args:s}=r(Pt,t);return Qs(o,s,e,n,"detached work")}async function Pe(e,t,n,r,o,s){if(!o)return h("WARN: collector URL missing \u2014 pass --url on the hook command or set collector_url in manifest"),!1;if(!Ze(o))return h(`WARN: collector URL blocked (https required): ${Qt(o)}`),!1;let i=zd(t,n.runnerPlatform),c=r(e,i,n);s!==void 0&&(c.build_ms=Math.max(0,Date.now()-s));let a=`${JSON.stringify(c)}
27
+ `,l=I("EV_AI_HOOK_DEBUG");l==="full"?h(`DEBUG envelope=${JSON.stringify(c)}`):l==="1"&&h(`DEBUG summary=${Wd(c,Buffer.byteLength(a,"utf8"))}`);let u=process.argv.includes(Pt),d=I("EV_AI_HOOK_SYNC")==="1";return at(n.runnerEvent,n.runnerPlatform)||u||d?Xd(e,a,o):(await Zd(e,a,o),!1)}import{createReadStream as qd}from"node:fs";import{stat as Qd}from"node:fs/promises";import{basename as ep,resolve as tp}from"node:path";import{createInterface as np}from"node:readline";var rp=1024*1024;function op(e){let t=e.replace(/\\/g,"/");return t.includes("/.claude/projects/")&&ep(t).endsWith(".jsonl")}async function ti(e){if(!e||!op(e))return null;try{let t=tp(e),n=await Qd(t);if(!n.isFile())return null;let r=Math.max(0,n.size-rp),o=[],s=np({input:qd(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 c=o[i];if(c)try{let a=JSON.parse(c);if(a.type!=="assistant")continue;let l=a.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 wt(e){return{sessionId:e.sessionId,turnId:e.turnId,installationId:e.manifest.installationId,runnerPlatform:e.runnerPlatform,platformAgentId:e.platformAgentId,runnerEvent:e.runnerEvent}}function qn(e){return{gitRoot:e.manifest.gitRoot,inGitRepo:e.manifest.inGitRepo}}async function oi(e){let t=Date.now();await mp(e);let{gitRoot:n}=e.manifest;await bt(e,n);let r=qn(e);return{buildStartedAtMs:t,gitRoot:n,hookInput:gt(e.hookInput,e.manifest.manifest,r),envelopeFields:wt(e),launchCwd:Rn(e.hookInput,r),home:ip()}}function ni(e){try{return G(sp(e))}catch{return null}}function si(e){return e.startsWith("/")||/^[A-Za-z]:\//.test(e)}function ri(e,t){let n=e.replaceAll("\\","/");if(!si(n))return null;let r=G(e),o=G(t),s=ni(e)??r,i=ni(t)??o;return s.startsWith(`${i}/`)?s.slice(i.length+1):r.startsWith(`${o}/`)?r.slice(o.length+1):null}function cp(e,t,n){if(!e)return{repositorySourcePath:null,userSourcePath:null};let r=e.replaceAll("\\","/"),s=ri(e,t)??(si(r)?null:r),i=ri(e,n);return{repositorySourcePath:s,userSourcePath:i}}function vt(e,t,n,r,o,s){let{repositorySourcePath:i,userSourcePath:c}=cp(e,t,n),a=i??c,l=a===null?null:o(a),u=l!==null&&a!==null?ap({installableKind:r,sourcePath:a,nativeKey:l,inRepository:i!==null,platformAgentId:s.platformAgentId,installationId:s.manifest.installationId}):void 0;return{sourcePath:a,nativeKey:l,componentReference:u}}function ap(e){try{let t=e.inRepository?lp(e.platformAgentId,e.sourcePath):(0,C.installationRootExternalKey)(e.installationId,(0,C.userConfigRootFromPath)(e.sourcePath));return t?(0,C.buildComponentReference)({installationRootExternalKey:t,installableKind:e.installableKind,sourcePath:e.sourcePath,nativeKey:e.nativeKey}):void 0}catch{return}}function ii(e,t,n){return Pe("tool_invoked",{...n,success:null,duration_ms:null,hook_input:t.hookInput},t.envelopeFields,Te,e.manifest.collectorUrl,t.buildStartedAtMs)}var ci=new Set([...Object.values(me),".github"]);function lp(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=>ci.has(i));return s<0?null:`${r}:${o.slice(0,s+1).join("/")}`}function up(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 a=s.find(g=>g.name.toLowerCase()===t.toLowerCase()),l=a?.sourcePath??(a?.source==="claude_json_user"?".claude.json":a?.source==="cursor_mcp_user"?".cursor/mcp.json":a?.source==="codex_toml_user"||a===void 0&&o==="codex"?".codex/config.toml":void 0);if((a?.scope==="user"||a?.source==="claude_json_user"||a?.source==="cursor_mcp_user"||a?.source==="codex_toml_user"||a===void 0&&o==="codex")&&l)try{let g=(0,C.userConfigRootFromPath)(l);return(0,C.buildComponentReference)({installationRootExternalKey:(0,C.installationRootExternalKey)(r,g),installableKind:C.ComponentKind.INTERFACE,sourcePath:l,nativeKey:a?.name??t})}catch{return}if(n===null)return;let d=n.indexOf(":");if(d<=0||d===n.length-1)return;let f=n.slice(d+1),p=f.replaceAll("\\","/").split("/").at(-1);if(!(p===void 0||!ci.has(p)))try{return(0,C.buildComponentReference)({installationRootExternalKey:n,installableKind:C.ComponentKind.INTERFACE,sourcePath:f,nativeKey:t})}catch{return}}function dp(...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 h(`WARN: ${n} failed open: ${r}`),t}function pp(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 fp(e,t){return{runner_platform:e,config_scope:"user",...t?{operator:t}:{}}}var Se=new Set,We=null;async function mp(e){if(Vn())return;let t=e.manifest.installationId,n=e.manifest.installationStorePath;if(Se.has(t))return;if(!En(n)){Se.add(t);return}let r=ve({sessionId:e.sessionId,hostname:we()});if(Qo(r)){if(We){await We;return}We=(async()=>{if(Se.has(t)||!En(n)){Se.add(t);return}if(!Lr(n)){Se.add(t);return}let o=!1;try{let s=Date.now(),{gitRoot:i}=e.manifest,c=String(e.runnerPlatform),[a,l,u,d,f]=await Promise.allSettled([Ue(i),Gt(),_n(r),zt(),ft({gitRoot:i,installationStorePath:n,forceResend:!1,runnerPlatform:c})]),p=V(a,null,"gitSnapshot"),g=V(l,"","detectVirt"),S=V(u,null,"probeCloud"),_=V(d,{},"hostEnv"),A=V(f,{commit:()=>{}},"resolveOperatorForSend");await bt(e,i,p);let w={identity:{host:we(),context:r,virt:g||null,cloud:S,git:p},host_env:_,env_vars:hn(),self_config:fp(c,A.operator),run_meta:{trigger:"cloud_identity_bootstrap"}};o=!!await Pe("session_start",w,wt(e),Te,e.manifest.collectorUrl,s),o&&(A.commit(),Se.add(t))}finally{Ur(n)}})().finally(()=>{We=null}),await We}}async function bt(e,t,n){try{let r=n===void 0?await Ue(t):n;e.platformAgentId=await fo(e.manifest.manifest,e.platformAgentId,String(e.runnerPlatform),t,r,e.manifest.installationStorePath,e.manifest.repoKey)}catch(r){let o=r instanceof Error?r.message:String(r);h(`WARN: derivePlatformAgentId failed open: ${o}`)}}async function gp(e){let t=Date.now(),{gitRoot:n}=e.manifest,r=ve({sessionId:e.sessionId,hostname:we()}),o=String(e.runnerPlatform),s=qn(e),i=Rn(e.hookInput,s),c=Ue(n),[a,l,u,d,f,p]=await Promise.allSettled([c,Gt(),_n(r),zt(),dn(e.manifest.manifest,n,o),c.catch(()=>null).then(K=>Ws(o,n,void 0,{installationStorePath:e.manifest.installationStorePath,gitRoot:n,launchCwd:i,inGitRepo:e.manifest.inGitRepo,remote:K?.remote??null}))]),g=V(a,null,"gitSnapshot"),S=V(l,"","detectVirt"),_=V(u,null,"probeCloud"),A=V(d,{},"hostEnv"),w=V(f,[],"mcpDeclared"),U=V(p,pp(o),"selfConfig"),x=U.config;await bt(e,n,g);let T=m(e.hookInput,"model");T&&(x.model=T);let D={identity:{host:we(),context:r,virt:S||null,cloud:_,git:g},host_env:A,env_vars:hn(),mcp:{declared:w},self_config:x,run_meta:{trigger:e.hookSource||"startup"},hook_input:gt(e.hookInput,e.manifest.manifest,{...s,launchCwd:i})};await Pe("session_start",D,wt(e),Te,e.manifest.collectorUrl,t)&&(U.commit(),Se.add(e.manifest.installationId))}async function _p(e){let t=Date.now(),{gitRoot:n}=e.manifest;await bt(e,n);let r=dp(m(e.hookInput,"status"),m(e.hookInput,"stop_reason"),m(e.hookInput,"reason"),Fe(m(e.hookInput,"error"))),o=e.runnerPlatform==="claude"?await ti(m(e.hookInput,"transcript_path")):null,s=gt(e.hookInput,e.manifest.manifest,qn(e));o&&(s.model=o),await Pe("session_end",{status:r,...o?{model:o}:{},hook_input:s},wt(e),Te,e.manifest.collectorUrl,t)}function ai(e,t,n,r){let o=r??oo({skillId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home}),s=vt(o,t.gitRoot,t.home,C.ComponentKind.SKILL,C.nativeKeyForSkillPath,e);if(s.sourcePath!==null&&nn(s.sourcePath)?.toLowerCase()===n.toLowerCase())return s.componentReference===void 0?{}:{componentReference:s.componentReference};let i=r??So({commandId:n,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),c=vt(i,t.gitRoot,t.home,C.ComponentKind.COMMAND,C.nativeKeyForCommandPath,e);return c.nativeKey?.toLowerCase()!==n.toLowerCase()?{}:{commandName:c.nativeKey,...c.componentReference===void 0?{}:{componentReference:c.componentReference}}}function hp(e,t,n){let r=tt(e.hookInput.tool_input);return Promise.all(n.map(o=>{let s=ai(e,t,o,r);return ii(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 Sp(e,t,n){return Promise.all(n.map(r=>{let o=mo({relativePath:r,launchCwd:t.launchCwd,gitRoot:t.gitRoot,home:t.home,runnerPlatform:e.runnerPlatform}),s=vt(o,t.gitRoot,t.home,C.ComponentKind.RULE,C.nativeKeyForRulePath,e),i=s.nativeKey??_o(r);return ii(e,t,{tool_name:"Rule",rule_name:i,...s.componentReference===void 0?{}:{component_reference:s.componentReference}})}))}var Ep=[{kind:C.ComponentKind.SKILL,nativeKeyFn:C.nativeKeyForSkillPath},{kind:C.ComponentKind.RULE,nativeKeyFn:C.nativeKeyForRulePath},{kind:C.ComponentKind.COMMAND,nativeKeyFn:C.nativeKeyForCommandPath}];function yp(e,t,n){if(n.skillName===null&&n.ruleName===null&&n.commandName===null)return{};let r=on(e.hookInput);if(r===null)return n.skillName===null?{}:ai(e,t,n.skillName,null);for(let o of Ep){let s=vt(r,t.gitRoot,t.home,o.kind,o.nativeKeyFn,e);if(s.nativeKey!==null)return{...s.componentReference===void 0?{}:{componentReference:s.componentReference},...o.kind===C.ComponentKind.RULE?{ruleName:s.nativeKey}:{},...o.kind===C.ComponentKind.COMMAND?{commandName:s.nativeKey}:{}}}return{}}var Rp=/mcp/i;function Cp(e,t,n,r){let o=Rp.test(e.runnerEvent);if(!r.hasMcpIdentity&&!o)return{};let s=o?Ps(t,n):At(r.declaredConfig,n);return s===null?{}:Object.fromEntries(Object.entries(s).filter(i=>typeof i[1]=="string").map(([i,c])=>[`mcp_${i}`,c]))}async function Ip(e){let t=await oi(e),n=vo(e.hookInput,e.runnerEvent),{toolName:r,skillName:o}=n,s=rn(e.hookInput),i=xs(s,t.home),c=bo(e.hookInput),a=Oo(e.runnerEvent),l=a===!1?Mo(e.hookInput,e.runnerEvent):null,u=await dn(e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home).catch(()=>[]),d=Fe(m(e.hookInput,"mcp_server_name")),{mcpServer:f,mcpTool:p}=No(r,u.map(D=>D.name),d??""),g=up(r,f,e.platformAgentId,e.manifest.installationId,String(e.runnerPlatform),u,d),S=g===void 0?yp(e,t,n):{},_=f===null?null:Ao(f,e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform),t.home),A=Cp(e,s,t.home,{hasMcpIdentity:!!f||!!p,declaredConfig:_}),w=g??S.componentReference,U=S.ruleName??n.ruleName,x=S.commandName??n.commandName,T=wo(e.hookInput);await Pe("tool_invoked",{tool_name:r,skill_name:o,...U?{rule_name:U}:{},...x?{command_name:x}:{},success:a,duration_ms:c,...i?{executable:i}:{},...l?{failure_reason:l}:{},...f?{mcp_server:f}:{},...p?{mcp_tool:p}:{},...A,...w?{component_reference:w}:{},...T?{subagent_type:T}:{},hook_input:t.hookInput},t.envelopeFields,Te,e.manifest.collectorUrl,t.buildStartedAtMs)}async function li(e){switch(e.internalEvent){case"session_start":await gp(e);return;case"session_end":await _p(e);return;case"skill_invoked":{let t=so(e.hookInput),n=ho(e.hookInput);if(t.length===0&&n.length===0)return;let r=await oi(e);await Promise.all([t.length===0?void 0:hp(e,r,t),n.length===0?void 0:Sp(e,r,n)]);return}case"tool_invoked":await Ip(e);return;default:return}}function ui(e){return e!=="session_start"&&e!=="session_end"&&e!=="tool_invoked"&&e!=="skill_invoked"&&e!==""}import{existsSync as Qn,readFileSync as Ap}from"node:fs";import{dirname as kp,join as di,relative as Op}from"node:path";var pi=[pr,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"];async function xp(e=process.cwd(),t){let n=I("EV_AI_HOOK_MANIFEST");if(n&&Qn(n))return n;let r=t??await jt(e);for(let o of pi){let s=di(r,o);if(Qn(s))return s}for(let o of pi){let s=di(e,o);if(Qn(s))return s}}async function Tp(e,t){let n=t??await jt(kp(e)),r=Op(n,e),o=await J("git",["ls-files","--error-unmatch",r],2e3,{cwd:n});return o.ok?!0:o.code===1?!1:(h(`WARN: git ls-files failed for manifest ${e} (code=${String(o.code)}); treating as tracked`),!0)}function Pp(e){let t=Ap(e,"utf8");return L(t,{})}function vp(){return{schema_version:2,mcp_servers:[]}}async function fi(e=process.cwd(),t={}){let{root:n,inGitRepo:r}=await Ft(e),o=await xp(e,n),s=o?Pp(o):vp();delete s.installation_id;let i=o?await Tp(o,n):!1;s.capture_hook_input==="full"&&o&&i&&(h(`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:c,storePath:a,repoKey:l}=await jr(n,{sessionId:t.sessionId});return{manifestPath:o??a,manifest:s,installationId:c,installationStorePath:a,repoKey:l,collectorUrl:zr(s),platformAgentId:s.platform_agent_id??"",gitRoot:n,inGitRepo:r}}async function mi(e,t,n,r){let o=t??await Ht(Jt),s=L(o,{}),i=m(s,"session_id")||m(s,"conversation_id"),c=await fi(process.cwd(),{sessionId:i});if(!c)return;r&&(c.collectorUrl=r);let a=xo(s,c.manifest.platform,n),l=To(e,a.runnerEvent);if(!l){h(`WARN: unknown hook event '${a.runnerEvent}'; skipping telemetry`);return}let u={hookInput:s,sessionId:a.sessionId,turnId:a.turnId,runnerEvent:a.runnerEvent,runnerPlatform:a.runnerPlatform,hookSource:a.hookSource,internalEvent:l,manifest:c,platformAgentId:c.platformAgentId};if(ui(l)){h(`WARN: unsupported internal event '${l}'`);return}await li(u)}function wp(e,t){if(I("EV_AI_HOOK_SYNC")==="1")return!0;let n=ct(e),r=L(t,{}),o=n.event??(m(r,"hook_event_name")||m(r,"event")),s=He(r,o,void 0,n.runner);return at(o,s)}async function gi(e=process.argv.slice(2)){if(e[0]===Zn){try{await qs(Dt)}catch{}return 0}if(e[0]===Pt){try{let t=ct(e.slice(1)),n=await Dt(),r=L(n,{}),o=t.event??(m(r,"hook_event_name")||m(r,"event"));if($t()||mn(t.runner,r,o))return 0;await mi(t.event,n,t.runner,fn(t))}catch(t){let n=t instanceof Error?t.message:String(t);h(`WARN: detached work failed open: ${n}`)}return 0}try{let t=await Ht(Jt),n=ct(e),r=fn(n),o=L(t,{}),s=n.event??(m(o,"hook_event_name")||m(o,"event"));if($t()||mn(n.runner,o,s)||!Ko(o,s,n.runner))return 0;wp(e,t)?await mi(n.event,t,n.runner,r):await ei(t,e)}catch(t){let n=t instanceof Error?t.message:String(t);h(`WARN: hook failed open: ${n}`)}finally{cr()}return 0}gi().then(e=>{process.exit(e)}).catch(e=>{let t=e instanceof Error?e.message:String(e);process.stderr.write(`[ev-ai-agent-hook] ${t}
27
28
  `),process.exit(1)});