@ev-ai/agent-hook 1.0.8 → 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/COLLECTED-DATA.md +13 -11
- package/README.md +2 -1
- package/dist/cli.mjs +28 -23
- package/dist/hook.mjs +23 -18
- package/dist/plugin-hooks.mjs +2 -1
- package/package.json +1 -1
package/dist/hook.mjs
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from 'node:module';
|
|
2
2
|
const require = __createRequire(import.meta.url);
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
`)}function K(e,t){no(Xt(e),{recursive:!0});let n=qt(Xt(e),`.${io(e)}.${process.pid}.${to(4).toString("hex")}.tmp`);try{so(n,t,"utf8");try{Wt(n,e)}catch(r){let o=r instanceof Error&&"code"in r?r.code:void 0;if(o==="EEXIST"||o==="EPERM"||o==="EACCES"){Yt(e),Wt(n,e);return}throw r}}catch(r){try{Yt(n)}catch{}throw r}}function ye(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function Qt(){process.stdout.write('{"continue":true}')}function y(e){let t=process.env[e];return t===void 0||t===""?void 0:t}async function Ve(){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 ze(e){return new Promise(t=>{let n="",r=!1,o=i=>{r||(r=!0,clearTimeout(s),t(i||"{}"))},s=setTimeout(()=>{o(n)},e);if(process.stdin.isTTY){o("{}");return}process.stdin.setEncoding("utf8"),process.stdin.on("data",i=>{n+=i}),process.stdin.on("end",()=>{o(n)}),process.stdin.on("error",()=>{o(n)}),process.stdin.resume()})}async function v(e,t,n=3e3,r={}){let{execFile:o}=await import("node:child_process"),{promisify:s}=await import("node:util"),i=s(o);try{let{stdout:a}=await i(e,t,{timeout:n,windowsHide:!0,maxBuffer:1048576,cwd:r.cwd});return{ok:!0,stdout:a.trim()}}catch(a){let c=a,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 C(e,t,n=3e3,r={}){let o=await v(e,t,n,r);return o.ok?o.stdout:""}async function Je(e=process.cwd()){let t=await v("git",["rev-parse","--show-toplevel"],2e3,{cwd:e});if(t.ok&&t.stdout)return{root:t.stdout,inGitRepo:!0};if(y("EV_AI_HOOK_DEBUG")){let r=t.ok?"empty stdout":t.spawnFailed?"spawn failed":`exit ${String(t.code??"unknown")}`;g(`DEBUG: git rev-parse --show-toplevel failed (${r}) cwd=${e}`)}let n=y("CURSOR_PROJECT_DIR")??y("CLAUDE_PROJECT_DIR");if(n&&je(n)){let r=await v("git",["rev-parse","--show-toplevel"],2e3,{cwd:n});return r.ok&&r.stdout?{root:r.stdout,inGitRepo:!0}:{root:n,inGitRepo:!1}}return{root:e,inGitRepo:!1}}async function We(e=process.cwd()){return(await Je(e)).root}function w(e,t){try{return JSON.parse(e)}catch{return t}}var Ge=new Map;function q(e,t){let n=Ge.get(e);if(n!==void 0)return n;try{let r=w(oo(e,"utf8"),t);return Ge.set(e,r),r}catch{return Ge.set(e,t),t}}function z(e){return typeof e=="string"?e:""}function J(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 f(e,t){let n=J(e,t);return typeof n=="string"?n:""}var M=500;function oe(e,t=2){if(!je(e))return{entries:[],truncated:!1};let n=[],r=!1,o=(s,i)=>{if(i>t||r)return;let a;try{a=ro(s,{withFileTypes:!0})}catch{return}for(let c of a){if(r)return;let l=qt(s,c.name);if(c.isDirectory()){o(l,i+1);continue}if(c.isFile()){try{n.push({name:ao(e,l),size:Zt(l).size})}catch{continue}if(n.length>=M){r=!0;return}}}};return o(e,1),{entries:n,truncated:r}}function se(e){return je(e)?{present:!0,size:Zt(e).size}:{present:!1,size:0}}function ie(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}var fo=["CIRCLECI","BUILDKITE","TF_BUILD","JENKINS_URL","JENKINS_HOME","CODEBUILD_BUILD_ID","DRONE","DRONE_BUILD_NUMBER","TEAMCITY_VERSION","TRAVIS","APPVEYOR","BITBUCKET_BUILD_NUMBER"];function po(e){return fo.some(t=>!!I(t,e))}function mo(e){if(I("KUBERNETES_SERVICE_HOST",e)||ie(I("REMOTE_CONTAINERS",e))||ie(I("DEVCONTAINER",e)))return!0;try{if(co("/.dockerenv")||lo("/proc/1/environ","utf8").includes("container="))return!0}catch{}return!1}function tn(e){return["VSCODE_PID","VSCODE_IPC_HOOK","CURSOR_EXTENSION_HOST_ROLE","CURSOR_WORKSPACE_LABEL"].some(t=>!!I(t,e))}function go(e,t=process.platform){return tn(e)?t==="darwin"||t==="win32"?!0:["__CFBundleIdentifier","DISPLAY","WAYLAND_DISPLAY","SESSIONNAME"].some(n=>!!I(n,e)):!1}function _o(e){return e===void 0?!1:e.trim().toLowerCase().startsWith("bc-")}function ho(e){return e==="linux"}function I(e,t){if(t){let n=t[e];return n===void 0||n===""?void 0:n}return y(e)}function Eo(e,t,n){return e.trim().toLowerCase()==="cursor"&&t.trim().toLowerCase()==="ubuntu"&&!!So(I("CURSOR_VERSION",n))}function So(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function Ye(e){if(_o(e.sessionId))return!0;let t=e.hostname??en(),n=e.osUser??nn(e.env);return Eo(t,n,e.env)}function Io(e){return ie(I("CURSOR_AGENT",e.env))?!0:Ye(e)}function Ro(e){return!!(process.stdin.isTTY||process.stdout.isTTY||(I("TERM",e)??I("TERM_PROGRAM",e))||(I("SSH_TTY",e)??I("SSH_CONNECTION",e))||(I("__CFBundleIdentifier",e)??I("XPC_SERVICE_NAME",e))||tn(e)||["DISPLAY","WAYLAND_DISPLAY","XDG_SESSION_TYPE","DBUS_SESSION_BUS_ADDRESS"].some(t=>!!I(t,e))||I("SESSIONNAME",e))}function ae(e={}){let t=e.env;if(I("GITHUB_ACTIONS",t))return"github_actions";if(ie(I("CLAUDE_CODE_REMOTE",t)))return"claude_remote";let n=e.platform??process.platform;if(!go(t,n)&&Io(e)&&(ie(I("CURSOR_AGENT",t))||ho(n)))return"cursor_cloud";if(I("CODESPACES",t)||I("CODESPACE_NAME",t))return"codespaces";if(I("GITLAB_CI",t))return"gitlab_ci";if(po(t))return"managed";let r=I("CI",t);return r&&r!=="false"&&r!=="0"?"managed":mo(t)?"container":Ro(t)?"interactive":"unknown"}async function Xe(){return await C("systemd-detect-virt",[],1e3)}function nn(e=process.env,t=uo){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 Ze(){let e=process.platform==="darwin"?"Darwin":process.platform==="win32"?"Windows_NT":"Linux",t="";if(process.platform==="darwin")t=await C("sw_vers",["-productVersion"],1e3);else if(process.platform==="linux"){try{let{readFileSync:s}=await import("node:fs"),i=s("/etc/os-release","utf8"),a=i.match(/^PRETTY_NAME="?([^"\n]+)"?/m)?.[1],c=i.match(/^VERSION_ID="?([^"\n]+)"?/m)?.[1];t=a??c??""}catch{t=await C("lsb_release",["-sd"],1e3).then(s=>s.replace(/^"|"$/g,""))}t||(t=await C("uname",["-r"],1e3))}else t=await C("ver",[],1e3);let n=nn(),r=(process.env.SHELL??"").split(/[/\\]/).pop()??"",o="";try{o=await C("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 ce(){return en()}var Ao="installation.json",To="cloud-bootstrap.lock",Oo=6e4;function pn(e,t,n){let r=`${e}:${t??""}`;return n?`${n}:${r}`:r}function le(e=Qe()){return et(e,".ev-ai","agent-hook")}function ko(e=Qe()){return et(le(e),Ao)}function mn(e){return et(Ce(e),To)}function gn(){return yo(8).toString("hex")}function Q(e){return cn("sha256").update(e).digest("hex").slice(0,16)}function E(e){if(e===void 0)return null;let t=e.trim();return t.length>0?t:null}function _n(e){return/^[A-Za-z0-9._-]{8,64}$/.test(e)}function xo(e=process.env){let t=E(e.EV_AI_HOOK_INSTALLATION_ID);if(t){if(!_n(t)){g(`WARN: ignoring EV_AI_HOOK_INSTALLATION_ID (expected 8\u201364 chars [A-Za-z0-9._-], got length ${t.length})`);return}return t}}function hn(e,t){return e&&_n(e)?e:(e&&g(`WARN: ignoring installation id override (expected 8\u201364 chars [A-Za-z0-9._-], got length ${e.length})`),xo(t))}function No(e){return/^[0-9a-f]{16}$/.test(e)}function wo(e=process.env){if(E(e.GITHUB_ACTIONS)){let t=E(e.GITHUB_REPOSITORY_ID)??E(e.GITHUB_REPOSITORY),n=E(e.GITHUB_ACTOR)??E(e.GITHUB_TRIGGERING_ACTOR)??E(e.GITHUB_USER);if(t&&n)return Q(`github_actions|${t}|${n}`)}if(E(e.CODESPACES)||E(e.CODESPACE_NAME)){let t=E(e.CODESPACE_NAME);if(t)return Q(`codespaces|${t}`);let n=E(e.GITHUB_REPOSITORY_ID)??E(e.GITHUB_REPOSITORY),r=E(e.GITHUB_USER)??E(e.GITHUB_ACTOR);if(n&&r)return Q(`codespaces|${n}|${r}`)}if(E(e.GITLAB_CI)){let t=E(e.CI_PROJECT_ID)??E(e.CI_PROJECT_PATH),n=E(e.GITLAB_USER_LOGIN)??E(e.GITLAB_USER_EMAIL)??E(e.GITLAB_USER_NAME);if(t&&n)return Q(`gitlab|${t}|${n}`)}return null}var bo="cursoragent@cursor.com";function Uo(e){let t=E(e.CURSOR_USER_EMAIL);return!t||t.toLowerCase()===bo?null:t}function vo(e,t){return E(e.CURSOR_PROJECT_DIR)??E(e.CLAUDE_PROJECT_DIR)??t}function Po(e){return e.replace(/^([a-z]+:\/\/)[^/@]+@/i,"$1").replace(/\.git$/i,"").toLowerCase()}async function Lo(e){let t=await C("git",["config","--get","remote.origin.url"],2e3,{cwd:e});return t?Po(t):e}async function Mo(e){let t=E(await C("git",["config","--local","--get","user.email"],2e3,{cwd:e})||void 0);if(t&&!V(null,t))return t;let n=E(await C("git",["log","-1","--format=%ae"],2e3,{cwd:e})||void 0);return n&&!V(null,n)?n:null}function Do(e,t){let n=vo(e,t);return n?Q(`cursor_cloud|${n}|${Uo(e)??""}`):null}async function Ho(e,t){let n=E(e.CLAUDE_PROJECT_DIR)??t;if(!n)return null;let r=await Lo(n),o=await Mo(n);return Q(`claude_remote|${r}|${o??""}`)}function rn(e,t){let n=hn(e,t);if(n)return n;let r=wo(t);return r||gn()}async function Fo(e){let n=await C("git",["config","--get","remote.origin.url"],2e3,{cwd:e})||Co(e);return cn("sha256").update(n).digest("hex").slice(0,16)}function Bo(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 $o(e){try{let t=JSON.parse(e);if(typeof t.installation_id!="string"||t.installation_id.length===0)return;let n=Bo(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 W(e){if(ln(e))try{return $o(un(e,"utf8"))}catch{}}function tt(e){return W(e)}function En(e,t,n){let r=W(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{K(e,`${JSON.stringify(o,null,2)}
|
|
6
|
-
`)}catch(s){let
|
|
7
|
-
`,{encoding:"utf8",flag:"wx"}),!0}catch(r){if(
|
|
8
|
-
`)}catch(s){let
|
|
9
|
-
`,{encoding:"utf8",flag:"wx"})}function
|
|
10
|
-
`)}function
|
|
11
|
-
`,1)[0]??"";return Number(t.trim())}function
|
|
12
|
-
`,{encoding:"utf8",flag:"wx"})}catch(o){if(
|
|
13
|
-
`)}catch(n){let r=n instanceof Error?n.message:String(n);
|
|
14
|
-
`);return
|
|
15
|
-
`)){let o=r.trim();if(!o)continue;let s=o.indexOf(" ");if(s<=0)continue;let i=o.slice(0,s).toLowerCase(),a=o.slice(s+1).trim();a&&(i==="user.name"?t=a:i==="user.email"&&(n=a))}return{git_user_name:t,git_user_email:n,platform_login:null}}async function pi(e,t=C){let n=await t("git",["config","--get-regexp","^user\\.(name|email)$"],2e3,{cwd:e});return fi(n)}function mi(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}async function gi(e,t=C){let n=await t("git",["log","-1","--format=%an%x00%ae"],2e3,{cwd:e});if(!n)return null;let r=n.indexOf("\0"),o=(r>=0?n.slice(0,r):n).trim(),s=(r>=0?n.slice(r+1):"").trim();return!o&&!s?null:{git_user_name:o||null,git_user_email:s||null,platform_login:null,identity_source:"git_log"}}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 _i(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 i=B(h(e.BUILD_REQUESTEDFOR),h(e.BUILD_REQUESTEDFOREMAIL),"azure_devops",h(e.BUILD_REQUESTEDFORID));if(i)return i;let a=h(e.BUILDKITE_BUILD_CREATOR_EMAIL),c=B(h(e.BUILDKITE_BUILD_CREATOR),a,"buildkite",a);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),p=B(m,null,"codebuild",m);if(p)return p;let _=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(_)return _;if(nr(e.CLAUDE_CODE_REMOTE)||nr(e.CURSOR_AGENT)){let S=h(e.CURSOR_USER_EMAIL);return{git_user_name:null,git_user_email:S&&!V(null,S)?S:null,platform_login:null,identity_source:"cloud"}}return null}function _t(e){return!!((e.git_user_name??e.git_user_email)&&!V(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 nr(e){if(e===void 0||e==="")return!1;let t=e.trim().toLowerCase();return t!=="0"&&t!=="false"&&t!=="no"}async function hi(e,t=C,n=process.env){let r=await pi(e,t);if(_t(r))return{...r,identity_source:"git_config"};let o=mi(n);if(o&&_t(o))return o;let s=_i(n);if(s&&(s.git_user_name||s.git_user_email||s.platform_login))return s;let i=await gi(e,t);return i&&_t(i)?i:s||(r.git_user_name||r.git_user_email?{...r,identity_source:"git_config"}:o||i||{git_user_name:null,git_user_email:null,platform_login:null,identity_source:"git_config"})}async function we(e){let{gitRoot:t,installationStorePath:n,forceResend:r}=e,o=e.exec??C,s=e.env??process.env,i=await hi(t,o,s),a=di(i.git_user_name,i.git_user_email,i.identity_source,i.platform_login),l=(n?tt(n):void 0)?.operator_identity_hash;if(!(r||l!==void 0&&l!==a||!l))return{commit:()=>{}};let p=n;return{operator:i,commit:()=>{p&&En(p,a,ye())}}}function ht(e){return e?!tt(e)?.operator_identity_hash:!0}function rr(e){return!0}import{existsSync as Bi,readFileSync as $i}from"node:fs";import{homedir as yr}from"node:os";import{join as P}from"node:path";import{basename as Hi,join as ee,resolve as gr}from"node:path";import{existsSync as or,readdirSync as Ei}from"node:fs";import{basename as Si,dirname as Ii,relative as Ri}from"node:path";var pe=class{constructor(t,n=""){this.home=t;this.pathPrefix=n}components=[];truncated=!1;pluginExpandRemaining;homeRel(t){let n=Ri(this.home,t).replace(/\\/g,"/"),r=!n||n.startsWith("..")?`external/${A(Ii(t))}/${Si(t)}`:n;return this.pathPrefix?`${this.pathPrefix}${r}`:r}get atGlobalCap(){return this.truncated||this.components.length>=M}get pluginBudgetSpent(){return this.pluginExpandRemaining!==void 0&&this.pluginExpandRemaining<=0}readEntries(t){if(!or(t))return[];try{return Ei(t,{withFileTypes:!0})}catch{return[]}}readJson(t,n){if(or(t))return q(t,n)}push(t){return this.components.length>=M?(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 Et,readFileSync as yi,statSync as Ci}from"node:fs";import{basename as ir,join as me,relative as ar}from"node:path";var St=2e4,Ai=4;function Ti(e){return e.length<=St?e:`${e.slice(0,St-1)}\u2026`}function Oi(e){try{let t=yi(e),n=t.toString("utf8");return{hash:A(t),length:t.length,text:Ti(n)}}catch{return null}}var sr={HOOK:"EVENT",COMMAND:"EXPLICIT_INVOCATION",MEMORY:void 0,MCP_SERVER:void 0,PLUGIN:void 0,SKILL:"UNSPECIFIED",RULE:"UNSPECIFIED",SUBAGENT:"UNSPECIFIED"};function ki(e){return e in sr?sr[e]:"UNSPECIFIED"}function be(e,t){let n=Oi(t.absolutePath);if(!n)return!1;let r=t.name??ir(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=ki(t.kind);return s&&(o.trigger=s),e.push(o)}function xi(e,t,n){let r=ar(e,t).replace(/\\/g,"/");return!r||r.startsWith("..")?ir(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:i,extensions:a}=t;It(e,{walkRoot:n,currentDir:n,depth:0,kind:r,origin:o,enabled:s,nested:i,extensions:a})}function It(e,t){let{walkRoot:n,currentDir:r,depth:o,kind:s,origin:i,enabled:a,nested:c,extensions:l}=t;if(!(o>Ai))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=me(r,u.name,c);if(Et(p)){let _=ar(n,me(r,u.name)).replace(/\\/g,"/");be(e,{absolutePath:p,kind:s,origin:i,enabled:a,name:_||u.name});continue}It(e,{walkRoot:n,currentDir:me(r,u.name),depth:o+1,kind:s,origin:i,enabled:a,nested:c,extensions:l});continue}if(u.isDirectory()){It(e,{walkRoot:n,currentDir:me(r,u.name),depth:o+1,kind:s,origin:i,enabled:a,nested:c,extensions:l});continue}if(!u.isFile()||!l)continue;let d=u.name.toLowerCase();if(!l.some(p=>d.endsWith(p)))continue;let m=me(r,u.name);be(e,{absolutePath:m,kind:s,origin:i,enabled:a,name:xi(n,m,!0)})}}function cr(e){for(let t of e)if(Et(t))try{if(Ci(t).size>0)return t}catch{continue}return e.find(t=>Et(t))}function Ni(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 wi(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 bi(e,t,n,r){let o=e.homeRel(t);for(let[s,i]of Object.entries(n))if(!(!Array.isArray(i)||e.truncated))for(let a of i){if(!a||typeof a!="object"||e.truncated)continue;let c=a;for(let l of wi(c)){if(e.truncated)return;let u=l.command??l.bash??l.prompt??l.powershell??c.powershell??"",d=Ni({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:"",p=A(u),_=m?`${s}:${m}:${d}:${p}`:`${s}:${d}:${p}`,S=`${s}|${m}|${d}|${u}`;e.push({kind:"HOOK",name:_,path:o,content_hash:A(S),origin:r,enabled:!0,trigger:"EVENT",attributes:{event:s,...m?{matcher:m}:{},action_kind:d,action_hash:p}})}}}function ge(e,t,n){let r=e.readJson(t,{});!r?.hooks||typeof r.hooks!="object"||bi(e,t,r.hooks,n)}var lr={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 Ui,readFileSync as vi}from"node:fs";function Pi(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 ur(e,t,n){let o=e.readJson(t,{})?.mcpServers;if(!o||typeof o!="object")return;let s=e.homeRel(t);for(let[i,a]of Object.entries(o)){if(e.truncated)return;let c=Pi(a);e.push({kind:"MCP_SERVER",name:i,path:s,content_hash:A(`${i}|${c}`),origin:n,enabled:!0,attributes:{transport:c}})}}function dr(e,t,n){if(!Ui(t))return;let r;try{r=vi(t,"utf8")}catch{return}let o=e.homeRel(t),s=/^\[mcp_servers(?:\.(\w+)|\."([^"]+)"|\.'([^']+)')\]\s*$/gm,i;for(;(i=s.exec(r))!==null;){if(e.truncated)return;let a=i[1]??i[2]??i[3];if(!a)continue;let c=r.slice(i.index+i[0].length),l=c.search(/^\[/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"),e.push({kind:"MCP_SERVER",name:a,path:o,content_hash:A(`${a}|${d}`),origin:n,enabled:!0,attributes:{transport:d}})}}import{existsSync as Li,readdirSync as Mi}from"node:fs";import{join as O}from"node:path";var fr=50;function Rt(e,t,n,r){if(!Li(t))return{componentCount:0,expandTruncated:!1};let o=e.components.length,{expanded:s}=e.withPluginExpandCap(fr,()=>{Y(e,{dir:O(t,"skills"),kind:"SKILL",origin:n,enabled:r,nested:"SKILL.md"}),Y(e,{dir:O(t,"commands"),kind:"COMMAND",origin:n,enabled:r,extensions:[".md"]}),Y(e,{dir:O(t,"agents"),kind:"SUBAGENT",origin:n,enabled:r,extensions:[".md"]})});ge(e,O(t,"hooks","hooks.json"),n),ge(e,O(t,"hooks.json"),n);let i=e.components.length-o,a=s>=fr;return{componentCount:i,expandTruncated:a}}function yt(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 pr(e){let t=O(e.home,".claude/plugins/installed_plugins.json"),n=e.readJson(t,{});if(!n)return;let r=n.plugins??{},s=e.readJson(O(e.home,".claude/settings.json"),{})?.enabledPlugins??{},i=e.homeRel(t);for(let[a,c]of Object.entries(r)){if(e.truncated)return;let l=Array.isArray(c)?c:[c],u=l[0]??{},d=s[a]===!0,m=a.includes("@")?a.split("@").slice(1).join("@"):"",p=typeof u.version=="string"?u.version:"",_=typeof u.scope=="string"?u.scope:"user",S=`plugin:${a}`,k=0,T=!1;for(let b of l)if(typeof b.installPath=="string"&&b.installPath.length>0){let j=Rt(e,b.installPath,S,d);k+=j.componentCount,T=T||j.expandTruncated}yt(e,{pluginKey:a,rowPath:i,enabled:d,scope:_,version:p||void 0,marketplace:m||void 0,componentCount:k,expandTruncated:T,contentHash:A(`${a}|${p}|${_}|${d}|${k}`)})}}function Di(e){let t=e,n="";try{let r=Mi(e,{withFileTypes:!0}).filter(o=>o.isDirectory()).map(o=>o.name);if(r.length===1&&r[0])t=O(e,r[0]),n=r[0];else if(r.length>1){let o=[...r].sort(),s=o[o.length-1];s&&(t=O(e,s),n=s)}}catch{}return{installPath:t,version:n}}function mr(e){let t=[{base:O(e.home,".cursor/plugins/local"),scope:"local"},{base:O(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,a=O(n,o.name),c=`plugin:${i}`,{componentCount:l,expandTruncated:u}=Rt(e,a,c,!0);yt(e,{pluginKey:i,rowPath:e.homeRel(a),enabled:!0,scope:"local",componentCount:l,expandTruncated:u,contentHash:A(`${i}|local|${l}`)});continue}let s=o.name;for(let i of e.readEntries(O(n,s))){if(!i.isDirectory()||e.truncated)continue;let a=O(n,s,i.name),{installPath:c,version:l}=Di(a),u=`${i.name}@${s}`,d=`plugin:${u}`,{componentCount:m,expandTruncated:p}=Rt(e,c,d,!0);yt(e,{pluginKey:u,rowPath:e.homeRel(c),enabled:!0,scope:"cache",version:l||void 0,marketplace:s,componentCount:m,expandTruncated:p,contentHash:A(`${u}|${l}|${m}`)})}}}function _r(e,t,n,r){let o=lr[t];if(!o)return;let s=e.home;for(let a of o.skillRoots)Y(e,{dir:ee(s,a),kind:"SKILL",origin:n,enabled:!0,nested:"SKILL.md"});for(let a of o.dirs)Y(e,{dir:ee(s,a.dir),kind:a.kind,origin:n,enabled:!0,extensions:a.extensions});let i=cr(o.memory.map(a=>ee(s,a)));i&&be(e,{absolutePath:i,kind:"MEMORY",origin:n,enabled:!0,name:Hi(i)});for(let a of o.hooks)ge(e,ee(s,a),n);for(let a of o.mcpJson??[])ur(e,ee(s,a),n);for(let a of o.mcpToml??[])dr(e,ee(s,a),n);r&&(o.plugins==="claude"?pr(e):o.plugins==="cursor"&&mr(e))}function Ct(e,t,n){let r=new pe(t);if(_r(r,e,"user",!0),n===void 0||gr(n)===gr(t))return{components:r.components,truncated:r.truncated};let s=new pe(n,"cwd/");_r(s,e,"cwd",!1);let i=[...r.components,...s.components],a=r.truncated||s.truncated||i.length>M;return{components:i.slice(0,M),truncated:a}}function At(e,t,n={}){let r=n.truncated===!0,o=gt(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 a=[],c=t;for(let u of e){let d=F(u.path,u.name);c[d]!==u.content_hash&&a.push(u)}let l=[];if(!r){for(let u of Object.keys(c))if(!s.has(u)){let d=tr(u);d&&l.push(d)}}return{hash:o,count:e.length,truncated:r,full:!1,upserts:a,removed:l,unchanged:a.length===0&&l.length===0}}var Er=3e5,Fi=new Set(["HOOK","MCP_SERVER","PLUGIN"]);function Tt(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 Ot(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 hr(e){return Buffer.byteLength(JSON.stringify(e),"utf8")}function Sr(e){if(e.text===void 0)return e;let{text:t,...n}=e;return n}function kt(e,t=Er){let n=[],r=[];for(let u of e)Fi.has(u.kind)?n.push(u):r.push(u);r.sort((u,d)=>(u.text?.length??0)-(d.text?.length??0));let o=[...n,...r],s=[],i=2,a=0,c=0,l=[];for(let u of o){let d=s.length>0?1:0,m=hr(u)+d;if(i+m<=t){s.push(u),i+=m,u.text!==void 0&&l.push(u.content_hash);continue}if(u.text!==void 0){let p=Sr(u),_=hr(p)+d;if(i+_<=t){s.push(p),i+=_,a+=1;continue}}c+=1}return{components:s,textDeferredCount:a,droppedCount:c,textHashesSent:l}}function xt(e,t){return t.size===0?e:e.map(n=>n.text===void 0||!t.has(n.content_hash)?n:Sr(n))}var Ki={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"}},Gi=200,Ir=200,ji=["allow","deny","ask"],Vi=/(?<=^|[\s(,=:])(?:~|[A-Za-z]:)?[\\/][^\s,)]+/g,Nt="<path>",zi=new RegExp(`${Nt}(?:\\s+[A-Za-z.][^\\s,)]*[\\\\/][^\\s,)]*)+`,"g");function Ji(e){let t=e.replace(Vi,Nt).replace(zi,Nt);return t.length>Ir?`${t.slice(0,Ir)}...`:t}function Rr(e){let t=q(e,{}),n=[];for(let r of ji)for(let o of t.permissions?.[r]??[])typeof o=="string"&&o.length>0&&n.push({key:Ji(o),mode:r});return{model:t.model??"",permissionKeys:n}}var Wi=10,Yi=840*60*1e3,Xi="self-config-cache.json";function wt(){return y("EV_AI_HOOK_USER_SPEC")?.toLowerCase()==="off"}function Zi(e,t=Date.now()){return e===void 0||!Number.isFinite(e)?!0:t-e>=Yi}var qi={claude:["claude"],cursor:["agent","cursor-agent"],codex:["codex"]};async function Qi(e,t=C){let n=qi[e];if(!n||n.length===0)return null;let r=async o=>{let s=n[o];if(s===void 0)return null;let a=((await t(s,["--version"],2e3)).split(`
|
|
16
|
-
`)
|
|
17
|
-
`);
|
|
18
|
-
`)
|
|
19
|
-
${
|
|
20
|
-
`);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 xr(e,t=fetch){let n=await e(),r=ua(n);if(!r)return;let{meta:o,body:s}=r,i={"Content-Type":"application/json"};try{await t(o.url,{method:"POST",headers:i,body:s,signal:AbortSignal.timeout(Number(o.timeoutMs))})}catch{}}async function da(e,t,n){let r=Or(e);g(`POST event=${e} url=${nt(n)} size=${t.length} platform=${process.platform}`);let o={"Content-Type":"application/json"},s=Date.now();try{let i=await fetch(n,{method:"POST",headers:o,body:t,signal:AbortSignal.timeout(r)}),a=Date.now()-s;if(i.ok)return g(`POST outcome=ok elapsed_ms=${a} http=${i.status}`),!0;let c=(await i.text()).slice(0,200).replace(/[\n\r]/g,"");return g(`POST outcome=fail elapsed_ms=${a} http=${i.status} body=${c}`),!1}catch(i){let a=Date.now()-s,c=i instanceof Error?i.message:String(i);return g(`POST outcome=fail elapsed_ms=${a} http=000 body=${c}`),!1}}async function Nr(e,t,n,r,o){try{let s=r(e,t,{detached:!0,stdio:["pipe","ignore","ignore"],windowsHide:!0});s.on("error",()=>{}),s.stdin.on("error",()=>{});let i=!1;return await new Promise(a=>{let c=setTimeout(()=>{if(!i){g(`WARN: ${o} stdin handoff timed out \u2014 continuing fail-open`);try{s.stdin.destroy()}catch{}}a()},jt),l=()=>{i=!0,clearTimeout(c),a()};s.stdin.end(n,()=>l()),s.stdin.once("error",()=>l())}),s.unref(),s}catch(s){let i=s instanceof Error?s.message:String(s);return g(`WARN: ${o} spawn failed open: ${i}`),null}}async function fa(e,t,n,r=Tr,o=la){let s=Or(e),i=ca(n,s,t),{command:a,args:c}=o();return Nr(a,c,i,r,"detached post")}async function wr(e,t,n=Tr,r=kr){let{command:o,args:s}=r(ve,t);return Nr(o,s,e,n,"detached work")}async function ne(e,t,n,r,o,s){if(!o)return g("WARN: collector URL missing \u2014 pass --url on the hook command or set collector_url in manifest"),!1;if(!Ae(o))return g(`WARN: collector URL blocked (https required): ${nt(o)}`),!1;let i=r(e,t,n);s!==void 0&&(i.build_ms=Math.max(0,Date.now()-s));let a=`${JSON.stringify(i)}
|
|
21
|
-
`,c=y("EV_AI_HOOK_DEBUG");c==="full"?g(`DEBUG envelope=${JSON.stringify(i)}`):c==="1"&&g(`DEBUG summary=${aa(i,Buffer.byteLength(a,"utf8"))}`);let l=process.argv.includes(ve),u=y("EV_AI_HOOK_SYNC")==="1";return xe(n.runnerEvent,n.runnerPlatform)||l||u?da(e,a,o):(await fa(e,a,o),!1)}import{relative as pa,resolve as Pe,sep as vt}from"node:path";var ma=["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 ga(e){return e.capture_hook_input==="full"?!0:e.capture_hook_input==="allowlist"?!1:y("EV_AI_HOOK_CAPTURE_FULL_INPUT")==="1"}function _a(e){let t={};for(let n of ma){let r=J(e,n);r!==void 0&&(t[n]=r)}return t}function ha(e,t){if(typeof e!="string"||e.length===0||!t)return null;let n=Pe(e),r=Pe(t),o=pa(r,n);return!o||o==="."?".":o.startsWith(`..${vt}`)||o===".."||Pe(r,o)!==n?null:o.split(vt).join("/")}function Ea(e){return typeof e!="string"||e.length===0?null:Pe(e).split(vt).join("/")}function br(e,t,n){let r=Ea(t.cwd);r!==null&&(e.cwd=r);let o=n.inGitRepo===!0&&n.gitRoot!==void 0?ha(t.cwd,n.gitRoot):null;o!==null&&(e.cwd_relative=o)}function Ur(e,t){let n=JSON.stringify(e),r=Buffer.byteLength(n,"utf8");if(r<=t)return e;let o=Object.entries(e).filter(([i,a])=>!i.startsWith("_")&&(typeof a=="string"||typeof a=="number"||typeof a=="boolean")).sort((i,a)=>Buffer.byteLength(JSON.stringify(i[1]),"utf8")-Buffer.byteLength(JSON.stringify(a[1]),"utf8")),s={_truncated:!0,_original_bytes:r};for(let[i,a]of o){let c={...s,[i]:a};if(Buffer.byteLength(JSON.stringify(c),"utf8")>t)break;s[i]=a}return s}function _e(e,t,n={}){if(ga(t)){let o={...e};return delete o.cwd,delete o.transcript_path,br(o,e,n),Ur(o,zt)}let r=_a(e);return br(r,e,n),Ur(r,Vt)}import{createReadStream as Sa}from"node:fs";import{stat as Ia}from"node:fs/promises";import{basename as Ra,resolve as ya}from"node:path";import{createInterface as Ca}from"node:readline";var Aa=1024*1024;function Ta(e){let t=e.replace(/\\/g,"/");return t.includes("/.claude/projects/")&&Ra(t).endsWith(".jsonl")}async function vr(e){if(!e||!Ta(e))return null;try{let t=ya(e),n=await Ia(t);if(!n.isFile())return null;let r=Math.max(0,n.size-Aa),o=[],s=Ca({input:Sa(t,{encoding:"utf8",start:r}),crlfDelay:1/0});for await(let i of s)i.length!==0&&o.push(i);r>0&&o.length>0&&o.shift();for(let i=o.length-1;i>=0;i--){let a=o[i];if(a)try{let c=JSON.parse(a);if(c.type!=="assistant")continue;let l=c.message;if(!l||typeof l!="object")continue;let u=l.model;if(typeof u=="string"&&u.length>0)return u}catch{continue}}return null}catch{return null}}function Ee(e){return{sessionId:e.sessionId,turnId:e.turnId,installationId:e.manifest.installationId,runnerPlatform:e.runnerPlatform,platformAgentId:e.platformAgentId,runnerEvent:e.runnerEvent}}function Le(e){return{gitRoot:e.manifest.gitRoot,inGitRepo:e.manifest.inGitRepo}}var Oa=new Set([...Object.values(lt),".github"]);function ka(e,t,n){if(e===null||t===null||n===null||!(/^mcp__.+?__.+$/i.test(e)||/^MCP:[^:]+:.+$/i.test(e)||e.toLowerCase()===`mcp:${t.toLowerCase()}`))return;let o=n.indexOf(":");if(o<=0||o===n.length-1)return;let s=n.slice(o+1),i=s.replaceAll("\\","/").split("/").at(-1);if(!(i===void 0||!Oa.has(i)))try{return(0,G.buildComponentReference)({installationRootExternalKey:n,installableKind:G.ComponentKind.INTERFACE,sourcePath:s,nativeKey:t})}catch{return}}function xa(...e){for(let t of e)if(t)return t;return null}function L(e,t,n){if(e.status==="fulfilled")return e.value;let r=e.reason instanceof Error?e.reason.message:String(e.reason);return g(`WARN: ${n} failed open: ${r}`),t}function Na(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 wa(e,t){return{runner_platform:e,config_scope:"user",...t?{operator:t}:{}}}var X=new Set,he=null;async function Pr(e){if(wt())return;let t=e.manifest.installationId,n=e.manifest.installationStorePath;if(X.has(t))return;if(!ht(n)){X.add(t);return}let r=ae({sessionId:e.sessionId,hostname:ce()});if(rr(r)){if(he){await he;return}he=(async()=>{if(X.has(t)||!ht(n)){X.add(t);return}if(!Sn(n)){X.add(t);return}let o=!1;try{let s=Date.now(),{gitRoot:i}=e.manifest,a=String(e.runnerPlatform),[c,l,u,d,m]=await Promise.allSettled([fe(i),Xe(),ut(r),Ze(),we({gitRoot:i,installationStorePath:n,forceResend:!1})]),p=L(c,null,"gitSnapshot"),_=L(l,"","detectVirt"),S=L(u,null,"probeCloud"),k=L(d,{},"hostEnv"),T=L(m,{commit:()=>{}},"resolveOperatorForSend");await Se(e,i,p);let b={identity:{host:ce(),context:r,virt:_||null,cloud:S,git:p},host_env:k,env_vars:mt(),self_config:wa(a,T.operator),run_meta:{trigger:"cloud_identity_bootstrap"}};o=!!await ne("session_start",b,Ee(e),te,e.manifest.collectorUrl,s),o&&(T.commit(),X.add(t))}finally{In(n)}})().finally(()=>{he=null}),await he}}async function Se(e,t,n){try{let r=n===void 0?await fe(t):n;e.platformAgentId=await Xn(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);g(`WARN: derivePlatformAgentId failed open: ${o}`)}}async function ba(e){let t=Date.now(),{gitRoot:n}=e.manifest,r=ae({sessionId:e.sessionId,hostname:ce()}),o=String(e.runnerPlatform),[s,i,a,c,l,u]=await Promise.allSettled([fe(n),Xe(),ut(r),Ze(),pt(e.manifest.manifest,n,o),Cr(o,n,void 0,{installationStorePath:e.manifest.installationStorePath,gitRoot:n})]),d=L(s,null,"gitSnapshot"),m=L(i,"","detectVirt"),p=L(a,null,"probeCloud"),_=L(c,{},"hostEnv"),S=L(l,[],"mcpDeclared"),k=L(u,Na(o),"selfConfig"),T=k.config;await Se(e,n,d);let b=f(e.hookInput,"model");b&&(T.model=b);let j={identity:{host:ce(),context:r,virt:m||null,cloud:p,git:d},host_env:_,env_vars:mt(),mcp:{declared:S},self_config:T,run_meta:{trigger:e.hookSource||"startup"},hook_input:_e(e.hookInput,e.manifest.manifest,Le(e))};await ne("session_start",j,Ee(e),te,e.manifest.collectorUrl,t)&&(k.commit(),X.add(e.manifest.installationId))}async function Ua(e){let t=Date.now(),{gitRoot:n}=e.manifest;await Se(e,n);let r=xa(f(e.hookInput,"status"),f(e.hookInput,"stop_reason"),f(e.hookInput,"reason"),at(f(e.hookInput,"error"))),o=e.runnerPlatform==="claude"?await vr(f(e.hookInput,"transcript_path")):null,s=_e(e.hookInput,e.manifest.manifest,Le(e));o&&(s.model=o),await ne("session_end",{status:r,...o?{model:o}:{},hook_input:s},Ee(e),te,e.manifest.collectorUrl,t)}async function va(e){let t=Date.now(),n=vn(e.hookInput);if(n.length===0)return;await Pr(e);let{gitRoot:r}=e.manifest;await Se(e,r);let o=_e(e.hookInput,e.manifest.manifest,Le(e)),s=Ee(e),i=Te(e.hookInput.tool_input),a=r.replaceAll("\\","/").replace(/\/$/,""),c=i?.replaceAll("\\","/"),l=c===void 0?null:c.startsWith(`${a}/`)?c.slice(a.length+1):c.startsWith("/")?null:c;await Promise.all(n.map(u=>{let d;if(l!==null&&rt(l)?.toLowerCase()===u.toLowerCase()&&e.platformAgentId){let m=(0,G.nativeKeyForSkillPath)(l);if(m!==null)try{d=(0,G.buildComponentReference)({installationRootExternalKey:e.platformAgentId,installableKind:G.ComponentKind.SKILL,sourcePath:l,nativeKey:m})}catch{d=void 0}}return ne("tool_invoked",{tool_name:"Skill",skill_name:u,...d===void 0?{}:{component_reference:d},success:null,duration_ms:null,hook_input:o},s,te,e.manifest.collectorUrl,t)}))}async function Pa(e){let t=Date.now();await Pr(e);let{gitRoot:n}=e.manifest;await Se(e,n);let{toolName:r,skillName:o}=Hn(e.hookInput,e.runnerEvent),s=Bn(e.hookInput),i=Ln(e.runnerEvent),a=i===!1?$n(e.hookInput,e.runnerEvent):null,c=await pt(e.manifest.manifest,e.manifest.gitRoot,String(e.runnerPlatform)).catch(()=>[]),{mcpServer:l,mcpTool:u}=Kn(r,c.map(p=>p.name)),d=ka(r,l,e.platformAgentId),m=Fn(e.hookInput);await ne("tool_invoked",{tool_name:r,skill_name:o,success:i,duration_ms:s,...a?{failure_reason:a}:{},...l?{mcp_server:l}:{},...u?{mcp_tool:u}:{},...d?{component_reference:d}:{},...m?{subagent_type:m}:{},hook_input:_e(e.hookInput,e.manifest.manifest,Le(e))},Ee(e),te,e.manifest.collectorUrl,t)}async function Lr(e){switch(e.internalEvent){case"session_start":await ba(e);return;case"session_end":await Ua(e);return;case"skill_invoked":await va(e);return;case"tool_invoked":await Pa(e);return;default:return}}function Mr(e){return e!=="session_start"&&e!=="session_end"&&e!=="tool_invoked"&&e!=="skill_invoked"&&e!==""}import{existsSync as Pt,readFileSync as La}from"node:fs";import{dirname as Ma,join as Dr,relative as Da}from"node:path";var Hr=[$t,".cursor/ev-ai-runtime-report.json",".codex/ev-ai-runtime-report.json"];async function Ha(e=process.cwd(),t){let n=y("EV_AI_HOOK_MANIFEST");if(n&&Pt(n))return n;let r=t??await We(e);for(let o of Hr){let s=Dr(r,o);if(Pt(s))return s}for(let o of Hr){let s=Dr(e,o);if(Pt(s))return s}}async function Fa(e,t){let n=t??await We(Ma(e)),r=Da(n,e),o=await v("git",["ls-files","--error-unmatch",r],2e3,{cwd:n});return o.ok?!0:o.code===1?!1:(g(`WARN: git ls-files failed for manifest ${e} (code=${String(o.code)}); treating as tracked`),!0)}function Ba(e){let t=La(e,"utf8");return w(t,{})}function $a(){return{schema_version:2,mcp_servers:[]}}async function Fr(e=process.cwd(),t={}){let{root:n,inGitRepo:r}=await Je(e),o=await Ha(e,n),s=o?Ba(o):$a();delete s.installation_id;let i=o?await Fa(o,n):!1;s.capture_hook_input==="full"&&o&&i&&(g(`WARN: ignoring capture_hook_input=full in git-tracked manifest ${o}; use EV_AI_HOOK_CAPTURE_FULL_INPUT=1 or an untracked operator manifest`),delete s.capture_hook_input);let{installationId:a,storePath:c,repoKey:l}=await An(n,{sessionId:t.sessionId});return{manifestPath:o??c,manifest:s,installationId:a,installationStorePath:c,repoKey:l,collectorUrl:Nn(s),platformAgentId:s.platform_agent_id??"",gitRoot:n,inGitRepo:r}}async function Br(e,t,n,r){let o=t??await ze($e),s=w(o,{}),i=f(s,"session_id")||f(s,"conversation_id"),a=await Fr(process.cwd(),{sessionId:i});if(!a)return;r&&(a.collectorUrl=r);let c=Mn(s,a.manifest.platform,n),l=Dn(e,c.runnerEvent);if(!l){g(`WARN: unknown hook event '${c.runnerEvent}'; skipping telemetry`);return}let u={hookInput:s,sessionId:c.sessionId,turnId:c.turnId,runnerEvent:c.runnerEvent,runnerPlatform:c.runnerPlatform,hookSource:c.hookSource,internalEvent:l,manifest:a,platformAgentId:a.platformAgentId};if(Mr(l)){g(`WARN: unsupported internal event '${l}'`);return}await Lr(u)}function Ka(e,t){if(y("EV_AI_HOOK_SYNC")==="1")return!0;let n=ke(e),r=w(t,{}),o=n.event??(f(r,"hook_event_name")||f(r,"event")),s=ue(r,o,void 0,n.runner);return xe(o,s)}async function $r(e=process.argv.slice(2)){if(e[0]===Ut){try{await xr(Ve)}catch{}return 0}if(e[0]===ve){try{let t=ke(e.slice(1)),n=await Ve(),r=w(n,{}),o=t.event??(f(r,"hook_event_name")||f(r,"event"));if(it(t.runner,r,o))return 0;await Br(t.event,n,t.runner,st(t))}catch(t){let n=t instanceof Error?t.message:String(t);g(`WARN: detached work failed open: ${n}`)}return 0}try{let t=await ze($e),n=ke(e),r=st(n),o=w(t,{}),s=n.event??(f(o,"hook_event_name")||f(o,"event"));if(it(n.runner,o,s)||!Yn(o,s,n.runner))return 0;Ka(e,t)?await Br(n.event,t,n.runner,r):await wr(t,e)}catch(t){let n=t instanceof Error?t.message:String(t);g(`WARN: hook failed open: ${n}`)}finally{Qt()}return 0}$r().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}
|
|
22
27
|
`),process.exit(1)});
|
package/dist/plugin-hooks.mjs
CHANGED
|
@@ -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
|
|
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
|
|