@ev-ai/agent-hook 1.0.9 → 1.0.10

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,27 @@
1
1
  import { createRequire as __createRequire } from 'node:module';
2
2
  const require = __createRequire(import.meta.url);
3
3
 
4
- var mo=Object.create;var Yt=Object.defineProperty;var go=Object.getOwnPropertyDescriptor;var _o=Object.getOwnPropertyNames;var ho=Object.getPrototypeOf,Eo=Object.prototype.hasOwnProperty;var Xt=(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 So=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Ro=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of _o(t))!Eo.call(e,o)&&o!==n&&Yt(e,o,{get:()=>t[o],enumerable:!(r=go(t,o))||r.enumerable});return e};var Io=(e,t,n)=>(n=e!=null?mo(ho(e)):{},Ro(t||!e||!e.__esModule?Yt(n,"default",{value:e,enumerable:!0}):n,e));var lr=So(L=>{"use strict";Object.defineProperty(L,"__esModule",{value:!0});L.ComponentKind=void 0;L.userConfigRootFromPath=fi;L.installationRootExternalKey=pi;L.normalizeRepositoryRelativePath=ar;L.nativeKeyForSkillPath=mi;L.serializeComponentIdentity=cr;L.buildComponentReference=_i;L.validateComponentReference=hi;var si=Xt("node:crypto"),ii=Xt("node:path"),ai="cmp1_",ci=/^cmp1_[A-Za-z0-9_-]{43}$/,li=["/skills/","/skills-cursor/"],ui=[".cursor",".claude",".codex"],di={".claude.json":".claude",".agents":".codex"};L.ComponentKind={SKILL:"SKILL",INTERFACE:"INTERFACE"};function fi(e){let t=e.replaceAll("\\","/").split("/").filter(Boolean),n=t.find(o=>ui.includes(o));return n||(t.map(o=>di[o]).find(o=>o!==void 0)??"unknown")}function pi(e,t){return`runtime-install:${e}/${t}`}function we(e,t){if(e.length===0)throw new Error(`${t} is required`);return e}function ar(e){let t=e.replaceAll("\\","/");if(t.startsWith("/")||/^[A-Za-z]:\//.test(t))throw new Error("sourcePath must be repository-relative");let n=ii.posix.normalize(t).replace(/^\.\//,"");if(n==="."||n===".."||n.startsWith("../"))throw new Error("sourcePath must be repository-relative");return we(n,"sourcePath")}function mi(e){let t=e.replaceAll("\\","/");for(let n of li){let r=t.split(n)[1]?.split("/")[0];if(r&&r.length>0)return r}return null}function gi(e){return`${Buffer.byteLength(e,"utf8")}:${e}`}function cr(e){let t=[we(e.installationRootExternalKey,"installationRootExternalKey"),we(e.installableKind,"installableKind"),ar(e.sourcePath),we(e.nativeKey,"nativeKey")];return Buffer.from(`1|${t.map(gi).join("|")}`,"utf8")}function _i(e){let t=(0,si.createHash)("sha256").update(cr(e)).digest("base64url");return`${ai}${t}`}function hi(e){return ci.test(e)}});import{existsSync as vo,readFileSync as wo}from"node:fs";import{hostname as rn,userInfo as bo}from"node:os";import{randomBytes as yo}from"node:crypto";import{existsSync as Je,mkdirSync as Co,readdirSync as Ao,readFileSync as To,renameSync as Zt,statSync as en,unlinkSync as qt,writeFileSync as Oo}from"node:fs";import{basename as ko,dirname as Qt,join as tn,relative as xo}from"node:path";function _(e){process.stderr.write(`[ev-ai-agent-hook] ${e}
5
- `)}function G(e,t){Co(Qt(e),{recursive:!0});let n=tn(Qt(e),`.${ko(e)}.${process.pid}.${yo(4).toString("hex")}.tmp`);try{Oo(n,t,"utf8");try{Zt(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){qt(e),Zt(n,e);return}throw r}}catch(r){try{qt(n)}catch{}throw r}}function Ie(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function nn(){process.stdout.write('{"continue":true}')}function A(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function Ye(){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 Xe(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 P(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 T(e,t,n=3e3,r={}){let o=await P(e,t,n,r);return o.ok?o.stdout:""}async function Ze(e=process.cwd()){let t=await P("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(A("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;_(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=A("CURSOR_PROJECT_DIR")??A("CLAUDE_PROJECT_DIR");if(n&&Je(n)){let r=await P("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 qe(e=process.cwd()){return(await Ze(e)).root}function b(e,t){try{return JSON.parse(e)}catch{return t}}var We=new Map;function q(e,t){let n=We.get(e);if(n!==void 0)return n;try{let r=b(To(e,"utf8"),t);return We.set(e,r),r}catch{return We.set(e,t),t}}function z(e){return typeof e=="string"?e:""}function V(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 p(e,t){let n=V(e,t);return typeof n=="string"?n:""}var H=500;function ie(e,t=2){if(!Je(e))return{entries:[],truncated:!1};let n=[],r=!1,o=(s,a)=>{if(a>t||r)return;let i;try{i=Ao(s,{withFileTypes:!0})}catch{return}for(let c of i){if(r)return;let l=tn(s,c.name);if(c.isDirectory()){o(l,a+1);continue}if(c.isFile()){try{n.push({name:xo(e,l),size:en(l).size})}catch{continue}if(n.length>=H){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function ae(e){return Je(e)?{present:!0,size:en(e).size}:{present:!1,size:0}}function Q(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}function Qe(e=process.env){return Q(y("CURSOR_SANDBOX",e))}var No=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function Uo(e){return No.some(t=>!!y(t,e))}function Po(e){if(y("KUBERNETES_SERVICE_HOST",e)||Q(y("REMOTE_CONTAINERS",e))||Q(y("DEVCONTAINER",e)))return!0;try{if(vo("/.dockerenv")||wo("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function on(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!y(t,e))}function Lo(e,t=process.platform){return on(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!y(n,e)):!1}function Mo(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function Do(e){return e==="linux"}function y(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return A(e)}function Ho(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!Fo(y("CURSOR_VERSION",n))}function Fo(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function et(e){if(Mo(e.sessionId))return!0;let t=e.hostname??rn(),n=e.osUser??sn(e.env);return Ho(t,n,e.env)}function $o(e){return Q(y("CURSOR_AGENT",e.env))?!0:et(e)}function Bo(e){return!!(process.stdin.isTTY||process.stdout.isTTY||(y("TERM",e)??y("TERM_PROGRAM",e))||(y("SSH_TTY",e)??y("SSH_CONNECTION",e))||(y("__CFBundleIdentifier",e)??y("XPC_SERVICE_NAME",e))||on(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!y(t,e))||y("SESSIONNAME",e))}function ce(e={}){let t=e.env;if(y("GITHUB_ACTIONS",t))return"github_actions";if(Q(y("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!Lo(t,n)&&$o(e)&&(Q(y("CURSOR_AGENT",t))||Do(n)))return"cursor_cloud";if(y("CODESPACES",t)||y("CODESPACE_NAME",t))return"codespaces";if(y("GITLAB_CI",t))return"gitlab_ci";if(Uo(t))return"managed";let r=y("CI",t);return r&&r!=="false"&&r!=="0"?"managed":Po(t)?"container":Bo(t)?"interactive":"unknown"}async function tt(){return await T("systemd-detect-virt",[],1e3)}function sn(e=process.env,t=bo){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 nt(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await T("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 T("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await T("uname",["-r"],1e3))}else t=await T("ver",[],1e3);let n=sn(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await T("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 le(){return rn()}var Ko="https://hooks.ev-ai.ai";function ye(e,t=Ko){let n=t.replace(/\/+$/,""),r=e.trim();return`${n}/${r}/hook`}var an=".claude/ev-ai-runtime-report.json";var Ce="ev-ai-agent-hook";var Xc=`current/${Ce}`,Zc=`.ev-ai/agent-hook/${Ce}`,cn=5e3,ln=5e3,rt=3e3;var ot=3e3,un=1500,dn=4*1024,fn=32*1024,Go=4*1024,st="1.0.9",qc=`@ev-ai/agent-hook@${st}`;var pn=["claude","cursor","codex"];import{createHash as $s}from"node:crypto";import{existsSync as Bs,mkdirSync as Ks,readdirSync as Gs,readFileSync as Qn,unlinkSync as er,writeFileSync as js}from"node:fs";import{homedir as tr}from"node:os";import{join as _t}from"node:path";import{createHash as En,randomBytes as Vo}from"node:crypto";import{existsSync as Sn,mkdirSync as it,readFileSync as Rn,unlinkSync as In,writeFileSync as yn}from"node:fs";import{homedir as at}from"node:os";import{dirname as Ae,join as ct,resolve as Wo}from"node:path";var jo=new Set(["action@github.com","noreply@github.com","noreply@anthropic.com","cursoragent@cursor.com"]),zo=new Set(["github-actions","github actions","dependabot","renovate","cursoragent","cursor agent"]);function W(e,t){let n=(e??"").trim().toLowerCase(),r=(t??"").trim().toLowerCase();if(!n&&!r)return!1;if(n.includes("[bot]")||zo.has(n)||r.includes("[bot]")||jo.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 Jo="installation.json",Yo="cloud-bootstrap.lock",Xo=6e4;function Cn(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function ue(e=at()){return ct(e,".ev-ai","agent-hook")}function Zo(e=at()){return ct(ue(e),Jo)}function An(e){return ct(Ae(e),Yo)}function Tn(){return Vo(8).toString("hex")}function ee(e){return En("sha256").update(e).digest("hex").slice(0,16)}function S(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function On(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function qo(e=process.env){let t=S(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!On(t)){_(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function kn(e,t){return e&&On(e)?e:(e&&_(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),qo(t))}function Qo(e){return/^[0-9a-f]{16}$/.test(e)}function es(e=process.env){if(S(e.GITHUB_ACTIONS)){let t=S(e.GITHUB_REPOSITORY_ID)??S(e.GITHUB_REPOSITORY),n=S(e.GITHUB_ACTOR)??S(e.GITHUB_TRIGGERING_ACTOR)??S(e.GITHUB_USER);if(t&&n)return ee(`github_actions|${t}|${n}`)}if(S(e.CODESPACES)||S(e.CODESPACE_NAME)){let t=S(e.CODESPACE_NAME);if(t)return ee(`codespaces|${t}`);let n=S(e.GITHUB_REPOSITORY_ID)??S(e.GITHUB_REPOSITORY),r=S(e.GITHUB_USER)??S(e.GITHUB_ACTOR);if(n&&r)return ee(`codespaces|${n}|${r}`)}if(S(e.GITLAB_CI)){let t=S(e.CI_PROJECT_ID)??S(e.CI_PROJECT_PATH),n=S(e.GITLAB_USER_LOGIN)??S(e.GITLAB_USER_EMAIL)??S(e.GITLAB_USER_NAME);if(t&&n)return ee(`gitlab|${t}|${n}`)}return null}var ts="cursoragent@cursor.com";function ns(e){let t=S(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===ts?null:t}function rs(e,t){return S(e.CURSOR_PROJECT_DIR)??S(e.CLAUDE_PROJECT_DIR)??t}function os(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function ss(e){let t=await T("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?os(t):e}async function is(e){let t=S(await T("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!W(null,t))return t;let n=S(await T("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!W(null,n)?n:null}function as(e,t){let n=rs(e,t);return n?ee(`cursor_cloud|${n}|${ns(e)??""}`):null}async function cs(e,t){let n=S(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await ss(n),o=await is(n);return ee(`claude_remote|${r}|${o??""}`)}function mn(e,t){let n=kn(e,t);if(n)return n;let r=es(t);return r||Tn()}async function ls(e){let n=await T("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Wo(e);return En("sha256").update(n).digest("hex").slice(0,16)}function us(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 ds(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=us(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 J(e){if(Sn(e))try{return ds(Rn(e,"utf8"))}catch{}}function lt(e){return J(e)}function xn(e,t,n){let r=J(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{G(e,`${JSON.stringify(o,null,2)}
6
- `)}catch(s){let a=s instanceof Error?s.message:String(s);_(`WARN: operator identity cache write failed open: ${a}`)}}function vn(e,t=Date.now()){if(!e)return!0;if(J(e)?.operator_identity_hash)return!1;let n=An(e);try{if(Sn(n)){let r=Number.NaN;try{r=Number(Rn(n,"utf8").trim())}catch{}let o=t-r;if(Number.isFinite(o)&&o>=0&&o<Xo)return!1;try{In(n)}catch{}}}catch{}try{return it(Ae(n),{recursive:!0}),yn(n,`${t}
7
- `,{encoding:"utf8",flag:"wx"}),!0}catch(r){if(Un(r))return!1;let o=r instanceof Error?r.message:String(r);return _(`WARN: cloud bootstrap claim failed open: ${o}`),!0}}function wn(e){if(e)try{In(An(e))}catch{}}function bn(e,t){let r=J(e)?.platform_agent_ids?.[t];return typeof r=="string"&&r.length>0?r:void 0}function Nn(e,t,n){if(!n)return;let r=J(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{G(e,`${JSON.stringify(o,null,2)}
8
- `)}catch(s){let a=s instanceof Error?s.message:String(s);_(`WARN: platform_agent_id cache write failed open: ${a}`)}}function Un(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function fs(e,t){it(Ae(e),{recursive:!0}),yn(e,`${JSON.stringify(t,null,2)}
9
- `,{encoding:"utf8",flag:"wx"})}function gn(e,t){try{return fs(e,t),t}catch(n){if(!Un(n))throw n;return J(e)}}function _n(e,t){it(Ae(e),{recursive:!0}),G(e,`${JSON.stringify(t,null,2)}
10
- `)}function hn(e,t){return{installation_id:e,...t&&t===e?{pinned:!0}:{}}}async function Pn(e,t={}){let n=t.home??at(),r=t.env??process.env,o=await ls(e),s=Zo(n),a={sessionId:t.sessionId,hostname:S(r.HOSTNAME)??void 0,osUser:S(r.USER)??S(r.LOGNAME)??S(r.USERNAME)??void 0,env:r},i=ce(a),c=kn(t.overrideId,r),l=i==="cursor_cloud"&&et(a)?as(r,e):i==="claude_remote"?await cs(r,e):null,u=J(s);if(u){let E=u;if(c&&c===u.installation_id&&u.pinned!==!0&&(E={...u,pinned:!0},_n(s,E)),!!l&&l!==E.installation_id&&!c&&E.pinned!==!0&&Qo(E.installation_id)&&l){let I={installation_id:l,...E.platform_agent_ids?{platform_agent_ids:E.platform_agent_ids}:{}};return _n(s,I),{installationId:l,storePath:s,repoKey:o}}return{installationId:E.installation_id,storePath:s,repoKey:o}}let d=c??l??mn(void 0,r),m=gn(s,hn(d,c));if(m)return{installationId:m.installation_id,storePath:s,repoKey:o};let f=c??l??mn(void 0,r),g=gn(s,hn(f===d?Tn():f,c));if(g)return{installationId:g.installation_id,storePath:s,repoKey:o};throw new Error(`Failed to create installation record at ${s}`)}var ps=new Set(["localhost","127.0.0.1","[::1]","::1"]),Ln=/^[A-Za-z0-9._~-]+$/;function Mn(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 Te(e){try{let t=new URL(e);return t.protocol==="https:"?!0:t.protocol==="http:"?ps.has(t.hostname):!1}catch{return!1}}function Dn(e){let t;try{t=new URL(e)}catch{return`invalid URL (got: ${e})`}if(!Te(e))return`must be https (or http on localhost / 127.0.0.1 / ::1) (got: ${e})`;let n=ms(e);if(!n)return`must end with /{orgToken}/hook (got: ${e})`;if(!Ln.test(n))return`org token must match ${Ln.source} (got: ${n})`;if(Mn(e))return`must not contain whitespace, control characters, or single quotes (got: ${e})`;if(Mn(t.pathname))return`pathname must not contain whitespace, control characters, or single quotes (got: ${e})`}function Hn(e){return new URL(e).toString()}function ms(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 ut(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 Fn(e){if(e.collector_url)return e.collector_url;let t=e.repo_ingest_token?.trim();return t?ye(t):""}var $n=/(?:^|\/|[\s"'=(])(?:\.cursor\/|\.claude\/|\.agents\/)skills(?:-cursor)?\/([^/]+)\/SKILL\.md/i,Bn=/(?:^|\/|[\s"'=(])\.codex\/commands\/([^/]+)\.md\b/i,gs=/(?:^|\s)\/([a-z][a-z0-9-]{1,63})\b/gi,_s=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"]),hs=new Set(["read","read_file","view"]),Es=new Set(["bash","shell","zsh"]);function Ss(e){let t=e.replace(/\\/g,"/");return $n.exec(t)?.[1]??null}function Rs(e){let t=e.replace(/\\/g,"/"),r=Bn.exec(t)?.[1];return r?r.toLowerCase():null}function dt(e){return Ss(e)??Rs(e)}function Is(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 Oe(e){if(typeof e=="string")try{let t=JSON.parse(e);return Oe(t)}catch{return null}return!e||typeof e!="object"?null:Is(e)}function ys(e){if(!e||typeof e!="object")return null;let t=e.command;return typeof t=="string"&&t.length>0?t:null}function Cs(e){let t=e.replace(/\\/g,"/"),n=$n.exec(t);if(n?.[1])return n[1];let o=Bn.exec(t)?.[1];return o?o.toLowerCase():null}function As(e){return typeof e.tool_name=="string"?e.tool_name:typeof e.tool=="string"?e.tool:""}function Kn(e){let t=As(e).toLowerCase();if(hs.has(t)){let n=Oe(e.tool_input)??z(e.file_path),r=n?dt(n):null;if(r)return r}if(Es.has(t)){let n=ys(e.tool_input)??z(e.command);return n?Cs(n):null}return null}function Ts(e){let t=new Set,n=[];for(let r of e.matchAll(gs)){let o=r[1]?.toLowerCase();!o||t.has(o)||_s.has(o)||(t.add(o),n.push(o))}return n}function Os(e){return z(e.prompt)}function Gn(e){let t=p(e,"command_name");if(t){let r=p(e,"expansion_type");if(r&&r!=="slash_command")return[];let o=t.replace(/^\//,"").toLowerCase();return o?[o]:[]}let n=Os(e);return n?Ts(n):[]}function ft(e){return e!==void 0&&pn.includes(e)}function ke(e,t){let n=e[t+1];return n&&!n.startsWith("--")?{value:n,next:t+1}:{next:t}}function xe(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=ke(e,a);t=c.value,a=c.next;continue}if(i.startsWith("--runner=")){t=i.slice(9);continue}if(i==="--url"){let c=ke(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=ke(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=ke(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:ft(t)?t:void 0,event:n,collectorUrl:r,orgToken:o,baseUrl:s}}function pt(e){let t=e.collectorUrl?.trim(),n;if(t)n=t;else{let o=e.orgToken?.trim();o&&(n=ye(o,e.baseUrl?.trim()??void 0))}if(!n)return;let r=Dn(n);if(r){_(`WARN: ignoring --url/--token collector override: ${r}`);return}return Hn(n)}function jn(e,t){if(p(e,"conversation_id"))return!0;if(t==="")return!1;let n=t[0];return n?.toLowerCase()===n}function ks(){return!!(A("CURSOR_VERSION")??A("CURSOR_PROJECT_DIR"))}function mt(e,t,n){return e!=="claude"&&e!=="codex"?!1:jn(t,n)?!0:ks()}function de(e,t,n,r){if(jn(e,t))return"cursor";if(ft(r))return r;let o=p(e,"conversation_id"),s=p(e,"turn_id"),a=p(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"),ft(n)&&(c=n),c}function ve(e,t){let n=e.toLowerCase();return n==="sessionend"||n==="stopfailure"||n==="subagentstop"?!0:n==="stop"&&t==="codex"}function xs(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 zn(e){let t=e.toLowerCase();return t==="posttooluse"?!0:t==="posttoolusefailure"||t==="permissiondenied"?!1:null}function Vn(e,t,n){let r=p(e,"session_id")||p(e,"conversation_id"),o=p(e,"prompt.id")||p(e,"prompt_id")||p(e,"generation_id")||p(e,"turn_id"),s=p(e,"hook_event_name")||p(e,"event"),a=p(e,"source"),i=de(e,s,t,n);return{sessionId:r,turnId:o,runnerEvent:s,hookSource:a,runnerPlatform:i}}var vs=["session_start","session_end","tool_invoked","skill_invoked"];function ws(e){return vs.includes(e)}function Wn(e,t){return e&&ws(e)?e:xs(t.toLowerCase())}var bs={beforeshellexecution:"Shell",aftershellexecution:"Shell",beforereadfile:"Read",afterfileedit:"Write"};function Ns(e){return/^mcp__/i.test(e)||/^MCP:/i.test(e)}function Jn(e,t=""){let n=p(e,"tool_name")||p(e,"tool")||null,r=t.toLowerCase();n?r==="beforemcpexecution"&&!Ns(n)&&(n=`MCP:${n}`):n=bs[r]??null;let o=e.tool_input,a=(o&&typeof o=="object"?z(o.skill)||z(o.skill_name):"")||p(e,"skill_name")||null,i=n&&e.tool_name!==n&&e.tool!==n?{...e,tool_name:n}:e;return a??=Kn(i),{toolName:n,skillName:a}}var Us=/^[A-Za-z][A-Za-z0-9_.:-]{0,63}$/;function Yn(e){for(let t of["subagent_type","agent_type"]){let n=p(e,t);if(n&&Us.test(n))return n}return null}function Xn(e){let t=V(e,"duration_ms");if(typeof t=="number")return t;let n=V(e,"duration");return typeof n=="number"?n:null}var Ps="error",Ls="interrupted",Ms="permission_denied",Ds=/^[A-Za-z][A-Za-z0-9_.-]{0,63}$/;function gt(e){return Ds.test(e)?e:null}function Hs(e){for(let t of["failure_type","error_type"]){let n=gt(p(e,t));if(n)return n}return null}function Zn(e,t){return V(e,"is_interrupt")===!0?Ls:t.toLowerCase()==="permissiondenied"?Ms:Hs(e)??Ps}function Fs(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 qn(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:Fs(r,t),mcpTool:r}}return{mcpServer:null,mcpTool:null}}var nr=3e4,zs="claims",Vs=!0,Ws=100,Js=new Set(["sessionstart","sessionend","stopfailure"]),Ys=["tool_name","tool","command","file_path","url"];function Xs(e=tr()){return _t(ue(e),zs)}function rr(e){let t=e.split(`
11
- `,1)[0]??"";return Number(t.trim())}function or(e){return $s("sha256").update(e).digest("hex").slice(0,32)}function Zs(e){let t=[];for(let n of Ys){let r=p(e,n).trim();r&&t.push(`${n}=${r}`)}return t.length===0?"":or(t.join("\0"))}function qs(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=Js.has(n);if(!i&&!c)return;let l=e.runnerPlatform.trim()||"unknown";return or(`${l}|${t}|${n}|${r}|${o}|${a}|${s}`)}function Qs(e){return e instanceof Error&&"code"in e&&e.code==="EEXIST"}function ei(e,t){return _t(e,t)}function ti(e,t=Date.now()){let n;try{n=Gs(e)}catch{return}let r=0;for(let o of n){if(r>=Ws)break;r+=1;let s=_t(e,o),a=Number.NaN;try{a=rr(Qn(s,"utf8"))}catch{continue}let i=t-a;if(!(!Number.isFinite(i)||i<0||i<nr))try{er(s)}catch{}}}function ni(e,t,n=Date.now()){let r=ei(t,e);try{if(Bs(r)){let o=Number.NaN;try{o=rr(Qn(r,"utf8"))}catch{}let s=n-o;if(Number.isFinite(s)&&s>=0&&s<nr)return!1;try{er(r)}catch{}}}catch{}try{Ks(t,{recursive:!0}),js(r,`${n}
12
- `,{encoding:"utf8",flag:"wx"})}catch(o){if(Qs(o))return!1;let s=o instanceof Error?o.message:String(o);return _(`WARN: event claim failed open: ${s}`),!0}return ti(t,n),!0}function ri(e,t,n){let r=p(e,"session_id")||p(e,"conversation_id"),o=p(e,"prompt.id")||p(e,"prompt_id")||p(e,"generation_id")||p(e,"turn_id"),s=p(e,"tool_use_id"),a=p(e,"subagent_id")||p(e,"agent_id"),i=de(e,t,void 0,n),c=Zs(e);return{runnerPlatform:i,sessionId:r,runnerEvent:t,turnId:o,toolUseId:s,subagentId:a,callFingerprint:c}}function sr(e,t,n,r=tr(),o=Date.now()){if(!Vs)return!0;let s=qs(ri(e,t,n));if(!s)return!0;let a=ni(s,Xs(r),o);return!a&&A("EV_AI_HOOK_DEBUG")&&_(`DEBUG: duplicate hook event suppressed (claim ${s.slice(0,8)}\u2026)`),a}import{homedir as Cc}from"node:os";var ht={claude:".claude",cursor:".cursor",codex:".codex",opencode:".opencode"};function fe(e){let n=e.replace(/^\/+|\/+$/g,"").toLowerCase().split("/").filter(Boolean);return n.length<2?"":n.join("/")}function oi(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 fe(n[1]);let r=t.match(/^ssh:\/\/[^/]+\/(.+)$/i);if(r?.[1])return fe(r[1]);t=t.replace(/^https:\/\//i,""),t=t.replace(/^http:\/\//i,""),t=t.replace(/^ssh:\/\//i,"");let o=t.match(/^[^/]+\/(.+)$/);return o?.[1]?fe(o[1]):fe(t)}async function pe(e=process.cwd()){let t=await P("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([P("git",["remote","get-url","origin"],2e3,{cwd:e}),P("git",["branch","--show-current"],2e3,{cwd:e}),P("git",["rev-parse","HEAD"],2e3,{cwd:e}),P("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 ir(e,t,n,r=process.cwd(),o,s,a){if(t)return t;let i=ht[n];if(!i)return"";let c=Cn(n,e.scope_path,a);if(s){let g=bn(s,c);if(g)return g}let l=o??await pe(r),u=l?.remote?oi(l.remote):"";if(u||(u=fe(process.env.GITHUB_REPOSITORY??"")),!u)return"";let d=e.scope_path??"",m=d?`${d}/`:"",f=`${u}:${m}${i}`;return s&&Nn(s,c,f),f}var k=Io(lr(),1);import{existsSync as Ei,readFileSync as Si}from"node:fs";import{homedir as ur}from"node:os";import{join as Ri}from"node:path";var Ii="cloud-cache.json",yi=1440*60*1e3,Ci=900*1e3;function Ai(e=ur()){return Ri(ue(e),Ii)}function Ti(e){if(!Ei(e))return;let t=b(Si(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 Oi(e,t){try{G(e,`${JSON.stringify(t)}
13
- `)}catch(n){let r=n instanceof Error?n.message:String(n);_(`WARN: cloud cache write failed open: ${r}`)}}function ki(e,t,n){if(!e||e.context!==t)return!1;let r=e.result===null?Ci:yi;return n-e.probed_at<r}async function xi(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 vi(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 wi(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 bi(e){let t=await Promise.allSettled([xi(e),vi(e),wi(e)]);for(let n of t)if(n.status==="fulfilled"&&n.value)return n.value;return null}async function Et(e,t){if(e==="interactive")return null;let n=t?.home??ur(),r=t?.timeoutMs??1e3,o=t?.nowMs??Date.now(),s=Ai(n),a=Ti(s);if(ki(a,e,o))return a.result;let i=await bi(r);return Oi(s,{context:e,probed_at:o,result:i}),i}import{existsSync as Ni}from"node:fs";import{homedir as Ui}from"node:os";import{join as be}from"node:path";function Ne(e,t,n){if(!Ni(e))return;let r=q(e,{});for(let o of Object.keys(r.mcpServers??{}))n.set(o,{name:o,...t})}async function St(e,t=process.cwd(),n="claude",r=Ui()){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"?Ne(be(r,".claude.json"),{source:"claude_json_user"},o):n==="cursor"&&Ne(be(r,".cursor/mcp.json"),{source:"cursor_mcp_user"},o),Ne(be(t,".mcp.json"),{source:"mcp_json"},o),Ne(be(t,".cursor/mcp.json"),{source:"cursor_mcp"},o),[...o.values()]}var Pi=["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"],Li=["CURSOR_PROJECT_DIR"],Mi=new Set(["key","api-key","api_key","apikey","token","sig","signature","access_token","password","pwd","secret","client_secret"]);function Di(e){try{let t=new URL(e);(t.username||t.password)&&(t.username="",t.password="");for(let[n]of t.searchParams)Mi.has(n.toLowerCase())&&t.searchParams.set(n,"[redacted]");return t.toString()}catch{return e}}function Rt(e=process.env){let t=Pi.map(r=>Object.prototype.hasOwnProperty.call(e,r)?{name:r,present:!0,value:Di(e[r]??"")}:{name:r,present:!1}),n=Li.map(r=>({name:r,present:Object.prototype.hasOwnProperty.call(e,r)&&!!e[r]}));return[...t,...n]}import{createHash as Hi}from"node:crypto";function O(e){return Hi("sha256").update(e).digest("hex").slice(0,16)}function $(e,t){return`${e}\0${t}`}function dr(e){let t=e.indexOf("\0");return t<=0?null:{path:e.slice(0,t),name:e.slice(t+1)}}function It(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 O(n)}function Fi(e,t,n="git_config",r=null){return O(`${e??""}|${t??""}|${r??""}|${n}`)}function $i(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 Bi(e,t=T){let n=await t("git",["config","--get-regexp","^user\\.(name|email)$"],2e3,{cwd:e});return $i(n)}function Ki(e=process.env){let t=h(e.GIT_AUTHOR_NAME),n=h(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=h(e.GIT_COMMITTER_NAME),o=h(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=h(e.EMAIL);return s?{git_user_name:null,git_user_email:s,platform_login:null,identity_source:"git_env"}:null}function B(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 Gi(e=process.env){let t=B(h(e.EV_AI_HOOK_OPERATOR_NAME),h(e.EV_AI_HOOK_OPERATOR_EMAIL),"configured",h(e.EV_AI_HOOK_OPERATOR_LOGIN));if(t)return t;let n=h(e.GITHUB_ACTOR)??h(e.GITHUB_TRIGGERING_ACTOR)??h(e.GITHUB_USER),r=B(n,null,"github",n);if(r)return r;let o=h(e.GITLAB_USER_LOGIN),s=B(h(e.GITLAB_USER_NAME)??o,h(e.GITLAB_USER_EMAIL),"gitlab",o);if(s)return s;let a=B(h(e.BUILD_REQUESTEDFOR),h(e.BUILD_REQUESTEDFOREMAIL),"azure_devops",h(e.BUILD_REQUESTEDFORID));if(a)return a;let i=h(e.BUILDKITE_BUILD_CREATOR_EMAIL),c=B(h(e.BUILDKITE_BUILD_CREATOR),i,"buildkite",i);if(c)return c;let l=B(h(e.BUILD_USER)??h(e.CHANGE_AUTHOR),h(e.BUILD_USER_EMAIL)??h(e.CHANGE_AUTHOR_EMAIL),"jenkins",h(e.BUILD_USER_ID));if(l)return l;let u=h(e.CIRCLE_USERNAME),d=B(u,null,"circleci",u);if(d)return d;let m=h(e.CODEBUILD_INITIATOR),f=B(m,null,"codebuild",m);if(f)return f;let g=B(h(e.DRONE_COMMIT_AUTHOR)??h(e.DRONE_COMMIT_AUTHOR_NAME),h(e.DRONE_COMMIT_AUTHOR_EMAIL),"drone",h(e.DRONE_COMMIT_AUTHOR));if(g)return g;if(pr(e.CLAUDE_CODE_REMOTE)||pr(e.CURSOR_AGENT)){let E=h(e.CURSOR_USER_EMAIL);return{git_user_name:null,git_user_email:E&&!W(null,E)?E:null,platform_login:null,identity_source:"cloud"}}return null}function fr(e){return!!((e.git_user_name??e.git_user_email)&&!W(e.git_user_name,e.git_user_email))}function h(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function pr(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}async function ji(e,t=T,n=process.env){let r=await Bi(e,t);if(fr(r))return{...r,identity_source:"git_config"};let o=Ki(n);if(o&&fr(o))return o;let s=Gi(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 Ue(e){let{gitRoot:t,installationStorePath:n,forceResend:r}=e,o=e.exec??T,s=e.env??process.env,a=await ji(t,o,s),i=Fi(a.git_user_name,a.git_user_email,a.identity_source,a.platform_login),l=(n?lt(n):void 0)?.operator_identity_hash;if(!(r||l!==void 0&&l!==i||!l))return{commit:()=>{}};let f=n;return{operator:a,commit:()=>{f&&xn(f,i,Ie())}}}function yt(e){return e?!lt(e)?.operator_identity_hash:!0}function mr(e){return!0}import{existsSync as Da,readFileSync as Ha}from"node:fs";import{homedir as Vr}from"node:os";import{join as M}from"node:path";import{basename as La,join as ne,resolve as Fr}from"node:path";import{existsSync as gr,readdirSync as zi}from"node:fs";import{basename as Vi,dirname as Wi,relative as Ji}from"node:path";var me=class{constructor(t,n=""){this.home=t;this.pathPrefix=n}components=[];truncated=!1;pluginExpandRemaining;homeRel(t){let n=Ji(this.home,t).replace(/\\/g,"/"),r=!n||n.startsWith("..")?`external/${O(Wi(t))}/${Vi(t)}`:n;return this.pathPrefix?`${this.pathPrefix}${r}`:r}get atGlobalCap(){return this.truncated||this.components.length>=H}get pluginBudgetSpent(){return this.pluginExpandRemaining!==void 0&&this.pluginExpandRemaining<=0}readEntries(t){if(!gr(t))return[];try{return zi(t,{withFileTypes:!0})}catch{return[]}}readJson(t,n){if(gr(t))return q(t,n)}push(t){return this.components.length>=H?(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 Ct,readFileSync as Yi,statSync as Xi}from"node:fs";import{basename as hr,join as ge,relative as Er}from"node:path";var At=2e4,Zi=4;function qi(e){return e.length<=At?e:`${e.slice(0,At-1)}\u2026`}function Qi(e){try{let t=Yi(e),n=t.toString("utf8");return{hash:O(t),length:t.length,text:qi(n)}}catch{return null}}var _r={HOOK:"EVENT",COMMAND:"EXPLICIT_INVOCATION",MEMORY:void 0,MCP_SERVER:void 0,PLUGIN:void 0,SKILL:"UNSPECIFIED",RULE:"UNSPECIFIED",SUBAGENT:"UNSPECIFIED"};function ea(e){return e in _r?_r[e]:"UNSPECIFIED"}function Pe(e,t){let n=Qi(t.absolutePath);if(!n)return!1;let r=t.name??hr(t.absolutePath).replace(/\.(md|mdc|toml)$/i,""),o={kind:t.kind,name:r,path:e.homeRel(t.absolutePath),text:n.text,content_hash:n.hash,content_length:n.length,origin:t.origin,enabled:t.enabled},s=ea(t.kind);return s&&(o.trigger=s),e.push(o)}function ta(e,t,n){let r=Er(e,t).replace(/\\/g,"/");return!r||r.startsWith("..")?hr(t).replace(/\.(md|mdc|toml)$/i,""):n?r.replace(/\.(md|mdc|toml)$/i,""):r}function Y(e,t){let{dir:n,kind:r,origin:o,enabled:s,nested:a,extensions:i}=t;Tt(e,{walkRoot:n,currentDir:n,depth:0,kind:r,origin:o,enabled:s,nested:a,extensions:i})}function Tt(e,t){let{walkRoot:n,currentDir:r,depth:o,kind:s,origin:a,enabled:i,nested:c,extensions:l}=t;if(!(o>Zi))for(let u of e.readEntries(r)){if(e.atGlobalCap){e.truncated=!0;return}if(e.pluginBudgetSpent)return;if(c){if(!u.isDirectory())continue;let f=ge(r,u.name,c);if(Ct(f)){let g=Er(n,ge(r,u.name)).replace(/\\/g,"/");Pe(e,{absolutePath:f,kind:s,origin:a,enabled:i,name:g||u.name});continue}Tt(e,{walkRoot:n,currentDir:ge(r,u.name),depth:o+1,kind:s,origin:a,enabled:i,nested:c,extensions:l});continue}if(u.isDirectory()){Tt(e,{walkRoot:n,currentDir:ge(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(f=>d.endsWith(f)))continue;let m=ge(r,u.name);Pe(e,{absolutePath:m,kind:s,origin:a,enabled:i,name:ta(n,m,!0)})}}function Sr(e){for(let t of e)if(Ct(t))try{if(Xi(t).size>0)return t}catch{continue}return e.find(t=>Ct(t))}var na="<omitted>",Rr=100,Ir=120,Me=[{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"}],yr=new Set(Me.map(e=>e.attr)),ra=["enabled","disabled"],oa=["serverUrl","auth","bearer_token_env_var","default_tools_approval_mode","defaultToolsApprovalMode","env_vars","env_http_headers","http_headers"],sa=new Set(["type","command","url","args","env","envVars","headers",...ra,...oa,...Me.map(e=>e.raw)]),ia=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",...yr,...[...yr].map(e=>`${e}_truncated`)]);function Cr(e,t){for(let n of t)sa.has(n)||ia.has(n)||(e[n]=na)}var aa=/^(authorization|auth|api[-_]?key|access[-_]?token|refresh[-_]?token|secret|password|passwd|token|bearer|client[-_]?secret|client[-_]?id|private[-_]?key|signing[-_]?key)$/i,ca=/(?:^|[-_])(secret|password|passwd|token|api[-_]?key|private[-_]?key|signing[-_]?key|client[-_]?secret|client[-_]?id)(?:[-_]|$)/i,la=/^(sk-|ghp_|gho_|github_pat_|xox[baprs]-|AKIA|ASIA|AIza|ya29\.)/,ua=/^bearer(?:\s+|$)/i;function De(e){return!e||typeof e!="object"||Array.isArray(e)?null:e}function Ar(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.length>0):[]}function Ot(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=De(e);return t?Object.keys(t).filter(n=>n.length>0):[]}function te(e){try{let t=new URL(e);return`${t.origin}${t.pathname}`}catch{return e}}function da(e){return la.test(e)||ua.test(e)?"<redacted>":e.includes("://")?te(e):e}function Tr(e){if(/^https?:\/\//i.test(e))return te(e);let t=e.indexOf("=");return t>0?`${e.slice(0,t+1)}${Tr(e.slice(t+1))}`:da(e)}function fa(e){let t=e.replace(/^-+/,"").split("=",1)[0]??"";return aa.test(t)||ca.test(t)}function He(e){let t=[],n=!1;for(let r of e){if(n){t.push("<redacted>"),n=!1;continue}if(fa(r)){t.push("<redacted>"),n=!r.includes("=");continue}t.push(Tr(r))}return t}function pa(e){let t=Ar(e);if(t.length===0)return;let n=[...new Set(t.map(r=>r.length>Ir?r.slice(0,Ir):r))].sort();if(n.length!==0)return n.length>Rr?{names:n.slice(0,Rr),truncated:!0}:{names:n,truncated:!1}}function ma(e){let t=De(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 Or(e,t){let n=new Set;for(let{raw:r,attr:o}of Me){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=pa(s);a&&(e[o]=a.names,a.truncated&&(e[`${o}_truncated`]=!0),n.add(o))}}function kr(e,t){let n=De(e),r={transport:t};if(!n)return r;Cr(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=te(i));let c=He(Ar(n.args));c.length>0&&(r.args=c);let l=ma(n.env_http_headers),u=[...new Set([...Ot(n.env),...Ot(n.envVars),...Ot(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 m=typeof n.bearer_token_env_var=="string"?n.bearer_token_env_var:void 0;m&&(r.bearer_token_env_var=m);let f=typeof n.default_tools_approval_mode=="string"?n.default_tools_approval_mode:typeof n.defaultToolsApprovalMode=="string"?n.defaultToolsApprovalMode:void 0;return f&&(r.default_tools_approval_mode=f),Or(r,n),r}function xr(e){let t=De(e);return t?t.enabled===!1?!1:t.disabled!==!0:!0}function vt(e,t,n=!0){let r=Object.keys(t).sort().map(o=>[o,t[o]??null]);return O(JSON.stringify({name:e,attributes:r,enabled:n}))}function Le(e){let t=e.trim();return t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'")?t.slice(1,-1):t}function wt(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 ga(e,t){return He(wt(e,t))}function xt(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(true|false)\\s*$`,"m").exec(e);if(n?.[1])return n[1]==="true"}function kt(e,t){let n=new RegExp(`^\\s*${t}\\s*=\\s*(.+)$`,"m").exec(e);if(!n?.[1])return;let r=Le(n[1]);return r.length>0?r:void 0}function _a(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],Le(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 vr(e){return xt(e,"enabled")===!1?!1:xt(e,"disabled")!==!0}function ha(e,t){let n={};for(let{raw:r,attr:o}of Me){if(o==="auto_approve"){let a=xt(t,r);if(a!==void 0){n[r]=a;continue}}let s=wt(t,r);s.length>0&&(n[r]=s)}Or(e,n)}var Ea=/^\s*([A-Za-z_][A-Za-z0-9_-]*)\s*[.=]/,Sa=/^\[[^\]]*\.([A-Za-z_][A-Za-z0-9_-]*)\]\s*$/gm;function Ra(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=Ea.exec(o);s?.[1]&&t.add(s[1])}for(let o of e.matchAll(Sa))o[1]&&t.add(o[1]);return[...t]}function wr(e,t){let n={transport:t};Cr(n,Ra(e));let r=/^\s*command\s*=\s*(.+)$/m.exec(e),o=/^\s*url\s*=\s*(.+)$/m.exec(e),s=r?Le(r[1]??""):void 0,a=o?Le(o[1]??""):void 0,i=s!==void 0&&s.length>0?s:a;i&&(n.command_or_url=te(i));let c=ga(e,"args");c.length>0&&(n.args=c);let l=new Set;for(let R of e.split(`
18
- `)){let I=/^\s*env\.([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(R);I?.[1]&&l.add(I[1])}let u=/^\s*env\s*=\s*\{([^}]*)\}/m.exec(e);if(u?.[1])for(let R of u[1].split(",")){let I=/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(R);I?.[1]&&l.add(I[1])}let d=/(?:^|\n)\[[^\]]*env\]\s*\n([\s\S]*?)(?=\n\[|$)/.exec(`
19
- ${e}`);if(d?.[1])for(let R of d[1].split(`
20
- `)){let I=/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/.exec(R);I?.[1]&&l.add(I[1])}for(let R of wt(e,"env_vars"))l.add(R);let m=_a(e,"env_http_headers");for(let[,R]of m)R.length>0&&l.add(R);let f=kt(e,"bearer_token_env_var");f&&(l.add(f),n.bearer_token_env_var=f),l.size>0&&(n.env_var_names=[...l].sort()),m.length>0&&(n.env_http_header_names=[...new Set(m.map(([R])=>R))].sort()),(/^\s*(?:http_|env_http_)?headers\s*=/m.test(e)||/(?:^|\n)\[[^\]]*headers\]\s*(?:\n|$)/.test(e))&&(n.headers_present=!0);let g=kt(e,"auth");g&&(n.auth=g);let E=kt(e,"default_tools_approval_mode");return E&&(n.default_tools_approval_mode=E),ha(n,e),n}var br=300;function Ia(e,t){if(!t)return e;let n=[...new Set([t,t.replace(/\\/g,"/")])].filter(o=>o.length>1),r=e;for(let o of n)r=r.split(o).join("~");return r}function ya(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 Ca(e){return e.length<=br?e:`${e.slice(0,br-1)}\u2026`}function Nr(e,t){let n=Ia(e.trim(),t),r=ya(n);if(r.length===0)return"";let[o,...s]=r,a=te(o),i=He(s);return Ca([a,...i].join(" "))}function Aa(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 Ta(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 Oa(e,t,n,r){let o=e.homeRel(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 Ta(c)){if(e.truncated)return;let u=l.command??l.bash??l.prompt??l.powershell??c.powershell??"",d=Aa({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}),m=typeof c.matcher=="string"?c.matcher:"",f=O(u),g=m?`${s}:${m}:${d}:${f}`:`${s}:${d}:${f}`,E=`${s}|${m}|${d}|${u}|attrs2`;e.push({kind:"HOOK",name:g,path:o,content_hash:O(E),origin:r,enabled:!0,trigger:"EVENT",attributes:{event:s,...m?{matcher:m}:{},action_kind:d,action_hash:f,...d!=="prompt"&&u.trim()?{command:Nr(u,e.home)}:{}}})}}}function _e(e,t,n){let r=e.readJson(t,{});!r?.hooks||typeof r.hooks!="object"||Oa(e,t,r.hooks,n)}var Ur={claude:{skillRoots:[".claude/skills"],dirs:[{dir:".claude/agents",kind:"SUBAGENT",extensions:[".md"]},{dir:".claude/commands",kind:"COMMAND",extensions:[".md"]}],memory:[".claude/CLAUDE.md"],hooks:[".claude/settings.json"],mcpJson:[".claude.json"],plugins:"claude"},cursor:{skillRoots:[".cursor/skills",".cursor/skills-cursor"],dirs:[{dir:".cursor/agents",kind:"SUBAGENT",extensions:[".md"]},{dir:".cursor/commands",kind:"COMMAND",extensions:[".md"]},{dir:".cursor/rules",kind:"RULE",extensions:[".mdc",".md"]}],memory:[".cursor/AGENTS.md"],hooks:[".cursor/hooks.json"],mcpJson:[".cursor/mcp.json"],plugins:"cursor"},codex:{skillRoots:[".agents/skills",".codex/skills"],dirs:[{dir:".codex/agents",kind:"SUBAGENT",extensions:[".toml",".md"]},{dir:".codex/prompts",kind:"COMMAND",extensions:[".md"]}],memory:[".codex/AGENTS.override.md",".codex/AGENTS.md"],hooks:[".codex/hooks.json"],mcpToml:[".codex/config.toml"]}};import{existsSync as ka,readFileSync as xa}from"node:fs";function va(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 Pr(e,t,n){let o=e.readJson(t,{})?.mcpServers;if(!o||typeof o!="object")return;let s=e.homeRel(t);for(let[a,i]of Object.entries(o)){if(e.truncated)return;let c=va(i),l=kr(i,c),u=xr(i);e.push({kind:"MCP_SERVER",name:a,path:s,content_hash:vt(a,l,u),origin:n,enabled:u,attributes:l})}}function Lr(e,t,n){if(!ka(t))return;let r;try{r=xa(t,"utf8")}catch{return}let o=e.homeRel(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 m=wr(u,d),f=vr(u);e.push({kind:"MCP_SERVER",name:i,path:o,content_hash:vt(i,m,f),origin:n,enabled:f,attributes:m})}}import{existsSync as wa,readdirSync as ba}from"node:fs";import{join as x}from"node:path";var Mr=50;function bt(e,t,n,r){if(!wa(t))return{componentCount:0,expandTruncated:!1};let o=e.components.length,{expanded:s}=e.withPluginExpandCap(Mr,()=>{Y(e,{dir:x(t,"skills"),kind:"SKILL",origin:n,enabled:r,nested:"SKILL.md"}),Y(e,{dir:x(t,"commands"),kind:"COMMAND",origin:n,enabled:r,extensions:[".md"]}),Y(e,{dir:x(t,"agents"),kind:"SUBAGENT",origin:n,enabled:r,extensions:[".md"]})});_e(e,x(t,"hooks","hooks.json"),n),_e(e,x(t,"hooks.json"),n);let a=e.components.length-o,i=s>=Mr;return{componentCount:a,expandTruncated:i}}function Nt(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 Dr(e){let t=x(e.home,".claude/plugins/installed_plugins.json"),n=e.readJson(t,{});if(!n)return;let r=n.plugins??{},s=e.readJson(x(e.home,".claude/settings.json"),{})?.enabledPlugins??{},a=e.homeRel(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,m=i.includes("@")?i.split("@").slice(1).join("@"):"",f=typeof u.version=="string"?u.version:"",g=typeof u.scope=="string"?u.scope:"user",E=`plugin:${i}`,R=0,I=!1;for(let N of l)if(typeof N.installPath=="string"&&N.installPath.length>0){let j=bt(e,N.installPath,E,d);R+=j.componentCount,I=I||j.expandTruncated}Nt(e,{pluginKey:i,rowPath:a,enabled:d,scope:g,version:f||void 0,marketplace:m||void 0,componentCount:R,expandTruncated:I,contentHash:O(`${i}|${f}|${g}|${d}|${R}`)})}}function Na(e){let t=e,n="";try{let r=ba(e,{withFileTypes:!0}).filter(o=>o.isDirectory()).map(o=>o.name);if(r.length===1&&r[0])t=x(e,r[0]),n=r[0];else if(r.length>1){let o=[...r].sort(),s=o[o.length-1];s&&(t=x(e,s),n=s)}}catch{}return{installPath:t,version:n}}var Ua=/^\d+$/;function Pa(e){let t=e.filter(n=>!Ua.test(n.pluginId));return t.length>0?t:e}function Hr(e){let t=[{base:x(e.home,".cursor/plugins/local"),scope:"local"},{base:x(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=x(n,o.name),l=`plugin:${i}`,{componentCount:u,expandTruncated:d}=bt(e,c,l,!0);Nt(e,{pluginKey:i,rowPath:e.homeRel(c),enabled:!0,scope:"local",componentCount:u,expandTruncated:d,contentHash:O(`${i}|local|${u}`)});continue}let s=o.name,a=[];for(let i of e.readEntries(x(n,s))){if(!i.isDirectory())continue;let c=x(n,s,i.name),{installPath:l,version:u}=Na(c);a.push({pluginId:i.name,installPath:l,version:u})}for(let i of Pa(a)){if(e.truncated)break;let c=`${i.pluginId}@${s}`,l=`plugin:${c}`,{componentCount:u,expandTruncated:d}=bt(e,i.installPath,l,!0);Nt(e,{pluginKey:c,rowPath:e.homeRel(i.installPath),enabled:!0,scope:"cache",version:i.version||void 0,marketplace:s,componentCount:u,expandTruncated:d,contentHash:O(`${c}|${i.version}|${u}`)})}}}function $r(e,t,n,r){let o=Ur[t];if(!o)return;let s=e.home;for(let i of o.skillRoots)Y(e,{dir:ne(s,i),kind:"SKILL",origin:n,enabled:!0,nested:"SKILL.md"});for(let i of o.dirs)Y(e,{dir:ne(s,i.dir),kind:i.kind,origin:n,enabled:!0,extensions:i.extensions});let a=Sr(o.memory.map(i=>ne(s,i)));a&&Pe(e,{absolutePath:a,kind:"MEMORY",origin:n,enabled:!0,name:La(a)});for(let i of o.hooks)_e(e,ne(s,i),n);for(let i of o.mcpJson??[])Pr(e,ne(s,i),n);for(let i of o.mcpToml??[])Lr(e,ne(s,i),n);r&&(o.plugins==="claude"?Dr(e):o.plugins==="cursor"&&Hr(e))}function Ut(e,t,n){let r=new me(t);if($r(r,e,"user",!0),n===void 0||Fr(n)===Fr(t))return{components:r.components,truncated:r.truncated};let s=new me(n,"cwd/");$r(s,e,"cwd",!1);let a=[...r.components,...s.components],i=r.truncated||s.truncated||a.length>H;return{components:a.slice(0,H),truncated:i}}function Pt(e,t,n={}){let r=n.truncated===!0,o=It(e),s=new Set(e.map(u=>$(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=$(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=dr(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 Kr=3e5,Ma=new Set(["HOOK","MCP_SERVER","PLUGIN"]);function Lt(e,t,n){let r=new Set(t.map(s=>$(s.path,s.name))),o=[];for(let s of e)s.text!==void 0&&(n.has(s.content_hash)||r.has($(s.path,s.name))||o.push(s));return o}function Mt(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 Br(e){return Buffer.byteLength(JSON.stringify(e),"utf8")}function Gr(e){if(e.text===void 0)return e;let{text:t,...n}=e;return n}function Dt(e,t=Kr){let n=[],r=[];for(let u of e)Ma.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,m=Br(u)+d;if(a+m<=t){s.push(u),a+=m,u.text!==void 0&&l.push(u.content_hash);continue}if(u.text!==void 0){let f=Gr(u),g=Br(f)+d;if(a+g<=t){s.push(f),a+=g,i+=1;continue}}c+=1}return{components:s,textDeferredCount:i,droppedCount:c,textHashesSent:l}}function Ht(e,t){return t.size===0?e:e.map(n=>n.text===void 0||!t.has(n.content_hash)?n:Gr(n))}var Fa={claude:{skills:".claude/skills",subagents:".claude/agents",commands:".claude/commands",memory:".claude/CLAUDE.md",settings:".claude/settings.json"},cursor:{skills:[".cursor/skills",".cursor/skills-cursor"],subagents:".cursor/agents",commands:".cursor/commands",rules:".cursor/rules",mcp:".cursor/mcp.json"},codex:{skills:[".agents/skills",".codex/skills"],subagents:".codex/agents",commands:".codex/prompts",memory:".codex/AGENTS.md",settings:".codex/config.toml"}},$a=200,jr=200,Ba=["allow","deny","ask"],Ka=/(?<=^|[\s(,=:])(?:~|[A-Za-z]:)?[\\/][^\s,)]+/g,Ft="<path>",Ga=new RegExp(`${Ft}(?:\\s+[A-Za-z.][^\\s,)]*[\\\\/][^\\s,)]*)+`,"g");function ja(e){let t=e.replace(Ka,Ft).replace(Ga,Ft);return t.length>jr?`${t.slice(0,jr)}...`:t}function zr(e){let t=q(e,{}),n=[];for(let r of Ba)for(let o of t.permissions?.[r]??[])typeof o=="string"&&o.length>0&&n.push({key:ja(o),mode:r});return{model:t.model??"",permissionKeys:n}}var za=10,Va=840*60*1e3,Wa="self-config-cache.json";function $t(){return A("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off"}function Ja(e,t=Date.now()){return e===void 0||!Number.isFinite(e)?!0:t-e>=Va}var Ya={claude:["claude"],cursor:["agent","cursor-agent"],codex:["codex"]};async function Xa(e,t=T){let n=Ya[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 Za(e=Vr()){return M(e,".ev-ai","agent-hook",Wa)}function qa(e){let n=[...e].sort((r,o)=>r.name.localeCompare(o.name)).map(r=>`${r.name}:${r.size}`).join(`
22
- `);return O(n)}function Fe(e,t,n=!1){let r=qa(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 Qa(e){return Da(e)?b(Ha(e,"utf8"),{}):{}}function ec(e,t){try{G(e,`${JSON.stringify(t)}
23
- `)}catch(n){let r=n instanceof Error?n.message:String(n);_(`WARN: self-config cache write failed open: ${r}`)}}function tc(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)}return r&&(o.user_spec_collected_at_ms=r.collectedAtMs,r.included&&(o.user_spec=r.hash,o.user_spec_components=r.componentHashes),o.user_spec_text_hashes=r.textHashes),o}async function Wr(e,t=process.cwd(),n=Vr(),r={}){let o=e==="claude",s=r.gitRoot??t,a=await Xa(e),i="",c=[];if(o){let U=zr(M(n,".claude/settings.json")),F=zr(M(t,".claude/settings.local.json"));i=F.model||U.model,c=[...U.permissionKeys,...F.permissionKeys].slice(0,$a)}let l=Fa[e]??{},u={present:!1,size:0},d=U=>{let F=Array.isArray(U)?U:U?[U]:[],C=[],K=!1;for(let je of F){let w=ie(M(n,je));if(C=C.concat(w.entries),K=K||w.truncated,C.length>=H){C=C.slice(0,H),K=!0;break}}return{entries:C,truncated:K}},m=Za(n),f=Qa(m),g=f[e]??{},E=(g.send_count??0)+1,R=E>0&&E%za===0,I=U=>R?void 0:g[U],N=d(l.skills),j=l.subagents?ie(M(n,l.subagents)):{entries:[],truncated:!1},Ge=l.commands?ie(M(n,l.commands)):{entries:[],truncated:!1},zt=l.rules?ie(M(n,l.rules)):{entries:[],truncated:!1},se={skills:Fe(N.entries,I("skills"),N.truncated),subagents:Fe(j.entries,I("subagents"),j.truncated),commands:Fe(Ge.entries,I("commands"),Ge.truncated),rules:Fe(zt.entries,I("rules"),zt.truncated)},v={runner_platform:e,config_scope:"user",cli_version:a,claude_version:o?a:null,model:o&&i||null,permission_keys:c,user_scope:{skills:se.skills,subagents:se.subagents,commands:se.commands,rules:se.rules,memory:l.memory?ae(M(n,l.memory)):u,settings:l.settings?ae(M(n,l.settings)):u,mcp:l.mcp?ae(M(n,l.mcp)):u},local_settings:o?ae(M(t,".claude/settings.local.json")):u},Vt=null,Wt=()=>{},Jt=r.nowMs??Date.now();if(!$t()&&Ja(g.user_spec_collected_at_ms,Jt)){let U=g.user_spec_collected_at_ms!==void 0,F=Ut(e,n),C=Pt(F.components,g.user_spec_components,{forceFull:!g.user_spec_components,truncated:F.truncated}),K=new Set(g.user_spec_text_hashes??[]),je=Lt(F.components,C.upserts,K),w=Dt(Ht([...C.upserts,...je],K));v.user_spec_hash=C.hash,v.user_spec_count=C.count,v.user_spec_truncated=C.truncated||w.droppedCount>0,(w.components.length>0||C.removed.length>0||C.full)&&(C.full&&(v.user_spec_full=!0),w.components.length>0&&(v.user_spec=w.components),C.removed.length>0&&!v.user_spec_truncated&&(v.user_spec_removed=C.removed),w.textDeferredCount>0&&(v.user_spec_text_deferred=w.textDeferredCount));let ze=C.full?{}:{...g.user_spec_components??{}};if(!v.user_spec_truncated)for(let Z of C.removed)delete ze[$(Z.path,Z.name)];for(let Z of w.components)ze[$(Z.path,Z.name)]=Z.content_hash;Vt={hash:C.hash,componentHashes:ze,textHashes:Mt(K,w.textHashesSent,F.components),included:w.components.length>0||C.removed.length>0&&!v.user_spec_truncated||C.full,collectedAtMs:Jt};let Ve=await Ue({gitRoot:s,installationStorePath:r.installationStorePath,forceResend:U});Ve.operator&&(v.operator=Ve.operator),Wt=Ve.commit}let po=tc(g,se,E,Vt);return{config:v,commit:()=>{f[e]=po,ec(m,f),Wt()}}}function re(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:Ie(),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:st,host_arch:process.arch,node_version:process.version,correlation:r,payload:t}}import{existsSync as Jr}from"node:fs";import{spawn as Yr}from"node:child_process";import{basename as nc}from"node:path";import{fileURLToPath as rc}from"node:url";var Kt="__post",$e="__work";function oc(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 Xr(e){switch(e){case"session_start":return cn;case"session_end":return ln;case"tool_invoked":case"skill_invoked":return rt;default:return rt}}function sc(e,t,n){return`${JSON.stringify({url:e,timeoutMs:t})}
24
- ${n}`}function Zr(e,t=[],n=process.execPath,r=import.meta.url,o=Jr){if(nc(n)===Ce)return{command:n,args:[e,...t]};let s=rc(r);return o(s)?{command:n,args:[s,e,...t]}:{command:n,args:[e,...t]}}function ic(e=process.execPath,t=import.meta.url,n=Jr){return Zr(Kt,[],e,t,n)}function ac(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 qr(e,t=fetch){let n=await e(),r=ac(n);if(!r)return;let{meta:o,body:s}=r,a={"Content-Type":"application/json"};try{await t(o.url,{method:"POST",headers:a,body:s,signal:AbortSignal.timeout(Number(o.timeoutMs))})}catch{}}async function cc(e,t,n){let r=Xr(e);_(`POST event=${e} url=${ut(n)} size=${t.length} platform=${process.platform}`);let o={"Content-Type":"application/json"},s=Date.now();try{let a=await fetch(n,{method:"POST",headers:o,body:t,signal:AbortSignal.timeout(r)}),i=Date.now()-s;if(a.ok)return _(`POST outcome=ok elapsed_ms=${i} http=${a.status}`),!0;let c=(await a.text()).slice(0,200).replace(/[\n\r]/g,"");return _(`POST outcome=fail elapsed_ms=${i} http=${a.status} body=${c}`),!1}catch(a){let i=Date.now()-s,c=a instanceof Error?a.message:String(a);return _(`POST outcome=fail elapsed_ms=${i} http=000 body=${c}`),!1}}async function Qr(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){_(`WARN: ${o} stdin handoff timed out \u2014 continuing fail-open`);try{s.stdin.destroy()}catch{}}i()},un),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 _(`WARN: ${o} spawn failed open: ${a}`),null}}async function lc(e,t,n,r=Yr,o=ic){let s=Xr(e),a=sc(n,s,t),{command:i,args:c}=o();return Qr(i,c,a,r,"detached post")}async function eo(e,t,n=Yr,r=Zr){let{command:o,args:s}=r($e,t);return Qr(o,s,e,n,"detached work")}async function oe(e,t,n,r,o,s){if(!o)return _("WARN: collector URL missing \u2014 pass --url on the hook command or set collector_url in manifest"),!1;if(!Te(o))return _(`WARN: collector URL blocked (https required): ${ut(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=A("EV_AI_HOOK_DEBUG");c==="full"?_(`DEBUG envelope=${JSON.stringify(a)}`):c==="1"&&_(`DEBUG summary=${oc(a,Buffer.byteLength(i,"utf8"))}`);let l=process.argv.includes($e),u=A("EV_AI_HOOK_SYNC")==="1";return ve(n.runnerEvent,n.runnerPlatform)||l||u?cc(e,i,o):(await lc(e,i,o),!1)}import{relative as uc,resolve as Be,sep as Gt}from"node:path";var dc=["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 fc(e){return e.capture_hook_input==="full"?!0:e.capture_hook_input==="allowlist"?!1:A("EV_AI_HOOK_CAPTURE_FULL_INPUT")==="1"}function pc(e){let t={};for(let n of dc){let r=V(e,n);r!==void 0&&(t[n]=r)}return t}function mc(e,t){if(typeof e!="string"||e.length===0||!t)return null;let n=Be(e),r=Be(t),o=uc(r,n);return!o||o==="."?".":o.startsWith(`..${Gt}`)||o===".."||Be(r,o)!==n?null:o.split(Gt).join("/")}function gc(e){return typeof e!="string"||e.length===0?null:Be(e).split(Gt).join("/")}function to(e,t,n){let r=gc(t.cwd);r!==null&&(e.cwd=r);let o=n.inGitRepo===!0&&n.gitRoot!==void 0?mc(t.cwd,n.gitRoot):null;o!==null&&(e.cwd_relative=o)}function no(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 he(e,t,n={}){if(fc(t)){let o={...e};return delete o.cwd,delete o.transcript_path,to(o,e,n),no(o,fn)}let r=pc(e);return to(r,e,n),no(r,dn)}import{createReadStream as _c}from"node:fs";import{stat as hc}from"node:fs/promises";import{basename as Ec,resolve as Sc}from"node:path";import{createInterface as Rc}from"node:readline";var Ic=1024*1024;function yc(e){let t=e.replace(/\\/g,"/");return t.includes("/.claude/projects/")&&Ec(t).endsWith(".jsonl")}async function ro(e){if(!e||!yc(e))return null;try{let t=Sc(e),n=await hc(t);if(!n.isFile())return null;let r=Math.max(0,n.size-Ic),o=[],s=Rc({input:_c(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 Se(e){return{sessionId:e.sessionId,turnId:e.turnId,installationId:e.manifest.installationId,runnerPlatform:e.runnerPlatform,platformAgentId:e.platformAgentId,runnerEvent:e.runnerEvent}}function Ke(e){return{gitRoot:e.manifest.gitRoot,inGitRepo:e.manifest.inGitRepo}}var Ac=new Set([...Object.values(ht),".github"]);function Tc(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(f=>f.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 f=(0,k.userConfigRootFromPath)(c);return(0,k.buildComponentReference)({installationRootExternalKey:(0,k.installationRootExternalKey)(r,f),installableKind:k.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),m=d.replaceAll("\\","/").split("/").at(-1);if(!(m===void 0||!Ac.has(m)))try{return(0,k.buildComponentReference)({installationRootExternalKey:n,installableKind:k.ComponentKind.INTERFACE,sourcePath:d,nativeKey:t})}catch{return}}function Oc(...e){for(let t of e)if(t)return t;return null}function D(e,t,n){if(e.status==="fulfilled")return e.value;let r=e.reason instanceof Error?e.reason.message:String(e.reason);return _(`WARN: ${n} failed open: ${r}`),t}function kc(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 xc(e,t){return{runner_platform:e,config_scope:"user",...t?{operator:t}:{}}}var X=new Set,Ee=null;async function oo(e){if($t())return;let t=e.manifest.installationId,n=e.manifest.installationStorePath;if(X.has(t))return;if(!yt(n)){X.add(t);return}let r=ce({sessionId:e.sessionId,hostname:le()});if(mr(r)){if(Ee){await Ee;return}Ee=(async()=>{if(X.has(t)||!yt(n)){X.add(t);return}if(!vn(n)){X.add(t);return}let o=!1;try{let s=Date.now(),{gitRoot:a}=e.manifest,i=String(e.runnerPlatform),[c,l,u,d,m]=await Promise.allSettled([pe(a),tt(),Et(r),nt(),Ue({gitRoot:a,installationStorePath:n,forceResend:!1})]),f=D(c,null,"gitSnapshot"),g=D(l,"","detectVirt"),E=D(u,null,"probeCloud"),R=D(d,{},"hostEnv"),I=D(m,{commit:()=>{}},"resolveOperatorForSend");await Re(e,a,f);let N={identity:{host:le(),context:r,virt:g||null,cloud:E,git:f},host_env:R,env_vars:Rt(),self_config:xc(i,I.operator),run_meta:{trigger:"cloud_identity_bootstrap"}};o=!!await oe("session_start",N,Se(e),re,e.manifest.collectorUrl,s),o&&(I.commit(),X.add(t))}finally{wn(n)}})().finally(()=>{Ee=null}),await Ee}}async function Re(e,t,n){try{let r=n===void 0?await pe(t):n;e.platformAgentId=await ir(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);_(`WARN: derivePlatformAgentId failed open: ${o}`)}}async function vc(e){let t=Date.now(),{gitRoot:n}=e.manifest,r=ce({sessionId:e.sessionId,hostname:le()}),o=String(e.runnerPlatform),[s,a,i,c,l,u]=await Promise.allSettled([pe(n),tt(),Et(r),nt(),St(e.manifest.manifest,n,o),Wr(o,n,void 0,{installationStorePath:e.manifest.installationStorePath,gitRoot:n})]),d=D(s,null,"gitSnapshot"),m=D(a,"","detectVirt"),f=D(i,null,"probeCloud"),g=D(c,{},"hostEnv"),E=D(l,[],"mcpDeclared"),R=D(u,kc(o),"selfConfig"),I=R.config;await Re(e,n,d);let N=p(e.hookInput,"model");N&&(I.model=N);let j={identity:{host:le(),context:r,virt:m||null,cloud:f,git:d},host_env:g,env_vars:Rt(),mcp:{declared:E},self_config:I,run_meta:{trigger:e.hookSource||"startup"},hook_input:he(e.hookInput,e.manifest.manifest,Ke(e))};await oe("session_start",j,Se(e),re,e.manifest.collectorUrl,t)&&(R.commit(),X.add(e.manifest.installationId))}async function wc(e){let t=Date.now(),{gitRoot:n}=e.manifest;await Re(e,n);let r=Oc(p(e.hookInput,"status"),p(e.hookInput,"stop_reason"),p(e.hookInput,"reason"),gt(p(e.hookInput,"error"))),o=e.runnerPlatform==="claude"?await ro(p(e.hookInput,"transcript_path")):null,s=he(e.hookInput,e.manifest.manifest,Ke(e));o&&(s.model=o),await oe("session_end",{status:r,...o?{model:o}:{},hook_input:s},Se(e),re,e.manifest.collectorUrl,t)}async function bc(e){let t=Date.now(),n=Gn(e.hookInput);if(n.length===0)return;await oo(e);let{gitRoot:r}=e.manifest;await Re(e,r);let o=he(e.hookInput,e.manifest.manifest,Ke(e)),s=Se(e),a=Oe(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=Cc().replaceAll("\\","/").replace(/\/$/,""),d=c?.startsWith(`${u}/`)===!0?c.slice(u.length+1):null;await Promise.all(n.map(m=>{let f;if((l!==null||d!==null)&&dt(l??d??"")?.toLowerCase()===m.toLowerCase()){let g=l??d,E=g===null?null:(0,k.nativeKeyForSkillPath)(g);if(E!==null)try{let R=l!==null?e.platformAgentId:(0,k.installationRootExternalKey)(e.manifest.installationId,(0,k.userConfigRootFromPath)(g));R&&(f=(0,k.buildComponentReference)({installationRootExternalKey:R,installableKind:k.ComponentKind.SKILL,sourcePath:g,nativeKey:E}))}catch{f=void 0}}return oe("tool_invoked",{tool_name:"Skill",skill_name:m,...f===void 0?{}:{component_reference:f},success:null,duration_ms:null,hook_input:o},s,re,e.manifest.collectorUrl,t)}))}async function Nc(e){let t=Date.now();await oo(e);let{gitRoot:n}=e.manifest;await Re(e,n);let{toolName:r,skillName:o}=Jn(e.hookInput,e.runnerEvent),s=Xn(e.hookInput),a=zn(e.runnerEvent),i=a===!1?Zn(e.hookInput,e.runnerEvent):null,c=await St(e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform)).catch(()=>[]),{mcpServer:l,mcpTool:u}=qn(r,c.map(f=>f.name)),d=Tc(r,l,e.platformAgentId,e.manifest.installationId,String(e.runnerPlatform),c),m=Yn(e.hookInput);await oe("tool_invoked",{tool_name:r,skill_name:o,success:a,duration_ms:s,...i?{failure_reason:i}:{},...l?{mcp_server:l}:{},...u?{mcp_tool:u}:{},...d?{component_reference:d}:{},...m?{subagent_type:m}:{},hook_input:he(e.hookInput,e.manifest.manifest,Ke(e))},Se(e),re,e.manifest.collectorUrl,t)}async function so(e){switch(e.internalEvent){case"session_start":await vc(e);return;case"session_end":await wc(e);return;case"skill_invoked":await bc(e);return;case"tool_invoked":await Nc(e);return;default:return}}function io(e){return e!=="session_start"&&e!=="session_end"&&e!=="tool_invoked"&&e!=="skill_invoked"&&e!==""}import{existsSync as jt,readFileSync as Uc}from"node:fs";import{dirname as Pc,join as ao,relative as Lc}from"node:path";var co=[an,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"];async function Mc(e=process.cwd(),t){let n=A("EV_AI_HOOK_MANIFEST");if(n&&jt(n))return n;let r=t??await qe(e);for(let o of co){let s=ao(r,o);if(jt(s))return s}for(let o of co){let s=ao(e,o);if(jt(s))return s}}async function Dc(e,t){let n=t??await qe(Pc(e)),r=Lc(n,e),o=await P("git",["ls-files","--error-unmatch",r],2e3,{cwd:n});return o.ok?!0:o.code===1?!1:(_(`WARN: git ls-files failed for manifest ${e} (code=${String(o.code)}); treating as tracked`),!0)}function Hc(e){let t=Uc(e,"utf8");return b(t,{})}function Fc(){return{schema_version:2,mcp_servers:[]}}async function lo(e=process.cwd(),t={}){let{root:n,inGitRepo:r}=await Ze(e),o=await Mc(e,n),s=o?Hc(o):Fc();delete s.installation_id;let a=o?await Dc(o,n):!1;s.capture_hook_input==="full"&&o&&a&&(_(`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 Pn(n,{sessionId:t.sessionId});return{manifestPath:o??c,manifest:s,installationId:i,installationStorePath:c,repoKey:l,collectorUrl:Fn(s),platformAgentId:s.platform_agent_id??"",gitRoot:n,inGitRepo:r}}async function uo(e,t,n,r){let o=t??await Xe(ot),s=b(o,{}),a=p(s,"session_id")||p(s,"conversation_id"),i=await lo(process.cwd(),{sessionId:a});if(!i)return;r&&(i.collectorUrl=r);let c=Vn(s,i.manifest.platform,n),l=Wn(e,c.runnerEvent);if(!l){_(`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(io(l)){_(`WARN: unsupported internal event '${l}'`);return}await so(u)}function $c(e,t){if(A("EV_AI_HOOK_SYNC")==="1")return!0;let n=xe(e),r=b(t,{}),o=n.event??(p(r,"hook_event_name")||p(r,"event")),s=de(r,o,void 0,n.runner);return ve(o,s)}async function fo(e=process.argv.slice(2)){if(e[0]===Kt){try{await qr(Ye)}catch{}return 0}if(e[0]===$e){try{let t=xe(e.slice(1)),n=await Ye(),r=b(n,{}),o=t.event??(p(r,"hook_event_name")||p(r,"event"));if(Qe()||mt(t.runner,r,o))return 0;await uo(t.event,n,t.runner,pt(t))}catch(t){let n=t instanceof Error?t.message:String(t);_(`WARN: detached work failed open: ${n}`)}return 0}try{let t=await Xe(ot),n=xe(e),r=pt(n),o=b(t,{}),s=n.event??(p(o,"hook_event_name")||p(o,"event"));if(Qe()||mt(n.runner,o,s)||!sr(o,s,n.runner))return 0;$c(e,t)?await uo(n.event,t,n.runner,r):await eo(t,e)}catch(t){let n=t instanceof Error?t.message:String(t);_(`WARN: hook failed open: ${n}`)}finally{nn()}return 0}fo().then(e=>{process.exit(e)}).catch(e=>{let t=e instanceof Error?e.message:String(e);process.stderr.write(`[ev-ai-agent-hook] ${t}
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(`
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}
27
27
  `),process.exit(1)});
@@ -9,7 +9,8 @@ var PROJECT_HOOK_BINARY_RELATIVE = `.ev-ai/agent-hook/${HOOK_BINARY_NAME}`;
9
9
  var HOOK_INPUT_ALLOWLIST_MAX_BYTES = 4 * 1024;
10
10
  var HOOK_INPUT_FULL_MAX_BYTES = 32 * 1024;
11
11
  var HOOK_INPUT_MCP_MAX_BYTES = 4 * 1024;
12
- var PACKAGE_VERSION = "1.0.9";
12
+ var GZIP_MIN_BYTES = 32 * 1024;
13
+ var PACKAGE_VERSION = "1.0.10";
13
14
  var NPX_PACKAGE_SPEC = `@ev-ai/agent-hook@${PACKAGE_VERSION}`;
14
15
  var HOOK_STATUS_MESSAGE = "ev-ai runtime report";
15
16
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ev-ai/agent-hook",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "description": "Cross-runner runtime telemetry hook for Claude Code, Cursor, and Codex",
5
5
  "type": "module",
6
6
  "bin": {